From e945778bce1d0af9091f7be2503b06756298b905 Mon Sep 17 00:00:00 2001 From: hernani Date: Sat, 8 May 2010 21:17:08 +0000 Subject: [PATCH] Fix problem with dummy actions. Also try coercion of settings to the same type as the default before saving. git-svn-id: http://svn.osqa.net/svnroot/osqa/trunk@182 0cfe37f9-358a-4d5e-be75-b63607b5c754 --- forum/actions/meta.py | 8 ++++---- forum/models/action.py | 10 ++++++++-- forum/settings/base.py | 6 +++++- forum/settings/settings.py | 0 forum/subscriptions.py | 4 ++-- forum_modules/default_badges/badges.py | 4 ++-- 6 files changed, 21 insertions(+), 11 deletions(-) delete mode 100644 forum/settings/settings.py diff --git a/forum/actions/meta.py b/forum/actions/meta.py index a45fe58..2117fb7 100644 --- a/forum/actions/meta.py +++ b/forum/actions/meta.py @@ -198,10 +198,10 @@ class DeleteAction(ActionProxy): class QuestionViewAction(DummyActionProxy): - def __init__(self, question, user): + def __init__(self, node, user): self.viewuser = user - self.question = question + self.node = node def process_action(self): - self.question.extra_count = F('extra_count') + 1 - self.question.save() + self.node.extra_count = F('extra_count') + 1 + self.node.save() diff --git a/forum/models/action.py b/forum/models/action.py index 7909974..90c61f8 100644 --- a/forum/models/action.py +++ b/forum/models/action.py @@ -219,8 +219,14 @@ class ActionProxy(Action): class Meta: proxy = True -class DummyActionProxy(Action): - __metaclass__ = ActionProxyMetaClass +class DummyActionProxyMetaClass(type): + def __new__(cls, *args, **kwargs): + new_cls = super(DummyActionProxyMetaClass, cls).__new__(cls, *args, **kwargs) + ActionProxyMetaClass.types[new_cls.get_type()] = new_cls + return new_cls + +class DummyActionProxy(object): + __metaclass__ = DummyActionProxyMetaClass hooks = [] diff --git a/forum/settings/base.py b/forum/settings/base.py index 5bcf5fc..db02b6c 100644 --- a/forum/settings/base.py +++ b/forum/settings/base.py @@ -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 index e69de29..0000000 diff --git a/forum/subscriptions.py b/forum/subscriptions.py index e943d2d..4dc8f34 100644 --- a/forum/subscriptions.py +++ b/forum/subscriptions.py @@ -156,12 +156,12 @@ def question_viewed(action, new): return try: - subscription = QuestionSubscription.objects.get(question=action.question, user=action.viewuser) + subscription = QuestionSubscription.objects.get(question=action.node, user=action.viewuser) subscription.last_view = datetime.datetime.now() subscription.save() except: if action.viewuser.subscription_settings.questions_viewed: - subscription = QuestionSubscription(question=action.question, user=action.viewuser) + subscription = QuestionSubscription(question=action.node, user=action.viewuser) subscription.save() QuestionViewAction.hook(question_viewed) diff --git a/forum_modules/default_badges/badges.py b/forum_modules/default_badges/badges.py index ba01a0f..2305dd4 100644 --- a/forum_modules/default_badges/badges.py +++ b/forum_modules/default_badges/badges.py @@ -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): -- 2.45.2