Source code for optimus.assets.registry

# -*- coding: utf-8 -*-
import logging

from webassets import Environment as AssetsEnvironment


[docs]class AssetRegistry(object): """ Index all knowed files from registered bundles Attributes: map_dest_to_bundle (dict): Registry of asset paths associated to their asset bundle keyname. logger (logging.Logger): Optimus logger. """ def __init__(self): self.map_dest_to_bundle = {} self.logger = logging.getLogger("optimus")
[docs] def add_bundle(self, name, bundle): """ Add a bundle to the registry Arguments: name (string): Bundle name as defined in the assets map. bundle (webassets.Bundle): Bundle to associate to given name. """ # Little trick because a Bundle does not know its name in the # webassets environment bundle._internal_env_name = name for item in bundle.contents: self.map_dest_to_bundle[item] = name
[docs]def register_assets(settings): """ Initialize webassets environment and its bundles. Arguments: settings (conf.model.SettingsModel): Settings registry instance. Returns: webassets.Environment: New configured Webasset environment. """ logger = logging.getLogger("optimus") if not settings.ENABLED_BUNDLES: logger.warning(("Asset registering skipped as there are no enabled " "bundle")) return None logger.info("Starting asset registering") # Assets bundles AVAILABLE_BUNDLES = getattr(settings, "BUNDLES", {}) # Initialize webassets environment assets_env = AssetsEnvironment() assets_env.debug = settings.DEBUG assets_env.url = settings.STATIC_URL assets_env.directory = settings.STATIC_DIR assets_env.load_path = [settings.SOURCES_DIR] assets_env.cache = settings.WEBASSETS_CACHE assets_env.url_expire = settings.WEBASSETS_URLEXPIRE # assets_env.optimus_registry = AssetRegistry() # Register enabled assets bundles for bundle_name in settings.ENABLED_BUNDLES: logger.debug("Registering bundle: {}".format(bundle_name)) assets_env.register(bundle_name, AVAILABLE_BUNDLES[bundle_name]) assets_env.optimus_registry.add_bundle( bundle_name, AVAILABLE_BUNDLES[bundle_name] ) # When after bundle has been registered we can resolve it for bundle_name in settings.ENABLED_BUNDLES: logger.info(" Processing: {}".format(assets_env[bundle_name].resolve_output())) # Avoid to loop on every bundle part if we are not in debug logger if logger.getEffectiveLevel() == logging.DEBUG: for url in assets_env[bundle_name].urls(): logger.debug(" - {}".format(url)) return assets_env