¿Hay alguna manera de hacer que python pickle ignore los errores de "no es el mismo objeto"?¿Hay alguna manera de hacer que python pickle ignore los errores de "no es el mismo objeto"
Estoy escribiendo una prueba utilizando Mock para tener un control fino sobre los resultados que produce datetime.utcnow(). El código que estoy usando es sensible al tiempo, por lo que el parche de prueba facilita la prueba.
Las mismas pruebas deben encurtir objetos y enviar los resultados a un servidor remoto. A los efectos de la prueba, si el servidor remoto decapaba y recibía una fecha y hora estándar, todo estaría bien.
Desafortunadamente el módulo pickle se Barfing con el siguiente error:
Can't pickle <type 'datetime.datetime'>: it's not the same object as datetime.datetime
Aquí está un ejemplo mínimo para reproducir el error.
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()
¿Hay alguna combinación de __reduce__
y __getstate__
métodos que podrían engañar a la maquinaria de la salmuera en el pensamiento de MockDatetime es una fecha y hora cuando pepinillo?