def test_extra_fields(self): s = SimpleStorage(name='TimeTracking', descrip='FirstSave') s.save() create1 = parse_now_field(s._create_date) update1 = parse_now_field(s._last_update) self.assertCloseTimes(datetime.datetime.utcnow(), update1) self.assertCloseTimes(create1, update1) # Sucks, but we need to space out our timestamps time.sleep(0.3) s.descrip = 'SecondSave' s.save() create2 = parse_now_field(s._create_date) update2 = parse_now_field(s._last_update) self.assertCloseTimes(datetime.datetime.utcnow(), update2) self.assertCloseTimes(create1, create2) self.assertNotCloseTimes(update1, update2) s2 = SimpleStorage.find_one(s.id) create3 = parse_now_field(s2._create_date) update3 = parse_now_field(s2._last_update) # Note that we DON'T check for string equality - that's because # _last_update is updated every time the instance method to_data is # called. See simple.md for extra details on auto fields self.assertCloseTimes(create2, create3) self.assertCloseTimes(update2, update3)
def test_now(self): # First just make sure that we can accurately create parse date time # strings. We just create a low N amount for testing COUNT = 100 for _ in range(COUNT): s = now_field() d = parse_now_field(s) # We assume that we got a parseable date string - we confirm that # we got this back by subtracting from a known datetime and then # making sure that the difference is sane self.assertCloseTimes(d, datetime.datetime.utcnow()) # Make sure that we work with and without microseconds ref = datetime.datetime(2050, 12, 1, 14, 45, 55, 123) # with microseconds self.assertCloseTimes( ref, parse_now_field('UTC:' + '2050-12-01T14:45:55.000123')) # withOUT microseconds self.assertCloseTimes(ref, parse_now_field('UTC:' + '2050-12-01T14:45:55'))