serializer.py 747 B

12345678910111213141516171819202122232425262728293031323334353637
  1. import base64
  2. from hashlib import sha256
  3. from django.conf import settings
  4. try:
  5. import cPickle as pickle
  6. except ImportError:
  7. import pickle
  8. def _checksum(base):
  9. return sha256('%s+%s' % (settings.SECRET_KEY, base)).hexdigest()[:14]
  10. def loads(dry):
  11. checksum = dry[:14]
  12. base = dry[14:]
  13. if _checksum(base) == checksum:
  14. return pickle.loads(base64.decodestring(base))
  15. else:
  16. raise ValueError("pickle checksum is invalid")
  17. def dumps(wet):
  18. base = base64.encodestring(pickle.dumps(wet, pickle.HIGHEST_PROTOCOL))
  19. checksum = _checksum(base)
  20. return '%s%s' % (checksum, base)
  21. def regenerate_checksum(dry):
  22. base = dry[14:]
  23. checksum = _checksum(base)
  24. return '%s%s' % (checksum, base)