Let SQL objects support .setdefault() and .delete()
authorElrond <elrond+mediagoblin.org@samba-tng.org>
Sun, 19 Feb 2012 11:14:58 +0000 (12:14 +0100)
committerElrond <elrond+mediagoblin.org@samba-tng.org>
Sun, 26 Feb 2012 18:46:44 +0000 (19:46 +0100)
Some parts in the code like to use .setdefault(). So make
them happy and provide a minimal version. It ignores the
given default and expects the attribute to already exist.

Other parts use .delete() to delete a complete object. This
version expects the object to live in a session and also
does the final commit.

mediagoblin/db/sql/base.py

index 6ed24a03d79648a7a4dc43ebf318c382f1dda4ee..838080b03f921c1ecafb812c1493ba2b8f44933c 100644 (file)
@@ -67,6 +67,10 @@ class GMGTableBase(object):
     def get(self, key):
         return getattr(self, key)
 
+    def setdefault(self, key, defaultvalue):
+        # The key *has* to exist on sql.
+        return getattr(self, key)
+
     def save(self, validate=True):
         assert validate
         sess = object_session(self)
@@ -75,6 +79,12 @@ class GMGTableBase(object):
         sess.add(self)
         sess.commit()
 
+    def delete(self):
+        sess = object_session(self)
+        assert sess is not None, "Not going to delete detached %r" % self
+        sess.delete(self)
+        sess.commit()
+
 
 Base = declarative_base(cls=GMGTableBase)