--- /dev/null
+.. change::
+ :tags: bug, engine, regression
+ :tickets: 7446
+
+ Fixed regression in the :func:`_engine.make_url` function used to parse URL
+ strings where the query string parsing would go into a recursion overflow
+ if a Python 2 ``u''`` string were used.
return util.EMPTY_DICT
def _assert_value(val):
- if isinstance(val, str):
+ if isinstance(val, compat.string_types):
return val
elif isinstance(val, collections_abc.Sequence):
return tuple(_assert_value(elem) for elem in val)
from sqlalchemy import exc
from sqlalchemy import pool
from sqlalchemy import testing
+from sqlalchemy import util
from sqlalchemy.dialects import plugins
from sqlalchemy.dialects import registry
from sqlalchemy.engine.default import DefaultDialect
eq_(u.query, {"arg1=": "param1", "arg2": "param 2"})
eq_(str(u), test_url)
+ def test_query_string_py2_unicode(self):
+ url_str = u"dialect://user:pass@host/?arg1=param1&arg2=param2"
+ if util.py2k:
+ # just to make sure linters / formatters etc. don't erase the
+ # 'u' above
+ assert isinstance(url_str, unicode) # noqa
+ u = url.make_url(url_str)
+ eq_(u.query, {"arg1": "param1", "arg2": "param2"})
+ eq_(u.database, "")
+ eq_(str(u), "dialect://user:pass@host/?arg1=param1&arg2=param2")
+
def test_comparison(self):
common_url = (
"dbtype://username:password"