Есть ли способ заставить python pickle игнорировать ошибки «это не тот же объект»?
Я пишу тест с использованием Mock, чтобы иметь точный контроль над результатами в указанное время. utcnow () производит. Код, который я использую, чувствителен ко времени, поэтому фиктивный патч упрощает тестирование.
Те же тесты должны обрабатывать объекты и отправлять результаты на удаленный сервер. Для целей теста, если стандартное datetime было выбрано и получено удаленным сервером, все было бы в порядке.
К сожалению, модуль pickle выдает следующую ошибку:
Can't pickle
: это не тот же объект, что и datetime.datetime
Вот минимальный пример воспроизведения ошибки.
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()
Есть ли какая-нибудь комбинация из методов __ reduce __
и __ getstate __
, которые могут обмануть механизм рассола, заставив его думать, что MockDatetime - это дата-время, когда я маринуют?