Browse Source

Beginnings of models refractoring

Ralfp 12 years ago
parent
commit
471e6eeeb6
2 changed files with 75 additions and 0 deletions
  1. 1 0
      misago/models/__init__.py
  2. 74 0
      misago/models/alert.py

+ 1 - 0
misago/models/__init__.py

@@ -0,0 +1 @@
+from misago.models.alert import Alert

+ 74 - 0
misago/models/alert.py

@@ -0,0 +1,74 @@
+from django.db import models
+import base64
+import cgi
+try:
+    import cPickle as pickle
+except ImportError:
+    import pickle
+
+class Alert(models.Model):
+    user = models.ForeignKey('User')
+    date = models.DateTimeField()
+    message = models.TextField()
+    variables = models.TextField(null=True, blank=True)
+
+    def vars(self):
+        try:
+            return pickle.loads(base64.decodestring(self.variables))
+        except Exception:
+            return {}
+
+    def text(self, var, value):
+        value = cgi.escape(value, True)
+        try:
+            self.vars_raw[var] = value
+        except AttributeError:
+            self.vars_raw = {var: value}
+        return self
+    
+    def strong(self, var, value):
+        try:
+            self.vars_raw[var] = '<strong>%s</strong>' % cgi.escape(value, True)
+        except AttributeError:
+            self.vars_raw = {var: '<strong>%s</strong>' % cgi.escape(value, True)}
+        return self
+
+    def url(self, var, value, href, attrs=None):
+        url = '<a href="%s"' % cgi.escape(href, True)
+        if attrs:
+            for k, v in attrs.iterator():
+                url += ' %s="%s"' % (k, cgi.escape(v, True))
+        url += '>%s</a>' % value
+        try:
+            self.vars_raw[var] = url
+        except AttributeError:
+            self.vars_raw = {var: url}
+        return self
+
+    def profile(self, var, user):
+        from django.core.urlresolvers import reverse
+        return self.url(var, user.username, reverse('user', kwargs={'user': user.pk, 'username': user.username_slug}))
+
+    def thread(self, var, thread):
+        from django.core.urlresolvers import reverse
+        return self.url(var, thread.name, reverse('thread', kwargs={'thread': thread.pk, 'slug': thread.slug}))
+
+    def post(self, var, thread, post):
+        from django.core.urlresolvers import reverse
+        return self.url(var, thread.name, reverse('thread_find', kwargs={'thread': thread.pk, 'slug': thread.slug, 'post': post.pk}))
+
+    def save_all(self, *args, **kwargs):
+        self.save(force_insert=True)
+        self.user.save(force_update=True)
+
+    def hydrate(self):
+        try:
+            self.variables = base64.encodestring(pickle.dumps(self.vars_raw, pickle.HIGHEST_PROTOCOL))
+        except AttributeError:
+            self.variables = base64.encodestring(pickle.dumps({}, pickle.HIGHEST_PROTOCOL))
+        return self
+
+    def save(self, *args, **kwargs):
+        self.hydrate()
+        super(Alert, self).save(*args, **kwargs)
+        return self.user