Skip to content

Commit a055ced

Browse files
bpo-41966: Fix pickling pure datetime.time subclasses (GH-22731) (GH-22747)
(cherry picked from commit c304c9a) Co-authored-by: scaramallion <[email protected]>
1 parent 6a2aa49 commit a055ced

File tree

4 files changed

+7
-1
lines changed

4 files changed

+7
-1
lines changed

Lib/datetime.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1579,7 +1579,7 @@ def __setstate(self, string, tzinfo):
15791579
self._tzinfo = tzinfo
15801580

15811581
def __reduce_ex__(self, protocol):
1582-
return (time, self._getstate(protocol))
1582+
return (self.__class__, self._getstate(protocol))
15831583

15841584
def __reduce__(self):
15851585
return self.__reduce_ex__(2)

Lib/test/datetimetester.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1781,6 +1781,7 @@ def test_pickling_subclass_date(self):
17811781
green = pickler.dumps(orig, proto)
17821782
derived = unpickler.loads(green)
17831783
self.assertEqual(orig, derived)
1784+
self.assertTrue(isinstance(derived, SubclassDate))
17841785

17851786
def test_backdoor_resistance(self):
17861787
# For fast unpickling, the constructor accepts a pickle byte string.
@@ -2308,6 +2309,7 @@ def test_pickling_subclass_datetime(self):
23082309
green = pickler.dumps(orig, proto)
23092310
derived = unpickler.loads(green)
23102311
self.assertEqual(orig, derived)
2312+
self.assertTrue(isinstance(derived, SubclassDatetime))
23112313

23122314
def test_compat_unpickle(self):
23132315
tests = [
@@ -3357,6 +3359,7 @@ def test_pickling_subclass_time(self):
33573359
green = pickler.dumps(orig, proto)
33583360
derived = unpickler.loads(green)
33593361
self.assertEqual(orig, derived)
3362+
self.assertTrue(isinstance(derived, SubclassTime))
33603363

33613364
def test_compat_unpickle(self):
33623365
tests = [

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -781,6 +781,7 @@ Meador Inge
781781
Peter Ingebretson
782782
Tony Ingraldi
783783
John Interrante
784+
Dean Inwood
784785
Bob Ippolito
785786
Roger Irwin
786787
Atsuo Ishimoto
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix pickling pure Python :class:`datetime.time` subclasses. Patch by Dean
2+
Inwood.

0 commit comments

Comments
 (0)