o
    j                     @   sN  d Z ddlmZ ddlZeeZddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlZddlmZ zddlmZ ddlmZ ddlmZ ddlmZ W n! e y   ddlmZ ddlmZ ddlmZ ddlmZ Y nw e!e"e#e
j$e
j%hZ&G dd deZ'dd Z(dd Z)dd Z*dS )zThe ``spyne.protocol.yaml`` package contains the Yaml-related protocols.
Currently, only :class:`spyne.protocol.yaml.YamlDocument` is supported.

Initially released in 2.10.0-rc.
    )absolute_importNValidationError)six)BINARY_ENCODING_BASE64)Boolean)Integer)Double)Fault)HierDictDocument)ParserError)CLoader)CDumper)CSafeLoader)CSafeDumper)Loader)Dumper)
SafeLoader)
SafeDumperc                       s   e Zd ZdZdZeejZed dZ	e
ZdZdddddedddddf fdd		Zd
d Zdd Zdd ZdddZdddZ  ZS )YamlDocumenta  An implementation of the Yaml protocol that uses the PyYaml package.
    See ProtocolBase ctor docstring for its arguments. Yaml-specific arguments
    follow:

    :param safe: Use ``safe_dump`` instead of ``dump`` and ``safe_load`` instead
    of ``load``. This is not a security feature, search for 'safe_dump' in
    http://www.pyyaml.org/wiki/PyYAMLDocumentation
    :param kwargs: See the yaml documentation in ``load, ``safe_load``, ``dump``
    or ``safe_dump`` depending on whether you use yaml as an input or output
    protocol.

    For the output case, Spyne sets ``default_flow_style=False`` and
    ``indent=4`` by default.
    z	text/yamlyamlTNFUTF-8c              
      s   t t| |||||||| | j| jt< | j| jt< | j| jt< | j	| j
t< | j	| j
t< | j	| j
t< t}t}|	r=t}t}t|| _t|| _|| jd< || jd< |dt |
| jd< || jd< d| jvrkd| jd< d| jvrwd	| jd< d S d S )
Nr   r   z tag:yaml.org,2002:python/unicodeencodingallow_unicodeindent   default_flow_styleF)superr   __init___ret_number_from_unicode_handlersr	   	_ret_boolr   r   _ret_to_unicode_handlersr   r   r   r   dict	in_kwargs
out_kwargsadd_constructor_unicode_loader)selfapp	validator	mime_typeignore_uncapignore_wrappers
complex_asorderedpolymorphicsafer   r   kwargsloaderdumper	__class__ S/var/www/html/LicenciasMiG/venv/lib/python3.10/site-packages/spyne/protocol/yaml.pyr   W   s8   









zYamlDocument.__init__c                 C   s   |S Nr8   r)   _valuer8   r8   r9   r"         zYamlDocument._retc                 C   s&   t |tr	t||dv rt|S |S N)TF)
isinstanceNON_NUMBER_TYPESr   intr;   r8   r8   r9   r      s
   
zYamlDocument._ret_numberc                 C   s   |d u s|dv r
|S t |r?   r   r;   r8   r8   r9   r!      s   zYamlDocument._ret_boolc              
   C   s   |du rd}z)zd |j|}W n ty!   d |j}Y nw tj|fi | j|_W dS  tyB } zt	dt
|d}~ww )z2Sets ``ctx.in_document``  using ``ctx.in_string``.Nr        zClient.YamlDecodeError)join	in_stringdecode	TypeErrorr   loadr%   in_documentr   r
   repr)r)   ctxin_string_encodingser8   r8   r9   create_in_document   s   zYamlDocument.create_in_documentutf8c                    sH   fdd|j D |_tjr  dur" fdd|j D |_dS dS dS )z3Sets ``ctx.out_string`` using ``ctx.out_document``.c                 3   s$    | ]}t j|fi  jV  qd S r:   )r   dumpr&   .0o)r)   r8   r9   	<genexpr>   s    z1YamlDocument.create_out_string.<locals>.<genexpr>Nc                 3   s*    | ]}t j|fi j V  qd S r:   )r   rR   r&   encoderS   out_string_encodingr)   r8   r9   rV      s
    
)out_document
out_stringr   PY2)r)   rL   rY   r8   rX   r9   create_out_string   s   
zYamlDocument.create_out_stringr:   )rQ   )__name__
__module____qualname____doc__r,   setr   typeadd
text_basedr   default_binary_encoding_decimal_as_stringr$   r   r"   r   r!   rP   r]   __classcell__r8   r8   r6   r9   r   ;   s.    

0
r   c                 C   s   |j S r:   )r=   )r4   noder8   r8   r9   r(      s   r(   c                   C      d S r:   r8   r8   r8   r8   r9   _decimal_to_bytes   r>   rk   c                   C   rj   r:   r8   r8   r8   r8   r9   _decimal_from_bytes   r>   rl   )+ra   
__future__r   logging	getLoggerr^   loggerspyner   
spyne.utilr   spyne.model.binaryr   spyne.model.primitiver   r   r	   spyne.model.faultr
   spyne.protocol.dictdocr   r   yaml.parserr   r   r   r   r   r   r   r   r   ImportErrortuplelistr$   	text_typebinary_typerA   r   r(   rk   rl   r8   r8   r8   r9   <module>   s<   
w