From 28383a6355c6c238a86a469b4a410139a3ce3d7a Mon Sep 17 00:00:00 2001 From: John Franey Date: Sat, 2 Feb 2019 16:24:11 -0400 Subject: [PATCH] Add livereload invoke task. Fixes #1326 Adds a `livereload` invoke task that builds the project and reloads the browser window when content files are updated. Usage: ```console $ invoke livereload [I 190202 16:28:30 server:298] Serving on http://127.0.0.1:5500 [I 190202 16:28:30 handlers:59] Start watching changes [I 190202 16:28:30 handlers:61] Start detecting changes [I 190202 16:28:32 handlers:132] Browser Connected: http://127.0.0.1:5500/ ``` See: https://livereload.readthedocs.io/en/latest/ --- pelican/tools/templates/tasks.py.jinja2 | 20 ++++++++++++++++++++ setup.py | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/pelican/tools/templates/tasks.py.jinja2 b/pelican/tools/templates/tasks.py.jinja2 index f022bfc0..5b27e2b5 100644 --- a/pelican/tools/templates/tasks.py.jinja2 +++ b/pelican/tools/templates/tasks.py.jinja2 @@ -7,7 +7,14 @@ import datetime from invoke import task from invoke.util import cd +from livereload import Server from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer +from pelican.settings import DEFAULT_CONFIG, get_settings_from_file + +SETTINGS = {} +SETTINGS.update(DEFAULT_CONFIG) +LOCAL_SETTINGS = get_settings_from_file('pelicanconf.py') +SETTINGS.update(LOCAL_SETTINGS) CONFIG = { # Local path configuration (can be absolute or relative to tasks.py) @@ -80,6 +87,19 @@ def preview(c): """Build production version of site""" c.run('pelican -s publishconf.py') +@task +def livereload(c): + """Automatically reload browser tab upon file modification.""" + build(c) + server = Server() + deploy_path = CONFIG['deploy_path'] + content_path = SETTINGS['PATH'] + content_file_extensions = ['.md', '.rst'] + for file_extension in content_file_extensions: + content_blob = '{0}/**/*{1}'.format(content_path, file_extension) + server.watch(content_blob, lambda: build(c)) + server.serve(root=deploy_path) + {% if cloudfiles %} @task def cf_upload(c): diff --git a/setup.py b/setup.py index e8918941..25e109c4 100755 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ from setuptools import setup requires = ['feedgenerator >= 1.9', 'jinja2 >= 2.7', 'pygments', 'docutils', 'pytz >= 0a', 'blinker', 'unidecode', 'six >= 1.4', - 'python-dateutil'] + 'python-dateutil', 'livereload'] entry_points = { 'console_scripts': [