1 import xml
2 import urlparse
3 from sqs.errors import SQSError
4 from sqs.parsers import parseTimeout, parseMessageCreate, parseMessageRead, parseMessagesRead
5 from StringIO import StringIO
6
7
9 - def __init__(self, body='', id=None, queue=None):
10 self._body = body
11 self.id = id
12 self.queue = queue
13
15 return len(self._body)
16
18 return self._body
19
21 return self._body
22
24 return self._body
25
26 - def _setBody(self, body):
28
29 body = property(_getBody, _setBody)
30
31
32
35 self._sqs_conn = sqs_conn
36 self.url = url
37 self.id = urlparse.urlparse(self.url)[2]
38 self.name = self.id.split('/')[2]
39
41 return self.name
42
44 return self.name
45
46
47
48
49
50
51
52
53
54
55
56
57 - def read(self, timeout=None):
58 '''
59 Returns a single message or None if queue is empty
60
61 @param timeout: Message visibility timeout
62 @type timeout: int
63 @return: One SQSMessage from the front of the Queue
64 @rtype: SQSMessage
65 '''
66 params = {}
67 if timeout != None:
68 params = {'VisibilityTimeout' : timeout}
69 queue = self.id + '/front'
70 response = self._sqs_conn.clone().get(queue=queue, params=params)
71 return parseMessageRead(response.read())
72
73
74 - def write(self, message):
75 '''
76 Add a single message to the queue
77
78 @param message: Message that should be added.
79 @type message: SQSMessage
80 @return: SQSMessage with assigned Queue
81 @rtype: SQSMessage
82 '''
83 message.queue = self
84 headers = {'Content-Length':len(message)}
85 queue = self.id + '/back'
86 response = self._sqs_conn.clone().put(queue=queue, send_io=StringIO(message.body), headers=headers)
87 message.id = parseMessageCreate(response.read())
88 return message
89
90
92 '''Get a variable number of messages
93
94 @param number: Number of messages to get
95 @type number: int
96 @param timeout: Visibility timeout for the message
97 @type timeout: int
98 @return: List of messages
99 @rtype: list
100 '''
101 queue = self.id + '/front'
102 params = {'NumberOfMessages' : number}
103 if timeout:
104 params['VisibilityTimeout'] = timeout
105 response = self._sqs_conn.clone().get(queue=queue, params=params)
106 return parseMessagesRead(response.read())
107
108
110 '''Delete the message from the queue
111
112 @param message: Message to delete
113 @type message: SQSMessage
114 '''
115 if hasattr(message, 'id'):
116 self._sqs_conn.clone().delete(queue=self.id, message=message.id)
117