Ethan Dalool
4bf5b6d824
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.
99 lines
2.7 KiB
Python
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:]))
|