Skip to content

Commit

Permalink
Use (naive, UTC) datetime.datetime instead of timestamps
Browse files Browse the repository at this point in the history
  • Loading branch information
jacquev6 committed Apr 9, 2015
1 parent 968692a commit 6eaff44
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 20 deletions.
41 changes: 25 additions & 16 deletions LowVoltage/operations/admin_operations.py
Expand Up @@ -2,6 +2,7 @@

# Copyright 2013-2014 Vincent Jacques <vincent@vincent-jacques.net>

import datetime
import unittest

from LowVoltage.operations.operation import Operation as _Operation, OperationProxy as _OperationProxy
Expand Down Expand Up @@ -415,15 +416,16 @@ def testSimplestTable(self):
)

with cover("r", r) as r:
self.assertDateTimeIsReasonable(r.table_description.creation_date_time)
self.assertEqual(r.table_description.attribute_definitions[0].attribute_name, "h")
self.assertEqual(r.table_description.attribute_definitions[0].attribute_type, "S")
self.assertEqual(r.table_description.global_secondary_indexes, None)
self.assertEqual(r.table_description.item_count, 0)
self.assertEqual(r.table_description.key_schema[0].attribute_name, "h")
self.assertEqual(r.table_description.key_schema[0].key_type, "HASH")
self.assertEqual(r.table_description.local_secondary_indexes, None)
self.assertEqual(r.table_description.provisioned_throughput.last_decrease_date_time, 0.)
self.assertEqual(r.table_description.provisioned_throughput.last_increase_date_time, 0.)
self.assertEqual(r.table_description.provisioned_throughput.last_decrease_date_time, datetime.datetime(1970, 1, 1))
self.assertEqual(r.table_description.provisioned_throughput.last_increase_date_time, datetime.datetime(1970, 1, 1))
self.assertEqual(r.table_description.provisioned_throughput.number_of_decreases_today, 0)
self.assertEqual(r.table_description.provisioned_throughput.read_capacity_units, 1)
self.assertEqual(r.table_description.provisioned_throughput.write_capacity_units, 2)
Expand All @@ -443,6 +445,7 @@ def testSimpleGlobalSecondaryIndex(self):
_fix_order_for_tests(r.table_description)

with cover("r", r) as r:
self.assertDateTimeIsReasonable(r.table_description.creation_date_time)
self.assertEqual(r.table_description.attribute_definitions[0].attribute_name, "h")
self.assertEqual(r.table_description.attribute_definitions[0].attribute_type, "S")
self.assertEqual(r.table_description.attribute_definitions[1].attribute_name, "hh")
Expand All @@ -464,8 +467,8 @@ def testSimpleGlobalSecondaryIndex(self):
self.assertEqual(r.table_description.key_schema[0].attribute_name, "h")
self.assertEqual(r.table_description.key_schema[0].key_type, "HASH")
self.assertEqual(r.table_description.local_secondary_indexes, None)
self.assertEqual(r.table_description.provisioned_throughput.last_decrease_date_time, 0.)
self.assertEqual(r.table_description.provisioned_throughput.last_increase_date_time, 0.)
self.assertEqual(r.table_description.provisioned_throughput.last_decrease_date_time, datetime.datetime(1970, 1, 1))
self.assertEqual(r.table_description.provisioned_throughput.last_increase_date_time, datetime.datetime(1970, 1, 1))
self.assertEqual(r.table_description.provisioned_throughput.number_of_decreases_today, 0)
self.assertEqual(r.table_description.provisioned_throughput.read_capacity_units, 1)
self.assertEqual(r.table_description.provisioned_throughput.write_capacity_units, 2)
Expand All @@ -482,6 +485,7 @@ def testSimpleLocalSecondaryIndex(self):
_fix_order_for_tests(r.table_description)

with cover("r", r) as r:
self.assertDateTimeIsReasonable(r.table_description.creation_date_time)
self.assertEqual(r.table_description.attribute_definitions[0].attribute_name, "h")
self.assertEqual(r.table_description.attribute_definitions[0].attribute_type, "S")
self.assertEqual(r.table_description.attribute_definitions[1].attribute_name, "r")
Expand All @@ -504,8 +508,8 @@ def testSimpleLocalSecondaryIndex(self):
self.assertEqual(r.table_description.local_secondary_indexes[0].key_schema[1].key_type, "RANGE")
self.assertEqual(r.table_description.local_secondary_indexes[0].projection.non_key_attributes, None)
self.assertEqual(r.table_description.local_secondary_indexes[0].projection.projection_type, "ALL")
self.assertEqual(r.table_description.provisioned_throughput.last_decrease_date_time, 0.)
self.assertEqual(r.table_description.provisioned_throughput.last_increase_date_time, 0.)
self.assertEqual(r.table_description.provisioned_throughput.last_decrease_date_time, datetime.datetime(1970, 1, 1))
self.assertEqual(r.table_description.provisioned_throughput.last_increase_date_time, datetime.datetime(1970, 1, 1))
self.assertEqual(r.table_description.provisioned_throughput.number_of_decreases_today, 0)
self.assertEqual(r.table_description.provisioned_throughput.read_capacity_units, 1)
self.assertEqual(r.table_description.provisioned_throughput.write_capacity_units, 2)
Expand All @@ -525,6 +529,7 @@ def testGlobalSecondaryIndexWithProjection(self):
_fix_order_for_tests(r.table_description)

with cover("r", r) as r:
self.assertDateTimeIsReasonable(r.table_description.creation_date_time)
self.assertEqual(r.table_description.attribute_definitions[0].attribute_name, "h")
self.assertEqual(r.table_description.attribute_definitions[0].attribute_type, "S")
self.assertEqual(r.table_description.attribute_definitions[1].attribute_name, "hh")
Expand All @@ -547,8 +552,8 @@ def testGlobalSecondaryIndexWithProjection(self):
self.assertEqual(r.table_description.key_schema[0].attribute_name, "h")
self.assertEqual(r.table_description.key_schema[0].key_type, "HASH")
self.assertEqual(r.table_description.local_secondary_indexes, None)
self.assertEqual(r.table_description.provisioned_throughput.last_decrease_date_time, 0.)
self.assertEqual(r.table_description.provisioned_throughput.last_increase_date_time, 0.)
self.assertEqual(r.table_description.provisioned_throughput.last_decrease_date_time, datetime.datetime(1970, 1, 1))
self.assertEqual(r.table_description.provisioned_throughput.last_increase_date_time, datetime.datetime(1970, 1, 1))
self.assertEqual(r.table_description.provisioned_throughput.number_of_decreases_today, 0)
self.assertEqual(r.table_description.provisioned_throughput.read_capacity_units, 1)
self.assertEqual(r.table_description.provisioned_throughput.write_capacity_units, 2)
Expand Down Expand Up @@ -639,15 +644,16 @@ def test(self):
r = self.connection.request(DeleteTable("Aaa"))

with cover("r", r) as r:
self.assertDateTimeIsReasonable(r.table_description.creation_date_time)
self.assertEqual(r.table_description.attribute_definitions[0].attribute_name, "h")
self.assertEqual(r.table_description.attribute_definitions[0].attribute_type, "S")
self.assertEqual(r.table_description.global_secondary_indexes, None)
self.assertEqual(r.table_description.item_count, 0)
self.assertEqual(r.table_description.key_schema[0].attribute_name, "h")
self.assertEqual(r.table_description.key_schema[0].key_type, "HASH")
self.assertEqual(r.table_description.local_secondary_indexes, None)
self.assertEqual(r.table_description.provisioned_throughput.last_decrease_date_time, 0.)
self.assertEqual(r.table_description.provisioned_throughput.last_increase_date_time, 0.)
self.assertEqual(r.table_description.provisioned_throughput.last_decrease_date_time, datetime.datetime(1970, 1, 1))
self.assertEqual(r.table_description.provisioned_throughput.last_increase_date_time, datetime.datetime(1970, 1, 1))
self.assertEqual(r.table_description.provisioned_throughput.number_of_decreases_today, 0)
self.assertEqual(r.table_description.provisioned_throughput.read_capacity_units, 1)
self.assertEqual(r.table_description.provisioned_throughput.write_capacity_units, 2)
Expand Down Expand Up @@ -698,15 +704,16 @@ def test(self):
r = self.connection.request(DescribeTable("Aaa"))

with cover("r", r) as r:
self.assertDateTimeIsReasonable(r.table.creation_date_time)
self.assertEqual(r.table.attribute_definitions[0].attribute_name, "h")
self.assertEqual(r.table.attribute_definitions[0].attribute_type, "S")
self.assertEqual(r.table.global_secondary_indexes, None)
self.assertEqual(r.table.item_count, 0)
self.assertEqual(r.table.key_schema[0].attribute_name, "h")
self.assertEqual(r.table.key_schema[0].key_type, "HASH")
self.assertEqual(r.table.local_secondary_indexes, None)
self.assertEqual(r.table.provisioned_throughput.last_decrease_date_time, 0.)
self.assertEqual(r.table.provisioned_throughput.last_increase_date_time, 0.)
self.assertEqual(r.table.provisioned_throughput.last_decrease_date_time, datetime.datetime(1970, 1, 1))
self.assertEqual(r.table.provisioned_throughput.last_increase_date_time, datetime.datetime(1970, 1, 1))
self.assertEqual(r.table.provisioned_throughput.number_of_decreases_today, 0)
self.assertEqual(r.table.provisioned_throughput.read_capacity_units, 1)
self.assertEqual(r.table.provisioned_throughput.write_capacity_units, 2)
Expand Down Expand Up @@ -946,6 +953,7 @@ def testThroughput(self):
_fix_order_for_tests(r.table_description)

with cover("r", r) as r:
self.assertDateTimeIsReasonable(r.table_description.creation_date_time)
self.assertEqual(r.table_description.attribute_definitions[0].attribute_name, "h")
self.assertEqual(r.table_description.attribute_definitions[0].attribute_type, "S")
self.assertEqual(r.table_description.attribute_definitions[1].attribute_name, "hh")
Expand All @@ -967,8 +975,8 @@ def testThroughput(self):
self.assertEqual(r.table_description.key_schema[0].attribute_name, "h")
self.assertEqual(r.table_description.key_schema[0].key_type, "HASH")
self.assertEqual(r.table_description.local_secondary_indexes, None)
self.assertEqual(r.table_description.provisioned_throughput.last_decrease_date_time, 0.)
self.assertEqual(r.table_description.provisioned_throughput.last_increase_date_time, 0.)
self.assertEqual(r.table_description.provisioned_throughput.last_decrease_date_time, datetime.datetime(1970, 1, 1))
self.assertEqual(r.table_description.provisioned_throughput.last_increase_date_time, datetime.datetime(1970, 1, 1))
self.assertEqual(r.table_description.provisioned_throughput.number_of_decreases_today, 0)
self.assertEqual(r.table_description.provisioned_throughput.read_capacity_units, 2)
self.assertEqual(r.table_description.provisioned_throughput.write_capacity_units, 4)
Expand All @@ -984,6 +992,7 @@ def testGsiprovisioned_Throughput(self):
_fix_order_for_tests(r.table_description)

with cover("r", r) as r:
self.assertDateTimeIsReasonable(r.table_description.creation_date_time)
self.assertEqual(r.table_description.attribute_definitions[0].attribute_name, "h")
self.assertEqual(r.table_description.attribute_definitions[0].attribute_type, "S")
self.assertEqual(r.table_description.attribute_definitions[1].attribute_name, "hh")
Expand All @@ -1005,8 +1014,8 @@ def testGsiprovisioned_Throughput(self):
self.assertEqual(r.table_description.key_schema[0].attribute_name, "h")
self.assertEqual(r.table_description.key_schema[0].key_type, "HASH")
self.assertEqual(r.table_description.local_secondary_indexes, None)
self.assertEqual(r.table_description.provisioned_throughput.last_decrease_date_time, 0.)
self.assertEqual(r.table_description.provisioned_throughput.last_increase_date_time, 0.)
self.assertEqual(r.table_description.provisioned_throughput.last_decrease_date_time, datetime.datetime(1970, 1, 1))
self.assertEqual(r.table_description.provisioned_throughput.last_increase_date_time, datetime.datetime(1970, 1, 1))
self.assertEqual(r.table_description.provisioned_throughput.number_of_decreases_today, 0)
self.assertEqual(r.table_description.provisioned_throughput.read_capacity_units, 1)
self.assertEqual(r.table_description.provisioned_throughput.write_capacity_units, 2)
Expand Down
8 changes: 5 additions & 3 deletions LowVoltage/return_types.py
Expand Up @@ -2,6 +2,8 @@

# Copyright 2013-2014 Vincent Jacques <vincent@vincent-jacques.net>

import datetime

from LowVoltage.operations.conversion import _convert_dict_to_db, _convert_value_to_db, _convert_db_to_dict, _convert_db_to_value


Expand All @@ -22,7 +24,7 @@ def __init__(
):
# http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TableDescription.html
self.attribute_definitions = None if AttributeDefinitions is None else [AttributeDefinition(**d) for d in AttributeDefinitions]
# self.creation_date_time = CreationDateTime # @todo datetime
self.creation_date_time = None if CreationDateTime is None else datetime.datetime.utcfromtimestamp(CreationDateTime)
self.global_secondary_indexes = None if GlobalSecondaryIndexes is None else [GlobalSecondaryIndexDescription(**d) for d in GlobalSecondaryIndexes]
self.item_count = None if ItemCount is None else long(ItemCount)
self.key_schema = None if KeySchema is None else [KeySchemaElement(**e) for e in KeySchema]
Expand Down Expand Up @@ -90,8 +92,8 @@ def __init__(
**dummy
):
# http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ProvisionedThroughputDescription.html
self.last_decrease_date_time = LastDecreaseDateTime # @todo datetime
self.last_increase_date_time = LastIncreaseDateTime # @todo datetime
self.last_decrease_date_time = None if LastDecreaseDateTime is None else datetime.datetime.utcfromtimestamp(LastDecreaseDateTime)
self.last_increase_date_time = None if LastIncreaseDateTime is None else datetime.datetime.utcfromtimestamp(LastIncreaseDateTime)
self.number_of_decreases_today = NumberOfDecreasesToday
self.read_capacity_units = ReadCapacityUnits
self.write_capacity_units = WriteCapacityUnits
Expand Down
3 changes: 2 additions & 1 deletion LowVoltage/tests/cover.py
Expand Up @@ -3,6 +3,7 @@
# Copyright 2013-2014 Vincent Jacques <vincent@vincent-jacques.net>

import collections
import datetime
import numbers
import unittest

Expand Down Expand Up @@ -70,7 +71,7 @@ def __getitem__(self, index):


def cover(prefix, anything):
if isinstance(anything, (bool, numbers.Number, basestring, type(None), dict)):
if isinstance(anything, (bool, numbers.Number, basestring, type(None), dict, datetime.datetime)):
return anything
elif isinstance(anything, list):
return CoverList(prefix, anything)
Expand Down
8 changes: 8 additions & 0 deletions LowVoltage/tests/dynamodb_local.py
Expand Up @@ -2,6 +2,7 @@

# Copyright 2013-2014 Vincent Jacques <vincent@vincent-jacques.net>

import datetime
import glob
import io
import os
Expand Down Expand Up @@ -51,10 +52,17 @@ def __exit__(self, *dummy):


class TestCase(unittest.TestCase):
before_start = datetime.datetime.utcnow()
after_end = before_start + datetime.timedelta(minutes=10)

@classmethod
def setUpClass(cls):
cls.connection = LowVoltage.Connection("us-west-2", LowVoltage.StaticCredentials("DummyKey", "DummySecret"), "http://localhost:65432/")

def assertDateTimeIsReasonable(self, t):
self.assertGreaterEqual(t, self.before_start)
self.assertLessEqual(t, self.after_end)


def main(*args, **kwds): # pragma no cover (Test code)
with DynamoDbLocal():
Expand Down

0 comments on commit 6eaff44

Please sign in to comment.