]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Hide password in URL and Engine __repr__
authorGunnlaugur Þór Briem <gunnlaugur@gmail.com>
Fri, 6 Sep 2013 17:55:19 +0000 (17:55 +0000)
committerGunnlaugur Þór Briem <gunnlaugur@gmail.com>
Fri, 6 Sep 2013 17:57:04 +0000 (17:57 +0000)
Fixes #2821

lib/sqlalchemy/engine/base.py
lib/sqlalchemy/engine/url.py
test/engine/test_parseconnect.py

index 9a10e829e2a1e91010699222d90774e58264b54b..ca99250ac506dc694d3d718f3e040e79b9c38589 100644 (file)
@@ -1428,7 +1428,7 @@ class Engine(Connectable, log.Identified):
     echo = log.echo_property()
 
     def __repr__(self):
-        return 'Engine(%s)' % str(self.url)
+        return 'Engine(%r)' % self.url
 
     def dispose(self):
         """Dispose of the connection pool used by this :class:`.Engine`.
index 717eb54e16be9e2c828aefd0acca725e6b5cf2cb..1f192ae7fea6a645b9f77703930e7a83d24a5893 100644 (file)
@@ -62,12 +62,13 @@ class URL(object):
         self.database = database
         self.query = query or {}
 
-    def __str__(self):
+    def __to_string__(self, hide_password=True):
         s = self.drivername + "://"
         if self.username is not None:
             s += self.username
             if self.password is not None:
-                s += ':' + util.quote_plus(self.password)
+                s += ':' + ('***' if hide_password
+                            else util.quote_plus(self.password))
             s += "@"
         if self.host is not None:
             s += self.host
@@ -81,6 +82,12 @@ class URL(object):
             s += '?' + "&".join("%s=%s" % (k, self.query[k]) for k in keys)
         return s
 
+    def __str__(self):
+        return self.__to_string__(hide_password=False)
+
+    def __repr__(self):
+        return self.__to_string__()
+
     def __hash__(self):
         return hash(str(self))
 
index 106bd07824d2b812db5c9e8c5cc047c645bfd1f5..f56c844f016505664ad81079ffa831301c6702c3 100644 (file)
@@ -277,6 +277,10 @@ pool_timeout=10
         assert e.url.drivername == e2.url.drivername == 'mysql'
         assert e.url.username == e2.url.username == 'scott'
         assert e2.url is u
+        assert str(u) == 'mysql://scott:tiger@localhost/test'
+        assert repr(u) == 'mysql://scott:***@localhost/test'
+        assert repr(e) == 'Engine(mysql://scott:***@localhost/test)'
+        assert repr(e2) == 'Engine(mysql://scott:***@localhost/test)'
 
     def test_poolargs(self):
         """test that connection pool args make it thru"""