From 7f832a144550228a8fe512c01f887efb52a919d5 Mon Sep 17 00:00:00 2001 From: Bastian Venthur Date: Fri, 19 Mar 2021 11:24:58 +0100 Subject: [PATCH] added missing devserver.py m( --- blag/devserver.py | 60 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 blag/devserver.py diff --git a/blag/devserver.py b/blag/devserver.py new file mode 100644 index 0000000..56fda8c --- /dev/null +++ b/blag/devserver.py @@ -0,0 +1,60 @@ +import os +import logging +import time +import multiprocessing +from http.server import SimpleHTTPRequestHandler, HTTPServer +from functools import partial + +from blag import blag + + +logger = logging.getLogger(__name__) + + +def get_last_modified(dirs): + """Get the last modified time. + + This method recursively goes through `dirs` and returns the most + recent modification time time found. + + Parameters + ---------- + dirs : list[str] + list of directories to search + + Returns + ------- + int : most recent modification time found in `dirs` + + """ + last_mtime = 0 + + for dir in dirs: + for root, dirs, files in os.walk(dir): + for f in files: + mtime = os.stat(os.path.join(root, f)).st_mtime + if mtime > last_mtime: + last_mtime = mtime + + return last_mtime + + +def autoreload(args): + dirs = [args.input_dir, args.template_dir, args.static_dir] + logger.info(f'Monitoring {dirs} for changes...') + last_mtime = get_last_modified(dirs) + while True: + mtime = get_last_modified(dirs) + if mtime > last_mtime: + last_mtime = mtime + logger.debug('Change detected, rebuilding...') + blag.build(args) + time.sleep(1) + + +def serve(args): + httpd = HTTPServer(('', 8000), partial(SimpleHTTPRequestHandler, + directory=args.output_dir)) + proc = multiprocessing.Process(target=autoreload, args=(args,)) + proc.start() + httpd.serve_forever()