o
    `r3                     @   s  d dl T d dlT d dlT d dlT d dlT d dlT dZzd dlT dZW n e	y-   dZY nw ddl
Z
ddiZdDdd	ZG d
d deZdd ZefddZefddZefddZefddZdDddZdDddZdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zdedddddfd%d&Zdeddddddddddfd'd(Zdefd)d*Z dedddddddddddddfd+d,Z!defd-d.Z"dDd/d0Z#dDd1d2Z$ddefd3d4Z%ddefd5d6Z&dDd7d8Z'dDd9d:Z(efd;d<Z)efd=d>Z*G d?d@ d@e+Z,G dAdB dBe,dCZ-dS )E   )*z5.4.1TF    NYAMLLoadWarningc                 C   s>   | d u rt S t| tu r| D ]}|t v r| | t |< qd S d S N)_warnings_enabledtypedict)Zsettingskey r
   //usr/lib/python3/dist-packages/yaml/__init__.pywarnings   s   r   c                   @   s   e Zd ZdS )r   N)__name__
__module____qualname__r
   r
   r
   r   r   (   s    c                 C   s4   t d du rd S dd l}d|  }|j|tdd d S )Nr   Fr   zcalling yaml.%s() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.   )
stacklevel)r   r   warnr   )methodr   messager
   r
   r   load_warning+   s   r   c                 c   L    || }z|  r| V  |  s
W |  dS W |  dS |  w )z9
    Scan a YAML stream and produce scanning tokens.
    N)Zcheck_tokenZ	get_tokendisposestreamLoaderloaderr
   r
   r   scan:      

r   c                 c   r   )z9
    Parse a YAML stream and produce parsing events.
    N)Zcheck_eventZ	get_eventr   r   r
   r
   r   parseE   r   r   c                 C   s&   || }z	|  W |  S |  w )zj
    Parse the first YAML document in a stream
    and produce the corresponding representation tree.
    )Zget_single_noder   r   r
   r
   r   composeP   s   r   c                 c   r   )zb
    Parse all YAML documents in a stream
    and produce corresponding representation trees.
    N)Z
check_nodeZget_noder   r   r
   r
   r   compose_all[   s   

r    c                 C   s:   |du r
t d t}|| }z	| W |  S |  w )zd
    Parse the first YAML document in a stream
    and produce the corresponding Python object.
    Nload)r   
FullLoaderZget_single_datar   r   r
   r
   r   r!   g   s   r!   c                 c   s`    |du rt d t}|| }z| r$| V  | sW |  dS W |  dS |  w )z\
    Parse all YAML documents in a stream
    and produce corresponding Python objects.
    Nload_all)r   r"   Z
check_dataget_datar   r   r
   r
   r   r#   v   s   

r#   c                 C   
   t | tS )z
    Parse the first YAML document in a stream
    and produce the corresponding Python object.

    Resolve all tags except those known to be
    unsafe on untrusted input.
    )r!   r"   r   r
   r
   r   	full_load      
r'   c                 C   r%   )z
    Parse all YAML documents in a stream
    and produce corresponding Python objects.

    Resolve all tags except those known to be
    unsafe on untrusted input.
    )r#   r"   r&   r
   r
   r   full_load_all   r(   r)   c                 C   r%   )z
    Parse the first YAML document in a stream
    and produce the corresponding Python object.

    Resolve only basic YAML tags. This is known
    to be safe for untrusted input.
    )r!   
SafeLoaderr&   r
   r
   r   	safe_load   r(   r+   c                 C   r%   )z
    Parse all YAML documents in a stream
    and produce corresponding Python objects.

    Resolve only basic YAML tags. This is known
    to be safe for untrusted input.
    )r#   r*   r&   r
   r
   r   safe_load_all   r(   r,   c                 C   r%   )z
    Parse the first YAML document in a stream
    and produce the corresponding Python object.

    Resolve all tags, even those known to be
    unsafe on untrusted input.
    )r!   UnsafeLoaderr&   r
   r
   r   unsafe_load   r(   r.   c                 C   r%   )z
    Parse all YAML documents in a stream
    and produce corresponding Python objects.

    Resolve all tags, even those known to be
    unsafe on untrusted input.
    )r#   r-   r&   r
   r
   r   unsafe_load_all   r(   r/   c                 C   sh   d}|du rt  }|j}|||||||d}	z| D ]}
|	|
 qW |	  n|	  w |r2| S dS )zl
    Emit YAML parsing events into a stream.
    If stream is None, return the produced string instead.
    N)	canonicalindentwidthallow_unicode
line_break)ioStringIOgetvalueemitr   )eventsr   Dumperr0   r1   r2   r3   r4   r7   dumperZeventr
   r
   r   r8      s   
r8   c                 C   s   d}|du r|du rt  }nt  }|j}|||||||||||	|
d}z|  | D ]}|| q,|  W |  n|  w |rH| S dS )z
    Serialize a sequence of representation trees into a YAML stream.
    If stream is None, return the produced string instead.
    N)
r0   r1   r2   r3   r4   encodingversiontagsexplicit_startexplicit_end)r5   r6   BytesIOr7   open	serializecloser   )nodesr   r:   r0   r1   r2   r3   r4   r<   r?   r@   r=   r>   r7   r;   noder
   r
   r   serialize_all   s(   	


rG   c                 K      t | g|fd|i|S )zx
    Serialize a representation tree into a YAML stream.
    If stream is None, return the produced string instead.
    r:   )rG   )rF   r   r:   kwdsr
   r
   r   rC         rC   c                 C   s   d}|du r|
du rt  }nt  }|j}|||||||||	|
|||||d}z|  | D ]}|| q/|  W |  n|  w |rK| S dS )z
    Serialize a sequence of Python objects into a YAML stream.
    If stream is None, return the produced string instead.
    N)default_styledefault_flow_styler0   r1   r2   r3   r4   r<   r=   r>   r?   r@   	sort_keys)r5   r6   rA   r7   rB   Z	representrD   r   )	documentsr   r:   rK   rL   r0   r1   r2   r3   r4   r<   r?   r@   r=   r>   rM   r7   r;   datar
   r
   r   dump_all   s,   


rP   c                 K   rH   )zr
    Serialize a Python object into a YAML stream.
    If stream is None, return the produced string instead.
    r:   )rP   )rO   r   r:   rI   r
   r
   r   dump  rJ   rQ   c                 K   s   t | |fdti|S )z
    Serialize a sequence of Python objects into a YAML stream.
    Produce only basic YAML tags.
    If stream is None, return the produced string instead.
    r:   rP   Z
SafeDumper)rN   r   rI   r
   r
   r   safe_dump_all$  s   rS   c                 K   s   t | g|fdti|S )z
    Serialize a Python object into a YAML stream.
    Produce only basic YAML tags.
    If stream is None, return the produced string instead.
    r:   rR   )rO   r   rI   r
   r
   r   	safe_dump,  s   rT   c                 C   Z   |du rt j| || t j| || t j| || n|| || || || dS )z
    Add an implicit scalar detector.
    If an implicit scalar value matches the given regexp,
    the corresponding tag is assigned to the scalar.
    first is a sequence of possible initial characters or None.
    N)r   r   add_implicit_resolverr"   r-   )tagZregexpfirstr   r:   r
   r
   r   rV   4  s   rV   c                 C   rU   )z
    Add a path based resolver for the given tag.
    A path is a list of keys that forms a path
    to a node in the representation tree.
    Keys can be string values, integers, or None.
    N)r   r   add_path_resolverr"   r-   )rW   pathkindr   r:   r
   r
   r   rY   D  s   rY   c                 C   F   |du rt j| | t j| | t j| | dS || | dS )z
    Add a constructor for the given tag.
    Constructor is a function that accepts a Loader instance
    and a node object and produces the corresponding Python object.
    N)r   r   add_constructorr"   r-   )rW   constructorr   r
   r
   r   r]   S  s
   r]   c                 C   r\   )a  
    Add a multi-constructor for the given tag prefix.
    Multi-constructor is called for a node if its tag starts with tag_prefix.
    Multi-constructor accepts a Loader instance, a tag suffix,
    and a node object and produces the corresponding Python object.
    N)r   r   add_multi_constructorr"   r-   )Z
tag_prefixZmulti_constructorr   r
   r
   r   r_   `  s
   r_   c                 C      | | | dS )z
    Add a representer for the given type.
    Representer is a function accepting a Dumper instance
    and an instance of the given data type
    and producing the corresponding representation node.
    N)add_representer)	data_typeZrepresenterr:   r
   r
   r   ra   n     ra   c                 C   r`   )z
    Add a representer for the given type.
    Multi-representer is a function accepting a Dumper instance
    and an instance of the given data type or subtype
    and producing the corresponding representation node.
    N)add_multi_representer)rb   Zmulti_representerr:   r
   r
   r   rd   w  rc   rd   c                       s    e Zd ZdZ fddZ  ZS )YAMLObjectMetaclassz'
    The metaclass for YAMLObject.
    c                    s   t t| ||| d|v r<|d d ur>t| jtr)| jD ]
}|| j| j qn	| j| j| j | j	
| | j d S d S d S )Nyaml_tag)superre   __init__
isinstanceyaml_loaderlistr]   rf   	from_yamlyaml_dumperra   to_yaml)clsnamebasesrI   r   	__class__r
   r   rh     s   
zYAMLObjectMetaclass.__init__)r   r   r   __doc__rh   __classcell__r
   r
   rr   r   re     s    re   c                   @   sB   e Zd ZdZdZeeegZe	Z
dZdZedd Zedd ZdS )
YAMLObjectza
    An object that can dump itself to a YAML stream
    and load itself from a YAML stream.
    r
   Nc                 C   s   | || S )zC
        Convert a representation node to a Python object.
        )Zconstruct_yaml_object)ro   r   rF   r
   r
   r   rl     s   zYAMLObject.from_yamlc                 C   s   |j | j|| | jdS )zC
        Convert a Python object to a representation node.
        )Z
flow_style)Zrepresent_yaml_objectrf   yaml_flow_style)ro   r;   rO   r
   r
   r   rn     s   zYAMLObject.to_yaml)r   r   r   rt   	__slots__r   r"   r-   rj   r:   rm   rf   rw   classmethodrl   rn   r
   r
   r
   r   rv     s    

rv   )	metaclassr   ).errortokensr9   rE   r   r;   __version__ZcyamlZ__with_libyaml__ImportErrorr5   r   r   RuntimeWarningr   r   r   r   r   r   r    r!   r#   r'   r)   r+   r,   r.   r/   r:   r8   rG   rC   rP   rQ   rS   rT   rV   rY   r]   r_   ra   rd   r   re   rv   r
   r
   r
   r   <module>   s|   












!




		