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