Merge remote branch 'remotes/macno/pushatom'
[mediagoblin.git] / mediagoblin / db / sql / base.py
index b8d5cc965dd2441e64d8deab00b4063ec2dd5ce3..40140327de374b75595bac2768ac0742d8d811c0 100644 (file)
@@ -1,16 +1,38 @@
-from sqlalchemy.orm import scoped_session, sessionmaker
+from sqlalchemy.orm import scoped_session, sessionmaker, object_session
 
 
 Session = scoped_session(sessionmaker())
 
 
+def _fix_query_dict(query_dict):
+    if '_id' in query_dict:
+        query_dict['id'] = query_dict.pop('_id')
+
+
 class GMGTableBase(object):
     query = Session.query_property()
 
     @classmethod
     def find(cls, query_dict={}):
+        _fix_query_dict(query_dict)
         return cls.query.filter_by(**query_dict)
 
     @classmethod
     def find_one(cls, query_dict={}):
+        _fix_query_dict(query_dict)
         return cls.query.filter_by(**query_dict).first()
+
+    @classmethod
+    def one(cls, query_dict):
+        return cls.find(query_dict).one()
+
+    def get(self, key):
+        return getattr(self, key)
+
+    def save(self, validate = True):
+        assert validate
+        sess = object_session(self)
+        if sess is None:
+            sess = Session()
+        sess.add(self)
+        sess.commit()