#
# Copyright (c) 2008-2015 Thierry Florac <tflorac AT ulthar.net>
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
"""
PyAMS SQLAlchemy integration
============================
*pyams_alchemy* package is a small package which can be used to make SQLAlchemy integration more simple.
The main goal of *pyams_alchemy* package is to define the :class:`pyams_alchemy.engine.AlchemyEngineUtility` class:
this class can be stored persistently into PyAMS local site manager (see :ref:`site`) to store settings of an
SQLAlchemy engine; on user request, the :func:`pyams_alchemy.engine.get_user_session` function can be used to get
access to a new SQLAlchemy engine session matching these settings which will to be bound to current Pyramid's
transaction.
Dynamic schema names
++++++++++++++++++++
Some times you may have to be able to setup, for a given table, a schema name which is not static but can be dynamic
through a configuration option.
This can be done easily with the help of the :class:`pyams_alchemy.mixin.DynamicSchemaMixin` which you can inherit from
in any SQLAlchemy table subclass.
When this is done, the schema name can be defined into Pyramid's configuration file into a setting which is called
*pyams_alchemy:{module_name}.{class_name}.schema*; for example like in
*pyams_alchemy:pyams_content.package.TableName.schema*. If not specified, the table's schema name can be defined in a
classic *__schema__* table's attribute.
"""
__docformat__ = 'restructuredtext'
from pyramid.i18n import TranslationStringFactory
_ = TranslationStringFactory('pyams_alchemy')
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
[docs]def includeme(config):
"""Pyramid include"""
# add translations
config.add_translation_dirs('pyams_alchemy:locales')
# load registry components
try:
import pyams_zmi
except ImportError:
config.scan(ignore='pyams_alchemy.zmi')
else:
config.scan()
if hasattr(config, 'load_zcml'):
config.load_zcml('configure.zcml')