def _convert_queue_to_xml(queue):
    ''' 
    Converts a queue object to xml to send.  The order of each field of queue 
    in xml is very important so we cann't simple call convert_class_to_xml. 

    queue: the queue object to be converted.
    '''
    queue_body = '<QueueDescription xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect">'
    if queue:
        if queue.lock_duration:
            queue_body += ''.join(['<LockDuration>', str(queue.lock_duration), '</LockDuration>'])
        if queue.max_size_in_megabytes is not None:
            queue_body += ''.join(['<MaxSizeInMegabytes>', str(queue.max_size_in_megabytes), '</MaxSizeInMegabytes>'])
        if queue.requires_duplicate_detection is not None:
            queue_body += ''.join(['<RequiresDuplicateDetection>', str(queue.requires_duplicate_detection).lower(), '</RequiresDuplicateDetection>'])
        if queue.requires_session is not None:
            queue_body += ''.join(['<RequiresSession>', str(queue.requires_session).lower(), '</RequiresSession>'])    
        if queue.default_message_time_to_live is not None:
            queue_body += ''.join(['<DefaultMessageTimeToLive>', str(queue.default_message_time_to_live), '</DefaultMessageTimeToLive>'])
        if queue.dead_lettering_on_message_expiration is not None:
            queue_body += ''.join(['<DeadLetteringOnMessageExpiration>', str(queue.dead_lettering_on_message_expiration).lower(), '</DeadLetteringOnMessageExpiration>'])    
        if queue.duplicate_detection_history_time_window is not None:
            queue_body += ''.join(['<DuplicateDetectionHistoryTimeWindow>', str(queue.duplicate_detection_history_time_window), '</DuplicateDetectionHistoryTimeWindow>'])    
        if queue.max_delivery_count is not None:
            queue_body += ''.join(['<MaxDeliveryCount>', str(queue.max_delivery_count), '</MaxDeliveryCount>'])
        if queue.enable_batched_operations is not None:
            queue_body += ''.join(['<EnableBatchedOperations>', str(queue.enable_batched_operations).lower(), '</EnableBatchedOperations>'])    
        if queue.size_in_bytes is not None:
            queue_body += ''.join(['<SizeInBytes>', str(queue.size_in_bytes), '</SizeInBytes>'])
        if queue.message_count is not None:
            queue_body += ''.join(['<MessageCount>', str(queue.message_count), '</MessageCount>'])  
         
    queue_body += '</QueueDescription>'
    return _create_entry(queue_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_topic_to_xml(topic):    
    ''' 
    Converts a topic object to xml to send.  The order of each field of topic 
    in xml is very important so we cann't simple call convert_class_to_xml. 

    topic: the topic object to be converted.
    '''

    topic_body = '<TopicDescription xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect">'
    if topic:
        if topic.default_message_time_to_live is not None:
            topic_body += ''.join(['<DefaultMessageTimeToLive>', str(topic.default_message_time_to_live), '</DefaultMessageTimeToLive>'])
        if topic.max_size_in_megabytes is not None:
            topic_body += ''.join(['<MaxSizeInMegabytes>', str(topic.max_size_in_megabytes), '</MaxSizeInMegabytes>'])
        if topic.requires_duplicate_detection is not None:
            topic_body += ''.join(['<RequiresDuplicateDetection>', str(topic.requires_duplicate_detection).lower(), '</RequiresDuplicateDetection>'])
        if topic.duplicate_detection_history_time_window is not None:
            topic_body += ''.join(['<DuplicateDetectionHistoryTimeWindow>', str(topic.duplicate_detection_history_time_window), '</DuplicateDetectionHistoryTimeWindow>'])    
        if topic.enable_batched_operations is not None:
            topic_body += ''.join(['<EnableBatchedOperations>', str(topic.enable_batched_operations).lower(), '</EnableBatchedOperations>'])
        if topic.size_in_bytes is not None:
            topic_body += ''.join(['<SizeInBytes>', str(topic.size_in_bytes), '</SizeInBytes>'])    
    topic_body += '</TopicDescription>'

    return _create_entry(topic_body)
Пример #4
0
def convert_topic_to_xml(topic):    
    ''' 
    Converts a topic object to xml to send.  The order of each field of topic 
    in xml is very important so we cann't simple call convert_class_to_xml. 

    topic: the topic object to be converted.
    '''

    topic_body = '<TopicDescription xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect">'
    if topic:
        if topic.default_message_time_to_live is not None:
            topic_body += ''.join(['<DefaultMessageTimeToLive>', str(topic.default_message_time_to_live), '</DefaultMessageTimeToLive>'])
        if topic.max_size_in_megabytes is not None:
            topic_body += ''.join(['<MaxSizeInMegabytes>', str(topic.max_size_in_megabytes), '</MaxSizeInMegabytes>'])
        if topic.requires_duplicate_detection is not None:
            topic_body += ''.join(['<RequiresDuplicateDetection>', str(topic.requires_duplicate_detection).lower(), '</RequiresDuplicateDetection>'])
        if topic.duplicate_detection_history_time_window is not None:
            topic_body += ''.join(['<DuplicateDetectionHistoryTimeWindow>', str(topic.duplicate_detection_history_time_window), '</DuplicateDetectionHistoryTimeWindow>'])    
        if topic.enable_batched_operations is not None:
            topic_body += ''.join(['<EnableBatchedOperations>', str(topic.enable_batched_operations).lower(), '</EnableBatchedOperations>'])
        if topic.size_in_bytes is not None:
            topic_body += ''.join(['<SizeInBytes>', str(topic.size_in_bytes), '</SizeInBytes>'])    
    topic_body += '</TopicDescription>'

    return _create_entry(topic_body)
def _convert_subscription_to_xml(subscription):
    ''' 
    Converts a subscription object to xml to send.  The order of each field of subscription 
    in xml is very important so we cann't simple call convert_class_to_xml. 

    subscription: the subsciption object to be converted.
    '''

    subscription_body = '<SubscriptionDescription xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect">'
    if subscription:
        if subscription.lock_duration is not None:
            subscription_body += ''.join(['<LockDuration>', str(subscription.lock_duration), '</LockDuration>'])
        if subscription.requires_session is not None:
            subscription_body += ''.join(['<RequiresSession>', str(subscription.requires_session).lower(), '</RequiresSession>'])    
        if subscription.default_message_time_to_live is not None:
            subscription_body += ''.join(['<DefaultMessageTimeToLive>', str(subscription.default_message_time_to_live), '</DefaultMessageTimeToLive>'])
        if subscription.dead_lettering_on_message_expiration is not None:
            subscription_body += ''.join(['<DeadLetteringOnMessageExpiration>', str(subscription.dead_lettering_on_message_expiration).lower(), '</DeadLetteringOnMessageExpiration>'])    
        if subscription.dead_lettering_on_filter_evaluation_exceptions is not None:
            subscription_body += ''.join(['<DeadLetteringOnFilterEvaluationExceptions>', str(subscription.dead_lettering_on_filter_evaluation_exceptions).lower(), '</DeadLetteringOnFilterEvaluationExceptions>'])    
        if subscription.enable_batched_operations is not None:
            subscription_body += ''.join(['<EnableBatchedOperations>', str(subscription.enable_batched_operations).lower(), '</EnableBatchedOperations>'])    
        if subscription.max_delivery_count is not None:
            subscription_body += ''.join(['<MaxDeliveryCount>', str(subscription.max_delivery_count), '</MaxDeliveryCount>'])
        if subscription.message_count is not None:
            subscription_body += ''.join(['<MessageCount>', str(subscription.message_count), '</MessageCount>'])  
         
    subscription_body += '</SubscriptionDescription>'    
    return _create_entry(subscription_body)
Пример #6
0
def convert_queue_to_xml(queue):
    ''' 
    Converts a queue object to xml to send.  The order of each field of queue 
    in xml is very important so we cann't simple call convert_class_to_xml. 

    queue: the queue object to be converted.
    '''
    queue_body = '<QueueDescription xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect">'
    if queue:
        if queue.lock_duration:
            queue_body += ''.join(['<LockDuration>', str(queue.lock_duration), '</LockDuration>'])
        if queue.max_size_in_megabytes is not None:
            queue_body += ''.join(['<MaxSizeInMegabytes>', str(queue.max_size_in_megabytes), '</MaxSizeInMegabytes>'])
        if queue.requires_duplicate_detection is not None:
            queue_body += ''.join(['<RequiresDuplicateDetection>', str(queue.requires_duplicate_detection).lower(), '</RequiresDuplicateDetection>'])
        if queue.requires_session is not None:
            queue_body += ''.join(['<RequiresSession>', str(queue.requires_session).lower(), '</RequiresSession>'])    
        if queue.default_message_time_to_live is not None:
            queue_body += ''.join(['<DefaultMessageTimeToLive>', str(queue.default_message_time_to_live), '</DefaultMessageTimeToLive>'])
        if queue.dead_lettering_on_message_expiration is not None:
            queue_body += ''.join(['<DeadLetteringOnMessageExpiration>', str(queue.dead_lettering_on_message_expiration).lower(), '</DeadLetteringOnMessageExpiration>'])    
        if queue.duplicate_detection_history_time_window is not None:
            queue_body += ''.join(['<DuplicateDetectionHistoryTimeWindow>', str(queue.duplicate_detection_history_time_window), '</DuplicateDetectionHistoryTimeWindow>'])    
        if queue.max_delivery_count is not None:
            queue_body += ''.join(['<MaxDeliveryCount>', str(queue.max_delivery_count), '</MaxDeliveryCount>'])
        if queue.enable_batched_operations is not None:
            queue_body += ''.join(['<EnableBatchedOperations>', str(queue.enable_batched_operations).lower(), '</EnableBatchedOperations>'])    
        if queue.size_in_bytes is not None:
            queue_body += ''.join(['<SizeInBytes>', str(queue.size_in_bytes), '</SizeInBytes>'])
        if queue.message_count is not None:
            queue_body += ''.join(['<MessageCount>', str(queue.message_count), '</MessageCount>'])  
         
    queue_body += '</QueueDescription>'
    return _create_entry(queue_body)
Пример #7
0
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)
Пример #8
0
def convert_subscription_to_xml(subscription):
    ''' 
    Converts a subscription object to xml to send.  The order of each field of subscription 
    in xml is very important so we cann't simple call convert_class_to_xml. 

    subscription: the subsciption object to be converted.
    '''

    subscription_body = '<SubscriptionDescription xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect">'
    if subscription:
        if subscription.lock_duration is not None:
            subscription_body += ''.join(['<LockDuration>', str(subscription.lock_duration), '</LockDuration>'])
        if subscription.requires_session is not None:
            subscription_body += ''.join(['<RequiresSession>', str(subscription.requires_session).lower(), '</RequiresSession>'])    
        if subscription.default_message_time_to_live is not None:
            subscription_body += ''.join(['<DefaultMessageTimeToLive>', str(subscription.default_message_time_to_live), '</DefaultMessageTimeToLive>'])
        if subscription.dead_lettering_on_message_expiration is not None:
            subscription_body += ''.join(['<DeadLetteringOnMessageExpiration>', str(subscription.dead_lettering_on_message_expiration).lower(), '</DeadLetteringOnMessageExpiration>'])    
        if subscription.dead_lettering_on_filter_evaluation_exceptions is not None:
            subscription_body += ''.join(['<DeadLetteringOnFilterEvaluationExceptions>', str(subscription.dead_lettering_on_filter_evaluation_exceptions).lower(), '</DeadLetteringOnFilterEvaluationExceptions>'])    
        if subscription.enable_batched_operations is not None:
            subscription_body += ''.join(['<EnableBatchedOperations>', str(subscription.enable_batched_operations).lower(), '</EnableBatchedOperations>'])    
        if subscription.max_delivery_count is not None:
            subscription_body += ''.join(['<MaxDeliveryCount>', str(subscription.max_delivery_count), '</MaxDeliveryCount>'])
        if subscription.message_count is not None:
            subscription_body += ''.join(['<MessageCount>', str(subscription.message_count), '</MessageCount>'])  
         
    subscription_body += '</SubscriptionDescription>'    
    return _create_entry(subscription_body)
Пример #9
0
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
Пример #10
0
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 namespace_to_xml(name, region):
        '''Converts a service bus namespace description to xml

        The xml format:
        <?xml version="1.0" encoding="utf-8" standalone="yes"?>
        <entry xmlns="http://www.w3.org/2005/Atom">
            <content type="application/xml">
                <NamespaceDescription xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect">
                    <Region>West US</Region>
                </NamespaceDescription>
            </content>
        </entry>
        '''
        body = '<NamespaceDescription xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect">'
        body += ''.join(['<Region>', region, '</Region>'])
        body += '</NamespaceDescription>'

        return _create_entry(body)
Пример #12
0
    def namespace_to_xml(name, region):
        '''Converts a service bus namespace description to xml

        The xml format:
        <?xml version="1.0" encoding="utf-8" standalone="yes"?>
        <entry xmlns="http://www.w3.org/2005/Atom">
            <content type="application/xml">
                <NamespaceDescription xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect">
                    <Region>West US</Region>
                </NamespaceDescription>
            </content>
        </entry>
        '''
        body = '<NamespaceDescription xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect">'
        body += ''.join(['<Region>', region, '</Region>'])
        body += '</NamespaceDescription>'

        return _create_entry(body)