summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2017-01-16 15:57:25 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2017-01-16 15:57:25 -0500
commit751887ad6ed6bd25751c78c383c84a8a70fc8f40 (patch)
treeafdd5b495c596d7cbef2ec20616ff4b761833913
parent2e610cf1554ffe0b15cd26b212b105219e5cb6b9 (diff)
parentd8198c2d8779d52a94dc53b0a1582279d6d58fef (diff)
downloadsqlalchemy-751887ad6ed6bd25751c78c383c84a8a70fc8f40.tar.gz
Merge branch 'master' into rel_1_1
-rw-r--r--doc/build/changelog/changelog_11.rst9
-rw-r--r--lib/sqlalchemy/engine/threadlocal.py2
-rw-r--r--lib/sqlalchemy/sql/schema.py4
-rw-r--r--test/engine/test_reflection.py12
4 files changed, 19 insertions, 8 deletions
diff --git a/doc/build/changelog/changelog_11.rst b/doc/build/changelog/changelog_11.rst
index fc4877e6c..ead292570 100644
--- a/doc/build/changelog/changelog_11.rst
+++ b/doc/build/changelog/changelog_11.rst
@@ -130,6 +130,15 @@
be inserted into the query in the case that the :class:`.Bundle`
construct were used as the selection criteria.
+ .. change:: repr_for_url_reflect
+ :tags: bug, sql
+
+ The engine URL embedded in the exception for "could not reflect"
+ in :meth:`.MetaData.reflect` now conceals the password; also
+ the ``__repr__`` for :class:`.TLEngine` now acts like that of
+ :class:`.Engine`, concealing the URL password. Pull request courtesy
+ Valery Yundin.
+
.. change:: pg_timestamp_zero_prec
:tags: bug, postgresql
diff --git a/lib/sqlalchemy/engine/threadlocal.py b/lib/sqlalchemy/engine/threadlocal.py
index a22b59c1d..ee31764f3 100644
--- a/lib/sqlalchemy/engine/threadlocal.py
+++ b/lib/sqlalchemy/engine/threadlocal.py
@@ -135,4 +135,4 @@ class TLEngine(base.Engine):
self._connections.trans = []
def __repr__(self):
- return 'TLEngine(%s)' % str(self.url)
+ return 'TLEngine(%r)' % self.url
diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py
index 793750f1c..9bb0eee43 100644
--- a/lib/sqlalchemy/sql/schema.py
+++ b/lib/sqlalchemy/sql/schema.py
@@ -3811,8 +3811,8 @@ class MetaData(SchemaItem):
s = schema and (" schema '%s'" % schema) or ''
raise exc.InvalidRequestError(
'Could not reflect: requested table(s) not available '
- 'in %s%s: (%s)' %
- (bind.engine.url, s, ', '.join(missing)))
+ 'in %r%s: (%s)' %
+ (bind.engine, s, ', '.join(missing)))
load = [name for name in only if extend_existing or
name not in current]
diff --git a/test/engine/test_reflection.py b/test/engine/test_reflection.py
index 869fd63e5..0bc5b111e 100644
--- a/test/engine/test_reflection.py
+++ b/test/engine/test_reflection.py
@@ -932,11 +932,13 @@ class ReflectionTest(fixtures.TestBase, ComparesTables):
self.assert_(set(m3.tables.keys()) == set(['rt_c']))
m4 = MetaData(testing.db)
- try:
- m4.reflect(only=['rt_a', 'rt_f'])
- self.assert_(False)
- except sa.exc.InvalidRequestError as e:
- self.assert_(e.args[0].endswith('(rt_f)'))
+
+ assert_raises_message(
+ sa.exc.InvalidRequestError,
+ r"Could not reflect: requested table\(s\) not available in "
+ r"Engine\(.*?\): \(rt_f\)",
+ m4.reflect, only=['rt_a', 'rt_f']
+ )
m5 = MetaData(testing.db)
m5.reflect(only=[])