def test_equality(self): t1 = sanetime(2000, 1, 1, 0, 0, 0, 0) t2 = sanetime(1999, 12, 31, 19, 0, 0, 0, tz="America/New_York") t3 = sanetime(2000, 1, 1, 0, 0, 0, 1) self.assertTrue(t1 == t2) self.assertTrue(t2 == t1) self.assertTrue(t1 != t3) self.assertTrue(t3 != t1)
def test_to_naive_utc_datetime(self): st = sanetime(JAN_MICROS) self.assertEquals(datetime(2000, 1, 1), st.to_naive_utc_datetime()) st = sanetime(JAN_MICROS, tz="America/New_York") self.assertEquals(datetime(2000, 1, 1), st.to_naive_utc_datetime()) st = sanetime(JUL_MICROS, tz="America/New_York") self.assertEquals(datetime(2000, 7, 1), st.to_naive_utc_datetime())
def test_arithmetic(self): t1 = sanetime(2000, 1, 1, 0, 0, 0, 0) t2 = sanetime(2000, 1, 1, 0, 0, 0, 1) self.assertEquals(t2.us, (t1 + 1).us) self.assertEquals(t1.us, (t2 - 1).us) self.assertEquals(1, t2 - t1) self.assertEquals(-1, t1 - t2)
def test_hashability(self): t1 = sanetime(2000, 1, 1, 0, 0, 0, 0) t2 = sanetime(1999, 12, 31, 19, 0, 0, 0, tz="America/New_York") t3 = sanetime(2000, 1, 1, 0, 0, 0, 1) s = set([t1, t2, t3]) self.assertEquals(2, len(s)) self.assertIn(t1, s) self.assertIn(t2, s) self.assertIn(t3, s)
def test_str(self): st = sanetime(JAN_MICROS) self.assertEquals("%sus" % JAN_MICROS, str(st)) st = sanetime(JUL_MICROS) self.assertEquals("%sus" % JUL_MICROS, str(st)) st = sanetime(JAN_MICROS, tz="America/New_York") self.assertEquals("%sus" % JAN_MICROS, str(st)) st = sanetime(JUL_MICROS, tz="America/New_York") self.assertEquals("%sus" % JUL_MICROS, str(st))
def test_repr(self): st = sanetime(JAN_MICROS) self.assertEquals("2000-01-01 00:00:00.000000 UTC", repr(st)) st = sanetime(JUL_MICROS) self.assertEquals("2000-07-01 00:00:00.000000 UTC", repr(st)) st = sanetime(JAN_MICROS, tz="America/New_York") self.assertEquals("2000-01-01 00:00:00.000000 UTC", repr(st)) st = sanetime(JUL_MICROS, tz="America/New_York") self.assertEquals("2000-07-01 00:00:00.000000 UTC", repr(st))
def test_to_utc_datetime(self): st = sanetime(JAN_MICROS) self.assertEquals(pytz.utc.localize(datetime(2000, 1, 1)), st.to_utc_datetime()) st = sanetime(JAN_MICROS, tz="America/New_York") self.assertEquals(pytz.utc.localize(datetime(2000, 1, 1)), st.to_utc_datetime()) st = sanetime(JUL_MICROS, tz="America/New_York") self.assertEquals(pytz.utc.localize(datetime(2000, 7, 1)), st.to_utc_datetime())
def test_micro_equality(self): st1 = sanetime(JAN_MICROS) st2 = sanetime(JAN_MICROS) st3 = sanetime(JAN_MICROS + 1) self.assertEquals(st1, st2) self.assertEquals(st1, st2.us) self.assertEquals(st1.us, st2.us) self.assertEquals(st1.us, st2) self.assertNotEquals(st1, st3) self.assertNotEquals(st1, st3.us) self.assertNotEquals(st1.us, st3.us) self.assertNotEquals(st1.us, st3)
def bulk_delete(self, objs): if not objs: return start_time = sanetime() if not self._deleteable(self.arm): return # avoid error reporting since this is on purpose try: for success,obj in self._bulk_delete(objs): if success: self._single_deleted(obj) else: self._single_delete_fail(obj) except NotImplementedError: for obj in objs: self.single_delete(obj) self.timings.append(("deletes", (sanetime().ms - start_time.ms)/1000.0))
def bulk_update(self, tuples): if not tuples: return start_time = sanetime() if not self._updateable(self.arm): return # avoid error reporting since this is on purpose try: for success,obj,dchanges in self._bulk_update(tuples): if success: self._single_updated(obj, dchanges) else: self._single_update_fail(obj, dchanges) except NotImplementedError: for obj,dchanges in tuples: self.single_update(obj, dchanges) self.timings.append(("updates", (sanetime().ms - start_time.ms)/1000.0))
def test_now(self): past = pytz.utc.localize(datetime.utcnow()) st = sanetime() future = pytz.utc.localize(datetime.utcnow()) self.assertTrue(st.to_datetime() > past) self.assertTrue(st.to_datetime() < future) past = self.utc.localize(datetime.utcnow()).astimezone(self.ny) st = sanetime(tz="America/New_York") future = self.utc.localize(datetime.utcnow()).astimezone(self.ny) self.assertTrue(st.to_datetime() > past) self.assertTrue(st.to_datetime() < future)
def bulk_create(self, tuples): if not tuples: return start_time = sanetime() if not self._createable(self.arm): return # avoid error reporting since this is on purpose try: for obj,dobj,keyless_trigger in self._bulk_create(tuples): if obj: self._single_created(obj, dobj, keyless_trigger) else: self._single_create_fail(dobj, keyless_trigger) except NotImplementedError: for dobj,keyless_trigger in tuples: self.single_create(dobj, keyless_trigger) self.timings.append(("creates", (sanetime().ms - start_time.ms)/1000.0))
def test_from_datetime_string(self): self.assertEquals(JAN_MICROS, sanetime("2000-01-01 00:00:00")) self.assertEquals(JAN_MICROS + 1, sanetime("2000-01-01 00:00:00.000001")) self.assertEquals(JAN_MICROS, sanetime("2000-01-01")) self.assertEquals(JUL_MICROS, sanetime("July 1st, 2000")) self.assertEquals(JAN_MICROS, sanetime("2000-01-01", tz="UTC")) self.assertEquals(JAN_MICROS, sanetime("2000-01-01", tz=self.utc)) self.assertEquals(NY_JAN_MICROS, sanetime("2000-01-01 00:00:00", tz="America/New_York")) self.assertEquals(NY_JAN_MICROS, sanetime("2000-01-01 00:00:00", tz=self.ny)) self.assertEquals(NY_JUL_MICROS, sanetime("2000-07-01", tz="America/New_York")) self.assertEquals(NY_JUL_MICROS + 1000, sanetime("2000-07-01 00:00:00.001", tz=self.ny))
def pre_save(self, model_instance, add): if self.auto_now or (self.auto_now_add and add): value = sanetime() setattr(model_instance, self.attname, value) return value else: return super(SaneTimeField, self).pre_save(model_instance, add)
def test_comparisons(self): t1 = sanetime(2000, 1, 1, 0, 0, 0, 0) t2 = sanetime(2000, 1, 1, 0, 0, 0, 1) self.assertFalse(t1 > t1) self.assertTrue(t2 > t1) self.assertFalse(t1 > t2) self.assertTrue(t1 >= t1) self.assertTrue(t2 >= t1) self.assertFalse(t1 >= t2) self.assertFalse(t1 < t1) self.assertFalse(t2 < t1) self.assertTrue(t1 < t2) self.assertTrue(t1 <= t1) self.assertFalse(t2 <= t1) self.assertTrue(t1 <= t2)
def forwards(self, orm): if settings.ENV == 'local': orm.Hub.objects.create( id=1, created_at = sanetime(), updated_at = sanetime() ) webex_account_type = orm.AccountType.objects.filter(name='Webex')[0] gtw_account_type = orm.AccountType.objects.filter(name='GoToWebinar')[0] orm.Account.objects.create( account_type = webex_account_type, username = '******', password = '******', email = '*****@*****.**', extra_username = '******', created_at = sanetime(), updated_at = sanetime(), hub_id = 1 ) orm.Account.objects.create( account_type = gtw_account_type, username = '******', password = '******', email = '*****@*****.**', extra_username = '******', created_at = sanetime(), updated_at = sanetime(), hub_id = 1 )
def forwards(self, orm): if settings.ENV == 'local': orm.Hub.objects.create(id=1, created_at=sanetime(), updated_at=sanetime()) webex_account_type = orm.AccountType.objects.filter( name='Webex')[0] gtw_account_type = orm.AccountType.objects.filter( name='GoToWebinar')[0] orm.Account.objects.create(account_type=webex_account_type, username='******', password='******', email='*****@*****.**', extra_username='******', created_at=sanetime(), updated_at=sanetime(), hub_id=1) orm.Account.objects.create(account_type=gtw_account_type, username='******', password='******', email='*****@*****.**', extra_username='******', created_at=sanetime(), updated_at=sanetime(), hub_id=1)
def cynq(self): self.errs = [] self.started_at = sanetime() for arm in self.arms: arm.controller = self self.cynqable_arms = [arm for arm in self.arms if arm._pre_cynq()] if not self.cynqable_arms: return self.starting_arms_count = len(self.cynqable_arms) try: self._cynq_apis() self._cynq_local() self._cynq_apis() self._cynq_local() self._cynq_snapshot() except StandardError as err: self.log.error("giving up on entire cynq | err=%s" % format_exc(err)) for arm in self.cynqable_arms: arm._post_cynq() self.log.info("completed | %s" % ' | '.join(['%s:[api:%s local:%s snapshot:%s]' % (a.spec.name, a.api.changes_tstr, a.local.changes_tstr, a.snapshot.changes_tstr) for a in self.arms])) self.log.info("timings | %s | total: %.2f" % (' | '.join(['%s.%s:%s:%.2f' % (a.spec.name, s.type_, t[0], t[1]) for a in self.arms for s in a.stores for t in s.timings if t[1] > 0.1]), (sanetime().ms-self.started_at.ms)/1000.0)) if self.errs: raise Error(self.errs[0]) return self
def _get_list(self): if self._list is None: start_time = sanetime() self._list = list(self._all()) self.timings.append(("reads", (sanetime().ms - start_time.ms)/1000.0)) return self._list
def test_properties(self): st = sanetime(2000, 1, 2, 3, 4, 5, 600700) self.assertEquals(700, st.us % 1000) self.assertEquals(601, st.ms % 1000) # remember, it rounds self.assertEquals(6, st.s % 60) # remember, it rounds
def test_from_datetime(self): self.assertEquals(JAN_MICROS, sanetime(datetime(2000, 1, 1))) self.assertEquals(JAN_MICROS, sanetime(datetime(2000, 1, 1, tzinfo=self.utc))) self.assertEquals(NY_JAN_MICROS, sanetime(self.ny.localize(datetime(2000, 1, 1)))) self.assertEquals(NY_JUL_MICROS, sanetime(self.ny.localize(datetime(2000, 7, 1))))
def test_from_datetime_params(self): and_one_hour = JAN_MICROS + 60 ** 2 * 1000 ** 2 and_one_minute = and_one_hour + 60 * 1000 ** 2 and_one_second = and_one_minute + 1000 ** 2 and_one_micro = and_one_second + 1 self.assertEquals(JAN_MICROS, sanetime(2000, 1, 1)) self.assertEquals(and_one_hour, sanetime(2000, 1, 1, 1)) self.assertEquals(and_one_minute, sanetime(2000, 1, 1, 1, 1)) self.assertEquals(and_one_second, sanetime(2000, 1, 1, 1, 1, 1)) self.assertEquals(and_one_micro, sanetime(2000, 1, 1, 1, 1, 1, 1)) self.assertEquals(JUL_MICROS, sanetime(2000, 7, 1)) with self.assertRaises(SaneTimeError): sanetime(2000, 1) self.assertEquals(JAN_MICROS, sanetime(2000, 1, 1, 0, 0, 0, 0, tz="UTC")) self.assertEquals(JAN_MICROS, sanetime(2000, 1, 1, 0, 0, 0, 0, tz=self.utc)) self.assertEquals(NY_JAN_MICROS, sanetime(2000, 1, 1, 0, 0, 0, 0, tz="America/New_York")) self.assertEquals(NY_JAN_MICROS, sanetime(2000, 1, 1, 0, 0, 0, 0, tz=self.ny)) self.assertEquals(NY_JUL_MICROS, sanetime(2000, 7, 1, tz="America/New_York")) self.assertEquals(NY_JUL_MICROS, sanetime(2000, 7, 1, tz=self.ny))
def test_transitives(self): st = sanetime() st2 = sanetime(st.to_datetime()) self.assertEquals(st, st2) st = sanetime(tz="America/New_York") st2 = sanetime(st.to_datetime()) self.assertEquals(st, st2) st = sanetime() st2 = sanetime(str(st)) self.assertEquals(st, st2) st = sanetime(tz="America/New_York") st2 = sanetime(str(st)) self.assertEquals(st, st2) st = sanetime() st2 = sanetime(st.us) self.assertEquals(st, st2) st = sanetime(tz="America/New_York") st2 = sanetime(st.us, tz="America/New_York") self.assertEquals(st, st2)
def test_construction_errors(self): with self.assertRaises(SaneTimeError): sanetime(datetime(2000, 1, 1, tzinfo=self.ac), tz="America/New_York") with self.assertRaises(SaneTimeError): sanetime(datetime(2000, 1, 1, tzinfo=self.ac), tz=self.ny)
def to_python(self, value): if value is not None: if not isinstance(value, sanetime): value = sanetime(value) return value return super(SaneTimeField, self).to_python(value)
def to_sanetime(self): return sanetime(self.us)