From 68198845ed0a6f8b73419255500733c811513b05 Mon Sep 17 00:00:00 2001 From: Omar Al-Ithawi Date: Tue, 8 Sep 2015 17:23:41 +0300 Subject: [PATCH 1/2] Watch and process JS and CSS xmodule assets --- pavelib/assets.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/pavelib/assets.py b/pavelib/assets.py index be50c9eee0..fd9f188d29 100644 --- a/pavelib/assets.py +++ b/pavelib/assets.py @@ -109,6 +109,30 @@ class XModuleSassWatcher(SassWatcher): traceback.print_exc() +class XModuleAssetsWatcher(PatternMatchingEventHandler): + """ + Watches for css and js file changes + """ + ignore_directories = True + patterns = ['*.css', '*.js'] + + def register(self, observer): + """ + Register files with observer + """ + observer.schedule(self, 'common/lib/xmodule/', recursive=True) + + def on_modified(self, event): + print('\tCHANGED:', event.src_path) + try: + process_xmodule_assets() + except Exception: # pylint: disable=broad-except + traceback.print_exc() + + # To refresh the hash values of static xmodule content + restart_django_servers() + + def coffeescript_files(): """ return find command for paths containing coffee files @@ -181,6 +205,17 @@ def process_xmodule_assets(): sh('xmodule_assets common/static/xmodule') +def restart_django_servers(): + """ + Restart the django server. + + `$ touch` makes the Django file watcher thinks that something has changed, therefore + it restarts the server. + """ + sh(cmd( + "touch", 'lms/urls.py', 'cms/urls.py', + )) + def collect_assets(systems, settings): """ Collect static assets, including Django pipeline processing. @@ -206,6 +241,7 @@ def watch_assets(options): CoffeeScriptWatcher().register(observer) SassWatcher().register(observer) XModuleSassWatcher().register(observer) + XModuleAssetsWatcher().register(observer) print("Starting asset watcher...") observer.start() From 82c0206ca6a1fe198bba97b58fdaa7b2b51fb656 Mon Sep 17 00:00:00 2001 From: Omar Al-Ithawi Date: Tue, 15 Sep 2015 15:55:51 +0300 Subject: [PATCH 2/2] Added messages after assets process steps --- pavelib/assets.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pavelib/assets.py b/pavelib/assets.py index fd9f188d29..3089cd786b 100644 --- a/pavelib/assets.py +++ b/pavelib/assets.py @@ -187,6 +187,8 @@ def compile_sass(options): sh(cmd(*parts)) + print("\t\tFinished compiling sass.") + def compile_templated_sass(systems, settings): """ @@ -196,6 +198,7 @@ def compile_templated_sass(systems, settings): """ for sys in systems: sh(django_cmd(sys, settings, 'preprocess_assets')) + print("\t\tFinished preprocessing {} assets.".format(sys)) def process_xmodule_assets(): @@ -203,6 +206,7 @@ def process_xmodule_assets(): Process XModule static assets. """ sh('xmodule_assets common/static/xmodule') + print("\t\tFinished processing xmodule assets.") def restart_django_servers(): @@ -216,6 +220,7 @@ def restart_django_servers(): "touch", 'lms/urls.py', 'cms/urls.py', )) + def collect_assets(systems, settings): """ Collect static assets, including Django pipeline processing. @@ -224,6 +229,7 @@ def collect_assets(systems, settings): """ for sys in systems: sh(django_cmd(sys, settings, "collectstatic --noinput > /dev/null")) + print("\t\tFinished collecting {} assets.".format(sys)) @task