U
    H4f	                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ dej	ej
eejf ejej dddZdeejdd	d
Zej	dddZdd Zdd Zdd Zdd ZdS )    N)etree)XMLParseError)XSD)node	attr_namereturnc                 C   s$   |  |}|d k	r t|| j|S d S N)getas_qnamensmap)r   r   target_namespacevalue r   ./tmp/pip-unpacked-wheel-04z2hmy8/zeep/utils.py
qname_attr   s    
r   )r   r   c                 C   s   |   } d| krf| d\}}|dkr,d}n
||}|sJtd|| f |sZttdS t||S |rvt|| S |drt|d | S t| S )z"Convert the given value to a QName:xmlz$http://www.w3.org/XML/1998/namespacez No namespace defined for %r (%r)ZanyTypeN)stripsplitr	   r   r   QNamer   )r   r   r   prefixlocal	namespacer   r   r   r
      s     

r
   )r   c                 C   s&   g }|D ]}| | j||d q|S )N)
namespaces)extendfindall)r   nameZnamespace_setsresultr   r   r   r   findall_multiple_ns4   s    r   c                  C   s   ddl m}  | S )Nr   __version__)Zzeepr    r   r   r   r   get_version;   s    r!   c              	      s   dd | D  t | }tdd  D }d}t|D ]Vz*t  fddt|D dkr`W  qW n tk
r|   Y  qY nX  d	  }q4|S )
zyReturn the best base class for multiple objects.

    Implementation is quick and dirty, might be done better.. ;-)

    c                 S   s"   g | ]}t |jd d d qS )N)inspectgetmro	__class__).0objr   r   r   
<listcomp>G   s     z"get_base_class.<locals>.<listcomp>c                 s   s   | ]}t |V  qd S r   )len)r&   mror   r   r   	<genexpr>I   s     z!get_base_class.<locals>.<genexpr>Nc                    s   h | ]} |  qS r   r   )r&   jbasesir   r   	<setcomp>N   s     z!get_base_class.<locals>.<setcomp>   r   )r)   maxrange
IndexError)Zobjectsnum_objectsZmax_mroZ
base_classr   r-   r   get_base_classA   s     
r6   c                 C   s   t | }|jS r   )r   r   r   )ZenvelopeZroot_tagr   r   r   detect_soap_envV   s    
r7   c                 C   s   t | \}}| S )z:Parse a HTTP content-type header and return the media-type)cgiparse_headerlower)r   Z
main_value
parametersr   r   r   get_media_type[   s    r<   )N)N)r8   r#   typinglxmlr   Zzeep.exceptionsr   Zzeep.nsr   Z_ElementUnionstrr   Optionalr   r
   r   r!   r6   r7   r<   r   r   r   r   <module>   s"    
