Skip to content

Commit dd4bf2b

Browse files
Minimize pickle by default.
1 parent ba37be6 commit dd4bf2b

File tree

2 files changed

+41
-8
lines changed

2 files changed

+41
-8
lines changed

Lib/test/test_urlparse.py

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import copy
2+
import pickle
23
import sys
34
import unicodedata
45
import unittest
@@ -1306,14 +1307,35 @@ def check(str_result, bytes_result):
13061307

13071308
def test_result_copying(self):
13081309
def check(result):
1309-
self.assertEqual(copy.copy(result), result)
1310-
self.assertEqual(copy.copy(result).geturl(), result.geturl())
1311-
self.assertEqual(copy.deepcopy(result), result)
1312-
self.assertEqual(copy.deepcopy(result).geturl(), result.geturl())
1313-
self.assertEqual(copy.replace(result), result)
1314-
self.assertEqual(copy.replace(result).geturl(), result.geturl())
1315-
self.assertEqual(result._replace(), result)
1316-
self.assertEqual(result._replace().geturl(), result.geturl())
1310+
result2 = copy.copy(result)
1311+
self.assertEqual(result2, result)
1312+
self.assertEqual(result2.geturl(), result.geturl())
1313+
result2 = copy.deepcopy(result)
1314+
self.assertEqual(result2, result)
1315+
self.assertEqual(result2.geturl(), result.geturl())
1316+
result2 = copy.replace(result)
1317+
self.assertEqual(result2, result)
1318+
self.assertEqual(result2.geturl(), result.geturl())
1319+
result2 = result._replace()
1320+
self.assertEqual(result2, result)
1321+
self.assertEqual(result2.geturl(), result.geturl())
1322+
1323+
url = 'http://example.com/?#'
1324+
burl = url.encode()
1325+
for func in urldefrag, urlsplit, urlparse:
1326+
check(func(url))
1327+
check(func(url, missing_as_none=True))
1328+
check(func(burl))
1329+
check(func(burl, missing_as_none=True))
1330+
1331+
def test_result_pickling(self):
1332+
import pickletools
1333+
def check(result):
1334+
for proto in range(pickle.HIGHEST_PROTOCOL + 1):
1335+
pickled = pickle.dumps(result, proto)
1336+
result2 = pickle.loads(pickled)
1337+
self.assertEqual(result2, result)
1338+
self.assertEqual(result2.geturl(), result.geturl())
13171339

13181340
url = 'http://example.com/?#'
13191341
burl = url.encode()

Lib/urllib/parse.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,17 @@ def __copy__(self):
303303
def __deepcopy__(self, memo):
304304
return self
305305

306+
def __getstate__(self):
307+
state = super().__getstate__()
308+
try:
309+
if state[1]['_keep_empty'] == _MISSING_AS_NONE_DEFAULT:
310+
del state[1]['_keep_empty']
311+
if state == (None, {}):
312+
state = None
313+
except LookupError:
314+
pass
315+
return state
316+
306317

307318
class _DefragResultBase(_ResultBase, namedtuple('_DefragResultBase', 'url fragment')):
308319
__slots__ = ('_keep_empty',)

0 commit comments

Comments
 (0)