Source code for flask_unchained.hooks.register_extensions_hook

from typing import *

from ..app_factory_hook import AppFactoryHook
from ..bundles import Bundle
from ..flask_unchained import FlaskUnchained


[docs]class RegisterExtensionsHook(AppFactoryHook): """ Registers extensions found in bundles with the ``unchained`` extension. """ name = 'register_extensions' """ The name of this hook. """ bundle_module_names = ['extensions'] """ The default module this hook loads from. Override by setting the ``extensions_module_names`` attribute on your bundle class. """ # skipcq: PYL-W0221 (parameters mismatch in overridden method)
[docs] def process_objects(self, app: FlaskUnchained, extensions: Dict[str, object], ) -> None: """ Discover extensions in bundles and register them with the Unchained extension. """ for name, extension in extensions.items(): if name not in self.unchained.extensions: if isinstance(extension, (list, tuple)): extension, dependencies = extension self.unchained.extensions[name] = extension
[docs] def collect_from_bundle(self, bundle: Bundle) -> Dict[str, object]: """ Collect declared extensions from a bundle hierarchy. """ extensions = {} for b in bundle._iter_class_hierarchy(): for module in self.import_bundle_modules(b): extensions.update(getattr(module, 'EXTENSIONS', {})) return extensions