o
    g#                     @   s   d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ e eZd	d
gZG dd	 d	eZG dd
 d
eZdS )    N)etree)
exceptionsns)
qname_attr)NotSetxsi_ns)Base)max_occurs_iter)	AnyObjectAnyAnyAttributec                       s   e Zd ZdZ	d fdd	Zdd Zdd	 Zd
d Zd ddZdd Z	d!ddZ
d ddZdd Zdd Zdd Zdd Zd"ddZ  ZS )#r   N   strictc                    s:   t    || _|| _|| _|| _ddlm} | | _dS )a  

        :param process_contents: Specifies how the XML processor should handle
                                 validation against the elements specified by
                                 this any element
        :type process_contents: str (strict, lax, skip)

        r   )AnyTypeN)	super__init__
max_occurs
min_occursrestrictprocess_contentszeep.xsdr   type)selfr   r   r   r   r   	__class__ N/home/ubuntu/webapp/venv/lib/python3.10/site-packages/zeep/xsd/elements/any.pyr      s   
zAny.__init__c                 C   s   |S Nr   )r   
any_objectr   r   r   __call__+      zAny.__call__c                 C   s   d| j j| jf S )Nz<%s(name=%r)>)r   __name__namer   r   r   r   __repr__.   s   zAny.__repr__c                 C      dS NTr   )r   valuer   r   r   accept1   r    z
Any.acceptc           	   	   C   s  | j dkr|S t|j}|r@|jr@|jD ]}|j|jr"|} nq|jD ]}z|t	|d }|W   S  t
y?   Y q&w t|td}|d urX||}|j|||dS | jrd| jj|||dS z||j}|j|||dW S  tjtj
fy   | Y S w )Nskipr   r   context)r   r   QNametagschemas	documentshas_schema_document_for_ns	namespacedeserializelistLookupErrorr   r   get_typeparse_xmlelementr   get_elementparser   NamespaceError)	r   
xmlelementschemar+   qnamecontext_schemadataxsd_typeelementr   r   r   r8   4   s8   





z	Any.parsec                 C   s&   ||v r| | || }||iS i S r   )remove)r   kwargsr"   available_kwargsr'   r   r   r   parse_kwargsX   s
   
zAny.parse_kwargsc           	      C   s^   g }t | jD ]}|r!| }| j|||d}|dur || q | js-|r+|d nd}|S )a  Consume matching xmlelements and call parse() on each of them

        :param xmlelements: Dequeue of XML element objects
        :type xmlelements: collections.deque of lxml.etree._Element
        :param schema: The parent XML schema
        :type schema: zeep.xsd.Schema
        :param name: The name of the parent element
        :type name: str
        :param context: Optional parsing context (for inline schemas)
        :type context: zeep.xsd.context.XmlParserContext
        :return: dict or None

        r*   Nr   )r	   r   popleftr8   appendaccepts_multiple)	r   xmlelementsr;   r"   r+   result_unusedr:   itemr   r   r   parse_xmlelements_   s   
zAny.parse_xmlelementsc                 C   s   |d usJ |  || | jret|treddlm} t| j|r>|D ]}t|d}|	t
d| jj | ||| q"d S | jrW|D ]}t|| jj}| ||| qCd S |D ]	}| ||| qYd S | ||| d S )Nr   )AnySimpleTyperK   r   )validaterG   
isinstancer3   r   rM   r   r   
SubElementsetr   r<   _render_value_itemr"   )r   parentr'   render_pathrM   valnoder   r   r   render|   s&   z
Any.renderc                 C   s   |d t fv rd S t|tjr|| d S | jr:t|tr.|D ]}| jj||d |d qd S | jj||d |d d S t|jtrQ|jD ]}|j	j|||d qCd S |j	j||j|d d S )N)rT   )
r   rO   r   _ElementrF   r   r3   rW   r'   xsd_elm)r   rS   r'   rT   rU   r   r   r   rR      s   

zAny._render_value_itemc                 C   s   | j r>t|tr>t|| jk rtd| j | jdkr1t| jtr1t|| jkr1td| j |D ]}| 	|| q3d S | j
sL|d tfv rLtd| 	|| d S )Nz,Expected at least %d items (minOccurs check)	unboundedz+Expected at most %d items (maxOccurs check)zMissing element for Any)rG   rO   r3   lenr   r   ValidationErrorr   int_validate_itemis_optionalr   )r   r'   rT   rU   r   r   r   rN      s$   


zAny.validatec                 C   s   |d u rd S | j rtjtg| j j }ntjttg}|d tfv r.| js,tj	d| j
 |dd S t|t|sQdd |D }dt|jd|f }td|dfd S )	NzMissing element %s)pathc                 S   s   g | ]
}d |j |jf qS )z%s.%s)
__module__r!   ).0tr   r   r   
<listcomp>   s    z&Any._validate_item.<locals>.<listcomp>z3Any element received object of type %r, expected %sz or 
z^See http://docs.python-zeep.org/en/master/datastructures.html#any-objects for more information)r   r   rX   dictaccepted_typesr
   r   r_   r   r\   r"   rO   tupler   r!   join	TypeError)r   r'   rT   expected_types
type_nameserr_messager   r   r   r^      s2   
zAny._validate_itemc                 C      | S r   r   r#   r   r   r   resolve   r    zAny.resolveTc                 C   s&   | j r| j j}nd}| jrd| S |S )NANYz%s[])r   r"   rG   )r   r;   
standalonebaser   r   r   	signature   s   
zAny.signature)r   r   r   Nr   )NNr&   )r!   ra   __qualname__r"   r   r   r$   r(   r8   rD   rL   rW   rR   rN   r^   ro   rs   __classcell__r   r   r   r   r      s     
$

"c                   @   sP   e Zd ZdZeejdgZdddZ	dddZ
dd	 Zdd
dZdddZdS )r   Nr   r   c                 C   s   d | _ || _d S r   )r<   r   )r   r   r   r   r   r      s   
zAnyAttribute.__init__c                 C   s,   i }|  D ]\}}|| jvr|||< q|S r   )items_ignore_attributes)r   
attributesr+   rI   keyr'   r   r   r   r8      s   
zAnyAttribute.parsec                 C   rn   r   r   r#   r   r   r   ro      r    zAnyAttribute.resolvec                 C   s2   |d t fv rd S | D ]
\}}||| qd S r   )r   rv   rQ   )r   rS   r'   rT   r"   rU   r   r   r   rW     s
   zAnyAttribute.renderTc                 C   r%   )Nz{}r   )r   r;   rq   r   r   r   rs   
  r    zAnyAttribute.signature)r   r   r&   )r!   ra   rt   r"   r   r,   r   XSIrw   r   r8   ro   rW   rs   r   r   r   r   r      s    


)logginglxmlr   zeepr   r   
zeep.utilsr   zeep.xsd.constr   r   zeep.xsd.elements.baser   zeep.xsd.utilsr	   zeep.xsd.valueobjectsr
   	getLoggerr!   logger__all__r   r   r   r   r   r   <module>   s    
 _