Package sqs :: Module objects
[hide private]
[frames] | no frames]

Source Code for Module sqs.objects

  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   
8 -class SQSMessage(object):
9 - def __init__(self, body='', id=None, queue=None):
10 self._body = body 11 self.id = id 12 self.queue = queue
13
14 - def __len__(self):
15 return len(self._body)
16
17 - def __str__(self):
18 return self._body
19
20 - def __repr__(self):
21 return self._body
22
23 - def _getBody(self):
24 return self._body
25
26 - def _setBody(self, body):
27 self._body = body
28 29 body = property(_getBody, _setBody)
30 31 32
33 -class SQSQueue(object):
34 - def __init__(self, url, sqs_conn):
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
40 - def __str__(self):
41 return self.name
42
43 - def __repr__(self):
44 return self.name
45 46 ## def get_timeout(self): 47 ## '''Get the visibility timeout for the queue 48 ## 49 ## @return: Visibility timeout 50 ## @rtype: int 51 ## ''' 52 ## response = self._sqs_conn.clone().get() 53 ## print respo 54 ## return parseTimeout(response.read()) 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
91 - def get_messages(self, number, timeout=None):
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
109 - def delete(self, message):
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