From 17ba9616114c968ff2df05572ae818306562e8a0191e11636c7a2e12d314d03f Mon Sep 17 00:00:00 2001 From: Matej Cepl Date: Tue, 23 Feb 2021 18:38:02 +0000 Subject: [PATCH] Accepting request 874678 from home:mcepl:branches:python36 - Add tests_overcome_bpo42967.patch to over effects of bpo#42967, which forbade mixing amps and semicolons in query strings as separators (gh#sqlalchemy/sqlalchemy#5969). OBS-URL: https://build.opensuse.org/request/show/874678 OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-SQLAlchemy?expand=0&rev=186 --- python-SQLAlchemy.changes | 7 ++++ python-SQLAlchemy.spec | 6 +++- tests_overcome_bpo42967.patch | 65 +++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 tests_overcome_bpo42967.patch diff --git a/python-SQLAlchemy.changes b/python-SQLAlchemy.changes index bceaf25..3724728 100644 --- a/python-SQLAlchemy.changes +++ b/python-SQLAlchemy.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Tue Feb 23 17:27:18 UTC 2021 - Matej Cepl + +- Add tests_overcome_bpo42967.patch to over effects of bpo#42967, + which forbade mixing amps and semicolons in query strings as + separators (gh#sqlalchemy/sqlalchemy#5969). + ------------------------------------------------------------------- Tue Feb 23 17:07:02 UTC 2021 - Dirk Müller diff --git a/python-SQLAlchemy.spec b/python-SQLAlchemy.spec index 25f1eae..c3dee6c 100644 --- a/python-SQLAlchemy.spec +++ b/python-SQLAlchemy.spec @@ -26,6 +26,10 @@ License: MIT URL: https://www.sqlalchemy.org Source: https://files.pythonhosted.org/packages/source/S/SQLAlchemy/SQLAlchemy-%{version}.tar.gz Source1: SQLAlchemy.keyring +# PATCH-FIX-UPSTREAM tests_overcome_bpo42967.patch gh#sqlalchemy/sqlalchemy#5969 mcepl@suse.com +# over effects of bpo#42967, which forbade mixing amps and +# semicolons in query strings as separators. +Patch0: tests_overcome_bpo42967.patch # devel is needed for optional C extensions cprocessors.so, cresultproxy.so and cutils.so BuildRequires: %{python_module devel} BuildRequires: %{python_module setuptools} @@ -65,7 +69,7 @@ This package contains HTML documentation, including tutorials and API reference for python-SQLAlchemy. %prep -%setup -q -n SQLAlchemy-%{version} +%autosetup -p1 -n SQLAlchemy-%{version} rm -rf doc/build # Remove unnecessary scripts for building documentation sed -i 's/\r$//' examples/dynamic_dict/dynamic_dict.py diff --git a/tests_overcome_bpo42967.patch b/tests_overcome_bpo42967.patch new file mode 100644 index 0000000..0bc47e2 --- /dev/null +++ b/tests_overcome_bpo42967.patch @@ -0,0 +1,65 @@ +--- + 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[\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], {})