]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- added 'url' attribute to Engine
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 29 Apr 2007 16:56:11 +0000 (16:56 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 29 Apr 2007 16:56:11 +0000 (16:56 +0000)
- added docstring to 'echo' attribute

CHANGES
lib/sqlalchemy/engine/base.py
lib/sqlalchemy/engine/default.py
lib/sqlalchemy/engine/strategies.py
lib/sqlalchemy/logging.py
test/engine/parseconnect.py

diff --git a/CHANGES b/CHANGES
index 0cde130960c14697f009e1805bd901e6da121b8d..36817c77fbf6d44b98415d11cbc543c29aa2513b 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -20,6 +20,8 @@
       entry points. loading the built-in database dialects works the
       same as always, but if none found will fall back to trying
       pkg_resources to load an external module [ticket:521]
+    - Engine contains a "url" attribute referencing the url.URL object
+      used by create_engine().
 - sql:
     - keys() of result set columns are not lowercased, come back
       exactly as they're expressed in cursor.description.  note this
index 1cea9ffc3549eb8c64575eeeddef9c9cba817847..c2ee0c08d42cc67b2091749ab1efe0c0bd66e6f4 100644 (file)
@@ -676,11 +676,12 @@ class Engine(Connectable):
         self.echo = echo
         self.logger = logging.instance_logger(self)
 
-    name = property(lambda s:sys.modules[s.dialect.__module__].descriptor()['name'])
+    name = property(lambda s:sys.modules[s.dialect.__module__].descriptor()['name'], doc="String name of the [sqlalchemy.engine#Dialect] in use by this ``Engine``.")
     engine = property(lambda s:s)
-    dialect = property(lambda s:s._dialect)
+    dialect = property(lambda s:s._dialect, doc="the [sqlalchemy.engine#Dialect] in use by this engine.")
     echo = logging.echo_property()
-
+    url = property(lambda s:s.connection_provider.url, doc="The [sqlalchemy.engine.url#URL] object representing this ``Engine`` object's datasource.")
+    
     def dispose(self):
         self.connection_provider.dispose()
 
index 92bb9ba72fc3bc36539b9b25bf59a57eb7a10568..ae12a8dd0f454996b19ec9eff41bc3e5590f6d7a 100644 (file)
@@ -12,7 +12,8 @@ from sqlalchemy.engine import base
 """Provide default implementations of the engine interfaces"""
 
 class PoolConnectionProvider(base.ConnectionProvider):
-    def __init__(self, pool):
+    def __init__(self, url, pool):
+        self.url = url
         self._pool = pool
 
     def get_connection(self):
index ed31743d8e1c75b287d03aee7a1307e1a5566c5c..7d85de9addf48c81fdb627e511b87ceaef6bf18a 100644 (file)
@@ -92,7 +92,7 @@ class DefaultEngineStrategy(EngineStrategy):
             else:
                 pool = pool
 
-        provider = self.get_pool_provider(pool)
+        provider = self.get_pool_provider(u, pool)
 
         # create engine.
         engineclass = self.get_engine_cls()
@@ -110,7 +110,7 @@ class DefaultEngineStrategy(EngineStrategy):
     def pool_threadlocal(self):
         raise NotImplementedError()
 
-    def get_pool_provider(self, pool):
+    def get_pool_provider(self, url, pool):
         raise NotImplementedError()
 
     def get_engine_cls(self):
@@ -123,8 +123,8 @@ class PlainEngineStrategy(DefaultEngineStrategy):
     def pool_threadlocal(self):
         return False
 
-    def get_pool_provider(self, pool):
-        return default.PoolConnectionProvider(pool)
+    def get_pool_provider(self, url, pool):
+        return default.PoolConnectionProvider(url, pool)
 
     def get_engine_cls(self):
         return base.Engine
@@ -138,8 +138,8 @@ class ThreadLocalEngineStrategy(DefaultEngineStrategy):
     def pool_threadlocal(self):
         return True
 
-    def get_pool_provider(self, pool):
-        return threadlocal.TLocalConnectionProvider(pool)
+    def get_pool_provider(self, url, pool):
+        return threadlocal.TLocalConnectionProvider(url, pool)
 
     def get_engine_cls(self):
         return threadlocal.TLEngine
index 91326233a6c57ed478cc2e0d34acaed88e806646..665a5cff9cb763b9e336c41bfcdb53b5d1ab8b9f 100644 (file)
@@ -66,10 +66,16 @@ def is_info_enabled(logger):
 
 class echo_property(object):
     level_map={logging.DEBUG : "debug", logging.INFO:True}
+    
+    __doc__ = "when ``True``, enable echoing for this element."
+    
     def __get__(self, instance, owner):
         level = logging.getLogger(_get_instance_name(instance)).getEffectiveLevel()
         return echo_property.level_map.get(level, False)
+        
     def __set__(self, instance, value):
+        if instance is None:
+            return self
         if value:
             default_logging(_get_instance_name(instance))
             logging.getLogger(_get_instance_name(instance)).setLevel(value == 'debug' and logging.DEBUG or logging.INFO)
index 49f71f881709099b1a082a0ce591a92d0754556d..967a20ed5d02b6814d20e0cede79181590454e1e 100644 (file)
@@ -125,7 +125,17 @@ class CreateEngineTest(PersistTest):
             assert False
         except exceptions.DBAPIError:
             assert True
-            
+    
+    def testurlattr(self):
+        """test the url attribute on ``Engine``."""
+        
+        e = create_engine('mysql://scott:tiger@localhost/test', module=MockDBAPI())
+        u = url.make_url('mysql://scott:tiger@localhost/test')
+        e2 = create_engine(u, module=MockDBAPI())
+        assert e.url.drivername == e2.url.drivername == 'mysql'
+        assert e.url.username == e2.url.username == 'scott'
+        assert e2.url is u
+        
     def testpoolargs(self):
         """test that connection pool args make it thru"""
         e = create_engine('postgres://', creator=None, pool_recycle=-1, echo_pool=None, auto_close_cursors=False, disallow_open_cursors=True, module=MockDBAPI())