assets.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from pelican import signals
  2. import os
  3. from webassets import Environment
  4. from webassets.ext.jinja2 import AssetsExtension
  5. import logging
  6. logger = logging.getLogger(__name__)
  7. def add_extension(pelican):
  8. """add webassets' jinja2 extension to pelican"""
  9. jinja_env = pelican.settings['JINJA_ENVIRONMENT']
  10. if type(jinja_env) == dict: # pelican 3.7+
  11. jinja_env = jinja_env['extensions']
  12. jinja_env.append(AssetsExtension)
  13. logger.debug("'pelican-webassets' added to jinja2 environment")
  14. def create_environment(generator):
  15. """define the webassets environment for the generator"""
  16. theme_static_dir = generator.settings['THEME_STATIC_DIR']
  17. assets_destination = os.path.join(generator.output_path, theme_static_dir)
  18. generator.env.assets_environment = Environment(
  19. assets_destination, theme_static_dir)
  20. # are we in debug mode?
  21. in_debug = generator.settings.get(
  22. 'WEBASSETS_DEBUG', logger.getEffectiveLevel() <= logging.DEBUG
  23. )
  24. if in_debug:
  25. logger.info("'webassets' running in DEBUG mode")
  26. generator.env.assets_environment.debug = in_debug
  27. # pass along the additional congiuration options
  28. for item in generator.settings.get('WEBASSETS_CONFIG', []):
  29. generator.env.assets_environment.config[item[0]] = item[1]
  30. logger.debug(
  31. "'webassets' adding config: '%s' -> %s",
  32. item[0], item[1]
  33. )
  34. # pass along the named bundles
  35. for name, args, kwargs in generator.settings.get('WEBASSETS_BUNDLES', []):
  36. generator.env.assets_environment.register(name, *args, **kwargs)
  37. logger.debug("'webassets' registered bundle: '%s'", name)
  38. # pass along the additional directories for webassets
  39. paths = (
  40. generator.settings['THEME_STATIC_PATHS'] +
  41. generator.settings.get('WEBASSETS_SOURCE_PATHS', [])
  42. )
  43. logger.debug("'webassets' looding for files in: %s", paths)
  44. for path in (paths):
  45. generator.env.assets_environment.append_path(
  46. os.path.join(generator.theme, path)
  47. )
  48. def register():
  49. signals.initialized.connect(add_extension)
  50. signals.generator_init.connect(create_environment)