/src/boto/boto/sqs/jsonmessage.py

http://gsutil.googlecode.com/ · Python · 45 lines · 15 code · 2 blank · 28 comment · 2 complexity · ce5121cd99962939b8153d70520a6e0c MD5 · raw file

  1. # Copyright (c) 2006-2008 Mitch Garnaat http://garnaat.org/
  2. #
  3. # Permission is hereby granted, free of charge, to any person obtaining a
  4. # copy of this software and associated documentation files (the
  5. # "Software"), to deal in the Software without restriction, including
  6. # without limitation the rights to use, copy, modify, merge, publish, dis-
  7. # tribute, sublicense, and/or sell copies of the Software, and to permit
  8. # persons to whom the Software is furnished to do so, subject to the fol-
  9. # lowing conditions:
  10. #
  11. # The above copyright notice and this permission notice shall be included
  12. # in all copies or substantial portions of the Software.
  13. #
  14. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  15. # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
  16. # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
  17. # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  18. # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  19. # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  20. # IN THE SOFTWARE.
  21. from boto.sqs.message import MHMessage
  22. from boto.exception import SQSDecodeError
  23. import base64
  24. try:
  25. import simplejson as json
  26. except ImportError:
  27. import json
  28. class JSONMessage(MHMessage):
  29. """
  30. Acts like a dictionary but encodes it's data as a Base64 encoded JSON payload.
  31. """
  32. def decode(self, value):
  33. try:
  34. value = base64.b64decode(value)
  35. value = json.loads(value)
  36. except:
  37. raise SQSDecodeError('Unable to decode message', self)
  38. return value
  39. def encode(self, value):
  40. value = json.dumps(value)
  41. return base64.b64encode(value)