Есть ли способ заставить python pickle игнорировать ошибки «это не тот же объект»

Есть ли способ заставить 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 - это дата-время, когда я маринуют?

6
задан user377612 5 December 2011 в 04:30
поделиться