U
    d/eP                     @   s|   d Z ddlmZ ddlZddlmZ dZefddZddd	Z	d
d Z
dd Zdd ZdddZdd Zdd Zdd ZdS )zXML utility module.    )absolute_importN)ElementTreez'http://s3.amazonaws.com/doc/2006-03-01/c                 C   s   t | |rd|ini S )z2Create ElementTree.Element with tag and namespace.xmlns)ETElement)tag	namespace r	   -/tmp/pip-unpacked-wheel-xery97c7/minio/xml.pyr      s    r   c                 C   s   t | |}|dk	r||_|S )z:Create ElementTree.SubElement on parent with tag and text.N)r   
SubElementtext)parentr   r   elementr	   r	   r
   r       s    r   c                 C   sF   | j d}|dk rdS |d7 }| j d}|dk r8dS | j || S )zExact namespace if found.{r       })r   find)r   startendr	   r	   r
   _get_namespace(   s    r   c                 C   s,   t | }| |rd| n||r&d|ini S )z.Namespace aware ElementTree.Element.findall().ns:ns)r   findallr   namer   r	   r	   r
   r   4   s
    r   c                 C   s,   t | }| |rd| n||r&d|ini S )z+Namespace aware ElementTree.Element.find().r   r   )r   r   r   r	   r	   r
   r   =   s
    r   Fc                 C   s4   t | |} | dkr*|r&td| ddS | jp2dS )zz
    Namespace aware ElementTree.Element.findtext() with strict flag
    raises ValueError if element name not exist.
    NzXML element <z> not foundr   )r   
ValueErrorr   )r   r   strictr	   r	   r
   findtextF   s    
r   c                 C   s   |  t|S )z8Unmarshal given XML string to an object of passed class.)Zfromxmlr   
fromstring)clsZ	xmlstringr	   r	   r
   	unmarshalS   s    r!   c                 C   s&   t  }t| j|ddd | S )z%Convert ElementTree.Element to bytes.NF)encodingxml_declaration)ioBytesIOr   r   writegetvalue)r   datar	   r	   r
   getbytesX   s    
  r)   c                 C   s   t | dS )z-Get XML data as bytes of ElementTree.Element.N)r)   Ztoxml)objr	   r	   r
   marshala   s    r+   )N)F)__doc__
__future__r   r$   Z	xml.etreer   r   Z_S3_NAMESPACEr   r   r   r   r   r   r!   r)   r+   r	   r	   r	   r
   <module>   s   
		
	