alertmodel.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. class Meta:
  14. app_label = 'misago'
  15. def vars(self):
  16. try:
  17. return pickle.loads(base64.decodestring(self.variables))
  18. except Exception:
  19. return {}
  20. def text(self, var, value):
  21. value = cgi.escape(value, True)
  22. try:
  23. self.vars_raw[var] = value
  24. except AttributeError:
  25. self.vars_raw = {var: value}
  26. return self
  27. def strong(self, var, value):
  28. try:
  29. self.vars_raw[var] = '<strong>%s</strong>' % cgi.escape(value, True)
  30. except AttributeError:
  31. self.vars_raw = {var: '<strong>%s</strong>' % cgi.escape(value, True)}
  32. return self
  33. def url(self, var, value, href, attrs=None):
  34. url = '<a href="%s"' % cgi.escape(href, True)
  35. if attrs:
  36. for k, v in attrs.iterator():
  37. url += ' %s="%s"' % (k, cgi.escape(v, True))
  38. url += '>%s</a>' % value
  39. try:
  40. self.vars_raw[var] = url
  41. except AttributeError:
  42. self.vars_raw = {var: url}
  43. return self
  44. def profile(self, var, user):
  45. from django.core.urlresolvers import reverse
  46. return self.url(var, user.username, reverse('user', kwargs={'user': user.pk, 'username': user.username_slug}))
  47. def thread(self, var, thread_type, thread):
  48. from django.core.urlresolvers import reverse
  49. return self.url(var, thread.name, reverse(thread_type, kwargs={'thread': thread.pk, 'slug': thread.slug}))
  50. def post(self, var, thread_type, thread, post):
  51. from django.core.urlresolvers import reverse
  52. return self.url(var, thread.name, reverse('%s_find' % thread_type, kwargs={'thread': thread.pk, 'slug': thread.slug, 'post': post.pk}))
  53. def save_all(self, *args, **kwargs):
  54. self.save(force_insert=True)
  55. self.user.save(force_update=True)
  56. def hydrate(self):
  57. try:
  58. self.variables = base64.encodestring(pickle.dumps(self.vars_raw, pickle.HIGHEST_PROTOCOL))
  59. except AttributeError:
  60. self.variables = base64.encodestring(pickle.dumps({}, pickle.HIGHEST_PROTOCOL))
  61. return self
  62. def save(self, *args, **kwargs):
  63. self.hydrate()
  64. super(Alert, self).save(*args, **kwargs)
  65. return self.user