]> git.openstreetmap.org Git - osqa.git/blobdiff - forum/models/action.py
Some improvements in cache.
[osqa.git] / forum / models / action.py
index 4eed471696b0dd172e1af903d8f3fdfbd46015cf..d892ac92658099b1a3f50a4ee63482076a7cff54 100644 (file)
@@ -4,18 +4,24 @@ from threading import Thread
 from base import *\r
 import re\r
 \r
-class ActionQuerySet(models.query.QuerySet):\r
+class ActionQuerySet(CachedQuerySet):\r
+    def obj_from_datadict(self, datadict):\r
+        cls = ActionProxyMetaClass.types.get(datadict['action_type'], None)\r
+        if cls:\r
+            obj = cls()\r
+            obj.__dict__.update(datadict)\r
+            return obj\r
+        else:\r
+            return super(ActionQuerySet, self).obj_from_datadict(datadict)\r
+\r
     def get(self, *args, **kwargs):\r
-        action = super(ActionQuerySet, self).get(*args, **kwargs)\r
-        if self.model == Action:\r
-            return action.leaf()\r
-        return action\r
+        return super(ActionQuerySet, self).get(*args, **kwargs).leaf()\r
 \r
-class ActionManager(models.Manager):\r
+class ActionManager(CachedManager):\r
     use_for_related_fields = True\r
 \r
     def get_query_set(self):\r
-        qs = ActionQuerySet(self.model).filter(canceled=False)\r
+        qs = ActionQuerySet(self.model)\r
 \r
         if self.model is not Action:\r
             return qs.filter(action_type=self.model.get_type())\r
@@ -26,7 +32,8 @@ class ActionManager(models.Manager):
         kwargs['action_type__in'] = [t.get_type() for t in types]\r
         return self.get(*args, **kwargs)\r
 \r
-class Action(models.Model):\r
+\r
+class Action(BaseModel):\r
     user = models.ForeignKey('User', related_name="actions")\r
     ip   = models.CharField(max_length=16)\r
     node = models.ForeignKey('Node', null=True, related_name="actions")\r
@@ -94,7 +101,9 @@ class Action(models.Model):
             return self\r
 \r
         leaf = leaf_cls()\r
-        leaf.__dict__ = self.__dict__\r
+        d = self._as_dict()\r
+        leaf.__dict__.update(self._as_dict())\r
+        l = leaf._as_dict()\r
         return leaf\r
 \r
     @classmethod\r
@@ -121,9 +130,9 @@ class Action(models.Model):
 \r
         return self\r
 \r
-    def delete(self):\r
+    def delete(self, *args, **kwargs):\r
         self.cancel_action()\r
-        super(Action, self).delete()\r
+        super(Action, self).delete(*args, **kwargs)\r
 \r
     def cancel(self, user=None, ip=None):\r
         if not self.canceled:\r
@@ -174,7 +183,7 @@ def trigger_hooks_threaded(action, hooks, new):
                 except Exception, e:\r
                     logging.error("Error in %s hook: %s" % (cls.__name__, str(e)))\r
 \r
-class ActionProxyMetaClass(models.Model.__metaclass__):\r
+class ActionProxyMetaClass(BaseMetaClass):\r
     types = {}\r
 \r
     def __new__(cls, *args, **kwargs):\r