1# ------------------------------------------------------------------------- 2# Copyright (c) Microsoft Corporation. All rights reserved. 3# Licensed under the MIT License. See License.txt in the project root for 4# license information. 5# -------------------------------------------------------------------------- 6import sys 7 8if sys.version_info >= (3,): 9 from io import BytesIO 10else: 11 try: 12 from cStringIO import StringIO as BytesIO 13 except: 14 from StringIO import StringIO as BytesIO 15 16try: 17 from xml.etree import cElementTree as ETree 18except ImportError: 19 from xml.etree import ElementTree as ETree 20 21from ..common._common_conversion import ( 22 _str, 23) 24from ._encryption import ( 25 _encrypt_queue_message, 26) 27 28 29def _get_path(queue_name=None, include_messages=None, message_id=None): 30 ''' 31 Creates the path to access a queue resource. 32 33 queue_name: 34 Name of queue. 35 include_messages: 36 Whether or not to include messages. 37 message_id: 38 Message id. 39 ''' 40 if queue_name and include_messages and message_id: 41 return '/{0}/messages/{1}'.format(_str(queue_name), message_id) 42 if queue_name and include_messages: 43 return '/{0}/messages'.format(_str(queue_name)) 44 elif queue_name: 45 return '/{0}'.format(_str(queue_name)) 46 else: 47 return '/' 48 49 50def _convert_queue_message_xml(message_text, encode_function, key_encryption_key): 51 ''' 52 <?xml version="1.0" encoding="utf-8"?> 53 <QueueMessage> 54 <MessageText></MessageText> 55 </QueueMessage> 56 ''' 57 queue_message_element = ETree.Element('QueueMessage') 58 59 # Enabled 60 message_text = encode_function(message_text) 61 if key_encryption_key is not None: 62 message_text = _encrypt_queue_message(message_text, key_encryption_key) 63 ETree.SubElement(queue_message_element, 'MessageText').text = message_text 64 65 # Add xml declaration and serialize 66 try: 67 stream = BytesIO() 68 ETree.ElementTree(queue_message_element).write(stream, xml_declaration=True, encoding='utf-8', method='xml') 69 output = stream.getvalue() 70 finally: 71 stream.close() 72 73 return output 74