etiquette/frontends/etiquette_flask/etiquette_flask_dev.py
Ethan Dalool 4bf5b6d824
Replace dev_ino with mtime, sha256.
This change was prompted by my discovery that under DrivePool, two
files can have the same dev, ino pair. It's understandable but the fact
of the matter is I don't want to rely on inodes any more.
Hashing has the downside of speed, but considering the time investment
of tagging files in the first place I think it should be worthwhile.
2021-02-03 12:12:47 -08:00

99 lines
2.7 KiB
Python

'''
This file is the gevent launcher for local / development use.
Simply run it on the command line:
python etiquette_flask_dev.py [port]
'''
import gevent.monkey; gevent.monkey.patch_all()
import logging
handler = logging.StreamHandler()
log_format = '{levelname}:etiquette.{module}.{funcName}: {message}'
handler.setFormatter(logging.Formatter(log_format, style='{'))
logging.getLogger().addHandler(handler)
import argparse
import gevent.pywsgi
import os
import sys
from voussoirkit import pathclass
from voussoirkit import pipeable
from voussoirkit import vlogging
import etiquette
import backend
site = backend.site
site.debug = True
HTTPS_DIR = pathclass.Path(__file__).parent.with_child('https')
LOG_LEVEL = vlogging.NOTSET
####################################################################################################
def etiquette_flask_launch(
*,
localhost_only,
port,
use_https,
):
if use_https is None:
use_https = port == 443
if use_https:
http = gevent.pywsgi.WSGIServer(
listener=('0.0.0.0', port),
application=site,
keyfile=HTTPS_DIR.with_child('etiquette.key').absolute_path,
certfile=HTTPS_DIR.with_child('etiquette.crt').absolute_path,
)
else:
http = gevent.pywsgi.WSGIServer(
listener=('0.0.0.0', port),
application=site,
)
if localhost_only:
site.localhost_only = True
try:
backend.common.init_photodb(log_level=LOG_LEVEL)
except etiquette.exceptions.NoClosestPhotoDB as exc:
pipeable.stderr(exc.error_message)
pipeable.stderr('Try `etiquette_cli.py init` to create the database.')
return 1
message = f'Starting server on port {port}, pid={os.getpid()}.'
if use_https:
message += ' (https)'
print(message)
try:
http.serve_forever()
except KeyboardInterrupt:
pass
def etiquette_flask_launch_argparse(args):
return etiquette_flask_launch(
localhost_only=args.localhost_only,
port=args.port,
use_https=args.use_https,
)
def main(argv):
global LOG_LEVEL
(LOG_LEVEL, argv) = vlogging.get_level_by_argv(argv)
parser = argparse.ArgumentParser()
parser.add_argument('port', nargs='?', type=int, default=5000)
parser.add_argument('--https', dest='use_https', action='store_true', default=None)
parser.add_argument('--localhost_only', '--localhost-only', dest='localhost_only', action='store_true')
parser.set_defaults(func=etiquette_flask_launch_argparse)
args = parser.parse_args(argv)
return args.func(args)
if __name__ == '__main__':
raise SystemExit(main(sys.argv[1:]))