diff options
-rw-r--r-- | cli/cli.py | 36 | ||||
-rwxr-xr-x | pyblog | 36 |
2 files changed, 37 insertions, 35 deletions
@@ -11,6 +11,8 @@ import fileinput import time +import signal + from config.config import * from utils import utils @@ -319,3 +321,37 @@ def gen_deploy(args): generators.generate_blog(fresh=True) deploy(None) + + +def preview(args): + """Serve the blog and auto regenerate upon changes.""" + + # pylint: disable=unused-argument + + server_process = utils.HTTPServerProcess(BUILDDIR) + server_process.start() + sys.stderr.write("watching for changes\n") + sys.stderr.write("send SIGINT to stop\n") + + # install a SIGINT handler only for this process + sigint_raised = False + + def sigint_mitigator(signum, frame): + """Translate SIGINT to setting the sigint_raised flag.""" + nonlocal sigint_raised + sigint_raised = True + + signal.signal(signal.SIGINT, sigint_mitigator) + + # Watch and auto-regen. + # No need to actually implement watch separately, since + # generate_blog(fresh=False, report_total_errors=False) already + # watches for modifications and only regens upon changes, and it is + # completely silent when there's no change. + while not sigint_raised: + generators.generate_blog(fresh=False, report_total_errors=False) + time.sleep(0.5) + + sys.stderr.write("\nSIGINT received, cleaning up...\n") + server_process.join() + return 0 @@ -53,40 +53,6 @@ from generators import generators from cli import cli -def preview(args): - """Serve the blog and auto regenerate upon changes.""" - - # pylint: disable=unused-argument - - server_process = utils.HTTPServerProcess(BUILDDIR) - server_process.start() - sys.stderr.write("watching for changes\n") - sys.stderr.write("send SIGINT to stop\n") - - # install a SIGINT handler only for this process - sigint_raised = False - - def sigint_mitigator(signum, frame): - """Translate SIGINT to setting the sigint_raised flag.""" - nonlocal sigint_raised - sigint_raised = True - - signal.signal(signal.SIGINT, sigint_mitigator) - - # Watch and auto-regen. - # No need to actually implement watch separately, since - # generate_blog(fresh=False, report_total_errors=False) already - # watches for modifications and only regens upon changes, and it is - # completely silent when there's no change. - while not sigint_raised: - generators.generate_blog(fresh=False, report_total_errors=False) - time.sleep(0.5) - - sys.stderr.write("\nSIGINT received, cleaning up...\n") - server_process.join() - return 0 - - def list_posts(): """List all posts, with date, title, and path to source file. @@ -315,7 +281,7 @@ def main(): parser_new_post = subparsers.add_parser( "preview", aliases=["p", "pre"], description="Serve the blog locally and auto regenerate upon changes.") - parser_new_post.set_defaults(func=preview) + parser_new_post.set_defaults(func=cli.preview) parser_new_post = subparsers.add_parser( "deploy", aliases=["d", "dep"], |