[Checkins] SVN: zopyx.versioning/trunk/zopyx/versioning/storages/mongodb/storage.py savepoint

Andreas Jung andreas at andreas-jung.com
Tue Jun 29 14:01:59 EDT 2010


Log message for revision 113983:
  savepoint
  

Changed:
  A   zopyx.versioning/trunk/zopyx/versioning/storages/mongodb/storage.py

-=-
Added: zopyx.versioning/trunk/zopyx/versioning/storages/mongodb/storage.py
===================================================================
--- zopyx.versioning/trunk/zopyx/versioning/storages/mongodb/storage.py	                        (rev 0)
+++ zopyx.versioning/trunk/zopyx/versioning/storages/mongodb/storage.py	2010-06-29 18:01:59 UTC (rev 113983)
@@ -0,0 +1,47 @@
+"""
+Prototype storage implementation for MongoDB
+"""
+
+import json
+import pymongo
+
+from zope.interface import implements
+from zopyx.versioning.interfaces import IVersionStorage
+
+from pymongo.connection import Connection
+
+class MongoDBStorage(object):
+
+    implements(IVersionStorage)
+
+    def __init__(self, host, port, database, collection):
+        self.conn = Connection(host, port)
+        self.db = getattr(self.conn, database)
+        self.collection = getattr(self.db, collection)
+
+    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
+
+        rev += 1 
+        data = dict(_oid=id, _rev=rev)
+        data.update(json.loads(version_data))
+        self.collection.save(data)
+        return rev
+
+
+
+if __name__ == '__main__':
+
+    storage = MongoDBStorage('localhost', 10200, 'zopyx-versioning', 'test')
+
+    version_data = json.dumps({'id' : '42', 'text' : 'blather' })
+    for i in range(1000):
+        print storage.store('42', version_data, 'ajung', 'versioning test')
+
+
+



More information about the checkins mailing list