Source code for anyblok
# -*- coding: utf-8 -*-
# This file is a part of the AnyBlok project
#
# Copyright (C) 2014 Jean-Sebastien SUZANNE <jssuzanne@anybox.fr>
# Copyright (C) 2015 Jean-Sebastien SUZANNE <jssuzanne@anybox.fr>
# Copyright (C) 2016 Jean-Sebastien SUZANNE <jssuzanne@anybox.fr>
# Copyright (C) 2017 Jean-Sebastien SUZANNE <jssuzanne@anybox.fr>
#
# This Source Code Form is subject to the terms of the Mozilla Public License,
# v. 2.0. If a copy of the MPL was not distributed with this file,You can
# obtain one at http://mozilla.org/MPL/2.0/.
from pkg_resources import iter_entry_points
from logging import getLogger
logger = getLogger(__name__)
[docs]def load_init_function_from_entry_points(unittest=False):
"""Call all the entry point ``anyblok_pyramid.init`` to update
the argument setting
the callable need to have one parametter, it is a dict::
def init_function(unittest=False):
...
We add the entry point by the setup file::
setup(
...,
entry_points={
'anyblok.init': [
init_function=path:init_function,
...
],
},
...,
)
"""
for i in iter_entry_points('anyblok.init'):
print('AnyBlok Load init: %r' % i)
i.load()(unittest=unittest)
[docs]def configuration_post_load(unittest=False):
"""Call all the entry point ``anyblok_configuration.post_load`` to
initialize some service in function of the configuration
the callable need to have one parametter, it is a dict::
def post_load_function(unittest=False):
...
We add the entry point by the setup file::
setup(
...,
entry_points={
'anyblok_configuration.post_load': [
post_load_function=path:post_load_function,
...
],
},
...,
)
"""
for i in iter_entry_points('anyblok_configuration.post_load'):
logger.info('AnyBlok configuration post load: %r' % i)
i.load()(unittest=unittest)
[docs]def start(processName, entry_points=None,
useseparator=False, loadwithoutmigration=False, config=None,
**kwargs):
""" Function which initialize the application
::
registry = start('My application',
entry_points=['AnyBlok'])
:param processName: Name of the application
:param version: Version of the application
:param prompt: Prompt message for the help
:param entry_points: entry point where load blok
:param useseparator: boolean, indicate if configuration option are split
betwwen two application
:param loadwithoutmigration: if True, any migration operation will do
:rtype: registry if the database name is in the configuration
"""
from .blok import BlokManager
from .config import Configuration
from .registry import RegistryManager
load_init_function_from_entry_points()
if config is None:
config = {}
Configuration.load(processName,
useseparator=useseparator, **config)
configuration_post_load()
if entry_points:
BlokManager.load(entry_points=entry_points)
else:
BlokManager.load()
db_name = Configuration.get('db_name')
logger.debug("start(): db_name=%r", db_name)
if not db_name:
logger.warning("start(): no database name in configuration, "
"bailing out")
return None
registry = RegistryManager.get(
db_name, loadwithoutmigration=loadwithoutmigration, **kwargs)
registry.commit()
return registry
from .declarations import Declarations # noqa
from . import core # noqa
from . import model # noqa
from . import mixin # noqa
from .authorization import binding # noqa
from .imp import reload_module_if_blok_is_reloading # noqa