Source code for flask_unchained.bundles.admin.hooks.register_model_admins_hook
from flask_unchained import AppFactoryHook
from ..model_admin import ModelAdmin
[docs]class RegisterModelAdminsHook(AppFactoryHook):
"""
Registers ModelAdmins with the `Admin` extension.
"""
name = 'admins'
"""
The name of this hook.
"""
bundle_module_names = ['admins']
"""
The default module this hook loads from.
Override by setting the ``admins_module_names`` attribute on your bundle class.
"""
run_before = ['init_extensions']
run_after = ['bundle_template_folders', 'register_extensions', 'models']
[docs] def process_objects(self, app, objects):
"""
Register discovered ModelAdmins with the Admin extension.
"""
admin = self.unchained.extensions.admin
admin.category_icon_classes = app.config.ADMIN_CATEGORY_ICON_CLASSES
db = self.unchained.extensions.db
models = self.unchained.sqlalchemy_bundle.models
for admin_cls in objects.values():
model = (admin_cls.model if not isinstance(admin_cls.model, str)
else models[admin_cls.model])
admin_cls.model = model
model_admin = admin_cls(
model=admin_cls.model,
session=db.session,
name=admin_cls.name,
endpoint=admin_cls.endpoint,
url=app.config.ADMIN_BASE_URL + '/' + admin_cls.slug,
category=admin_cls.category_name,
menu_class_name=admin_cls.menu_class_name,
menu_icon_value=admin_cls.menu_icon_value,
menu_icon_type=(None if not admin_cls.menu_icon_value
else admin_cls.menu_icon_type))
admin.add_view(model_admin)
[docs] def type_check(self, obj):
"""
Returns True if ``obj`` is a subclass of
:class:`~flask_unchained.bundles.admin.ModelAdmin`.
"""
is_class = isinstance(obj, type) and issubclass(obj, ModelAdmin)
return is_class and obj != ModelAdmin