123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- 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('users.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 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 save(self, *args, **kwargs):
- try:
- self.variables = base64.encodestring(pickle.dumps(self.vars_raw, pickle.HIGHEST_PROTOCOL))
- except AttributeError:
- self.variables = base64.encodestring(pickle.dumps({}, pickle.HIGHEST_PROTOCOL))
- super(Alert, self).save(*args, **kwargs)
- return self.user
|