def test_io_success(self): """ Tests that a basic usage works as expected """ k1 = uuid4() k2 = uuid4() now = datetime.now() then = now + timedelta(days=1) m1 = TestMapModel.create(int_map={ 1: k1, 2: k2 }, text_map={ 'now': now, 'then': then }) m2 = TestMapModel.get(partition=m1.partition) self.assertTrue(isinstance(m2.int_map, dict)) self.assertTrue(isinstance(m2.text_map, dict)) self.assertTrue(1 in m2.int_map) self.assertTrue(2 in m2.int_map) self.assertEqual(m2.int_map[1], k1) self.assertEqual(m2.int_map[2], k2) self.assertTrue('now' in m2.text_map) self.assertTrue('then' in m2.text_map) self.assertAlmostEqual(get_total_seconds(now - m2.text_map['now']), 0, 2) self.assertAlmostEqual(get_total_seconds(then - m2.text_map['then']), 0, 2)
def from_datetime(self, dt): """ generates a UUID for a given datetime :param dt: datetime :type dt: datetime :return: """ global _last_timestamp epoch = datetime(1970, 1, 1, tzinfo=dt.tzinfo) offset = get_total_seconds(epoch.tzinfo.utcoffset(epoch)) if epoch.tzinfo else 0 timestamp = get_total_seconds(dt - epoch) - offset node = None clock_seq = None nanoseconds = int(timestamp * 1e9) timestamp = int(nanoseconds // 100) + 0x01b21dd213814000 if clock_seq is None: import random clock_seq = random.randrange(1 << 14) # instead of stable storage time_low = timestamp & 0xffffffff time_mid = (timestamp >> 32) & 0xffff time_hi_version = (timestamp >> 48) & 0x0fff clock_seq_low = clock_seq & 0xff clock_seq_hi_variant = (clock_seq >> 8) & 0x3f if node is None: node = getnode() return pyUUID(fields=(time_low, time_mid, time_hi_version, clock_seq_hi_variant, clock_seq_low, node), version=1)
def to_database(self, value): value = super(DateTime, self).to_database(value) if value is None: return if not isinstance(value, datetime): if isinstance(value, date): value = datetime(value.year, value.month, value.day) else: raise ValidationError("{0} '{1}' is not a datetime object".format(self.column_name, value)) epoch = datetime(1970, 1, 1, tzinfo=value.tzinfo) offset = get_total_seconds(epoch.tzinfo.utcoffset(epoch)) if epoch.tzinfo else 0 return int((get_total_seconds(value - epoch) - offset) * 1000)
def test_datetime_precision(self): """ Tests that millisecond resolution is preserved when saving datetime objects """ now = datetime.now() pk = 1000 obj = DateTimeQueryTestModel.create(user=pk, day=now, data='energy cheese') load = DateTimeQueryTestModel.get(user=pk) self.assertAlmostEqual(get_total_seconds(now - load.day), 0, 2) obj.delete()
def test_io_success(self): """ Tests that a basic usage works as expected """ k1 = uuid4() k2 = uuid4() now = datetime.now() then = now + timedelta(days=1) m1 = TestMapModel.create(int_map={1: k1, 2: k2}, text_map={'now': now, 'then': then}) m2 = TestMapModel.get(partition=m1.partition) self.assertTrue(isinstance(m2.int_map, dict)) self.assertTrue(isinstance(m2.text_map, dict)) self.assertTrue(1 in m2.int_map) self.assertTrue(2 in m2.int_map) self.assertEqual(m2.int_map[1], k1) self.assertEqual(m2.int_map[2], k2) self.assertAlmostEqual(get_total_seconds(now - m2.text_map['now']), 0, 2) self.assertAlmostEqual(get_total_seconds(then - m2.text_map['then']), 0, 2)