o
    Ýîiò  ã                   @   s|   d dl Z e  e¡Zd dlZe d¡Zd dlmZ d dl	m
Z
mZmZmZmZmZmZmZmZ d dlmZ G dd„ deƒZdS )é    Nz\[([0-9]+)\])ÚValidationError)	ÚFaultÚArrayÚAnyXmlÚAnyHtmlÚUuidÚDateTimeÚDateÚTimeÚDuration)ÚProtocolBasec                	       s†   e Zd ZdZdZdZdZdddddedddf	‡ fdd„	Zdd„ Z	d	d
„ Z
dd„ Zdd„ Zdd„ Zddd„Zddd„Zddd„Z‡  ZS )ÚDictDocumentzÝAn abstract protocol that can use hierarchical or flat dicts as input
    and output documents.

    Implement ``serialize()``, ``deserialize()``, ``create_in_document()`` and
    ``create_out_string()`` to use this.
    FNTc
           
         sT   t t| ƒ |||||¡ |	| _|| _|| _|| _|rtdƒ‚tt	t
ttttf| _d S )Nzordered=True)Úsuperr   Ú__init__Úkey_encodingÚpolymorphicÚ
complex_asÚorderedÚNotImplementedErrorr   r	   r
   r   r   r   r   Ústringified_types)
ÚselfÚappÚ	validatorÚ	mime_typeÚignore_uncapÚignore_wrappersr   r   r   r   ©Ú	__class__© ú\/var/www/html/LicenciasMIG/venv/lib/python3.10/site-packages/spyne/protocol/dictdoc/_base.pyr   /   s   ÿ

ÿzDictDocument.__init__c                 C   s8   |dks	|| j u r| j | _dS |du rd| _dS t|ƒ‚)z^Sets the validator for the protocol.

        :param validator: one of ('soft', None)
        ÚsoftN)ÚSOFT_VALIDATIONr   Ú
ValueError)r   r   r   r   r   Úset_validator@   s
   
zDictDocument.set_validatorc                 C   s‚   |t jt jfv s
J ‚d|j_|j}d|_||_|t ju r?t|tƒr't	|ƒdkr,t
|dƒ‚t	|ƒdkr7tddƒ‚|  |¡|_dS dS )z}Sets ``ctx.in_body_doc``, ``ctx.in_header_doc`` and
        ``ctx.method_request_string`` using ``ctx.in_document``.
        Né   z6Need a dictionary with exactly one key as method name.r   ÚClientzEmpty request)r   ÚREQUESTÚRESPONSEÚ	transportÚin_header_docÚin_documentÚin_body_docÚ
isinstanceÚdictÚlenr   r   Úgen_method_request_stringÚmethod_request_string)r   ÚctxÚmessageÚdocr   r   r   Údecompose_incoming_envelopeM   s   
ÿ
õz(DictDocument.decompose_incoming_envelopec                 C   s    |j  ¡ \}d| jj ¡ |f S )z’Uses information in context object to return a method_request_string.

        Returns a string in the form of "{namespaces}method name".
        z{%s}%s)r+   Úkeysr   Ú	interfaceÚget_tns)r   r1   Úmrsr   r   r   r/   i   s   z&DictDocument.gen_method_request_stringc                 C   ó   t ƒ ‚©N©r   ©r   r1   r2   r   r   r   Údeserializer   ó   zDictDocument.deserializec                 C   r9   r:   r;   r<   r   r   r   Ú	serializeu   r>   zDictDocument.serializec                 C   r9   r:   r;   )r   r1   Úin_string_encodingr   r   r   Úcreate_in_documentx   r>   zDictDocument.create_in_documentÚutf8c                 C   r9   r:   r;   )r   r1   Úout_string_encodingr   r   r   Úcreate_out_string{   r>   zDictDocument.create_out_stringc           
      C   s¾   |d u r	|  |¡}| ¡ D ]O\}}|| }|  |¡}|j|j}}	t|tƒr>|jjdkr>|j 	¡ \}|  |¡}|j|j}}	||k rMt
d||f d| ƒ‚||	kr\t
d||f d|	 ƒ‚qd S )Nr$   z%r.%sz(%%s member must occur at least %d times.z'%%s member must occur at most %d times.)Úget_flat_type_infoÚitemsÚget_cls_attrsÚ
min_occursÚ
max_occursÚ
issubclassr   Ú
AttributesÚ
_type_infoÚvaluesr   )
r   ÚclsÚdÚftiÚkÚvÚvalÚattrsÚmin_oÚmax_or   r   r   Ú_check_freq_dict~   s(   


ÿÿÿñzDictDocument._check_freq_dictr:   )rB   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú_decimal_as_stringÚ_huge_numbers_as_stringÚ
text_basedr-   r   r#   r4   r/   r=   r?   rA   rD   rW   Ú__classcell__r   r   r   r   r   "   s"    þ	

r   )ÚloggingÚ	getLoggerrX   ÚloggerÚreÚcompileÚRE_HTTP_ARRAY_INDEXÚspyne.errorr   Úspyne.modelr   r   r   r   r   r   r	   r
   r   Úspyne.protocolr   r   r   r   r   r   Ú<module>   s   

,