summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2006-07-10 21:53:49 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2006-07-10 21:53:49 +0000
commit2dfdf70660d747f02e628f8a5263d03820a50f35 (patch)
tree7a9ba273e64aa7e489ae5082fdee061fe340256d
parent55edd4ce95a0bd2f92482474b866debb3a29b3cf (diff)
downloadsqlalchemy-2dfdf70660d747f02e628f8a5263d03820a50f35.tar.gz
activemapper will use threadlocal mod's objectstore if its installed
both objectstores no longer subclass SessionContext, get at it via .context attribute instead
-rw-r--r--CHANGES6
-rw-r--r--lib/sqlalchemy/ext/activemapper.py27
-rw-r--r--lib/sqlalchemy/mods/threadlocal.py16
3 files changed, 27 insertions, 22 deletions
diff --git a/CHANGES b/CHANGES
index f6e4e63ab..16e6a05d4 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,11 @@
0.2.6
- tweaks to ActiveMapper, supports self-referential relationships
+- slight rearrangement to objectstore (in activemapper/threadlocal)
+so that the SessionContext is referenced by '.context' instead
+of subclassed directly.
+- activemapper will use threadlocal's objectstore if the mod is
+activated when activemapper is imported
+- small fix to URL regexp to allow filenames with '@' in them
0.2.5
- fixed endless loop bug in select_by(), if the traversal hit
diff --git a/lib/sqlalchemy/ext/activemapper.py b/lib/sqlalchemy/ext/activemapper.py
index 6c6886c66..d21332e3a 100644
--- a/lib/sqlalchemy/ext/activemapper.py
+++ b/lib/sqlalchemy/ext/activemapper.py
@@ -6,6 +6,7 @@ from sqlalchemy import Table, Column, ForeignKey
from sqlalchemy.ext.sessioncontext import SessionContext
from sqlalchemy.ext.assignmapper import assign_mapper
from sqlalchemy import backref as create_backref
+import sqlalchemy
import inspect
import sys
@@ -15,18 +16,16 @@ import sys
#
metadata = DynamicMetaData("activemapper")
-#
-# thread local SessionContext
-#
-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)
+try:
+ objectstore = sqlalchemy.objectstore
+except AttributeError:
+ # thread local SessionContext
+ 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)
#
@@ -237,10 +236,10 @@ class ActiveMapperMeta(type):
# check for inheritence
if hasattr(bases[0], "mapping"):
cls._base_mapper= bases[0].mapper
- assign_mapper(objectstore._context, cls, cls.table,
+ assign_mapper(objectstore.context, cls, cls.table,
inherits=cls._base_mapper)
else:
- assign_mapper(objectstore._context, cls, cls.table)
+ assign_mapper(objectstore.context, cls, cls.table)
cls.relations = relations
ActiveMapperMeta.classes[clsname] = cls
diff --git a/lib/sqlalchemy/mods/threadlocal.py b/lib/sqlalchemy/mods/threadlocal.py
index f96bb5649..760a37e81 100644
--- a/lib/sqlalchemy/mods/threadlocal.py
+++ b/lib/sqlalchemy/mods/threadlocal.py
@@ -22,24 +22,24 @@ while this mod is installed will reference this global context when creating new
__all__ = ['Objectstore', 'assign_mapper']
-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)
def assign_mapper(class_, *args, **kwargs):
- assignmapper.assign_mapper(objectstore, class_, *args, **kwargs)
+ assignmapper.assign_mapper(objectstore.context, class_, *args, **kwargs)
objectstore = Objectstore(Session)
def install_plugin():
sqlalchemy.objectstore = objectstore
- global_extensions.append(objectstore.mapper_extension)
+ global_extensions.append(objectstore.context.mapper_extension)
engine.default_strategy = 'threadlocal'
sqlalchemy.assign_mapper = assign_mapper
def uninstall_plugin():
engine.default_strategy = 'plain'
- global_extensions.remove(objectstore.mapper_extension)
+ global_extensions.remove(objectstore.context.mapper_extension)
install_plugin()