[docs]classAssetRegistry(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]defadd_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 environmentbundle._internal_env_name=nameforiteminbundle.contents:self.map_dest_to_bundle[item]=name
[docs]defregister_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")ifnotsettings.ENABLED_BUNDLES:logger.warning("Asset registering skipped as there are no enabled bundle")returnNonelogger.info("Starting asset registering")# Assets bundlesAVAILABLE_BUNDLES=getattr(settings,"BUNDLES",{})# Initialize webassets environmentassets_env=AssetsEnvironment()assets_env.debug=settings.DEBUGassets_env.url=settings.STATIC_URLassets_env.directory=settings.STATIC_DIRassets_env.load_path=[settings.SOURCES_DIR]assets_env.cache=settings.WEBASSETS_CACHEassets_env.url_expire=settings.WEBASSETS_URLEXPIRE# Attach internal Optimus asset registry to the webassets environmentassets_env.optimus_registry=AssetRegistry()# Register enabled assets bundlesforbundle_nameinsettings.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 itforbundle_nameinsettings.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 loggeriflogger.getEffectiveLevel()==logging.DEBUG:forurlinassets_env[bundle_name].urls():logger.debug(" - {}".format(url))returnassets_env