2018-06-30 19:59:10 +00:00
|
|
|
'''
|
2021-09-09 02:40:05 +00:00
|
|
|
etiquette_flask_dev
|
|
|
|
===================
|
2018-06-30 19:59:10 +00:00
|
|
|
This file is the gevent launcher for local / development use.
|
|
|
|
|
2021-09-09 02:40:05 +00:00
|
|
|
> etiquette_flask_dev port <flags>
|
|
|
|
|
|
|
|
port:
|
|
|
|
Port number on which to run the server. Default 5000.
|
|
|
|
|
|
|
|
--https:
|
|
|
|
If this flag is not passed, HTTPS will automatically be enabled if the port
|
|
|
|
is 443. You can pass this flag to enable HTTPS on other ports.
|
|
|
|
We expect to find etiquette.key and etiquette.crt in
|
|
|
|
frontends/etiquette_flask/https.
|
|
|
|
|
|
|
|
--localhost-only:
|
|
|
|
If this flag is passed, only localhost will be able to access the server.
|
|
|
|
Other users on the LAN will be blocked.
|
2018-06-30 19:59:10 +00:00
|
|
|
'''
|
2018-04-16 03:34:03 +00:00
|
|
|
import gevent.monkey; gevent.monkey.patch_all()
|
2016-09-18 08:33:46 +00:00
|
|
|
|
2018-04-16 03:34:03 +00:00
|
|
|
import argparse
|
2018-11-05 03:27:20 +00:00
|
|
|
import gevent.pywsgi
|
2021-01-08 21:38:54 +00:00
|
|
|
import os
|
2016-09-18 08:33:46 +00:00
|
|
|
import sys
|
|
|
|
|
2021-09-09 02:40:05 +00:00
|
|
|
from voussoirkit import betterhelp
|
2020-09-22 09:54:26 +00:00
|
|
|
from voussoirkit import pathclass
|
2020-11-09 04:20:04 +00:00
|
|
|
from voussoirkit import vlogging
|
2018-01-18 04:53:25 +00:00
|
|
|
|
2021-09-09 02:36:29 +00:00
|
|
|
log = vlogging.getLogger(__name__, 'etiquette_flask_dev')
|
|
|
|
|
2021-01-09 23:41:52 +00:00
|
|
|
import etiquette
|
2020-09-30 22:05:44 +00:00
|
|
|
import backend
|
|
|
|
|
|
|
|
site = backend.site
|
2021-01-19 23:49:28 +00:00
|
|
|
site.debug = True
|
2018-01-18 04:53:25 +00:00
|
|
|
|
2020-09-22 09:54:26 +00:00
|
|
|
HTTPS_DIR = pathclass.Path(__file__).parent.with_child('https')
|
2020-11-09 04:20:04 +00:00
|
|
|
|
|
|
|
####################################################################################################
|
2018-01-18 04:53:25 +00:00
|
|
|
|
2020-09-30 22:17:20 +00:00
|
|
|
def etiquette_flask_launch(
|
|
|
|
*,
|
|
|
|
localhost_only,
|
|
|
|
port,
|
|
|
|
use_https,
|
|
|
|
):
|
2018-04-16 03:34:03 +00:00
|
|
|
if use_https is None:
|
|
|
|
use_https = port == 443
|
2016-09-18 08:33:46 +00:00
|
|
|
|
2018-04-16 03:34:03 +00:00
|
|
|
if use_https:
|
|
|
|
http = gevent.pywsgi.WSGIServer(
|
|
|
|
listener=('0.0.0.0', port),
|
2020-09-30 22:05:44 +00:00
|
|
|
application=site,
|
2020-09-22 09:54:26 +00:00
|
|
|
keyfile=HTTPS_DIR.with_child('etiquette.key').absolute_path,
|
|
|
|
certfile=HTTPS_DIR.with_child('etiquette.crt').absolute_path,
|
2018-04-16 03:34:03 +00:00
|
|
|
)
|
|
|
|
else:
|
|
|
|
http = gevent.pywsgi.WSGIServer(
|
|
|
|
listener=('0.0.0.0', port),
|
2020-09-30 22:05:44 +00:00
|
|
|
application=site,
|
2018-04-16 03:34:03 +00:00
|
|
|
)
|
2016-11-27 09:06:11 +00:00
|
|
|
|
2020-09-30 22:15:49 +00:00
|
|
|
if localhost_only:
|
|
|
|
site.localhost_only = True
|
|
|
|
|
2021-01-09 23:41:52 +00:00
|
|
|
try:
|
2021-09-09 02:36:29 +00:00
|
|
|
backend.common.init_photodb(path=pathclass.cwd())
|
2021-01-09 23:41:52 +00:00
|
|
|
except etiquette.exceptions.NoClosestPhotoDB as exc:
|
2021-09-09 02:36:29 +00:00
|
|
|
log.error(exc.error_message)
|
|
|
|
log.error('Try `etiquette_cli.py init` to create the database.')
|
2021-01-09 23:41:52 +00:00
|
|
|
return 1
|
2020-09-22 09:54:26 +00:00
|
|
|
|
2021-02-03 20:12:47 +00:00
|
|
|
message = f'Starting server on port {port}, pid={os.getpid()}.'
|
2018-04-16 03:34:03 +00:00
|
|
|
if use_https:
|
|
|
|
message += ' (https)'
|
2021-09-09 02:36:29 +00:00
|
|
|
log.info(message)
|
2020-09-22 09:54:26 +00:00
|
|
|
|
2018-04-16 03:34:03 +00:00
|
|
|
try:
|
|
|
|
http.serve_forever()
|
|
|
|
except KeyboardInterrupt:
|
2021-09-09 02:36:29 +00:00
|
|
|
log.info('Goodbye')
|
|
|
|
return 0
|
2016-09-18 08:33:46 +00:00
|
|
|
|
2020-09-22 09:54:26 +00:00
|
|
|
def etiquette_flask_launch_argparse(args):
|
|
|
|
return etiquette_flask_launch(
|
2020-09-30 22:15:49 +00:00
|
|
|
localhost_only=args.localhost_only,
|
2020-09-30 22:17:20 +00:00
|
|
|
port=args.port,
|
2020-09-22 09:54:26 +00:00
|
|
|
use_https=args.use_https,
|
|
|
|
)
|
2018-04-16 03:34:03 +00:00
|
|
|
|
2021-09-09 02:36:29 +00:00
|
|
|
@vlogging.main_decorator
|
2018-04-16 03:34:03 +00:00
|
|
|
def main(argv):
|
|
|
|
parser = argparse.ArgumentParser()
|
|
|
|
|
2020-09-22 09:54:26 +00:00
|
|
|
parser.add_argument('port', nargs='?', type=int, default=5000)
|
2018-04-16 03:34:03 +00:00
|
|
|
parser.add_argument('--https', dest='use_https', action='store_true', default=None)
|
2020-09-30 22:17:20 +00:00
|
|
|
parser.add_argument('--localhost_only', '--localhost-only', dest='localhost_only', action='store_true')
|
2020-09-22 09:54:26 +00:00
|
|
|
parser.set_defaults(func=etiquette_flask_launch_argparse)
|
2018-04-16 03:34:03 +00:00
|
|
|
|
2021-09-09 02:40:05 +00:00
|
|
|
return betterhelp.single_main(argv, parser, __doc__)
|
2018-04-16 03:34:03 +00:00
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
raise SystemExit(main(sys.argv[1:]))
|