summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/mods/threadlocal.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2006-05-25 14:20:23 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2006-05-25 14:20:23 +0000
commitbb79e2e871d0a4585164c1a6ed626d96d0231975 (patch)
tree6d457ba6c36c408b45db24ec3c29e147fe7504ff /lib/sqlalchemy/mods/threadlocal.py
parent4fc3a0648699c2b441251ba4e1d37a9107bd1986 (diff)
downloadsqlalchemy-bb79e2e871d0a4585164c1a6ed626d96d0231975.tar.gz
merged 0.2 branch into trunk; 0.1 now in sqlalchemy/branches/rel_0_1
Diffstat (limited to 'lib/sqlalchemy/mods/threadlocal.py')
-rw-r--r--lib/sqlalchemy/mods/threadlocal.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/lib/sqlalchemy/mods/threadlocal.py b/lib/sqlalchemy/mods/threadlocal.py
new file mode 100644
index 000000000..b67329612
--- /dev/null
+++ b/lib/sqlalchemy/mods/threadlocal.py
@@ -0,0 +1,46 @@
+from sqlalchemy import util, engine, mapper
+from sqlalchemy.ext.sessioncontext import SessionContext
+import sqlalchemy.ext.assignmapper as assignmapper
+from sqlalchemy.orm.mapper import global_extensions
+from sqlalchemy.orm.session import Session
+import sqlalchemy
+import sys, types
+
+"""this plugin installs thread-local behavior at the Engine and Session level.
+
+The default Engine strategy will be "threadlocal", producing TLocalEngine instances for create_engine by default.
+With this engine, connect() method will return the same connection on the same thread, if it is already checked out
+from the pool. this greatly helps functions that call multiple statements to be able to easily use just one connection
+without explicit "close" statements on result handles.
+
+on the Session side, module-level methods will be installed within the objectstore module, such as flush(), delete(), etc.
+which call this method on the thread-local session.
+
+Note: this mod creates a global, thread-local session context named sqlalchemy.objectstore. All mappers created
+while this mod is installed will reference this global context when creating new mapped object instances.
+"""
+
+class Objectstore(SessionContext):
+ def __getattr__(self, key):
+ return getattr(self.current, key)
+ def get_session(self):
+ return self.current
+
+def assign_mapper(class_, *args, **kwargs):
+ assignmapper.assign_mapper(objectstore, class_, *args, **kwargs)
+
+def _mapper_extension():
+ return SessionContext._get_mapper_extension(objectstore)
+
+objectstore = Objectstore(Session)
+def install_plugin():
+ sqlalchemy.objectstore = objectstore
+ global_extensions.append(_mapper_extension)
+ engine.default_strategy = 'threadlocal'
+ sqlalchemy.assign_mapper = assign_mapper
+
+def uninstall_plugin():
+ engine.default_strategy = 'plain'
+ global_extensions.remove(_mapper_extension)
+
+install_plugin()