Имеется модель такого типа:
class Entry(db.Model): __tablename__ = 'entries' name = db.Column(db.String(100)) created = db.Column(db.DateTime(), default=datetime.now) updated = db.Column(db.DateTime(), default=datetime.now, onupdate=datetime.now)
Как подменить время создания и обновления? К примеру для такого теста:
class ViewTestCase(AppliactionTestCase): def test(self): with freeze_time("2014-06-01 16:00:00"): db.session.add(Entry(name="title")) db.session.commit() entry = db.session.query(Entry).first() self.assertEqual(entry.created, datetime(2014, 6, 1, 16, 0, 0)) self.assertEqual(entry.updated, datetime(2014, 6, 1, 16, 0, 0)) with freeze_time("2014-07-01 17:00:00"): entry.name = 'edited title' db.session.add(entry) db.session.commit() entry = db.session.query(Entry).first() self.assertEqual(entry.created, datetime(2014, 6, 1, 16, 0, 0)) self.assertEqual(entry.updated, datetime(2014, 7, 1, 17, 0, 0))
Для подмены времения я использую freezegun. Но с ходу он не подменяет.
Я также пытался с помощью mock патчить db.DateTime.python_type, что бы он возвращал FakeDatetime, но результат тот же.
Я обратил внимание что если определять поля так:
created = db.Column(db.DateTime(), default=lambda: datetime.now())
Подскажите, если кто сталкивался с этим, или знает где нужно подменить метод, отзовитесь, пожалуйста.