Add time- and version-stamps to created objects

master
bspeice 2016-09-06 18:59:16 -04:00
parent 5e6bc68a33
commit eb0c96b691
4 changed files with 29 additions and 5 deletions

View File

@ -54,7 +54,7 @@
<ConfirmationsSetting value="0" id="Add" /> <ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" /> <ConfirmationsSetting value="0" id="Remove" />
</component> </component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_3" default="false" assert-keyword="false" jdk-15="false" project-jdk-name="Python 2.7.12 virtualenv at ~/Development/metrik/py2-virt" project-jdk-type="Python SDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_1_3" default="false" assert-keyword="false" jdk-15="false" project-jdk-name="Python 3.5.1 virtualenv at C:\Users\Bradlee Speice\Development\metrik\metrik-virtual" project-jdk-type="Python SDK">
<output url="file://$PROJECT_DIR$/out" /> <output url="file://$PROJECT_DIR$/out" />
</component> </component>
<component name="PythonCompatibilityInspectionAdvertiser"> <component name="PythonCompatibilityInspectionAdvertiser">

View File

@ -1,2 +1,2 @@
__version__ = '0.4.1' __version__ = '0.4.2'
__release__ = __version__ __release__ = __version__

View File

@ -4,6 +4,7 @@ from datetime import datetime
from contextlib import contextmanager from contextlib import contextmanager
from metrik.conf import get_config from metrik.conf import get_config
from metrik import __version__ as version
class MongoTarget(Target): class MongoTarget(Target):
@ -29,9 +30,12 @@ class MongoTarget(Target):
'_id': self.id '_id': self.id
}) is not None }) is not None
def persist(self, dict_object): def persist(self, dict_object, present=None):
id_dict = dict_object id_dict = dict_object
id_dict['_id'] = self.id id_dict['_id'] = self.id
id_dict['_metrik_version'] = version
id_dict['_created_at'] = (present if present is not None
else datetime.now())
with self.get_db() as db: with self.get_db() as db:
return db[self.collection].insert_one(id_dict).inserted_id return db[self.collection].insert_one(id_dict).inserted_id

View File

@ -1,10 +1,11 @@
from pymongo import MongoClient from pymongo import MongoClient
from random import randint from random import randint
from datetime import datetime, timedelta
from metrik.targets.mongo import MongoTarget from metrik.targets.mongo import MongoTarget
from metrik.conf import get_config from metrik.conf import get_config
from test.mongo_test import MongoTest from test.mongo_test import MongoTest
from metrik import __version__ as version
class MongoTargetTest(MongoTest): class MongoTargetTest(MongoTest):
@ -38,4 +39,23 @@ class MongoTargetTest(MongoTest):
# Make sure we can trivially scale correctly # Make sure we can trivially scale correctly
targets = [MongoTarget('test_collection', i) for i in range(10000)] targets = [MongoTarget('test_collection', i) for i in range(10000)]
self.assertEqual(len(targets), 10000) self.assertEqual(len(targets), 10000)
def test_metrik_version_saved(self):
t = MongoTarget('test_collection', 1234)
t.persist({})
r = t.retrieve()
assert r['_metrik_version'] == version
def test_created_at_timestamp(self):
present = datetime.now()
t = MongoTarget('test_collection', 1234)
t.persist({})
r = t.retrieve()
self.assertGreaterEqual(present, r['_created_at'])
one_second_past = present - timedelta(seconds=1)
t = MongoTarget('test_collection', 1235)
t.persist({}, present=one_second_past)
r = t.retrieve()
self.assertEqual(one_second_past, r['_created_at'])