summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/build/changelog/changelog_09.rst8
-rw-r--r--lib/sqlalchemy/orm/query.py4
-rw-r--r--test/orm/test_joins.py14
3 files changed, 24 insertions, 2 deletions
diff --git a/doc/build/changelog/changelog_09.rst b/doc/build/changelog/changelog_09.rst
index a145ba259..6836a15ab 100644
--- a/doc/build/changelog/changelog_09.rst
+++ b/doc/build/changelog/changelog_09.rst
@@ -15,6 +15,14 @@
:version: 0.9.9
.. change::
+ :tags: bug, orm
+ :pullreq: github:147
+
+ Fixed bug where TypeError raised when :meth:`.Query.join` called
+ with unknown kw arguments would raise its own TypeError due
+ to broken formatting. Pull request courtesy Malthe Borch.
+
+ .. change::
:tags: bug, engine
:tickets: 3302
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py
index 3680f47eb..07f949d8e 100644
--- a/lib/sqlalchemy/orm/query.py
+++ b/lib/sqlalchemy/orm/query.py
@@ -1775,7 +1775,7 @@ class Query(object):
kwargs.pop('isouter', False)
if kwargs:
raise TypeError("unknown arguments: %s" %
- ','.join(kwargs))
+ ', '.join(sorted(kwargs)))
isouter = isouter
return self._join(props,
outerjoin=isouter, create_aliases=aliased,
@@ -1792,7 +1792,7 @@ class Query(object):
kwargs.pop('from_joinpoint', False)
if kwargs:
raise TypeError("unknown arguments: %s" %
- ','.join(kwargs))
+ ', '.join(sorted(kwargs)))
return self._join(props,
outerjoin=True, create_aliases=aliased,
from_joinpoint=from_joinpoint)
diff --git a/test/orm/test_joins.py b/test/orm/test_joins.py
index c519032b3..23d220dcc 100644
--- a/test/orm/test_joins.py
+++ b/test/orm/test_joins.py
@@ -419,6 +419,20 @@ class JoinTest(QueryTest, AssertsCompiledSQL):
"ON addresses.id = orders.address_id"
)
+ def test_invalid_kwarg_join(self):
+ User = self.classes.User
+ sess = create_session()
+ assert_raises_message(
+ TypeError,
+ "unknown arguments: bar, foob",
+ sess.query(User).join, "address", foob="bar", bar="bat"
+ )
+ assert_raises_message(
+ TypeError,
+ "unknown arguments: bar, foob",
+ sess.query(User).outerjoin, "address", foob="bar", bar="bat"
+ )
+
def test_left_is_none(self):
User = self.classes.User
Address = self.classes.Address