Source code for chrysalio.includes.modules

"""Modules management."""

from collections import OrderedDict

from transaction import manager

from pyramid.config import Configurator

from ...lib.i18n import _
from ...lib.config import update_acl
from ...menu import MENU_ADMIN
from ...models import DB_METADATA, get_tm_dbsession
from .models import DBModule


PRINCIPALS_MODULES = (
    ('modules', _('Module management'), (
        ('viewer', _('View any module'), ('modules-view',)),
        ('editor', _('Edit or view any module'), (
            'modules-edit', 'modules-view'))
    )),
)
SUBMENU_MODULES = (
    None, _('Modules'), 'modules-view', 'modules_view', None)


# =============================================================================
[docs] def includeme(configurator): """Function to include modules functionality. :type configurator: pyramid.config.Configurator :param configurator: Object used to do configuration declaration within the application. """ # Populate/backup if not isinstance(configurator, Configurator): return # Routes configurator.add_route('modules_view', '/modules/view') configurator.add_route('modules_edit', '/modules/edit') # Premissions update_acl(configurator, PRINCIPALS_MODULES) if PRINCIPALS_MODULES[0] not in configurator.registry['principals']: configurator.registry['principals'].append(PRINCIPALS_MODULES[0]) # Menu if 'menu' in configurator.registry and \ MENU_ADMIN in configurator.registry['menu']: admin_menu = configurator.registry['menu'][ configurator.registry['menu'].index(MENU_ADMIN)] admin_menu[4].insert(0, SUBMENU_MODULES) # Views configurator.scan('chrysalio.includes.modules.views') # Database table and Registry configurator.registry['modules'] = OrderedDict() configurator.registry['modules_off'] = set() with manager: dbsession = get_tm_dbsession( configurator.registry['dbsession_factory'], manager) DB_METADATA.create_all() for dbmodule in dbsession.query(DBModule): if dbmodule.inactive: configurator.registry['modules_off'].add(dbmodule.module_id)