From: Mike Bayer Date: Sat, 1 Jul 2006 15:30:33 +0000 (+0000) Subject: some adjustments to activemapper's objectstore to be composed against SessionContext X-Git-Tag: rel_0_2_5~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6133dbee0914b9e2a80af1c323430493054ef45a;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git some adjustments to activemapper's objectstore to be composed against SessionContext DynamicMetaData checks first for _engine before returning --- diff --git a/CHANGES b/CHANGES index e87f9f4ef6..a36de9ea63 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,7 @@ two mappers that referenced each other - upgraded all unittests to insert './lib/' into sys.path, working around new setuptools PYTHONPATH-killing behavior - further fixes with attributes/dependencies/etc.... +- improved error handling for when DynamicMetaData is not connected 0.2.4 - try/except when the mapper sets init.__name__ on a mapped class, diff --git a/lib/sqlalchemy/ext/activemapper.py b/lib/sqlalchemy/ext/activemapper.py index 541bf78127..9fa1830311 100644 --- a/lib/sqlalchemy/ext/activemapper.py +++ b/lib/sqlalchemy/ext/activemapper.py @@ -19,11 +19,13 @@ metadata = DynamicMetaData("activemapper") # # thread local SessionContext # -class Objectstore(SessionContext): - def __getattr__(self, key): - return getattr(self.current, key) - def get_session(self): - return self.current +class Objectstore(object): + + def __init__(self, *args, **kwargs): + self._context = SessionContext(*args, **kwargs) + + def __getattr__(self, name): + return getattr(self._context.current, name) objectstore = Objectstore(create_session) @@ -222,10 +224,10 @@ class ActiveMapperMeta(type): # check for inheritence if hasattr(bases[0], "mapping"): cls._base_mapper= bases[0].mapper - assign_mapper(objectstore, cls, cls.table, + assign_mapper(objectstore._context, cls, cls.table, inherits=cls._base_mapper) else: - assign_mapper(objectstore, cls, cls.table) + assign_mapper(objectstore._context, cls, cls.table) cls.relations = relations ActiveMapperMeta.classes[clsname] = cls diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 6878b9c898..1df2d30053 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -710,12 +710,12 @@ class DynamicMetaData(MetaData): self.__engines[engine_or_url] = engine_or_url self.context._engine = engine_or_url def is_bound(self): - return self.context._engine is not None + return hasattr(self.context, '_engine') and self.context._engine is not None def dispose(self): """disposes all Engines to which this DynamicMetaData has been connected.""" for e in self.__engines.values(): e.dispose() - engine=property(lambda s:s.context._engine) + engine=property(lambda s:hasattr(s.context, '_engine') and s.context._engine or None) class SchemaVisitor(sql.ClauseVisitor): """defines the visiting for SchemaItem objects"""