]> git.openstreetmap.org Git - osqa.git/blobdiff - forum/models/action.py
Bad url reverse causing 500 on temporary signin.
[osqa.git] / forum / models / action.py
index 583b27c078fcf46c55eb6c3017082caaabf1effe..4eed471696b0dd172e1af903d8f3fdfbd46015cf 100644 (file)
@@ -4,29 +4,28 @@ from threading import Thread
 from base import *\r
 import re\r
 \r
+class ActionQuerySet(models.query.QuerySet):\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
+\r
 class ActionManager(models.Manager):\r
     use_for_related_fields = True\r
 \r
     def get_query_set(self):\r
-        qs = super(ActionManager, self).get_query_set().filter(canceled=False)\r
+        qs = ActionQuerySet(self.model).filter(canceled=False)\r
 \r
         if self.model is not Action:\r
             return qs.filter(action_type=self.model.get_type())\r
         else:\r
             return qs\r
 \r
-    def get(self, *args, **kwargs):\r
-        action = super(ActionManager, self).get(*args, **kwargs)\r
-        if self.model == Action:\r
-            return action.leaf()\r
-        return action\r
-\r
     def get_for_types(self, types, *args, **kwargs):\r
         kwargs['action_type__in'] = [t.get_type() for t in types]\r
         return self.get(*args, **kwargs)\r
 \r
-        \r
-\r
 class Action(models.Model):\r
     user = models.ForeignKey('User', related_name="actions")\r
     ip   = models.CharField(max_length=16)\r
@@ -65,9 +64,19 @@ class Action(models.Model):
     def cancel_action(self):\r
         pass\r
 \r
-    def describe(self, viewer=None):\r
+    @property\r
+    def verb(self):\r
         return ""\r
 \r
+    def describe(self, viewer=None):\r
+        return self.__class__.__name__\r
+\r
+    def get_absolute_url(self):\r
+        if self.node:\r
+            return self.node.get_absolute_url()\r
+        else:\r
+            return self.user.get_profile_url()\r
+\r
     def repute(self, user, value):\r
         repute = ActionRepute(action=self, user=user, value=value)\r
         repute.save()\r
@@ -209,11 +218,20 @@ class ActionProxy(Action):
     class Meta:\r
         proxy = True\r
 \r
-class DummyActionProxy(Action):\r
-    __metaclass__ = ActionProxyMetaClass\r
+class DummyActionProxyMetaClass(type):\r
+    def __new__(cls, *args, **kwargs):\r
+        new_cls = super(DummyActionProxyMetaClass, cls).__new__(cls, *args, **kwargs)\r
+        ActionProxyMetaClass.types[new_cls.get_type()] = new_cls\r
+        return new_cls\r
+\r
+class DummyActionProxy(object):\r
+    __metaclass__ = DummyActionProxyMetaClass\r
 \r
     hooks = []\r
 \r
+    def __init__(self, ip=None):\r
+        self.ip = ip\r
+\r
     def process_data(self, **data):\r
         pass\r
 \r
@@ -258,11 +276,11 @@ class ActionRepute(models.Model):
 \r
     def save(self, *args, **kwargs):\r
         super(ActionRepute, self).save(*args, **kwargs)\r
-        self.user.reputation = models.F('reputation') + self.value\r
+        self.user.reputation += self.value\r
         self.user.save()\r
 \r
     def delete(self):\r
-        self.user.reputation = models.F('reputation') - self.value\r
+        self.user.reputation -= self.value\r
         self.user.save()\r
         super(ActionRepute, self).delete()\r
 \r