def _convert_xml_to_topic(xmlstr): '''Converts xml response to topic The xml format for topic: <entry xmlns='http://www.w3.org/2005/Atom'> <content type='application/xml'> <TopicDescription xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect"> <DefaultMessageTimeToLive>P10675199DT2H48M5.4775807S</DefaultMessageTimeToLive> <MaxSizeInMegaBytes>1024</MaxSizeInMegaBytes> <RequiresDuplicateDetection>false</RequiresDuplicateDetection> <DuplicateDetectionHistoryTimeWindow>P7D</DuplicateDetectionHistoryTimeWindow> <DeadLetteringOnFilterEvaluationExceptions>true</DeadLetteringOnFilterEvaluationExceptions> </TopicDescription> </content> </entry> ''' xmldoc = minidom.parseString(xmlstr) topic = Topic() invalid_topic = True #get node for each attribute in Topic class, if nothing found then the response is not valid xml for Topic. for desc in _get_children_from_path(xmldoc, 'entry', 'content', 'TopicDescription'): invalid_topic = True for attr_name, attr_value in vars(topic).iteritems(): xml_attrs = _get_child_nodes(desc, _get_serialization_name(attr_name)) if xml_attrs: xml_attr = xml_attrs[0] if xml_attr.firstChild: value = xml_attr.firstChild.nodeValue conversion = _TOPIC_CONVERSION.get(attr_name) if conversion is not None: value = conversion(value) setattr(topic, attr_name, value) invalid_topic = False if invalid_topic: raise WindowsAzureError(azure._ERROR_TOPIC_NOT_FOUND) #extract id, updated and name value from feed entry and set them of topic. for name, value in _get_entry_properties(xmlstr, True).iteritems(): setattr(topic, name, value) return topic
def _convert_xml_to_queue(xmlstr): ''' Converts xml response to queue object. The format of xml response for queue: <QueueDescription xmlns=\"http://schemas.microsoft.com/netservices/2010/10/servicebus/connect\"> <MaxSizeInBytes>10000</MaxSizeInBytes> <DefaultMessageTimeToLive>PT5M</DefaultMessageTimeToLive> <LockDuration>PT2M</LockDuration> <RequiresGroupedReceives>False</RequiresGroupedReceives> <SupportsDuplicateDetection>False</SupportsDuplicateDetection> ... </QueueDescription> ''' xmldoc = minidom.parseString(xmlstr) queue = Queue() invalid_queue = True #get node for each attribute in Queue class, if nothing found then the response is not valid xml for Queue. for queue_desc in _get_children_from_path(xmldoc, 'entry', 'content', 'QueueDescription'): for attr_name, attr_value in vars(queue).iteritems(): xml_attrs = _get_child_nodes(queue_desc, _get_serialization_name(attr_name)) if xml_attrs: xml_attr = xml_attrs[0] if xml_attr.firstChild: value = xml_attr.firstChild.nodeValue conversion = _QUEUE_CONVERSION.get(attr_name) if conversion is not None: value = conversion(value) setattr(queue, attr_name, value) invalid_queue = False if invalid_queue: raise WindowsAzureError(azure._ERROR_QUEUE_NOT_FOUND) #extract id, updated and name value from feed entry and set them of queue. for name, value in _get_entry_properties(xmlstr, True).iteritems(): setattr(queue, name, value) return queue