o
    g
                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 	ddej
dejeejf dejej fd	d
ZddedejfddZdej
fddZdd Zdd Zdd Zdd ZdS )    N)Message)etree)XMLParseError)XSDnode	attr_namereturnc                 C   s$   |  |}|d urt|| j|S d S N)getas_qnamensmap)r   r   target_namespacevalue r   C/home/ubuntu/webapp/venv/lib/python3.10/site-packages/zeep/utils.py
qname_attr   s   
r   r   c                 C   s   |   } d| v r3| d\}}|dkrd}n||}|s%td|| f |s-ttdS t||S |r;t|| S |drHt|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)anyTypeN)stripsplitr
   r   r   QNamer   )r   r   r   prefixlocal	namespacer   r   r   r      s    


r   c                 C   s&   g }|D ]}| | j||d q|S )N)
namespaces)extendfindall)r   namenamespace_setsresultr   r   r   r   findall_multiple_ns4   s   r!   c                  C   s   ddl m}  | S )Nr   __version__)zeepr#   r"   r   r   r   get_version;   s   r%   c              	      s   dd | D  t | }tdd  D }d}t|D ]*zt  fddt|D dkr1W  |S W n ty=   Y  |S w  d	  }q|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)objectsnum_objectsmax_mro
base_classr   r1   r   get_base_classA   s     r=   c                 C   s   t | }|jS r	   )r   r   r   )enveloperoot_tagr   r   r   detect_soap_envV   s   
r@   c                 C   s   t  }| |d< | S )z:Parse a HTTP content-type header and return the media-typezcontent-type)r   get_content_type)r   msgr   r   r   get_media_type[   s   rC   r	   )r'   typingemail.messager   lxmlr   zeep.exceptionsr   zeep.nsr   _ElementUnionstrr   Optionalr   r   r!   r%   r=   r@   rC   r   r   r   r   <module>   s(    

