Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-furl for openSUSE:Factory 
checked in at 2023-07-06 18:27:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-furl (Old)
 and      /work/SRC/openSUSE:Factory/.python-furl.new.23466 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-furl"

Thu Jul  6 18:27:48 2023 rev:10 rq:1096865 version:2.1.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-furl/python-furl.changes  2023-04-28 
16:22:16.481627221 +0200
+++ /work/SRC/openSUSE:Factory/.python-furl.new.23466/python-furl.changes       
2023-07-06 18:27:49.746834939 +0200
@@ -1,0 +2,6 @@
+Tue Jul  4 22:28:07 UTC 2023 - Matej Cepl <mc...@suse.com>
+
+- Add 165-use-ipaddress-library.patch to use standard ipaddress
+  library to parse IP addresses (gh#gruns/furl#164).
+
+-------------------------------------------------------------------

New:
----
  165-use-ipaddress-library.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-furl.spec ++++++
--- /var/tmp/diff_new_pack.IGC1x9/_old  2023-07-06 18:27:51.030842822 +0200
+++ /var/tmp/diff_new_pack.IGC1x9/_new  2023-07-06 18:27:51.038842871 +0200
@@ -16,9 +16,8 @@
 #
 
 
-%{?!python_module:%define python_module() python-%{**} python3-%{**}}
-%define skip_python2 1
 %{?sle15_python_module_pythons}
+%define skip_python2 1
 Name:           python-furl
 Version:        2.1.3
 Release:        0
@@ -27,7 +26,11 @@
 Group:          Development/Languages/Python
 URL:            https://github.com/gruns/furl
 Source:         
https://files.pythonhosted.org/packages/source/f/furl/furl-%{version}.tar.gz
-BuildRequires:  %{python_module setuptools}
+# PATCH-FIX-UPSTREAM 165-use-ipaddress-library.patch gh#gruns/furl#164 
mc...@suse.com
+# use ipaddress to parse IP addresses
+Patch0:         165-use-ipaddress-library.patch
+BuildRequires:  %{python_module pip}
+BuildRequires:  %{python_module wheel}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
 Requires:       python-orderedmultidict >= 1.0.1
@@ -48,10 +51,10 @@
 chmod -x *.md furl.egg-info/*
 
 %build
-%python_build
+%pyproject_wheel
 
 %install
-%python_install
+%pyproject_install
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
 
 %check

++++++ 165-use-ipaddress-library.patch ++++++
>From 38587f3dca7e2f75b04cb0d80e4fc30ea6e139dc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=89loi=20Rivard?= <eloi.riv...@aquilenet.fr>
Date: Sat, 24 Sep 2022 15:40:59 +0200
Subject: [PATCH] Use ipaddress to detect valid and invalid IPs

---
 furl/furl.py       | 47 +++++++++++++++++++++++++++++++++++++---------
 setup.py           |  1 +
 tests/test_furl.py | 21 +++++++++++----------
 3 files changed, 50 insertions(+), 19 deletions(-)

diff --git a/furl/furl.py b/furl/furl.py
index cd6d710..451767f 100644
--- a/furl/furl.py
+++ b/furl/furl.py
@@ -12,6 +12,7 @@
 
 import re
 import abc
+import ipaddress
 import warnings
 from copy import deepcopy
 from posixpath import normpath
@@ -241,6 +242,37 @@ def is_valid_host(hostname):
     return '' not in toks  # Adjacent periods aren't allowed.
 
 
+def is_valid_ipv4(ip):
+    if isinstance(ip, six.binary_type):
+        ip = ip.decode()
+
+    try:
+        ipaddress.IPv4Address(ip)
+        return True
+    except ValueError:
+        return False
+
+
+def is_valid_ipv6(ip):
+    if isinstance(ip, six.binary_type):
+        ip = ip.decode()
+
+    # ipaddress handle IPs without brackets
+    if (
+        callable_attr(ip, 'startswith')
+        and callable_attr(ip, 'endswith')
+        and ip.startswith("[")
+        and ip.endswith("]")
+    ):
+        ip = ip[1:-1]
+
+    try:
+        ipaddress.IPv6Address(ip)
+        return True
+    except ValueError:
+        return False
+
+
 def get_scheme(url):
     if url.startswith(':'):
         return ''
@@ -1434,15 +1466,12 @@ def host(self, host):
         """
         Raises: ValueError on invalid host or malformed IPv6 address.
         """
-        # Invalid IPv6 literal.
-        urllib.parse.urlsplit('http://%s/' % host)  # Raises ValueError.
-
-        # Invalid host string.
-        resembles_ipv6_literal = (
-            host is not None and lget(host, 0) == '[' and ':' in host and
-            lget(host, -1) == ']')
-        if (host is not None and not resembles_ipv6_literal and
-           not is_valid_host(host)):
+        if (
+            host
+            and not is_valid_host(host)
+            and not is_valid_ipv4(host)
+            and not is_valid_ipv6(host)
+        ):
             errmsg = (
                 "Invalid host '%s'. Host strings must have at least one "
                 "non-period character, can't contain any of '%s', and can't "
diff --git a/setup.py b/setup.py
index 8322619..887ca2e 100644
--- a/setup.py
+++ b/setup.py
@@ -114,6 +114,7 @@ def run_tests(self):
     install_requires=[
         'six>=1.8.0',
         'orderedmultidict>=1.0.1',
+        'ipaddress>=1.0.23; python_version < "3.3"',
     ],
     cmdclass={
         'test': RunTests,
diff --git a/tests/test_furl.py b/tests/test_furl.py
index bc268c8..5666be7 100644
--- a/tests/test_furl.py
+++ b/tests/test_furl.py
@@ -1655,10 +1655,10 @@ def test_hosts(self):
         # addresses.
         f = furl.furl('http://1.2.3.4.5.6/')
 
-        # Invalid, but well-formed, IPv6 addresses shouldn't raise an
-        # exception because urlparse.urlsplit() doesn't raise an
-        # exception on invalid IPv6 addresses.
-        furl.furl('http://[0:0:0:0:0:0:0:1:1:1:1:1:1:1:1:9999999999999]/')
+        # Invalid, but well-formed, IPv6 addresses should raise an
+        # exception.
+        with self.assertRaises(ValueError):
+            furl.furl('http://[0:0:0:0:0:0:0:1:1:1:1:1:1:1:1:9999999999999]/')
 
         # Malformed IPv6 should raise an exception because urlparse.urlsplit()
         # raises an exception on malformed IPv6 addresses.
@@ -1684,12 +1684,17 @@ def test_netloc(self):
         assert f.host == '1.2.3.4.5.6'
         assert f.port == 999
 
-        netloc = '[0:0:0:0:0:0:0:1:1:1:1:1:1:1:1:9999999999999]:888'
+        netloc = '[1:2:3:4:5:6:7:8]:888'
         f.netloc = netloc
         assert f.netloc == netloc
-        assert f.host == '[0:0:0:0:0:0:0:1:1:1:1:1:1:1:1:9999999999999]'
+        assert f.host == '[1:2:3:4:5:6:7:8]'
         assert f.port == 888
 
+        # Well-formed but invalid IPv6 should raise an exception
+        netloc = '[0:0:0:0:0:0:0:1:1:1:1:1:1:1:1:9999999999999]:888'
+        with self.assertRaises(ValueError):
+            f.netloc = netloc
+
         # Malformed IPv6 should raise an exception because
         # urlparse.urlsplit() raises an exception
         with self.assertRaises(ValueError):
@@ -1703,10 +1708,6 @@ def test_netloc(self):
         with self.assertRaises(ValueError):
             f.netloc = 'pump2pump.org:777777777777'
 
-        # No side effects.
-        assert f.host == '[0:0:0:0:0:0:0:1:1:1:1:1:1:1:1:9999999999999]'
-        assert f.port == 888
-
         # Empty netloc.
         f = furl.furl('//')
         assert f.scheme is None and f.netloc == '' and f.url == '//'

Reply via email to