[issue41966] datetime.time issue with pickling in PyPy
Dean
report at bugs.python.org
Thu Oct 8 02:34:22 EDT 2020
Dean <scaram at gmail.com> added the comment:
Code demonstrating the issue; the CTimeFoo class is pickled correctly, but TimeFoo isn't.
import builtins
from _datetime import time as ctime
original_importer = builtins.__import__
def my_importer(name, globals, locals, fromlist, level):
if name == '_datetime':
raise ImportError
return original_importer(name, globals, locals, fromlist, level)
builtins.__import__ = my_importer
import datetime
builtins.__import__ = original_importer
import pickle
class CTimeFoo(ctime): pass
class TimeFoo(datetime.time): pass
class DateFoo(datetime.date): pass
if __name__ == "__main__":
t = DateFoo(2001, 2, 3)
d = pickle.dumps(t) # OK
print(d)
# b'\x80\x04\x95#\x00\x00\x00\x00\x00\x00\x00\x8c\x08__main__\x94\x8c\x07DateFoo\x94\x93\x94C\x04\x07\xd1\x02\x03\x94\x85\x94R\x94.'
t = pickle.loads(d)
t = CTimeFoo(1, 2, 3)
d = pickle.dumps(t) # OK
print(d)
# b'\x80\x04\x95&\x00\x00\x00\x00\x00\x00\x00\x8c\x08__main__\x94\x8c\x08CTimeFoo\x94\x93\x94C\x06\x01\x02\x03\x00\x00\x00\x94\x85\x94R\x94.'
t = pickle.loads(d)
t = TimeFoo(1, 2, 3)
d = pickle.dumps(t) # :(
print(d)
# b'\x80\x04\x95"\x00\x00\x00\x00\x00\x00\x00\x8c\x08datetime\x94\x8c\x04time\x94\x93\x94C\x06\x01\x02\x03\x00\x00\x00\x94\x85\x94R\x94.'
t = pickle.loads(d)
----------
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue41966>
_______________________________________
More information about the Python-bugs-list
mailing list