[Checkins] SVN: zopyx.versioning/trunk/zopyx/versioning/storages/mongodb/storage.py basic storage operations are working - of course, we need tests :)
Andreas Jung
andreas at andreas-jung.com
Wed Jun 30 10:22:26 EDT 2010
Log message for revision 114016:
basic storage operations are working - of course, we need tests :)
Changed:
U zopyx.versioning/trunk/zopyx/versioning/storages/mongodb/storage.py
-=-
Modified: zopyx.versioning/trunk/zopyx/versioning/storages/mongodb/storage.py
===================================================================
--- zopyx.versioning/trunk/zopyx/versioning/storages/mongodb/storage.py 2010-06-30 14:02:20 UTC (rev 114015)
+++ zopyx.versioning/trunk/zopyx/versioning/storages/mongodb/storage.py 2010-06-30 14:22:26 UTC (rev 114016)
@@ -14,34 +14,52 @@
implements(IVersionStorage)
- def __init__(self, host, port, database, collection):
+ def __init__(self, host, port, database):
self.conn = Connection(host, port)
self.db = getattr(self.conn, database)
- self.collection = getattr(self.db, collection)
+ self.metadata = self.db.metadata
+ self.revisions = self.db.revisions
def store(self, id, version_data, creator, comment=None):
- try:
- rev = self.collection.find({'_oid' : id},
- {'_rev' : 1} ).sort('_rev', pymongo.DESCENDING)[0]['_rev']
- except IndexError:
- rev = 0
+ id_entry = self.metadata.find_one({'_oid' : id})
+ if id_entry is None:
+ revision = 0
+ self.metadata.save({'_oid' : id, '_rev' : 0})
+ else:
+ revision = id_entry['_rev'] + 1
+ self.metadata.update({'_oid' : id}, {'$set' : {'_rev' : revision}} )
- rev += 1
- data = dict(_oid=id, _rev=rev)
+ data = dict(_oid=id, _rev=revision)
data.update(json.loads(version_data))
- self.collection.save(data)
- return rev
+ self.revisions.save(data)
+ return revision
+ def retrieve(self, id, revision):
+ entry = self.revisions.find_one({'_oid' : id, '_rev' : revision})
+ if entry:
+ del entry['_oid']
+ del entry['_rev']
+ del entry['_id']
+ return json.dumps(entry)
-if __name__ == '__main__':
+ def remove(self, id):
+ self.metadata.remove({'_oid' : id})
+ self.revisions.remove({'_oid' : id})
- storage = MongoDBStorage('localhost', 10200, 'zopyx-versioning', 'test')
+ def has_revision(self, id, revision):
+ return bool(self.revisions.find_one({'_oid' : id, '_rev' : revision}))
- version_data = json.dumps({'id' : '42', 'text' : 'blather' })
- for i in range(1000):
- print storage.store('42', version_data, 'ajung', 'versioning test')
+if __name__ == '__main__':
+ storage = MongoDBStorage('localhost', 10200, 'zopyx-versioning')
+ storage.remove('42')
+ for i in range(10):
+ version_data = json.dumps({'id' : '42', 'text' : 'blather-%d' % i})
+ print storage.store('42', version_data, 'ajung', 'versioning test')
+ print storage.retrieve('42', 9)
+ print storage.has_revision('42', 9)
+ print storage.has_revision('42', 42)
More information about the checkins
mailing list