def _convert_rule_to_xml(rule): ''' Converts a rule object to xml to send. The order of each field of rule in xml is very important so we cann't simple call convert_class_to_xml. rule: the rule object to be converted. ''' rule_body = '<RuleDescription xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect">' if rule: if rule.filter_type: rule_body += ''.join(['<Filter i:type="', xml_escape(rule.filter_type), '">']) if rule.filter_type == 'CorrelationFilter': rule_body += ''.join(['<CorrelationId>', xml_escape(rule.filter_expression), '</CorrelationId>']) else: rule_body += ''.join(['<SqlExpression>', xml_escape(rule.filter_expression), '</SqlExpression>']) rule_body += '<CompatibilityLevel>20</CompatibilityLevel>' rule_body += '</Filter>' if rule.action_type: rule_body += ''.join(['<Action i:type="', xml_escape(rule.action_type), '">']) if rule.action_type == 'SqlRuleAction': rule_body += ''.join(['<SqlExpression>', xml_escape(rule.action_expression), '</SqlExpression>']) rule_body += '<CompatibilityLevel>20</CompatibilityLevel>' rule_body += '</Action>' rule_body += '</RuleDescription>' return _create_entry(rule_body)
def convert_rule_to_xml(rule): ''' Converts a rule object to xml to send. The order of each field of rule in xml is very important so we cann't simple call convert_class_to_xml. rule: the rule object to be converted. ''' rule_body = '<RuleDescription xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect">' if rule: if rule.filter_type: rule_body += ''.join(['<Filter i:type="', xml_escape(rule.filter_type), '">']) if rule.filter_type == 'CorrelationFilter': rule_body += ''.join(['<CorrelationId>', xml_escape(rule.filter_expression), '</CorrelationId>']) else: rule_body += ''.join(['<SqlExpression>', xml_escape(rule.filter_expression), '</SqlExpression>']) rule_body += '<CompatibilityLevel>20</CompatibilityLevel>' rule_body += '</Filter>' if rule.action_type: rule_body += ''.join(['<Action i:type="', xml_escape(rule.action_type), '">']) if rule.action_type == 'SqlRuleAction': rule_body += ''.join(['<SqlExpression>', xml_escape(rule.action_expression), '</SqlExpression>']) rule_body += '<CompatibilityLevel>20</CompatibilityLevel>' rule_body += '</Action>' rule_body += '</RuleDescription>' return _create_entry(rule_body)
def _convert_hosted_service_to_xml(hosted_service): xml_content = '<?xml version="1.0" encoding="utf-8"?> \ <CreateHostedService xmlns="http://schemas.microsoft.com/windowsazure"> \ <ServiceName>{name}</ServiceName> \ <Label>{label}</Label> \ <Description>{desc}</Description> \ <Location>{location}</Location> \ </CreateHostedService>' xml_content = xml_content.format(name=hosted_service.name, label=base64.b64encode(hosted_service.label), desc=xml_escape(hosted_service.description), location=xml_escape(hosted_service.location)) return xml_content
def put_message(self, queue_name, message_text, visibilitytimeout=None, messagettl=None): ''' Adds a new message to the back of the message queue. A visibility timeout can also be specified to make the message invisible until the visibility timeout expires. A message must be in a format that can be included in an XML request with UTF-8 encoding. The encoded message can be up to 64KB in size for versions 2011-08-18 and newer, or 8KB in size for previous versions. queue_name: name of the queue. visibilitytimeout: Optional. If specified, the request must be made using an x-ms-version of 2011-08-18 or newer. messagettl: Optional. Specifies the time-to-live interval for the message, in seconds. The maximum time-to-live allowed is 7 days. If this parameter is omitted, the default time-to-live is 7 days. ''' _validate_not_none('queue_name', queue_name) _validate_not_none('message_text', message_text) request = HTTPRequest() request.method = 'POST' request.host = self._get_host() request.path = '/' + str(queue_name) + '/messages' request.query = [ ('visibilitytimeout', _str_or_none(visibilitytimeout)), ('messagettl', _str_or_none(messagettl)) ] request.body = _get_request_body('<?xml version="1.0" encoding="utf-8"?> \ <QueueMessage> \ <MessageText>' + xml_escape(str(message_text)) + '</MessageText> \ </QueueMessage>') request.path, request.query = _update_request_uri_query_local_storage(request, self.use_local_storage) request.headers = _update_storage_queue_header(request, self.account_name, self.account_key) response = self._perform_request(request)
def convert_entity_to_xml(source): ''' Converts an entity object to xml to send. The entity format is: <entry xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom"> <title /> <updated>2008-09-18T23:46:19.3857256Z</updated> <author> <name /> </author> <id /> <content type="application/xml"> <m:properties> <d:Address>Mountain View</d:Address> <d:Age m:type="Edm.Int32">23</d:Age> <d:AmountDue m:type="Edm.Double">200.23</d:AmountDue> <d:BinaryData m:type="Edm.Binary" m:null="true" /> <d:CustomerCode m:type="Edm.Guid">c9da6455-213d-42c9-9a79-3e9149a57833</d:CustomerCode> <d:CustomerSince m:type="Edm.DateTime">2008-07-10T00:00:00</d:CustomerSince> <d:IsActive m:type="Edm.Boolean">true</d:IsActive> <d:NumOfOrders m:type="Edm.Int64">255</d:NumOfOrders> <d:PartitionKey>mypartitionkey</d:PartitionKey> <d:RowKey>myrowkey1</d:RowKey> <d:Timestamp m:type="Edm.DateTime">0001-01-01T00:00:00</d:Timestamp> </m:properties> </content> </entry> ''' #construct the entity body included in <m:properties> and </m:properties> entity_body = '<m:properties>{properties}</m:properties>' if isinstance(source, WindowsAzureData): source = vars(source) properties_str = '' #set properties type for types we know if value has no type info. #if value has type info, then set the type to value.type for name, value in source.iteritems(): mtype = '' conv = _PYTHON_TO_ENTITY_CONVERSIONS.get(type(value)) if conv is None: raise WindowsAzureError(_ERROR_CANNOT_SERIALIZE_VALUE_TO_ENTITY % type(value).__name__) mtype, value = conv(value) #form the property node properties_str += ''.join(['<d:', name]) if value == '': properties_str += ' m:null="true" />' else: if mtype: properties_str += ''.join([' m:type="', mtype, '"']) properties_str += ''.join(['>', xml_escape(value), '</d:', name, '>']) #generate the entity_body entity_body = entity_body.format(properties=properties_str) xmlstr = _create_entry(entity_body) return xmlstr
def convert_entity_to_xml(source): ''' Converts an entity object to xml to send. The entity format is: <entry xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom"> <title /> <updated>2008-09-18T23:46:19.3857256Z</updated> <author> <name /> </author> <id /> <content type="application/xml"> <m:properties> <d:Address>Mountain View</d:Address> <d:Age m:type="Edm.Int32">23</d:Age> <d:AmountDue m:type="Edm.Double">200.23</d:AmountDue> <d:BinaryData m:type="Edm.Binary" m:null="true" /> <d:CustomerCode m:type="Edm.Guid">c9da6455-213d-42c9-9a79-3e9149a57833</d:CustomerCode> <d:CustomerSince m:type="Edm.DateTime">2008-07-10T00:00:00</d:CustomerSince> <d:IsActive m:type="Edm.Boolean">true</d:IsActive> <d:NumOfOrders m:type="Edm.Int64">255</d:NumOfOrders> <d:PartitionKey>mypartitionkey</d:PartitionKey> <d:RowKey>myrowkey1</d:RowKey> <d:Timestamp m:type="Edm.DateTime">0001-01-01T00:00:00</d:Timestamp> </m:properties> </content> </entry> ''' #construct the entity body included in <m:properties> and </m:properties> entity_body = '<m:properties>{properties}</m:properties>' if isinstance(source, WindowsAzureData): source = vars(source) properties_str = '' #set properties type for types we know if value has no type info. #if value has type info, then set the type to value.type for name, value in source.iteritems(): mtype = '' conv = _PYTHON_TO_ENTITY_CONVERSIONS.get(type(value)) if conv is None: raise WindowsAzureError(_ERROR_CANNOT_SERIALIZE_VALUE_TO_ENTITY % type(value).__name__) mtype, value = conv(value) #form the property node properties_str += ''.join(['<d:', name]) if mtype: properties_str += ''.join([' m:type="', mtype, '"']) properties_str += ''.join(['>', xml_escape(value), '</d:', name, '>']) #generate the entity_body entity_body = entity_body.format(properties=properties_str) xmlstr = _create_entry(entity_body) return xmlstr
def update_message(self, queue_name, message_id, message_text, popreceipt, visibilitytimeout): ''' Updates the visibility timeout of a message. You can also use this operation to update the contents of a message. queue_name: Name of the queue. message_id: Message to update. message_text: Content of message. popreceipt: Required. A valid pop receipt value returned from an earlier call to the Get Messages or Update Message operation. visibilitytimeout: Required. Specifies the new visibility timeout value, in seconds, relative to server time. The new value must be larger than or equal to 0, and cannot be larger than 7 days. The visibility timeout of a message cannot be set to a value later than the expiry time. A message can be updated until it has been deleted or has expired. ''' _validate_not_none('queue_name', queue_name) _validate_not_none('message_id', message_id) _validate_not_none('message_text', message_text) _validate_not_none('popreceipt', popreceipt) _validate_not_none('visibilitytimeout', visibilitytimeout) request = HTTPRequest() request.method = 'PUT' request.host = self._get_host() request.path = '/' + \ _str(queue_name) + '/messages/' + _str(message_id) + '' request.query = [ ('popreceipt', _str_or_none(popreceipt)), ('visibilitytimeout', _str_or_none(visibilitytimeout)) ] request.body = _get_request_body( '<?xml version="1.0" encoding="utf-8"?> \ <QueueMessage> \ <MessageText>' + xml_escape(_str(message_text)) + '</MessageText> \ </QueueMessage>') request.path, request.query = _update_request_uri_query_local_storage( request, self.use_local_storage) request.headers = _update_storage_queue_header( request, self.authentication) response = self._perform_request(request) return _parse_response_for_dict_filter( response, filter=['x-ms-popreceipt', 'x-ms-time-next-visible'])
def put_message(self, queue_name, message_text, visibilitytimeout=None, messagettl=None): ''' Adds a new message to the back of the message queue. A visibility timeout can also be specified to make the message invisible until the visibility timeout expires. A message must be in a format that can be included in an XML request with UTF-8 encoding. The encoded message can be up to 64KB in size for versions 2011-08-18 and newer, or 8KB in size for previous versions. queue_name: Name of the queue. message_text: Message content. visibilitytimeout: Optional. If not specified, the default value is 0. Specifies the new visibility timeout value, in seconds, relative to server time. The new value must be larger than or equal to 0, and cannot be larger than 7 days. The visibility timeout of a message cannot be set to a value later than the expiry time. visibilitytimeout should be set to a value smaller than the time-to-live value. messagettl: Optional. Specifies the time-to-live interval for the message, in seconds. The maximum time-to-live allowed is 7 days. If this parameter is omitted, the default time-to-live is 7 days. ''' _validate_not_none('queue_name', queue_name) _validate_not_none('message_text', message_text) request = HTTPRequest() request.method = 'POST' request.host = self._get_host() request.path = '/' + _str(queue_name) + '/messages' request.query = [('visibilitytimeout', _str_or_none(visibilitytimeout)), ('messagettl', _str_or_none(messagettl))] request.body = _get_request_body( '<?xml version="1.0" encoding="utf-8"?> \ <QueueMessage> \ <MessageText>' + xml_escape(_str(message_text)) + '</MessageText> \ </QueueMessage>') request.path, request.query = _update_request_uri_query_local_storage( request, self.use_local_storage) request.headers = _update_storage_queue_header(request, self.account_name, self.account_key) self._perform_request(request)
def put_message(self, queue_name, message_text, visibilitytimeout=None, messagettl=None): ''' Adds a new message to the back of the message queue. A visibility timeout can also be specified to make the message invisible until the visibility timeout expires. A message must be in a format that can be included in an XML request with UTF-8 encoding. The encoded message can be up to 64KB in size for versions 2011-08-18 and newer, or 8KB in size for previous versions. queue_name: Name of the queue. message_text: Message content. visibilitytimeout: Optional. If not specified, the default value is 0. Specifies the new visibility timeout value, in seconds, relative to server time. The new value must be larger than or equal to 0, and cannot be larger than 7 days. The visibility timeout of a message cannot be set to a value later than the expiry time. visibilitytimeout should be set to a value smaller than the time-to-live value. messagettl: Optional. Specifies the time-to-live interval for the message, in seconds. The maximum time-to-live allowed is 7 days. If this parameter is omitted, the default time-to-live is 7 days. ''' _validate_not_none('queue_name', queue_name) _validate_not_none('message_text', message_text) request = HTTPRequest() request.method = 'POST' request.host = self._get_host() request.path = '/' + _str(queue_name) + '/messages' request.query = [ ('visibilitytimeout', _str_or_none(visibilitytimeout)), ('messagettl', _str_or_none(messagettl)) ] request.body = _get_request_body( '<?xml version="1.0" encoding="utf-8"?> \ <QueueMessage> \ <MessageText>' + xml_escape(_str(message_text)) + '</MessageText> \ </QueueMessage>') request.path, request.query = _update_request_uri_query_local_storage( request, self.use_local_storage) request.headers = _update_storage_queue_header( request, self.authentication) self._perform_request(request)
def update_message(self, queue_name, message_id, message_text, popreceipt, visibilitytimeout): """ Updates the visibility timeout of a message. You can also use this operation to update the contents of a message. queue_name: name of the queue. popreceipt: Required. A valid pop receipt value returned from an earlier call to the Get Messages or Update Message operation. visibilitytimeout: Required. Specifies the new visibility timeout value, in seconds, relative to server time. The new value must be larger than or equal to 0, and cannot be larger than 7 days. The visibility timeout of a message cannot be set to a value later than the expiry time. A message can be updated until it has been deleted or has expired. """ _validate_not_none("queue_name", queue_name) _validate_not_none("message_id", message_id) _validate_not_none("message_text", message_text) _validate_not_none("popreceipt", popreceipt) _validate_not_none("visibilitytimeout", visibilitytimeout) request = HTTPRequest() request.method = "PUT" request.host = self._get_host() request.path = "/" + str(queue_name) + "/messages/" + str(message_id) + "" request.query = [ ("popreceipt", _str_or_none(popreceipt)), ("visibilitytimeout", _str_or_none(visibilitytimeout)), ] request.body = _get_request_body( '<?xml version="1.0" encoding="utf-8"?> \ <QueueMessage> \ <MessageText>' + xml_escape(str(message_text)) + "</MessageText> \ </QueueMessage>" ) request.path, request.query = _update_request_uri_query_local_storage(request, self.use_local_storage) request.headers = _update_storage_queue_header(request, self.account_name, self.account_key) response = self._perform_request(request) return _parse_response_for_dict_filter(response, filter=["x-ms-popreceipt", "x-ms-time-next-visible"])