Sync from SUSE:SLFO:Main python-furl revision 058ba4f3413aec028e3caf3bc0a019fe
This commit is contained in:
parent
5835b82fbe
commit
7943fe2133
@ -9,10 +9,10 @@ Subject: [PATCH] Use ipaddress to detect valid and invalid IPs
|
|||||||
tests/test_furl.py | 21 +++++++++++----------
|
tests/test_furl.py | 21 +++++++++++----------
|
||||||
3 files changed, 50 insertions(+), 19 deletions(-)
|
3 files changed, 50 insertions(+), 19 deletions(-)
|
||||||
|
|
||||||
diff --git a/furl/furl.py b/furl/furl.py
|
Index: furl-2.1.3/furl/furl.py
|
||||||
index cd6d710..451767f 100644
|
===================================================================
|
||||||
--- a/furl/furl.py
|
--- furl-2.1.3.orig/furl/furl.py
|
||||||
+++ b/furl/furl.py
|
+++ furl-2.1.3/furl/furl.py
|
||||||
@@ -12,6 +12,7 @@
|
@@ -12,6 +12,7 @@
|
||||||
|
|
||||||
import re
|
import re
|
||||||
@ -59,7 +59,7 @@ index cd6d710..451767f 100644
|
|||||||
def get_scheme(url):
|
def get_scheme(url):
|
||||||
if url.startswith(':'):
|
if url.startswith(':'):
|
||||||
return ''
|
return ''
|
||||||
@@ -1434,15 +1466,12 @@ def host(self, host):
|
@@ -1434,15 +1466,12 @@ class furl(URLPathCompositionInterface,
|
||||||
"""
|
"""
|
||||||
Raises: ValueError on invalid host or malformed IPv6 address.
|
Raises: ValueError on invalid host or malformed IPv6 address.
|
||||||
"""
|
"""
|
||||||
@ -81,11 +81,11 @@ index cd6d710..451767f 100644
|
|||||||
errmsg = (
|
errmsg = (
|
||||||
"Invalid host '%s'. Host strings must have at least one "
|
"Invalid host '%s'. Host strings must have at least one "
|
||||||
"non-period character, can't contain any of '%s', and can't "
|
"non-period character, can't contain any of '%s', and can't "
|
||||||
diff --git a/setup.py b/setup.py
|
Index: furl-2.1.3/setup.py
|
||||||
index 8322619..887ca2e 100644
|
===================================================================
|
||||||
--- a/setup.py
|
--- furl-2.1.3.orig/setup.py
|
||||||
+++ b/setup.py
|
+++ furl-2.1.3/setup.py
|
||||||
@@ -114,6 +114,7 @@ def run_tests(self):
|
@@ -109,6 +109,7 @@ setup(
|
||||||
install_requires=[
|
install_requires=[
|
||||||
'six>=1.8.0',
|
'six>=1.8.0',
|
||||||
'orderedmultidict>=1.0.1',
|
'orderedmultidict>=1.0.1',
|
||||||
@ -93,11 +93,11 @@ index 8322619..887ca2e 100644
|
|||||||
],
|
],
|
||||||
cmdclass={
|
cmdclass={
|
||||||
'test': RunTests,
|
'test': RunTests,
|
||||||
diff --git a/tests/test_furl.py b/tests/test_furl.py
|
Index: furl-2.1.3/tests/test_furl.py
|
||||||
index bc268c8..5666be7 100644
|
===================================================================
|
||||||
--- a/tests/test_furl.py
|
--- furl-2.1.3.orig/tests/test_furl.py
|
||||||
+++ b/tests/test_furl.py
|
+++ furl-2.1.3/tests/test_furl.py
|
||||||
@@ -1655,10 +1655,10 @@ def test_hosts(self):
|
@@ -1666,10 +1666,10 @@ class TestFurl(unittest.TestCase):
|
||||||
# addresses.
|
# addresses.
|
||||||
f = furl.furl('http://1.2.3.4.5.6/')
|
f = furl.furl('http://1.2.3.4.5.6/')
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ index bc268c8..5666be7 100644
|
|||||||
|
|
||||||
# Malformed IPv6 should raise an exception because urlparse.urlsplit()
|
# Malformed IPv6 should raise an exception because urlparse.urlsplit()
|
||||||
# raises an exception on malformed IPv6 addresses.
|
# raises an exception on malformed IPv6 addresses.
|
||||||
@@ -1684,12 +1684,17 @@ def test_netloc(self):
|
@@ -1695,12 +1695,17 @@ class TestFurl(unittest.TestCase):
|
||||||
assert f.host == '1.2.3.4.5.6'
|
assert f.host == '1.2.3.4.5.6'
|
||||||
assert f.port == 999
|
assert f.port == 999
|
||||||
|
|
||||||
@ -132,7 +132,7 @@ index bc268c8..5666be7 100644
|
|||||||
# Malformed IPv6 should raise an exception because
|
# Malformed IPv6 should raise an exception because
|
||||||
# urlparse.urlsplit() raises an exception
|
# urlparse.urlsplit() raises an exception
|
||||||
with self.assertRaises(ValueError):
|
with self.assertRaises(ValueError):
|
||||||
@@ -1703,10 +1708,6 @@ def test_netloc(self):
|
@@ -1714,10 +1719,6 @@ class TestFurl(unittest.TestCase):
|
||||||
with self.assertRaises(ValueError):
|
with self.assertRaises(ValueError):
|
||||||
f.netloc = 'pump2pump.org:777777777777'
|
f.netloc = 'pump2pump.org:777777777777'
|
||||||
|
|
||||||
|
15
fix-test_odd_urls.patch
Normal file
15
fix-test_odd_urls.patch
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
tests/test_furl.py | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/tests/test_furl.py
|
||||||
|
+++ b/tests/test_furl.py
|
||||||
|
@@ -1637,7 +1637,7 @@ class TestFurl(unittest.TestCase):
|
||||||
|
# of a netloc, even if the netloc is empty.
|
||||||
|
f = furl.furl('////path')
|
||||||
|
assert f.netloc == '' and str(f.path) == '//path'
|
||||||
|
- assert f.url == '////path'
|
||||||
|
+ assert f.url in ('//////path', '////path')
|
||||||
|
|
||||||
|
# TODO(grun): Test more odd URLs.
|
||||||
|
|
22
netloc-tests.patch
Normal file
22
netloc-tests.patch
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
Index: furl-2.1.3/tests/test_furl.py
|
||||||
|
===================================================================
|
||||||
|
--- furl-2.1.3.orig/tests/test_furl.py
|
||||||
|
+++ furl-2.1.3/tests/test_furl.py
|
||||||
|
@@ -1635,11 +1635,12 @@ class TestFurl(unittest.TestCase):
|
||||||
|
f.port = None
|
||||||
|
assert f.url == '' and f.netloc is None
|
||||||
|
|
||||||
|
- # urlparse.urlsplit() treats the first two '//' as the beginning
|
||||||
|
- # of a netloc, even if the netloc is empty.
|
||||||
|
- f = furl.furl('////path')
|
||||||
|
- assert f.netloc == '' and str(f.path) == '//path'
|
||||||
|
- assert f.url == '////path'
|
||||||
|
+ if sys.version_info < (3, 12):
|
||||||
|
+ # urlparse.urlsplit() treats the first two '//' as the beginning
|
||||||
|
+ # of a netloc, even if the netloc is empty.
|
||||||
|
+ f = furl.furl('////path')
|
||||||
|
+ assert f.netloc == '' and str(f.path) == '//path'
|
||||||
|
+ assert f.url == '////path'
|
||||||
|
|
||||||
|
# TODO(grun): Test more odd URLs.
|
||||||
|
|
@ -1,3 +1,17 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Sep 13 18:56:20 UTC 2024 - Matej Cepl <mcepl@cepl.eu>
|
||||||
|
|
||||||
|
- Add remove-six.patch (gh#gruns/furl#175) removing the
|
||||||
|
dependency on six.
|
||||||
|
- Add fix-test_odd_urls.patch fixing the failure of
|
||||||
|
tests/test_furl.py::TestFurl::test_odd_urls test with the
|
||||||
|
recent Python interpreters (gh#gruns/furl#176).
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Jul 2 20:29:03 UTC 2024 - Dirk Müller <dmueller@suse.com>
|
||||||
|
|
||||||
|
- add netloc-tests.patch to skip failing test with python 3.12
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Jul 4 22:28:07 UTC 2023 - Matej Cepl <mcepl@suse.com>
|
Tue Jul 4 22:28:07 UTC 2023 - Matej Cepl <mcepl@suse.com>
|
||||||
|
|
||||||
@ -14,7 +28,7 @@ Wed Sep 28 19:47:43 UTC 2022 - Yogalakshmi Arunachalam <yarunachalam@suse.com>
|
|||||||
|
|
||||||
- version update to v2.1.3
|
- version update to v2.1.3
|
||||||
Fixed: Actually drop ';' as a query delimiter. See furl v2.1.2's
|
Fixed: Actually drop ';' as a query delimiter. See furl v2.1.2's
|
||||||
changelog and https://bugs.python.org/issue42967.
|
changelog and https://bugs.python.org/issue42967.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Aug 19 16:28:12 UTC 2022 - Ben Greiner <code@bnavigator.de>
|
Fri Aug 19 16:28:12 UTC 2022 - Ben Greiner <code@bnavigator.de>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package python-furl
|
# spec file for package python-furl
|
||||||
#
|
#
|
||||||
# Copyright (c) 2023 SUSE LLC
|
# Copyright (c) 2024 SUSE LLC
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -29,17 +29,22 @@ Source: https://files.pythonhosted.org/packages/source/f/furl/furl-%{ver
|
|||||||
# PATCH-FIX-UPSTREAM 165-use-ipaddress-library.patch gh#gruns/furl#164 mcepl@suse.com
|
# PATCH-FIX-UPSTREAM 165-use-ipaddress-library.patch gh#gruns/furl#164 mcepl@suse.com
|
||||||
# use ipaddress to parse IP addresses
|
# use ipaddress to parse IP addresses
|
||||||
Patch0: 165-use-ipaddress-library.patch
|
Patch0: 165-use-ipaddress-library.patch
|
||||||
|
Patch1: netloc-tests.patch
|
||||||
|
# PATCH-FEATURE-UPSTREAM remove-six.patch gh#gruns/furl#175 mcepl@suse.com
|
||||||
|
# remove the need of using six
|
||||||
|
Patch2: remove-six.patch
|
||||||
|
# PATCH-FIX-UPSTREAM fix-test_odd_urls.patch gh#gruns/furl#176 mcepl@suse.com
|
||||||
|
# Python currently parses '////path' URL in a different way
|
||||||
|
Patch3: fix-test_odd_urls.patch
|
||||||
BuildRequires: %{python_module pip}
|
BuildRequires: %{python_module pip}
|
||||||
BuildRequires: %{python_module wheel}
|
BuildRequires: %{python_module wheel}
|
||||||
BuildRequires: fdupes
|
BuildRequires: fdupes
|
||||||
BuildRequires: python-rpm-macros
|
BuildRequires: python-rpm-macros
|
||||||
Requires: python-orderedmultidict >= 1.0.1
|
Requires: python-orderedmultidict >= 1.0.1
|
||||||
Requires: python-six >= 1.8.0
|
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
# SECTION test requirements
|
# SECTION test requirements
|
||||||
BuildRequires: %{python_module orderedmultidict >= 1.0.1}
|
BuildRequires: %{python_module orderedmultidict >= 1.0.1}
|
||||||
BuildRequires: %{python_module pytest}
|
BuildRequires: %{python_module pytest}
|
||||||
BuildRequires: %{python_module six >= 1.8.0}
|
|
||||||
# /SECTION
|
# /SECTION
|
||||||
%python_subpackages
|
%python_subpackages
|
||||||
|
|
||||||
|
210
remove-six.patch
Normal file
210
remove-six.patch
Normal file
@ -0,0 +1,210 @@
|
|||||||
|
---
|
||||||
|
furl.egg-info/requires.txt | 1 -
|
||||||
|
furl/furl.py | 34 ++++++++++++++--------------------
|
||||||
|
setup.py | 2 --
|
||||||
|
tests/test_furl.py | 7 ++-----
|
||||||
|
tests/test_omdict1D.py | 7 +++----
|
||||||
|
5 files changed, 19 insertions(+), 32 deletions(-)
|
||||||
|
|
||||||
|
--- a/furl.egg-info/requires.txt
|
||||||
|
+++ b/furl.egg-info/requires.txt
|
||||||
|
@@ -1,2 +1 @@
|
||||||
|
-six>=1.8.0
|
||||||
|
orderedmultidict>=1.0.1
|
||||||
|
--- a/furl/furl.py
|
||||||
|
+++ b/furl/furl.py
|
||||||
|
@@ -17,9 +17,8 @@ import warnings
|
||||||
|
from copy import deepcopy
|
||||||
|
from posixpath import normpath
|
||||||
|
|
||||||
|
-import six
|
||||||
|
-from six.moves import urllib
|
||||||
|
-from six.moves.urllib.parse import quote, unquote
|
||||||
|
+import urllib
|
||||||
|
+from urllib.parse import quote, unquote
|
||||||
|
try:
|
||||||
|
from icecream import ic
|
||||||
|
except ImportError: # Graceful fallback if IceCream isn't installed.
|
||||||
|
@@ -138,7 +137,7 @@ def is_valid_port(port):
|
||||||
|
|
||||||
|
def static_vars(**kwargs):
|
||||||
|
def decorator(func):
|
||||||
|
- for key, value in six.iteritems(kwargs):
|
||||||
|
+ for key, value in kwargs.items():
|
||||||
|
setattr(func, key, value)
|
||||||
|
return func
|
||||||
|
return decorator
|
||||||
|
@@ -243,7 +242,7 @@ def is_valid_host(hostname):
|
||||||
|
|
||||||
|
|
||||||
|
def is_valid_ipv4(ip):
|
||||||
|
- if isinstance(ip, six.binary_type):
|
||||||
|
+ if isinstance(ip, bytes):
|
||||||
|
ip = ip.decode()
|
||||||
|
|
||||||
|
try:
|
||||||
|
@@ -254,7 +253,7 @@ def is_valid_ipv4(ip):
|
||||||
|
|
||||||
|
|
||||||
|
def is_valid_ipv6(ip):
|
||||||
|
- if isinstance(ip, six.binary_type):
|
||||||
|
+ if isinstance(ip, bytes):
|
||||||
|
ip = ip.decode()
|
||||||
|
|
||||||
|
# ipaddress handle IPs without brackets
|
||||||
|
@@ -733,8 +732,7 @@ class Path(object):
|
||||||
|
return '/'.join(segments)
|
||||||
|
|
||||||
|
|
||||||
|
-@six.add_metaclass(abc.ABCMeta)
|
||||||
|
-class PathCompositionInterface(object):
|
||||||
|
+class PathCompositionInterface(object, metaclass=abc.ABCMeta):
|
||||||
|
|
||||||
|
"""
|
||||||
|
Abstract class interface for a parent class that contains a Path.
|
||||||
|
@@ -784,8 +782,7 @@ class PathCompositionInterface(object):
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
-@six.add_metaclass(abc.ABCMeta)
|
||||||
|
-class URLPathCompositionInterface(PathCompositionInterface):
|
||||||
|
+class URLPathCompositionInterface(PathCompositionInterface, metaclass=abc.ABCMeta):
|
||||||
|
|
||||||
|
"""
|
||||||
|
Abstract class interface for a parent class that contains a URL
|
||||||
|
@@ -812,8 +809,7 @@ class URLPathCompositionInterface(PathCo
|
||||||
|
return bool(path) and self.netloc
|
||||||
|
|
||||||
|
|
||||||
|
-@six.add_metaclass(abc.ABCMeta)
|
||||||
|
-class FragmentPathCompositionInterface(PathCompositionInterface):
|
||||||
|
+class FragmentPathCompositionInterface(PathCompositionInterface, metaclass=abc.ABCMeta):
|
||||||
|
|
||||||
|
"""
|
||||||
|
Abstract class interface for a parent class that contains a Fragment
|
||||||
|
@@ -1125,7 +1121,7 @@ class Query(object):
|
||||||
|
elif callable_attr(items, 'iteritems'):
|
||||||
|
items = list(items.iteritems())
|
||||||
|
# Encoded query string. e.g. 'a=1&b=2&c=3'
|
||||||
|
- elif isinstance(items, six.string_types):
|
||||||
|
+ elif isinstance(items, str):
|
||||||
|
items = self._extract_items_from_querystr(items)
|
||||||
|
# Default to list of key:value items interface. e.g. [('a','1'),
|
||||||
|
# ('b','2')]
|
||||||
|
@@ -1141,7 +1137,7 @@ class Query(object):
|
||||||
|
pairs = [item.split('=', 1) for item in pairstrs]
|
||||||
|
pairs = [(p[0], lget(p, 1, '')) for p in pairs] # Pad with value ''.
|
||||||
|
|
||||||
|
- for pairstr, (key, value) in six.moves.zip(pairstrs, pairs):
|
||||||
|
+ for pairstr, (key, value) in zip(pairstrs, pairs):
|
||||||
|
valid_key = is_valid_encoded_query_key(key)
|
||||||
|
valid_value = is_valid_encoded_query_value(value)
|
||||||
|
if self.strict and (not valid_key or not valid_value):
|
||||||
|
@@ -1163,8 +1159,7 @@ class Query(object):
|
||||||
|
return items
|
||||||
|
|
||||||
|
|
||||||
|
-@six.add_metaclass(abc.ABCMeta)
|
||||||
|
-class QueryCompositionInterface(object):
|
||||||
|
+class QueryCompositionInterface(object, metaclass=abc.ABCMeta):
|
||||||
|
|
||||||
|
"""
|
||||||
|
Abstract class interface for a parent class that contains a Query.
|
||||||
|
@@ -1331,8 +1326,7 @@ class Fragment(FragmentPathCompositionIn
|
||||||
|
return "%s('%s')" % (self.__class__.__name__, str(self))
|
||||||
|
|
||||||
|
|
||||||
|
-@six.add_metaclass(abc.ABCMeta)
|
||||||
|
-class FragmentCompositionInterface(object):
|
||||||
|
+class FragmentCompositionInterface(object, metaclass=abc.ABCMeta):
|
||||||
|
|
||||||
|
"""
|
||||||
|
Abstract class interface for a parent class that contains a
|
||||||
|
@@ -1430,7 +1424,7 @@ class furl(URLPathCompositionInterface,
|
||||||
|
|
||||||
|
if url is None:
|
||||||
|
url = ''
|
||||||
|
- if not isinstance(url, six.string_types):
|
||||||
|
+ if not isinstance(url, str):
|
||||||
|
url = str(url)
|
||||||
|
|
||||||
|
# urlsplit() raises a ValueError on malformed IPv6 addresses in
|
||||||
|
@@ -1874,7 +1868,7 @@ class furl(URLPathCompositionInterface,
|
||||||
|
|
||||||
|
def join(self, *urls):
|
||||||
|
for url in urls:
|
||||||
|
- if not isinstance(url, six.string_types):
|
||||||
|
+ if not isinstance(url, str):
|
||||||
|
url = str(url)
|
||||||
|
newurl = urljoin(self.url, url)
|
||||||
|
self.load(newurl)
|
||||||
|
--- a/setup.py
|
||||||
|
+++ b/setup.py
|
||||||
|
@@ -104,10 +104,8 @@ setup(
|
||||||
|
],
|
||||||
|
tests_require=[
|
||||||
|
'flake8',
|
||||||
|
- 'six>=1.8.0',
|
||||||
|
],
|
||||||
|
install_requires=[
|
||||||
|
- 'six>=1.8.0',
|
||||||
|
'orderedmultidict>=1.0.1',
|
||||||
|
'ipaddress>=1.0.23; python_version < "3.3"',
|
||||||
|
],
|
||||||
|
--- a/tests/test_furl.py
|
||||||
|
+++ b/tests/test_furl.py
|
||||||
|
@@ -16,9 +16,7 @@ import warnings
|
||||||
|
from abc import ABCMeta, abstractmethod
|
||||||
|
import sys
|
||||||
|
|
||||||
|
-import six
|
||||||
|
-from six.moves import zip
|
||||||
|
-from six.moves.urllib.parse import (
|
||||||
|
+from urllib.parse import (
|
||||||
|
quote, quote_plus, parse_qsl, urlsplit, SplitResult)
|
||||||
|
|
||||||
|
import furl
|
||||||
|
@@ -35,8 +33,7 @@ import unittest
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
-@six.add_metaclass(ABCMeta)
|
||||||
|
-class itemcontainer(object):
|
||||||
|
+class itemcontainer(object, metaclass=ABCMeta):
|
||||||
|
|
||||||
|
"""
|
||||||
|
Utility list subclasses to expose allitems() and iterallitems()
|
||||||
|
--- a/tests/test_omdict1D.py
|
||||||
|
+++ b/tests/test_omdict1D.py
|
||||||
|
@@ -13,7 +13,6 @@
|
||||||
|
import unittest
|
||||||
|
from itertools import chain, product, permutations
|
||||||
|
|
||||||
|
-import six
|
||||||
|
from furl.omdict1D import omdict1D
|
||||||
|
from orderedmultidict import omdict
|
||||||
|
|
||||||
|
@@ -48,12 +47,12 @@ class TestOmdict1D(unittest.TestCase):
|
||||||
|
data.update(update)
|
||||||
|
omd1.update(update)
|
||||||
|
omd2.updateall(update)
|
||||||
|
- for key in six.iterkeys(omd1):
|
||||||
|
+ for key in omd1.keys():
|
||||||
|
if isinstance(data[key], list):
|
||||||
|
assert omd1[key] == data[key][-1]
|
||||||
|
else:
|
||||||
|
assert omd1[key] == data[key]
|
||||||
|
- for key in six.iterkeys(omd2):
|
||||||
|
+ for key in omd2.keys():
|
||||||
|
data_values_unpacked = []
|
||||||
|
for value in data.getlist(key):
|
||||||
|
if isinstance(value, list):
|
||||||
|
@@ -149,7 +148,7 @@ class TestOmdict1D(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_setitem(self):
|
||||||
|
omd = omdict1D()
|
||||||
|
- for value, valuelist in six.moves.zip(self.values, self.valuelists):
|
||||||
|
+ for value, valuelist in zip(self.values, self.valuelists):
|
||||||
|
if valuelist:
|
||||||
|
omd[self.key] = valuelist
|
||||||
|
assert omd[self.key] == omd.get(self.key) == valuelist[0]
|
Loading…
x
Reference in New Issue
Block a user