You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bloodhound.apache.org by ju...@apache.org on 2013/02/15 10:42:04 UTC

svn commit: r1446485 - in /incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct: dbcursor.py env.py

Author: jure
Date: Fri Feb 15 09:42:04 2013
New Revision: 1446485

URL: http://svn.apache.org/r1446485
Log:
#288, get_db_cnx and get_read_db properly implemented for ProductEnvironment


Modified:
    incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/dbcursor.py
    incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/env.py

Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/dbcursor.py
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/dbcursor.py?rev=1446485&r1=1446484&r2=1446485&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/dbcursor.py (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/dbcursor.py Fri Feb 15 09:42:04 2013
@@ -23,7 +23,7 @@ import sqlparse
 import sqlparse.tokens as Tokens
 import sqlparse.sql as Types
 
-__all__ = ['BloodhoundIterableCursor']
+__all__ = ['BloodhoundIterableCursor', 'BloodhoundConnectionWrapper', 'ProductEnvContextManager']
 
 SKIP_TABLES = ['system', 'auth_cookie',
                'session', 'session_attribute',
@@ -110,8 +110,27 @@ class BloodhoundConnectionWrapper(object
         return self.connection.executemany(query, params=params)
 
     def cursor(self):
+        return BloodhoundCursorWrapper(self.connection.cursor(), self.env)
+
+class BloodhoundCursorWrapper(object):
+
+    def __init__(self, cursor, env):
+        self.cursor = cursor
+        self.env = env
+
+    def __getattr__(self, name):
+        return getattr(self.cursor, name)
+
+    def __iter__(self):
+        return self.cursor.__iter__()
+
+    def execute(self, sql, args=None):
+        BloodhoundIterableCursor.set_env(self.env)
+        return self.cursor.execute(sql, args=args)
+
+    def executemany(self, sql, args=None):
         BloodhoundIterableCursor.set_env(self.env)
-        return self.connection.cursor()
+        return self.cursor.executemany(sql, args=args)
 
 class ProductEnvContextManager(object):
     """Wrap an underlying database context manager so as to keep track

Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/env.py
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/env.py?rev=1446485&r1=1446484&r2=1446485&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/env.py (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/env.py Fri Feb 15 09:42:04 2013
@@ -24,7 +24,7 @@ from sqlite3 import OperationalError
 
 from trac.config import BoolOption, ConfigSection, Option
 from trac.core import Component, ComponentManager, implements
-from trac.db.api import TransactionContextManager, QueryContextManager
+from trac.db.api import TransactionContextManager, QueryContextManager, DatabaseManager
 from trac.util import get_pkginfo, lazy
 from trac.util.compat import sha1
 from trac.versioncontrol import RepositoryManager
@@ -32,7 +32,7 @@ from trac.web.href import Href
 
 from multiproduct.api import MultiProductSystem
 from multiproduct.config import Configuration
-from multiproduct.dbcursor import ProductEnvContextManager
+from multiproduct.dbcursor import ProductEnvContextManager, BloodhoundConnectionWrapper
 from multiproduct.model import Product
 
 import trac.env
@@ -414,8 +414,7 @@ class ProductEnvironment(Component, Comp
            with env.db_query as db:
                ...
         """
-        # share connection pool with global environment
-        return self.parent.get_db_cnx()
+        return BloodhoundConnectionWrapper(DatabaseManager(self).get_connection(), self)
 
     @lazy
     def db_exc(self):
@@ -445,7 +444,7 @@ class ProductEnvironment(Component, Comp
 
         See `trac.db.api.get_read_db` for detailed documentation.
         """
-        raise NotImplementedError('Deprecated method')
+        return BloodhoundConnectionWrapper(DatabaseManager(self).get_connection(readonly=True), self)
 
     @property
     def db_query(self):