From a04b8aab4c8bbfeb699a40afed8ab862af6de2de Mon Sep 17 00:00:00 2001 From: Jake Howard Date: Tue, 11 Apr 2017 21:27:19 +0100 Subject: [PATCH] Added cli args --- lantern/args.py | 9 +++++++++ lantern/main.py | 7 +++++-- lantern/route.py | 18 ++++++++++++------ 3 files changed, 26 insertions(+), 8 deletions(-) create mode 100644 lantern/args.py diff --git a/lantern/args.py b/lantern/args.py new file mode 100644 index 0000000..f05161a --- /dev/null +++ b/lantern/args.py @@ -0,0 +1,9 @@ +import argparse + + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument("handler", help="Executable to run", type=str) + parser.add_argument("--port", help="Port to listen on", type=int, default=8000) + parser.add_help = True + return parser.parse_args() diff --git a/lantern/main.py b/lantern/main.py index 731b936..a7fa018 100644 --- a/lantern/main.py +++ b/lantern/main.py @@ -1,6 +1,7 @@ from sanic import Sanic from sanic_useragent import SanicUserAgent -from lantern.route import main_route +from lantern.args import parse_args +from lantern.route import build_main_route import os app = Sanic(__name__) @@ -8,7 +9,9 @@ SanicUserAgent.init_app(app) def main(): + args = parse_args() workers = os.cpu_count() or 1 + main_route = build_main_route(args) app.add_route(main_route, "/") app.add_route(main_route, "/") - app.run(host="0.0.0.0", port=8000, workers=workers) + app.run(host="0.0.0.0", port=args.port, workers=workers) diff --git a/lantern/route.py b/lantern/route.py index fa2a6e7..960a662 100644 --- a/lantern/route.py +++ b/lantern/route.py @@ -5,10 +5,16 @@ from lantern.request import serialize_request import os -async def main_route(request, path=None): - handle = os.path.join(os.path.dirname(__file__), 'test_handle.py') - result = execute_handle(handle, serialize_request(request)) - if result.exit_code != 0: - return error_response(result.error) +def build_main_route(args): + handle = os.path.abspath(args.handler) + if not os.path.isfile(handle) or not os.access(handle, os.X_OK): + raise FileNotFoundError("Can't find handle at {}".format(handle)) - return html(result.html, status=200) + async def main_route(request, path=None): + result = execute_handle(handle, serialize_request(request)) + if result.exit_code != 0: + return error_response(result.error) + + return html(result.html, status=200) + + return main_route