66 lines
2.2 KiB
Diff
66 lines
2.2 KiB
Diff
|
|
---
|
||
|
|
lib/sqlalchemy/engine/url.py | 14 ++++++++++----
|
||
|
|
test/dialect/mssql/test_engine.py | 3 ++-
|
||
|
|
2 files changed, 12 insertions(+), 5 deletions(-)
|
||
|
|
|
||
|
|
--- a/lib/sqlalchemy/engine/url.py
|
||
|
|
+++ b/lib/sqlalchemy/engine/url.py
|
||
|
|
@@ -14,6 +14,7 @@ argument; alternatively, the URL is a pu
|
||
|
|
be used directly and is also accepted directly by ``create_engine()``.
|
||
|
|
"""
|
||
|
|
|
||
|
|
+import inspect
|
||
|
|
import re
|
||
|
|
|
||
|
|
from .interfaces import Dialect
|
||
|
|
@@ -218,7 +219,7 @@ class URL(object):
|
||
|
|
return translated
|
||
|
|
|
||
|
|
|
||
|
|
-def make_url(name_or_url):
|
||
|
|
+def make_url(name_or_url, separator='&'):
|
||
|
|
"""Given a string or unicode instance, produce a new URL instance.
|
||
|
|
|
||
|
|
The given string is parsed according to the RFC 1738 spec. If an
|
||
|
|
@@ -226,12 +227,12 @@ def make_url(name_or_url):
|
||
|
|
"""
|
||
|
|
|
||
|
|
if isinstance(name_or_url, util.string_types):
|
||
|
|
- return _parse_rfc1738_args(name_or_url)
|
||
|
|
+ return _parse_rfc1738_args(name_or_url, separator)
|
||
|
|
else:
|
||
|
|
return name_or_url
|
||
|
|
|
||
|
|
|
||
|
|
-def _parse_rfc1738_args(name):
|
||
|
|
+def _parse_rfc1738_args(name, qs_sep):
|
||
|
|
pattern = re.compile(
|
||
|
|
r"""
|
||
|
|
(?P<name>[\w\+]+)://
|
||
|
|
@@ -261,7 +262,12 @@ def _parse_rfc1738_args(name):
|
||
|
|
if len(tokens) > 1:
|
||
|
|
query = {}
|
||
|
|
|
||
|
|
- for key, value in util.parse_qsl(tokens[1]):
|
||
|
|
+ if 'separator' in inspect.signature(util.parse_qsl).parameters:
|
||
|
|
+ qs_dict = util.parse_qsl(tokens[1], separator=qs_sep)
|
||
|
|
+ else:
|
||
|
|
+ qs_dict = util.parse_qsl(tokens[1])
|
||
|
|
+
|
||
|
|
+ for key, value in qs_dict:
|
||
|
|
if util.py2k:
|
||
|
|
key = key.encode("ascii")
|
||
|
|
if key in query:
|
||
|
|
--- a/test/dialect/mssql/test_engine.py
|
||
|
|
+++ b/test/dialect/mssql/test_engine.py
|
||
|
|
@@ -164,7 +164,8 @@ class ParseConnectTest(fixtures.TestBase
|
||
|
|
u = url.make_url(
|
||
|
|
"mssql+pyodbc://@server_name/db_name?"
|
||
|
|
"driver=ODBC+Driver+17+for+SQL+Server;"
|
||
|
|
- "authentication=ActiveDirectoryIntegrated"
|
||
|
|
+ "authentication=ActiveDirectoryIntegrated",
|
||
|
|
+ separator=';'
|
||
|
|
)
|
||
|
|
connection = dialect.create_connect_args(u)
|
||
|
|
eq_(connection[1], {})
|