]> git.openstreetmap.org Git - osqa.git/commitdiff
Fix problem with dummy actions. Also try coercion of settings to the same type as...
authorhernani <hernani@0cfe37f9-358a-4d5e-be75-b63607b5c754>
Sat, 8 May 2010 21:17:08 +0000 (21:17 +0000)
committerhernani <hernani@0cfe37f9-358a-4d5e-be75-b63607b5c754>
Sat, 8 May 2010 21:17:08 +0000 (21:17 +0000)
git-svn-id: http://svn.osqa.net/svnroot/osqa/trunk@182 0cfe37f9-358a-4d5e-be75-b63607b5c754

forum/actions/meta.py
forum/models/action.py
forum/settings/base.py
forum/settings/settings.py [deleted file]
forum/subscriptions.py
forum_modules/default_badges/badges.py

index a45fe588a4089c3895da9b4c39ee5e8ea50edcba..2117fb7220e47d4cc7a508e95541196a438c52d3 100644 (file)
@@ -198,10 +198,10 @@ class DeleteAction(ActionProxy):
 \r
 \r
 class QuestionViewAction(DummyActionProxy):\r
-    def __init__(self, question, user):\r
+    def __init__(self, node, user):\r
         self.viewuser = user\r
-        self.question = question\r
+        self.node = node\r
 \r
     def process_action(self):\r
-        self.question.extra_count = F('extra_count') + 1\r
-        self.question.save()\r
+        self.node.extra_count = F('extra_count') + 1\r
+        self.node.save()\r
index 790997491c9dc986eb17a93bcc66d386ed3a59de..90c61f8c548f153b839744de3a19a2f49c9776db 100644 (file)
@@ -219,8 +219,14 @@ 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
index 5bcf5fc51a6d929c6c82209c15ca2a3b1d22e9a9..db02b6c15ab0d17637e1b6779f0720e776b24733 100644 (file)
@@ -66,7 +66,10 @@ class BaseSetting(object):
         self.set_value(self.default)
 
     def _parse(self, value):
-        return value
+        try:
+            return self.base_type(value)
+        except:
+            return value
 
 
 class Setting(object):
@@ -80,6 +83,7 @@ class Setting(object):
             emul = Setting.emulators[deftype]
         else:
             emul = type(deftype.__name__ + cls.__name__, (BaseSetting,), {})
+            emul.base_type = deftype
             fns = [n for n, f in [(p, getattr(deftype, p)) for p in dir(deftype) if not p in dir(cls)] if callable(f)]
 
             for n in fns:
diff --git a/forum/settings/settings.py b/forum/settings/settings.py
deleted file mode 100644 (file)
index e69de29..0000000
index e943d2d34de098f583a63465b76e4a0060c54100..4dc8f34dcf88df57dc54dfc748b473525fbf8442 100644 (file)
@@ -156,12 +156,12 @@ def question_viewed(action, new):
         return\r
 \r
     try:\r
-        subscription = QuestionSubscription.objects.get(question=action.question, user=action.viewuser)\r
+        subscription = QuestionSubscription.objects.get(question=action.node, user=action.viewuser)\r
         subscription.last_view = datetime.datetime.now()\r
         subscription.save()\r
     except:\r
         if action.viewuser.subscription_settings.questions_viewed:\r
-            subscription = QuestionSubscription(question=action.question, user=action.viewuser)\r
+            subscription = QuestionSubscription(question=action.node, user=action.viewuser)\r
             subscription.save()\r
 \r
 QuestionViewAction.hook(question_viewed)\r
index ba01a0fe39e7ffed3fb7f9b6193a1c777e10c39f..2305dd4ddc76f3e4f8974bbbce45897ebc6e3747 100644 (file)
@@ -16,8 +16,8 @@ class QuestionViewBadge(AbstractBadge):
         return _('Asked a question with %s views') % str(self.nviews)
 
     def award_to(self, action):
-        if action.question.extra_count == int(self.nviews):
-            return action.question.author
+        if action.node.extra_count == int(self.nviews):
+            return action.node.author
 
 
 class PopularQuestion(QuestionViewBadge):