]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-110196: Fix ipaddress.IPv6Address.__reduce__ (GH-110198)
authorTian Gao <gaogaotiantian@hotmail.com>
Sun, 22 Oct 2023 18:50:51 +0000 (11:50 -0700)
committerGitHub <noreply@github.com>
Sun, 22 Oct 2023 18:50:51 +0000 (21:50 +0300)
Lib/ipaddress.py
Lib/test/test_ipaddress.py
Misc/NEWS.d/next/Library/2023-10-02-05-23-27.gh-issue-110196.djwt0z.rst [new file with mode: 0644]

index f5aba434fd4253f778852fcfb2adbd4983019682..68ddfbeb4bc212808841c3b7ff2cc941123055a0 100644 (file)
@@ -1970,6 +1970,9 @@ class IPv6Address(_BaseV6, _BaseAddress):
             return False
         return self._scope_id == getattr(other, '_scope_id', None)
 
+    def __reduce__(self):
+        return (self.__class__, (str(self),))
+
     @property
     def scope_id(self):
         """Identifier of a particular zone of the address's scope.
index 6f204948c9fc4869e4000ffb92b536049ed6c314..33a0f9894a32f999e96d33f9dfdf8c30da5eed7c 100644 (file)
@@ -4,6 +4,7 @@
 """Unittest for ipaddress module."""
 
 
+import copy
 import unittest
 import re
 import contextlib
@@ -542,11 +543,17 @@ class AddressTestCase_v6(BaseTestCase, CommonTestMixin_v6):
 
     def test_pickle(self):
         self.pickle_test('2001:db8::')
+        self.pickle_test('2001:db8::%scope')
 
     def test_weakref(self):
         weakref.ref(self.factory('2001:db8::'))
         weakref.ref(self.factory('2001:db8::%scope'))
 
+    def test_copy(self):
+        addr = self.factory('2001:db8::%scope')
+        self.assertEqual(addr, copy.copy(addr))
+        self.assertEqual(addr, copy.deepcopy(addr))
+
 
 class NetmaskTestMixin_v4(CommonTestMixin_v4):
     """Input validation on interfaces and networks is very similar"""
diff --git a/Misc/NEWS.d/next/Library/2023-10-02-05-23-27.gh-issue-110196.djwt0z.rst b/Misc/NEWS.d/next/Library/2023-10-02-05-23-27.gh-issue-110196.djwt0z.rst
new file mode 100644 (file)
index 0000000..341f338
--- /dev/null
@@ -0,0 +1 @@
+Add ``__reduce__`` method to :class:`IPv6Address` in order to keep ``scope_id``