Further separate front & back; Create frontends folder

New frontends folder will hold all front-end interfaces for etiquette. Existing flask site moved here and refers to itself as a package with external launcher. etiquette_site renamed to etiquette_flask
master
voussoir 2017-05-01 21:49:28 -07:00
parent 5b7c05c39d
commit 1c30ef5785
35 changed files with 44 additions and 38 deletions

View File

@ -1,3 +1,6 @@
from . import decorators from . import decorators
from . import etiquette_flask
from . import jsonify from . import jsonify
from . import sessions from . import sessions
site = etiquette_flask.site

View File

@ -10,13 +10,16 @@ import warnings
import zipstream import zipstream
import etiquette import etiquette
import etiquette_flask
from . import decorators
from . import jsonify
from . import sessions
from voussoirkit import pathclass from voussoirkit import pathclass
root_dir = pathclass.Path(__file__).parent root_dir = pathclass.Path(__file__).parent.parent
print(root_dir)
TEMPLATE_DIR = root_dir.with_child('templates') TEMPLATE_DIR = root_dir.with_child('templates')
STATIC_DIR = root_dir.with_child('static') STATIC_DIR = root_dir.with_child('static')
FAVICON_PATH = STATIC_DIR.with_child('favicon.png') FAVICON_PATH = STATIC_DIR.with_child('favicon.png')
@ -37,7 +40,7 @@ site.debug = True
P = etiquette.photodb.PhotoDB() P = etiquette.photodb.PhotoDB()
session_manager = etiquette_flask.sessions.SessionManager() session_manager = sessions.SessionManager()
#################################################################################################### ####################################################################################################
#################################################################################################### ####################################################################################################
@ -86,7 +89,7 @@ def P_wrapper(function):
flask.abort(status, e.error_message) flask.abort(status, e.error_message)
else: else:
response = etiquette.jsonify.exception(e) response = etiquette.jsonify.exception(e)
response = etiquette_flask.jsonify.make_json_response(response, status=status) response = jsonify.make_json_response(response, status=status)
flask.abort(response) flask.abort(response)
except Exception as e: except Exception as e:
@ -213,12 +216,12 @@ def get_register():
@site.route('/login', methods=['POST']) @site.route('/login', methods=['POST'])
@session_manager.give_token @session_manager.give_token
@etiquette_flask.decorators.required_fields(['username', 'password']) @decorators.required_fields(['username', 'password'])
def post_login(): def post_login():
if session_manager.get(request): if session_manager.get(request):
e = etiquette.exceptions.AlreadySignedIn() e = etiquette.exceptions.AlreadySignedIn()
response = etiquette.jsonify.exception(e) response = etiquette.jsonify.exception(e)
return etiquette_flask.jsonify.make_json_response(response, status=403) return jsonify.make_json_response(response, status=403)
username = request.form['username'] username = request.form['username']
password = request.form['password'] password = request.form['password']
@ -232,19 +235,19 @@ def post_login():
except (etiquette.exceptions.NoSuchUser, etiquette.exceptions.WrongLogin): except (etiquette.exceptions.NoSuchUser, etiquette.exceptions.WrongLogin):
e = etiquette.exceptions.WrongLogin() e = etiquette.exceptions.WrongLogin()
response = etiquette.jsonify.exception(e) response = etiquette.jsonify.exception(e)
return etiquette_flask.jsonify.make_json_response(response, status=422) return jsonify.make_json_response(response, status=422)
session = etiquette_flask.sessions.Session(request, user) session = sessions.Session(request, user)
session_manager.add(session) session_manager.add(session)
return etiquette_flask.jsonify.make_json_response({}) return jsonify.make_json_response({})
@site.route('/register', methods=['POST']) @site.route('/register', methods=['POST'])
@session_manager.give_token @session_manager.give_token
@etiquette_flask.decorators.required_fields(['username', 'password_1', 'password_2']) @decorators.required_fields(['username', 'password_1', 'password_2'])
def post_register(): def post_register():
if session_manager.get(request): if session_manager.get(request):
e = etiquette.exceptions.AlreadySignedIn() e = etiquette.exceptions.AlreadySignedIn()
response = etiquette.jsonify.exception(e) response = etiquette.jsonify.exception(e)
return etiquette_flask.jsonify.make_json_response(response, status=403) return jsonify.make_json_response(response, status=403)
username = request.form['username'] username = request.form['username']
password_1 = request.form['password_1'] password_1 = request.form['password_1']
@ -255,17 +258,17 @@ def post_register():
'error_type': 'PASSWORDS_DONT_MATCH', 'error_type': 'PASSWORDS_DONT_MATCH',
'error_message': 'Passwords do not match.', 'error_message': 'Passwords do not match.',
} }
return etiquette_flask.jsonify.make_json_response(response, status=422) return jsonify.make_json_response(response, status=422)
try: try:
user = P.register_user(username, password_1) user = P.register_user(username, password_1)
except etiquette.exceptions.EtiquetteException as e: except etiquette.exceptions.EtiquetteException as e:
response = etiquette.jsonify.exception(e) response = etiquette.jsonify.exception(e)
return etiquette_flask.jsonify.make_json_response(response, status=400) return jsonify.make_json_response(response, status=400)
session = etiquette_flask.sessions.Session(request, user) session = sessions.Session(request, user)
session_manager.add(session) session_manager.add(session)
return etiquette_flask.jsonify.make_json_response({}) return jsonify.make_json_response({})
@site.route('/logout', methods=['GET', 'POST']) @site.route('/logout', methods=['GET', 'POST'])
@session_manager.give_token @session_manager.give_token
@ -306,7 +309,7 @@ def get_album_json(albumid):
album['sub_albums'] = [P_album(x) for x in album['sub_albums']] album['sub_albums'] = [P_album(x) for x in album['sub_albums']]
album['sub_albums'].sort(key=lambda x: (x.title or x.id).lower()) album['sub_albums'].sort(key=lambda x: (x.title or x.id).lower())
album['sub_albums'] = [etiquette.jsonify.album(x, minimal=True) for x in album['sub_albums']] album['sub_albums'] = [etiquette.jsonify.album(x, minimal=True) for x in album['sub_albums']]
return etiquette_flask.jsonify.make_json_response(album) return jsonify.make_json_response(album)
@site.route('/album/<albumid>.zip') @site.route('/album/<albumid>.zip')
@ -370,7 +373,7 @@ def get_albums_html():
def get_albums_json(): def get_albums_json():
albums = get_albums_core() albums = get_albums_core()
albums = [etiquette.jsonify.album(album, minimal=True) for album in albums] albums = [etiquette.jsonify.album(album, minimal=True) for album in albums]
return etiquette_flask.jsonify.make_json_response(albums) return jsonify.make_json_response(albums)
@site.route('/bookmarks') @site.route('/bookmarks')
@ -419,7 +422,7 @@ def get_photo_html(photoid):
def get_photo_json(photoid): def get_photo_json(photoid):
photo = P_photo(photoid, response_type='json') photo = P_photo(photoid, response_type='json')
photo = etiquette.jsonify.photo(photo) photo = etiquette.jsonify.photo(photo)
photo = etiquette_flask.jsonify.make_json_response(photo) photo = jsonify.make_json_response(photo)
return photo return photo
def get_search_core(): def get_search_core():
@ -584,7 +587,7 @@ def get_search_json():
search_results['photos'] = [ search_results['photos'] = [
etiquette.jsonify.photo(photo, include_albums=False) for photo in search_results['photos'] etiquette.jsonify.photo(photo, include_albums=False) for photo in search_results['photos']
] ]
return etiquette_flask.jsonify.make_json_response(search_results) return jsonify.make_json_response(search_results)
def get_tags_core(specific_tag=None): def get_tags_core(specific_tag=None):
@ -624,7 +627,7 @@ def get_tags_json(specific_tag=None):
include_synonyms = request.args.get('synonyms') include_synonyms = request.args.get('synonyms')
include_synonyms = include_synonyms is None or etiquette.helpers.truthystring(include_synonyms) include_synonyms = include_synonyms is None or etiquette.helpers.truthystring(include_synonyms)
tags = [etiquette.jsonify.tag(tag, include_synonyms=include_synonyms) for tag in tags] tags = [etiquette.jsonify.tag(tag, include_synonyms=include_synonyms) for tag in tags]
return etiquette_flask.jsonify.make_json_response(tags) return jsonify.make_json_response(tags)
@site.route('/thumbnail/<photoid>') @site.route('/thumbnail/<photoid>')
@ -654,7 +657,7 @@ def get_user_html(username):
def get_user_json(username): def get_user_json(username):
user = get_user_core(username) user = get_user_core(username)
user = etiquette.jsonify.user(user) user = etiquette.jsonify.user(user)
user = etiquette_flask.jsonify.make_json_response(user) user = jsonify.make_json_response(user)
return user return user
@ -672,13 +675,13 @@ def post_album_add_tag(albumid):
tag = P_tag(tag) tag = P_tag(tag)
except etiquette.exceptions.NoSuchTag as e: except etiquette.exceptions.NoSuchTag as e:
response = etiquette.jsonify.exception(e) response = etiquette.jsonify.exception(e)
return etiquette_flask.jsonify.make_json_response(response, status=404) return jsonify.make_json_response(response, status=404)
recursive = request.form.get('recursive', False) recursive = request.form.get('recursive', False)
recursive = etiquette.helpers.truthystring(recursive) recursive = etiquette.helpers.truthystring(recursive)
album.add_tag_to_all(tag, nested_children=recursive) album.add_tag_to_all(tag, nested_children=recursive)
response['action'] = 'add_tag' response['action'] = 'add_tag'
response['tagname'] = tag.name response['tagname'] = tag.name
return etiquette_flask.jsonify.make_json_response(response) return jsonify.make_json_response(response)
@site.route('/album/<albumid>/edit', methods=['POST']) @site.route('/album/<albumid>/edit', methods=['POST'])
@ -693,7 +696,7 @@ def post_album_edit(albumid):
description = request.form.get('description', None) description = request.form.get('description', None)
album.edit(title=title, description=description) album.edit(title=title, description=description)
response = {'title': album.title, 'description': album.description} response = {'title': album.title, 'description': album.description}
return etiquette_flask.jsonify.make_json_response(response) return jsonify.make_json_response(response)
def post_photo_add_remove_tag_core(photoid, tagname, add_or_remove): def post_photo_add_remove_tag_core(photoid, tagname, add_or_remove):
@ -707,14 +710,14 @@ def post_photo_add_remove_tag_core(photoid, tagname, add_or_remove):
photo.remove_tag(tag) photo.remove_tag(tag)
except etiquette.exceptions.EtiquetteException as e: except etiquette.exceptions.EtiquetteException as e:
response = etiquette.jsonify.exception(e) response = etiquette.jsonify.exception(e)
response = etiquette_flask.jsonify.make_json_response(response, status=400) response = jsonify.make_json_response(response, status=400)
flask.abort(response) flask.abort(response)
response = {'tagname': tag.name} response = {'tagname': tag.name}
return etiquette_flask.jsonify.make_json_response(response) return jsonify.make_json_response(response)
@site.route('/photo/<photoid>/add_tag', methods=['POST']) @site.route('/photo/<photoid>/add_tag', methods=['POST'])
@etiquette_flask.decorators.required_fields(['tagname'], forbid_whitespace=True) @decorators.required_fields(['tagname'], forbid_whitespace=True)
def post_photo_add_tag(photoid): def post_photo_add_tag(photoid):
''' '''
Add a tag to this photo. Add a tag to this photo.
@ -722,7 +725,7 @@ def post_photo_add_tag(photoid):
return post_photo_add_remove_tag_core(photoid, request.form['tagname'], 'add') return post_photo_add_remove_tag_core(photoid, request.form['tagname'], 'add')
@site.route('/photo/<photoid>/remove_tag', methods=['POST']) @site.route('/photo/<photoid>/remove_tag', methods=['POST'])
@etiquette_flask.decorators.required_fields(['tagname'], forbid_whitespace=True) @decorators.required_fields(['tagname'], forbid_whitespace=True)
def post_photo_remove_tag(photoid): def post_photo_remove_tag(photoid):
''' '''
Remove a tag from this photo. Remove a tag from this photo.
@ -740,9 +743,9 @@ def post_photo_refresh_metadata(photoid):
photo.reload_metadata() photo.reload_metadata()
except etiquette.exceptions.EtiquetteException as e: except etiquette.exceptions.EtiquetteException as e:
response = etiquette.jsonify.exception(e) response = etiquette.jsonify.exception(e)
response = etiquette_flask.jsonify.make_json_response(response, status=400) response = jsonify.make_json_response(response, status=400)
flask.abort(response) flask.abort(response)
return etiquette_flask.jsonify.make_json_response({}) return jsonify.make_json_response({})
def post_tag_create_delete_core(tagname, function): def post_tag_create_delete_core(tagname, function):
@ -754,10 +757,10 @@ def post_tag_create_delete_core(tagname, function):
status = 400 status = 400
#print(response) #print(response)
return etiquette_flask.jsonify.make_json_response(response, status=status) return jsonify.make_json_response(response, status=status)
@site.route('/tags/create_tag', methods=['POST']) @site.route('/tags/create_tag', methods=['POST'])
@etiquette_flask.decorators.required_fields(['tagname'], forbid_whitespace=True) @decorators.required_fields(['tagname'], forbid_whitespace=True)
def post_tag_create(): def post_tag_create():
''' '''
Create a tag. Create a tag.
@ -765,7 +768,7 @@ def post_tag_create():
return post_tag_create_delete_core(request.form['tagname'], create_tag) return post_tag_create_delete_core(request.form['tagname'], create_tag)
@site.route('/tags/delete_tag', methods=['POST']) @site.route('/tags/delete_tag', methods=['POST'])
@etiquette_flask.decorators.required_fields(['tagname'], forbid_whitespace=True) @decorators.required_fields(['tagname'], forbid_whitespace=True)
def post_tag_delete(): def post_tag_delete():
''' '''
Delete a tag. Delete a tag.
@ -773,7 +776,7 @@ def post_tag_delete():
return post_tag_create_delete_core(request.form['tagname'], delete_tag) return post_tag_create_delete_core(request.form['tagname'], delete_tag)
@site.route('/tags/delete_synonym', methods=['POST']) @site.route('/tags/delete_synonym', methods=['POST'])
@etiquette_flask.decorators.required_fields(['tagname'], forbid_whitespace=True) @decorators.required_fields(['tagname'], forbid_whitespace=True)
def post_tag_delete_synonym(): def post_tag_delete_synonym():
''' '''
Delete a synonym. Delete a synonym.

View File

@ -1,7 +1,7 @@
import gevent.monkey import gevent.monkey
gevent.monkey.patch_all() gevent.monkey.patch_all()
import etiquette_site import etiquette_flask
import gevent.pywsgi import gevent.pywsgi
import gevent.wsgi import gevent.wsgi
import sys import sys
@ -14,14 +14,14 @@ else:
if port == 443: if port == 443:
http = gevent.pywsgi.WSGIServer( http = gevent.pywsgi.WSGIServer(
listener=('0.0.0.0', port), listener=('0.0.0.0', port),
application=etiquette_site.site, application=etiquette_flask.site,
keyfile='C:\\git\\etiquette\\etiquette\\https\\etiquette.key', keyfile='C:\\git\\etiquette\\etiquette\\https\\etiquette.key',
certfile='C:\\git\\etiquette\\etiquette\\https\\etiquette.crt', certfile='C:\\git\\etiquette\\etiquette\\https\\etiquette.crt',
) )
else: else:
http = gevent.pywsgi.WSGIServer( http = gevent.pywsgi.WSGIServer(
listener=('0.0.0.0', port), listener=('0.0.0.0', port),
application=etiquette_site.site, application=etiquette_flask.site,
) )

View File

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View File

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 63 KiB

View File

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB