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)
Example #2
0
    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)
Example #3
0
    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)
Example #4
0
    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_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)