Allow .id instead of ._id for the Mongo backend
authorElrond <elrond+mediagoblin.org@samba-tng.org>
Sun, 25 Dec 2011 15:01:59 +0000 (16:01 +0100)
committerElrond <elrond+mediagoblin.org@samba-tng.org>
Sat, 25 Feb 2012 13:10:57 +0000 (14:10 +0100)
To allow easier migration to the SQLAlchemy style .id give
the User and MediaEntry mongo classes an alias attribute of
.id that maps to ['_id'].

Use it in the upload process, because this was one of the
last positions with a ['_id'] instead of ._id (due to a bug
in mongokit).

mediagoblin/db/mongo/models.py
mediagoblin/submit/views.py

index 57af137dd23afcf0a2a087ed3796a4f49df6900c..99c7905d80fca9146f24206fd760433671eecb17 100644 (file)
@@ -25,6 +25,17 @@ from mediagoblin.tools.pagination import Pagination
 from mediagoblin.tools import url
 from mediagoblin.db.mixin import UserMixin, MediaEntryMixin, MediaCommentMixin
 
+
+class MongoPK(object):
+    """An alias for the _id primary key"""
+    def __get__(self, instance, cls):
+       return instance['_id']   
+    def __set__(self, instance, val):
+       instance['_id'] = val  
+    def __delete__(self, instance):
+       del instance['_id']
+
+
 ###################
 # Custom validators
 ###################
@@ -87,6 +98,8 @@ class User(Document, UserMixin):
         'status': u'needs_email_verification',
         'is_admin': False}
 
+    id = MongoPK()
+
 
 class MediaEntry(Document, MediaEntryMixin):
     """
@@ -205,6 +218,8 @@ class MediaEntry(Document, MediaEntryMixin):
         'created': datetime.datetime.utcnow,
         'state': u'unprocessed'}
 
+    id = MongoPK()
+
     def get_comments(self, ascending=False):
         if ascending:
             order = ASCENDING
index df5b15c044ebd886d111e651489cd0a95dae21de..1e145e9d7df962fe5a064531bb77d1f48b80d2bc 100644 (file)
@@ -59,7 +59,7 @@ def submit_start(request):
 
                 # create entry and save in database
                 entry = request.db.MediaEntry()
-                entry['_id'] = ObjectId()
+                entry.id = ObjectId()
                 entry.media_type = unicode(media_type)
                 entry.title = (
                     unicode(request.POST['title'])