diff --git a/etiquette/__init__.py b/etiquette/__init__.py new file mode 100644 index 0000000..2ae2839 --- /dev/null +++ b/etiquette/__init__.py @@ -0,0 +1 @@ +pass diff --git a/constants.py b/etiquette/constants.py similarity index 98% rename from constants.py rename to etiquette/constants.py index fad0ca9..af5cf0c 100644 --- a/constants.py +++ b/etiquette/constants.py @@ -100,7 +100,7 @@ SQL_USER = _sql_dictify(SQL_USER_COLUMNS) # Errors and warnings -ERROR_DATABASE_OUTOFDATE = 'Database is out-of-date. {current} should be {new}. Please use etiquette_upgrader.py' +ERROR_DATABASE_OUTOFDATE = 'Database is out-of-date. {current} should be {new}. Please use utilities\\etiquette_upgrader.py' ERROR_INVALID_ACTION = 'Invalid action' ERROR_NO_SUCH_TAG = 'Doesn\'t exist' ERROR_NO_TAG_GIVEN = 'No tag name supplied' diff --git a/decorators.py b/etiquette/decorators.py similarity index 98% rename from decorators.py rename to etiquette/decorators.py index 7b345c6..b7cd8e4 100644 --- a/decorators.py +++ b/etiquette/decorators.py @@ -4,7 +4,7 @@ import functools import time import warnings -import jsonify +from . import jsonify def required_fields(fields): diff --git a/exceptions.py b/etiquette/exceptions.py similarity index 100% rename from exceptions.py rename to etiquette/exceptions.py diff --git a/helpers.py b/etiquette/helpers.py similarity index 98% rename from helpers.py rename to etiquette/helpers.py index 313034a..28f0ccd 100644 --- a/helpers.py +++ b/etiquette/helpers.py @@ -3,8 +3,8 @@ import math import mimetypes import os -import constants -import exceptions +from . import constants +from . import exceptions from voussoirkit import bytestring diff --git a/jsonify.py b/etiquette/jsonify.py similarity index 98% rename from jsonify.py rename to etiquette/jsonify.py index 8ed286c..9dd08a7 100644 --- a/jsonify.py +++ b/etiquette/jsonify.py @@ -1,7 +1,8 @@ import flask -import helpers import json +from . import helpers + def make_json_response(j, *args, **kwargs): dumped = json.dumps(j) response = flask.Response(dumped, *args, **kwargs) diff --git a/objects.py b/etiquette/objects.py similarity index 99% rename from objects.py rename to etiquette/objects.py index 1ccd369..6567d2c 100644 --- a/objects.py +++ b/etiquette/objects.py @@ -2,10 +2,10 @@ import os import PIL.Image import traceback -import constants -import decorators -import exceptions -import helpers +from . import constants +from . import decorators +from . import exceptions +from . import helpers from voussoirkit import bytestring from voussoirkit import pathclass diff --git a/phototagger.py b/etiquette/phototagger.py similarity index 99% rename from phototagger.py rename to etiquette/phototagger.py index 885efb8..a737e45 100644 --- a/phototagger.py +++ b/etiquette/phototagger.py @@ -9,12 +9,12 @@ import sqlite3 import string import time -import constants -import decorators -import exceptions -import helpers -import objects -import searchhelpers +from . import constants +from . import decorators +from . import exceptions +from . import helpers +from . import objects +from . import searchhelpers from voussoirkit import pathclass from voussoirkit import safeprint @@ -551,11 +551,16 @@ class PDBPhotoMixin: self.commit() return photo - def purge_deleted_files(self, *, commit=True): + def purge_deleted_files(self, photos=None, *, commit=True): ''' Remove Photo entries if their corresponding file is no longer found. + + photos: An iterable of Photo objects to check. + If not provided, everything is checked. ''' - photos = self.get_photos_by_recent() + if photos is None: + photos = self.get_photos_by_recent() + for photo in photos: if os.path.exists(photo.real_filepath): continue diff --git a/searchhelpers.py b/etiquette/searchhelpers.py similarity index 98% rename from searchhelpers.py rename to etiquette/searchhelpers.py index 25d8f26..8a470bd 100644 --- a/searchhelpers.py +++ b/etiquette/searchhelpers.py @@ -1,9 +1,9 @@ import shlex -import constants -import exceptions -import helpers -import objects +from . import constants +from . import exceptions +from . import helpers +from . import objects def build_query(orderby): query = 'SELECT * FROM photos' diff --git a/sessions.py b/etiquette/sessions.py similarity index 99% rename from sessions.py rename to etiquette/sessions.py index c472812..fee4878 100644 --- a/sessions.py +++ b/etiquette/sessions.py @@ -1,9 +1,10 @@ import flask from flask import request import functools -import helpers import uuid +from . import helpers + def _generate_token(): token = str(uuid.uuid4()) #print('MAKE SESSION', token) diff --git a/etiquette_easy.py b/etiquette_repl.py similarity index 88% rename from etiquette_easy.py rename to etiquette_repl.py index ae3566b..056e3a2 100644 --- a/etiquette_easy.py +++ b/etiquette_repl.py @@ -1,10 +1,10 @@ # Use with # py -i etiquette_easy.py -import phototagger +import etiquette.phototagger import os import sys -P = phototagger.PhotoDB() +P = etiquette.phototagger.PhotoDB() import traceback def easytagger(): diff --git a/etiquette.py b/etiquette_site.py similarity index 97% rename from etiquette.py rename to etiquette_site.py index 6a8d7b1..df77a2f 100644 --- a/etiquette.py +++ b/etiquette_site.py @@ -8,17 +8,25 @@ import urllib.parse import warnings import zipstream -import constants -import decorators -import exceptions -import helpers -import jsonify -import objects -import phototagger -import searchhelpers -import sessions +from etiquette import constants +from etiquette import decorators +from etiquette import exceptions +from etiquette import helpers +from etiquette import jsonify +from etiquette import objects +from etiquette import phototagger +from etiquette import searchhelpers +from etiquette import sessions -site = flask.Flask(__name__) + +TEMPLATE_DIR = 'C:\\git\\Etiquette\\templates' +STATIC_DIR = 'C:\\git\\Etiquette\\static' + +site = flask.Flask( + __name__, + template_folder=TEMPLATE_DIR, + static_folder=STATIC_DIR, +) site.config.update( SEND_FILE_MAX_AGE_DEFAULT=180, TEMPLATES_AUTO_RELOAD=True, @@ -249,7 +257,7 @@ def logout(): @site.route('/favicon.ico') @site.route('/favicon.png') def favicon(): - filename = os.path.join('static', 'favicon.png') + filename = os.path.join(STATIC_DIR, 'favicon.png') return flask.send_file(filename) @@ -549,14 +557,6 @@ def get_search_json(): return jsonify.make_json_response(search_results) -@site.route('/static/') -def geft_static(filename): - filename = filename.replace('\\', os.sep) - filename = filename.replace('/', os.sep) - filename = os.path.join('static', filename) - return flask.send_file(filename) - - def get_tags_core(specific_tag=None): try: tags = P.export_tags(phototagger.tag_export_easybake, specific_tag=specific_tag) diff --git a/etiquette_launch.py b/etiquette_site_launch.py similarity index 84% rename from etiquette_launch.py rename to etiquette_site_launch.py index bf607b6..0ff3c17 100644 --- a/etiquette_launch.py +++ b/etiquette_site_launch.py @@ -1,7 +1,7 @@ import gevent.monkey gevent.monkey.patch_all() -import etiquette +import etiquette_site import gevent.pywsgi import gevent.wsgi import sys @@ -14,14 +14,14 @@ else: if port == 443: http = gevent.pywsgi.WSGIServer( listener=('0.0.0.0', port), - application=etiquette.site, + application=etiquette_site.site, keyfile='C:\\git\\etiquette\\etiquette\\https\\etiquette.key', certfile='C:\\git\\etiquette\\etiquette\\https\\etiquette.crt', ) else: http = gevent.pywsgi.WSGIServer( listener=('0.0.0.0', port), - application=etiquette.site, + application=etiquette_site.site, ) diff --git a/etiquette_upgrader.py b/utilities/database_upgrader.py similarity index 100% rename from etiquette_upgrader.py rename to utilities/database_upgrader.py