Czy istnieje sposób, aby Python Pickle zignorować błędy "to nie ten sam obiekt"?Czy istnieje sposób, aby pyton Python ignorować "to nie ten sam obiekt" błędy
Piszę test za pomocą Mock, aby mieć drobną kontrolę ziarna nad wynikami, które produkuje datetime.utcnow(). Kod, którego używam, jest wrażliwy na zmiany czasu, więc łata próbna ułatwia testowanie.
Te same testy należy zebrać i wysłać wyniki na zdalny serwer. Dla celów testu, jeśli standardowa datetime została pobrana i odebrana przez zdalny serwer, wszystko byłoby w porządku.
Niestety moduł Marynata jest barfing z powodu następującego błędu:
Can't pickle <type 'datetime.datetime'>: it's not the same object as datetime.datetime
Oto minimalne przykład odtworzyć błędu.
from mock import patch
from datetime import datetime
import pickle
class MockDatetime(datetime):
frozendt = datetime(2011,05,31)
@classmethod
def advance(cls, **kw):
cls.frozendt = cls.frozendt + timedelta(**kw)
@classmethod
def utcnow(cls):
return cls.frozendt
@patch('datetime.datetime', MockDatetime)
def test():
pickle.dumps(datetime.utcnow())
if __name__ == '__main__':
test()
Czy istnieje jakiś combo __reduce__
i __getstate__
metod, które mogą nakłaniać maszyny ogórkowy do myślenia MockDatetime jest datetime kiedy marynowane?