# orm/util.py # Copyright (C) 2005-2011 the SQLAlchemy authors and contributors <see AUTHORS file> # # This module is part of SQLAlchemy and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php import sqlalchemy.exceptions as sa_exc from sqlalchemy import sql, util from sqlalchemy.sql import expression, util as sql_util, operators from sqlalchemy.orm.interfaces import MapperExtension, EXT_CONTINUE,\ PropComparator, MapperProperty,\ AttributeExtension from sqlalchemy.orm import attributes, exc mapperlib = util.importlater("sqlalchemy.orm", "mapperlib") all_cascades = frozenset(("delete", "delete-orphan", "all", "merge", "expunge", "save-update", "refresh-expire", "none")) _INSTRUMENTOR = ('mapper', 'instrumentor') class CascadeOptions(object): """Keeps track of the options sent to relationship().cascade""" def __init__(self, arg=""): if not arg: values = set() else: values = set(c.strip() for c in arg.split(',')) self.delete_orphan = "delete-orphan" in values
Defines the now deprecated ORM extension classes as well as ORM internals. Other than the deprecated extensions, this module and the classes within should be considered mostly private. """ from itertools import chain from sqlalchemy import exc as sa_exc from sqlalchemy import util from sqlalchemy.sql import operators deque = util.importlater('collections').deque mapperutil = util.importlater('sqlalchemy.orm', 'util') collections = None __all__ = ( 'AttributeExtension', 'EXT_CONTINUE', 'EXT_STOP', 'ExtensionOption', 'InstrumentationManager', 'LoaderStrategy', 'MapperExtension', 'MapperOption', 'MapperProperty',
# This module is part of SQLAlchemy and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php """Descriptor properties are more "auxiliary" properties that exist as configurational elements, but don't participate as actively in the load/persist ORM loop. """ from sqlalchemy.orm.interfaces import \ MapperProperty, PropComparator, StrategizedProperty from sqlalchemy.orm.mapper import _none_set from sqlalchemy.orm import attributes from sqlalchemy import util, sql, exc as sa_exc, event, schema from sqlalchemy.sql import expression properties = util.importlater('sqlalchemy.orm', 'properties') class DescriptorProperty(MapperProperty): """:class:`.MapperProperty` which proxies access to a user-defined descriptor.""" doc = None def instrument_class(self, mapper): prop = self class _ProxyImpl(object): accepts_scalar_loader = False expire_missing = True def __init__(self, key):
# # This module is part of SQLAlchemy and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php """The internals for the unit of work system. The session's flush() process passes objects to a contextual object here, which assembles flush tasks based on mappers and their properties, organizes them in order of dependency, and executes. """ from sqlalchemy import util, event from sqlalchemy.util import topological from sqlalchemy.orm import attributes, interfaces from sqlalchemy.orm import util as mapperutil session = util.importlater("sqlalchemy.orm", "session") def track_cascade_events(descriptor, prop): """Establish event listeners on object attributes which handle cascade-on-set/append. """ key = prop.key def append(state, item, initiator): # process "save_update" cascade rules for when # an instance is appended to the list of another instance sess = session._state_session(state) if sess:
# This module is part of SQLAlchemy and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php """Descriptor properties are more "auxiliary" properties that exist as configurational elements, but don't participate as actively in the load/persist ORM loop. """ from sqlalchemy.orm.interfaces import \ MapperProperty, PropComparator, StrategizedProperty from sqlalchemy.orm.mapper import _none_set from sqlalchemy.orm import attributes from sqlalchemy import util, sql, exc as sa_exc, event, schema from sqlalchemy.sql import expression properties = util.importlater('sqlalchemy.orm', 'properties') class DescriptorProperty(MapperProperty): """:class:`.MapperProperty` which proxies access to a user-defined descriptor.""" doc = None def instrument_class(self, mapper): prop = self class _ProxyImpl(object): accepts_scalar_loader = False expire_missing = True
'Boolean', 'Unicode', 'MutableType', 'Concatenable', 'UnicodeText','PickleType', 'Interval', 'Enum' ] import inspect import datetime as dt import codecs from sqlalchemy import exc, schema from sqlalchemy.sql import expression, operators from sqlalchemy.util import pickle from sqlalchemy.util.compat import decimal from sqlalchemy.sql.visitors import Visitable from sqlalchemy import util from sqlalchemy import processors, events, event import collections default = util.importlater("sqlalchemy.engine", "default") NoneType = type(None) if util.jython: import array class AbstractType(Visitable): """Base for all types - not needed except for backwards compatibility.""" class TypeEngine(AbstractType): """Base for built-in types.""" def copy_value(self, value): return value
# This module is part of SQLAlchemy and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php """The internals for the unit of work system. The session's flush() process passes objects to a contextual object here, which assembles flush tasks based on mappers and their properties, organizes them in order of dependency, and executes. """ from sqlalchemy import util, topological from sqlalchemy.orm import attributes, interfaces from sqlalchemy.orm import util as mapperutil from sqlalchemy.orm.util import _state_mapper session = util.importlater("sqlalchemy.orm", "session") class UOWEventHandler(interfaces.AttributeExtension): """An event handler added to all relationship attributes which handles session cascade operations. """ active_history = False def __init__(self, key): self.key = key def append(self, state, item, initiator): # process "save_update" cascade rules for when # an instance is appended to the list of another instance
with instances. This module is usually not directly visible to user applications, but defines a large part of the ORM's interactivity. """ import operator from operator import itemgetter from sqlalchemy import util, event, exc as sa_exc from sqlalchemy.orm import interfaces, collections, events mapperutil = util.importlater("sqlalchemy.orm", "util") PASSIVE_NO_RESULT = util.symbol('PASSIVE_NO_RESULT') ATTR_WAS_SET = util.symbol('ATTR_WAS_SET') ATTR_EMPTY = util.symbol('ATTR_EMPTY') NO_VALUE = util.symbol('NO_VALUE') NEVER_SET = util.symbol('NEVER_SET') PASSIVE_RETURN_NEVER_SET = util.symbol('PASSIVE_RETURN_NEVER_SET' """Symbol indicating that a 'default' value, i.e. None or blank collection, should not be assigned to an attribute when a get() is performed and no value was present. NEVER_SET is returned instead. """) PASSIVE_NO_INITIALIZE = util.symbol('PASSIVE_NO_INITIALIZE',
with instances. This module is usually not directly visible to user applications, but defines a large part of the ORM's interactivity. """ import operator from operator import itemgetter from sqlalchemy import util, event, exc as sa_exc from sqlalchemy.orm import interfaces, collections, events mapperutil = util.importlater("sqlalchemy.orm", "util") PASSIVE_NO_RESULT = util.symbol('PASSIVE_NO_RESULT') ATTR_WAS_SET = util.symbol('ATTR_WAS_SET') ATTR_EMPTY = util.symbol('ATTR_EMPTY') NO_VALUE = util.symbol('NO_VALUE') NEVER_SET = util.symbol('NEVER_SET') PASSIVE_RETURN_NEVER_SET = util.symbol('PASSIVE_RETURN_NEVER_SET' """Symbol indicating that loader callables can be fired off, but if no callable is applicable and no value is present, the attribute should remain non-initialized. NEVER_SET is returned in this case. """) PASSIVE_NO_INITIALIZE = util.symbol('PASSIVE_NO_INITIALIZE',
"""Contains Schema element and compilers for foreign table and fdw. """ from sqlalchemy.ext.compiler import compiles from sqlalchemy import util as sqlautil from sqlalchemy.schema import DDLElement, Table, _bind_or_error from sqlalchemy import sql from sqlalchemy import types from .util import sql_options ddl = sqlautil.importlater('sqlalchemy.engine', 'ddl') class ForeignTable(Table): """Defines a Foreign Table A Foreign Table is a postgresql table located on a remote server. To create remote servers, look at :class:`ForeignDataWrapper`. This functionality has been tagged stable in postgresql 9.1 Assuming you already created a server 'myserver', a foreign table can be defined on it like this:: mytable = ForeignTable("mytable", metadata, Column('id', Integer), Column('name', Unicode), fdw_server='myserver) You can then use it like any table, except: - only select statements are supported
Defines the now deprecated ORM extension classes as well as ORM internals. Other than the deprecated extensions, this module and the classes within should be considered mostly private. """ from itertools import chain from sqlalchemy import exc as sa_exc from sqlalchemy import util from sqlalchemy.sql import operators deque = __import__('collections').deque mapperutil = util.importlater('sqlalchemy.orm', 'util') collections = None __all__ = ( 'AttributeExtension', 'EXT_CONTINUE', 'EXT_STOP', 'ExtensionOption', 'InstrumentationManager', 'LoaderStrategy', 'MapperExtension', 'MapperOption', 'MapperProperty', 'PropComparator', 'PropertyOption',
# sqlalchemy/events.py # Copyright (C) 2005-2013 the SQLAlchemy authors and contributors <see AUTHORS file> # # This module is part of SQLAlchemy and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php """Core event interfaces.""" from sqlalchemy import event, exc, util engine = util.importlater('sqlalchemy', 'engine') pool = util.importlater('sqlalchemy', 'pool') class DDLEvents(event.Events): """ Define event listeners for schema objects, that is, :class:`.SchemaItem` and :class:`.SchemaEvent` subclasses, including :class:`.MetaData`, :class:`.Table`, :class:`.Column`. :class:`.MetaData` and :class:`.Table` support events specifically regarding when CREATE and DROP DDL is emitted to the database. Attachment events are also provided to customize behavior whenever a child schema element is associated with a parent, such as, when a :class:`.Column` is associated with its :class:`.Table`, when a :class:`.ForeignKeyConstraint` is associated with a :class:`.Table`, etc. Example using the ``after_create`` event::
# sqlalchemy/events.py # Copyright (C) 2005-2012 the SQLAlchemy authors and contributors <see AUTHORS file> # # This module is part of SQLAlchemy and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php """Core event interfaces.""" from sqlalchemy import event, exc, util engine = util.importlater("sqlalchemy", "engine") pool = util.importlater("sqlalchemy", "pool") class DDLEvents(event.Events): """ Define event listeners for schema objects, that is, :class:`.SchemaItem` and :class:`.SchemaEvent` subclasses, including :class:`.MetaData`, :class:`.Table`, :class:`.Column`. :class:`.MetaData` and :class:`.Table` support events specifically regarding when CREATE and DROP DDL is emitted to the database. Attachment events are also provided to customize behavior whenever a child schema element is associated with a parent, such as, when a :class:`.Column` is associated with its :class:`.Table`, when a :class:`.ForeignKeyConstraint` is associated with a :class:`.Table`, etc.
# sqlalchemy/events.py # Copyright (C) 2005-2012 the SQLAlchemy authors and contributors <see AUTHORS file> # # This module is part of SQLAlchemy and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php """Core event interfaces.""" from sqlalchemy import event, exc, util engine = util.importlater('sqlalchemy', 'engine') pool = util.importlater('sqlalchemy', 'pool') class DDLEvents(event.Events): """ Define event listeners for schema objects, that is, :class:`.SchemaItem` and :class:`.SchemaEvent` subclasses, including :class:`.MetaData`, :class:`.Table`, :class:`.Column`. :class:`.MetaData` and :class:`.Table` support events specifically regarding when CREATE and DROP DDL is emitted to the database. Attachment events are also provided to customize behavior whenever a child schema element is associated with a parent, such as, when a :class:`.Column` is associated with its :class:`.Table`, when a :class:`.ForeignKeyConstraint` is associated with a :class:`.Table`, etc. Example using the ``after_create`` event::
Contains various base classes used throughout the ORM. Defines the now deprecated ORM extension classes as well as ORM internals. Other than the deprecated extensions, this module and the classes within should be considered mostly private. """ from itertools import chain from sqlalchemy import exc as sa_exc from sqlalchemy import util from sqlalchemy.sql import operators deque = util.importlater('collections').deque mapperutil = util.importlater('sqlalchemy.orm', 'util') collections = None __all__ = ( 'AttributeExtension', 'EXT_CONTINUE', 'EXT_STOP', 'ExtensionOption', 'InstrumentationManager', 'LoaderStrategy', 'MapperExtension', 'MapperOption', 'MapperProperty',
# orm/util.py # Copyright (C) 2005-2013 the SQLAlchemy authors and contributors <see AUTHORS file> # # This module is part of SQLAlchemy and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php from sqlalchemy import sql, util, event, exc as sa_exc from sqlalchemy.sql import expression, util as sql_util, operators from sqlalchemy.orm.interfaces import MapperExtension, EXT_CONTINUE,\ PropComparator, MapperProperty from sqlalchemy.orm import attributes, exc import operator import re mapperlib = util.importlater("sqlalchemy.orm", "mapperlib") all_cascades = frozenset(("delete", "delete-orphan", "all", "merge", "expunge", "save-update", "refresh-expire", "none")) _INSTRUMENTOR = ('mapper', 'instrumentor') class CascadeOptions(frozenset): """Keeps track of the options sent to relationship().cascade""" _add_w_all_cascades = all_cascades.difference( ['all', 'none', 'delete-orphan']) _allowed_cascades = all_cascades def __new__(cls, arg): values = set([c for c in re.split('\s*,\s*', arg or "") if c])
# orm/events.py # Copyright (C) 2005-2011 the SQLAlchemy authors and contributors <see AUTHORS file> # # This module is part of SQLAlchemy and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php """ORM event interfaces. """ from sqlalchemy import event, exc, util orm = util.importlater("sqlalchemy", "orm") import inspect class InstrumentationEvents(event.Events): """Events related to class instrumentation events. The listeners here support being established against any new style class, that is any object that is a subclass of 'type'. Events will then be fired off for events against that class as well as all subclasses. 'type' itself is also accepted as a target in which case the events fire for all classes. """ @classmethod def _accept_with(cls, target): if isinstance(target, type): return orm.instrumentation.instrumentation_registry else: return None