Source code for adhocracy_core.resources.root

"""Root type to create initial object hierarchy and set global Permissions."""

# flake8: noqa

from pyramid.registry import Registry
from substanced.interfaces import IRoot
from substanced.objectmap import ObjectMap
from substanced.util import find_service

from adhocracy_core.interfaces import IPool
from adhocracy_core.interfaces import DEFAULT_USER_GROUP_NAME
from adhocracy_core.resources import add_resource_type_to_registry
from adhocracy_core.resources.activity import add_activiy_service
from adhocracy_core.resources.asset import add_assets_service
from adhocracy_core.resources.organisation import IOrganisation
from adhocracy_core.resources.organisation import organisation_meta
from adhocracy_core.resources.principal import IPrincipalsService
from adhocracy_core.resources.principal import IUser
from adhocracy_core.resources.principal import ISystemUser
from adhocracy_core.resources.principal import IGroup
from adhocracy_core.resources.process import IProcess
from adhocracy_core.resources.geo import add_locations_service
from adhocracy_core.resources.page import add_page_service
from adhocracy_core.catalog import ICatalogsService
import adhocracy_core.sheets.principal
import adhocracy_core.sheets.name


[docs]class IRootPool(IOrganisation, IRoot): """The application root object."""
[docs]def create_initial_content_for_app_root(context: IPool, registry: Registry, options: dict): """Add the Catalog, principals services to the context.""" _add_objectmap_to_app_root(context) _add_graph(context, registry) _add_catalog_service(context, registry) _add_principals_service(context, registry) _add_default_group(context, registry) _add_initial_user_and_group(context, registry) _add_anonymous_user(context, registry) add_locations_service(context, registry, {}) add_assets_service(context, registry, {}) add_page_service(context, registry, {}) add_activiy_service(context, registry, {})
def _add_objectmap_to_app_root(root): root.__objectmap__ = ObjectMap(root) root.__objectmap__.add(root, ('',)) def _add_graph(context, registry): graph = registry.content.create('Graph', context) context.__graph__ = graph def _add_catalog_service(context, registry): registry.content.create(ICatalogsService.__identifier__, parent=context, registry=registry) def _add_principals_service(context, registry): registry.content.create(IPrincipalsService.__identifier__, parent=context, registry=registry)
[docs]def add_example_process(context: IPool, registry: Registry, options: dict): """Add example organisation and process.""" appstructs = {adhocracy_core.sheets.name.IName.__identifier__: {'name': 'adhocracy'}} registry.content.create(IProcess.__identifier__, parent=context, appstructs=appstructs, registry=registry)
def _add_default_group(context, registry): group_name = DEFAULT_USER_GROUP_NAME groups = find_service(context, 'principals', 'groups') appstructs = {adhocracy_core.sheets.name.IName.__identifier__: {'name': group_name}, } registry.content.create(IGroup.__identifier__, groups, appstructs=appstructs, registry=registry) def _add_initial_user_and_group(context, registry): settings = registry['config'] user_name = settings.adhocracy.initial_login user_password = settings.adhocracy.initial_password user_email = settings.adhocracy.initial_email group_name = settings.adhocracy.initial_group_name group_roles = ['god'] groups = find_service(context, 'principals', 'groups') appstructs = {adhocracy_core.sheets.principal.IGroup.__identifier__: {'roles': group_roles}, adhocracy_core.sheets.name.IName.__identifier__: {'name': group_name}, } group = registry.content.create(IGroup.__identifier__, groups, appstructs=appstructs, registry=registry) users = find_service(context, 'principals', 'users') password_sheet = adhocracy_core.sheets.principal.IPasswordAuthentication appstruct = {adhocracy_core.sheets.principal.IUserBasic.__identifier__: {'name': user_name}, adhocracy_core.sheets.principal.IUserExtended.__identifier__: {'email': user_email}, adhocracy_core.sheets.principal.IPermissions.__identifier__: {'groups': [group]}, password_sheet.__identifier__: {'password': user_password}, } user = registry.content.create(IUser.__identifier__, users, appstruct, run_after_creation=False, send_event=False, registry=registry) user.activate() def _add_anonymous_user(context, registry): settings = registry['config'] user_name = settings.adhocracy.anonymous_user user_email = settings.adhocracy.anonymous_user_email users = find_service(context, 'principals', 'users') appstruct = {adhocracy_core.sheets.principal.IUserBasic.__identifier__: {'name': user_name}, adhocracy_core.sheets.principal.IUserExtended.__identifier__: {'email': user_email}, } user = registry.content.create(ISystemUser.__identifier__, users, appstruct, run_after_creation=False, send_event=False, registry=registry) user.activate() root_meta = organisation_meta._replace( iresource=IRootPool, after_creation=(create_initial_content_for_app_root, add_example_process,), is_implicit_addable=False, )
[docs]def includeme(config): """Add resource types to registry.""" add_resource_type_to_registry(root_meta, config)