"""An example of a module for Chrysalio with dependencies, permissions, routes,
views and menu."""
from os.path import dirname, join
from pyramid.config import Configurator
from ...lib.i18n import _
from ...includes.modules.models import DBModule
from .. import Module
from .relaxng import RELAXNG_CIOSKELETON
from .security import PRINCIPALS_CIOSKELETON
from .menu import MENU_CIOSKELETON
from .models.populate import xml2db as _xml2db, db2xml as _db2xml
# =============================================================================
[docs]
def includeme(configurator):
"""Function to register the module.
:type configurator: pyramid.config.Configurator
:param configurator:
Object used to do configuration declaration within the application.
"""
# Registration
Module.register(configurator, ModuleCioSkeleton)
if not isinstance(configurator, Configurator):
return
# Permissions
configurator.include('chrysalio.modules.cioskeleton.security')
# Routes
configurator.include('chrysalio.modules.cioskeleton.routes')
# Views
for theme in configurator.registry['themes']:
theme = '/theme/{0}'.format(theme.lower()) if theme else ''
path = '{0}/cioskeleton/images/'.format(theme)
if configurator.introspector.get('static views', path) is None:
configurator.add_static_view(
path, join(dirname(__file__), 'Static', 'Images'))
path = '{0}/cioskeleton/css/'.format(theme)
if configurator.introspector.get('static views', path) is None:
configurator.add_static_view(
path, join(dirname(__file__), 'Static', 'Css'))
configurator.scan('chrysalio.modules.cioskeleton.views')
# =============================================================================
[docs]
class ModuleCioSkeleton(Module):
"""Class for an example of Chrysalio module.
:param str config_ini:
Absolute path to the configuration file (e.g. development.ini).
"""
name = _('Skeleton')
implements = ('skeleton',)
dependencies = ('chrysalio.includes.themes',)
relaxng = RELAXNG_CIOSKELETON
xml2db = (_xml2db,)
db2xml = (_db2xml,)
_DBModule = DBModule # type: ignore
# -------------------------------------------------------------------------
[docs]
def activate(self, registry, dbsession):
"""Method to activate the module.
:type registry: pyramid.registry.Registry
:param registry:
Application registry.
:type dbsession: sqlalchemy.orm.session.Session
:param dbsession:
SQLAlchemy session.
"""
if registry['principals'][0][0] == 'mode' and \
PRINCIPALS_CIOSKELETON[0][2][0] not in registry['principals'][0][2]:
registry['principals'][0][2].append(
PRINCIPALS_CIOSKELETON[0][2][0])
if PRINCIPALS_CIOSKELETON[1] not in registry['principals']:
registry['principals'].append(PRINCIPALS_CIOSKELETON[1])
if 'menu' in registry and MENU_CIOSKELETON not in registry['menu']:
registry['menu'].insert(1, MENU_CIOSKELETON)
# -------------------------------------------------------------------------
[docs]
def deactivate(self, registry, dbsession):
"""Method to deactivate the module.
:type registry: pyramid.registry.Registry
:param registry:
Application registry.
:type dbsession: sqlalchemy.orm.session.Session
:param dbsession:
SQLAlchemy session.
"""
if registry['principals'][0][0] == 'mode' and \
PRINCIPALS_CIOSKELETON[0][2][0] in registry['principals'][0][2]:
registry['principals'][0][2].remove(
PRINCIPALS_CIOSKELETON[0][2][0])
if PRINCIPALS_CIOSKELETON[1] in registry['principals']:
registry['principals'].remove(PRINCIPALS_CIOSKELETON[1])
if 'menu' in registry and MENU_CIOSKELETON in registry['menu']:
registry['menu'].remove(MENU_CIOSKELETON)