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 xml:space="preserve">{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.items(): mtype = '' conv = _PYTHON_TO_ENTITY_CONVERSIONS.get(type(value)) if conv is None and sys.version_info >= (3, ) and value is None: conv = _to_entity_none if conv is None: raise WindowsAzureError( _ERROR_CANNOT_SERIALIZE_VALUE_TO_ENTITY.format( type(value).__name__)) mtype, value = conv(value) # form the property node properties_str += ''.join(['<d:', name]) if value is None: properties_str += ' m:null="true" />' else: if mtype: properties_str += ''.join([' m:type="', mtype, '"']) properties_str += ''.join( ['>', xml_escape(value), '</d:', name, '>']) if sys.version_info < (3, ): if isinstance(properties_str, unicode): properties_str = properties_str.encode('utf-8') # 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 xml:space="preserve">{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.items(): mtype = '' conv = _PYTHON_TO_ENTITY_CONVERSIONS.get(type(value)) if conv is None and sys.version_info >= (3,) and value is None: conv = _to_entity_none if conv is None: raise WindowsAzureError( _ERROR_CANNOT_SERIALIZE_VALUE_TO_ENTITY.format( type(value).__name__)) mtype, value = conv(value) # form the property node properties_str += ''.join(['<d:', name]) if value is None: properties_str += ' m:null="true" />' else: if mtype: properties_str += ''.join([' m:type="', mtype, '"']) properties_str += ''.join(['>', xml_escape(value), '</d:', name, '>']) if sys.version_info < (3,): if isinstance(properties_str, unicode): properties_str = properties_str.encode('utf-8') # generate the entity_body entity_body = entity_body.format(properties=properties_str) xmlstr = _create_entry(entity_body) return xmlstr