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
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
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
\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