Source code for pyams_alchemy

#
# 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')