models.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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('users.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 url(self, var, value, href, attrs=None):
  26. url = '<a href="%s"' % cgi.escape(href, True)
  27. if attrs:
  28. for k, v in attrs.iterator():
  29. url += ' %s="%s"' % (k, cgi.escape(v, True))
  30. url += '>%s</a>' % value
  31. try:
  32. self.vars_raw[var] = url
  33. except AttributeError:
  34. self.vars_raw = {var: url}
  35. return self
  36. def save_all(self, *args, **kwargs):
  37. self.save(force_insert=True)
  38. self.user.save(force_update=True)
  39. def save(self, *args, **kwargs):
  40. try:
  41. self.variables = base64.encodestring(pickle.dumps(self.vars_raw, pickle.HIGHEST_PROTOCOL))
  42. except AttributeError:
  43. self.variables = base64.encodestring(pickle.dumps({}, pickle.HIGHEST_PROTOCOL))
  44. super(Alert, self).save(*args, **kwargs)
  45. return self.user