From 8e00ecc5842cae670503b972df2248acc89713c4 Mon Sep 17 00:00:00 2001 From: Adolfo Fitoria Date: Thu, 11 Oct 2012 12:50:42 -0600 Subject: added Message model workaround for django >= 1.4.1 --- askbot/models/__init__.py | 44 ++++++++++++++++++++------------------------ askbot/models/message.py | 25 +++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 24 deletions(-) create mode 100644 askbot/models/message.py diff --git a/askbot/models/__init__.py b/askbot/models/__init__.py index fa9c08fe..fce1a09a 100644 --- a/askbot/models/__init__.py +++ b/askbot/models/__init__.py @@ -67,6 +67,9 @@ from askbot import mail from django import get_version as django_version +if django_version() > '1.3.1': + from askbot.models.message import Message + def get_model(model_name): """a shortcut for getting model for an askbot app""" return models.get_model('askbot', model_name) @@ -118,40 +121,33 @@ def get_users_by_text_query(search_query, users_query_set = None): # models.Q(about__search = search_query) # ) -class CacheMessage(object): - '''An object to replace the django.contrib.auth.models.Message model - that stores the messages in the cache''' +class RelatedObjectSimulator(object): + '''Objects that simulates the "messages_set" related field + somehow django does not creates it automatically in django1.4.1''' - def __init__(self, user): + def __init__(self, user, model_class): self.user = user - self.cache_key = 'user-message-%d' % self.user.id + self.model_class = model_class - @property - def messages(self): - return cache.cache.get(self.cache_key) or [] - - def _set_message(self, message): - messages = self.messages - messages.append(message) - cache.cache.set(self.cache_key, messages) + def create(self, **kwargs): + return self.model_class.objects.create(user=self.user, **kwargs) - def create(self, message=''): - if message: - self._set_message(message) + def filter(self, *args, **kwargs): + return self.model_class.objects.filter(*args, **kwargs) - def get_and_delete_messages(self): - return_value = self.messages - cache.cache.delete(self.cache_key) - return return_value +#django 1.4.1 only @property def user_message_set(self): - if not hasattr(self, '_message_set_cache'): - self._message_set_cache = CacheMessage(self) - return self._message_set_cache + return RelatedObjectSimulator(self, Message) +#django 1.4.1 only def user_get_and_delete_messages(self): - return self.message_set.get_and_delete_messages() + messages = [] + for message in Message.objects.filter(user=self): + messages.append(message) + message.delete() + return messages if django_version() > '1.3.1': User.add_to_class('message_set', user_message_set) diff --git a/askbot/models/message.py b/askbot/models/message.py new file mode 100644 index 00000000..5086f515 --- /dev/null +++ b/askbot/models/message.py @@ -0,0 +1,25 @@ +'''Copied from Django 1.3.1 source code, it will use this model to''' +from django.db import models +from django.contrib.auth.models import User +from django.utils.translation import ugettext as _ + +class Message(models.Model): + """ + The message system is a lightweight way to queue messages for given + users. A message is associated with a User instance (so it is only + applicable for registered users). There's no concept of expiration or + timestamps. Messages are created by the Django admin after successful + actions. For example, "The poll Foo was created successfully." is a + message. + """ + user = models.ForeignKey(User, related_name='_message_set') + message = models.TextField(_('message')) + + class Meta: + '''Added for backwards compatibility with databases + migrated from django 1.3''' + app_label = 'auth' + db_table = 'auth_message' + + def __unicode__(self): + return self.message -- cgit v1.2.3-1-g7c22