alert.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from django.db import models
  2. import base64
  3. import cgi
  4. try:
  5. import cPickle as pickle
  6. except ImportError:
  7. import pickle
  8. class Alert(models.Model):
  9. user = models.ForeignKey('User')
  10. date = models.DateTimeField()
  11. message = models.TextField()
  12. variables = models.TextField(null=True, blank=True)
  13. def vars(self):
  14. try:
  15. return pickle.loads(base64.decodestring(self.variables))
  16. except Exception:
  17. return {}
  18. def text(self, var, value):
  19. value = cgi.escape(value, True)
  20. try:
  21. self.vars_raw[var] = value
  22. except AttributeError:
  23. self.vars_raw = {var: value}
  24. return self
  25. def strong(self, var, value):
  26. try:
  27. self.vars_raw[var] = '<strong>%s</strong>' % cgi.escape(value, True)
  28. except AttributeError:
  29. self.vars_raw = {var: '<strong>%s</strong>' % cgi.escape(value, True)}
  30. return self
  31. def url(self, var, value, href, attrs=None):
  32. url = '<a href="%s"' % cgi.escape(href, True)
  33. if attrs:
  34. for k, v in attrs.iterator():
  35. url += ' %s="%s"' % (k, cgi.escape(v, True))
  36. url += '>%s</a>' % value
  37. try:
  38. self.vars_raw[var] = url
  39. except AttributeError:
  40. self.vars_raw = {var: url}
  41. return self
  42. def profile(self, var, user):
  43. from django.core.urlresolvers import reverse
  44. return self.url(var, user.username, reverse('user', kwargs={'user': user.pk, 'username': user.username_slug}))
  45. def thread(self, var, thread):
  46. from django.core.urlresolvers import reverse
  47. return self.url(var, thread.name, reverse('thread', kwargs={'thread': thread.pk, 'slug': thread.slug}))
  48. def post(self, var, thread, post):
  49. from django.core.urlresolvers import reverse
  50. return self.url(var, thread.name, reverse('thread_find', kwargs={'thread': thread.pk, 'slug': thread.slug, 'post': post.pk}))
  51. def save_all(self, *args, **kwargs):
  52. self.save(force_insert=True)
  53. self.user.save(force_update=True)
  54. def hydrate(self):
  55. try:
  56. self.variables = base64.encodestring(pickle.dumps(self.vars_raw, pickle.HIGHEST_PROTOCOL))
  57. except AttributeError:
  58. self.variables = base64.encodestring(pickle.dumps({}, pickle.HIGHEST_PROTOCOL))
  59. return self
  60. def save(self, *args, **kwargs):
  61. self.hydrate()
  62. super(Alert, self).save(*args, **kwargs)
  63. return self.user