U
    r^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	k
r\   dZY nX 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dEddZdFd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"dGd/d0Z#dHd1d2Z$ddefd3d4Z%ddefd5d6Z&dId7d8Z'dJd9d:Z(efd;d<Z)efd=d>Z*G d?d@ d@e+Z,G dAdB dBe,dCZ-dS )K   )*z5.3.1TF    NYAMLLoadWarningc                 C   s:   | d krt S t| tkr6| D ]}|t kr| | t |< q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k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   s0   || }z| r| V  q
W 5 |   X dS )z9
    Scan a YAML stream and produce scanning tokens.
    N)disposeZcheck_tokenZ	get_tokenstreamLoaderloaderr	   r	   r
   scan:   s
    r   c                 c   s0   || }z| r| V  q
W 5 |   X dS )z9
    Parse a YAML stream and produce parsing events.
    N)r   Zcheck_eventZ	get_eventr   r	   r	   r
   parseE   s
    r   c                 C   s$   || }z| W S |   X dS )zj
    Parse the first YAML document in a stream
    and produce the corresponding representation tree.
    N)r   Zget_single_noder   r	   r	   r
   composeP   s    r   c                 c   s0   || }z| r| V  q
W 5 |   X dS )zb
    Parse all YAML documents in a stream
    and produce corresponding representation trees.
    N)r   Z
check_nodeZget_noder   r	   r	   r
   compose_all[   s
    r   c                 C   s8   |dkrt d t}|| }z| W S |  X dS )zd
    Parse the first YAML document in a stream
    and produce the corresponding Python object.
    Nload)r   
FullLoaderr   Zget_single_datar   r	   r	   r
   r   g   s    r   c                 c   sD   |dkrt d t}|| }z| r2| V  qW 5 |  X dS )z\
    Parse all YAML documents in a stream
    and produce corresponding Python objects.
    Nload_all)r   r   r   Z
check_dataget_datar   r	   r	   r
   r    v   s    r    c                 C   s
   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   s    r#   c                 C   s
   t | tS )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   s    r$   c                 C   s
   t | tS )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   s    r&   c                 C   s
   t | tS )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   s    r'   c                 C   s
   t | tS )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   s    r)   c                 C   s
   t | tS )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   s    r*   c                 C   s`   d}|dkrt  }|j}|||||||d}	z| D ]}
|	|
 q4W 5 |	  X |r\| 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getvaluer   emit)eventsr   Dumperr+   r,   r-   r.   r/   r2   dumperZeventr	   r	   r
   r3      s    
 
r3   c                 C   s   d}|dkr,|dkrt  }nt  }|j}|||||||||||	|
d}z(|  | D ]}|| qX|  W 5 |  X |r| S dS )z
    Serialize a sequence of representation trees into a YAML stream.
    If stream is None, return the produced string instead.
    N)
r+   r,   r-   r.   r/   encodingversiontagsexplicit_startexplicit_end)r0   r1   BytesIOr2   r   open	serializeclose)nodesr   r5   r+   r,   r-   r.   r/   r7   r:   r;   r8   r9   r2   r6   noder	   r	   r
   serialize_all   s.    	

    
rB   c                 K   s   t | g|fd|i|S )zx
    Serialize a representation tree into a YAML stream.
    If stream is None, return the produced string instead.
    r5   )rB   )rA   r   r5   kwdsr	   r	   r
   r>      s    r>   c                 C   s   d}|dkr,|
dkrt  }nt  }|j}|||||||||	|
|||||d}z(|  | D ]}|| q^|  W 5 |  X |r| 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_styler+   r,   r-   r.   r/   r7   r8   r9   r:   r;   	sort_keys)r0   r1   r<   r2   r   r=   Z	representr?   )	documentsr   r5   rD   rE   r+   r,   r-   r.   r/   r7   r:   r;   r8   r9   rF   r2   r6   datar	   r	   r
   dump_all   s8    

       
rI   c                 K   s   t | g|fd|i|S )zr
    Serialize a Python object into a YAML stream.
    If stream is None, return the produced string instead.
    r5   )rI   )rH   r   r5   rC   r	   r	   r
   dump  s    rJ   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.
    r5   rI   Z
SafeDumper)rG   r   rC   r	   r	   r
   safe_dump_all$  s    rL   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.
    r5   rK   )rH   r   rC   r	   r	   r
   	safe_dump,  s    rM   c                 C   sZ   |dk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   r5   r	   r	   r
   rN   4  s    rN   c                 C   sZ   |dkr:t j| || t j| || t j| || n|| || || || dS )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(   )rO   pathZkindr   r5   r	   r	   r
   rQ   D  s    rQ   c                 C   sD   |dkr4t j| | t j| | t j| | n|| | 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(   )rO   constructorr   r	   r	   r
   rS   S  s
    rS   c                 C   sD   |dkr4t j| | t j| | t j| | n|| | dS )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
   rU   `  s
    rU   c                 C   s   | | | 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representerr5   r	   r	   r
   rV   n  s    rV   c                 C   s   | | | dS )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)rW   Zmulti_representerr5   r	   r	   r
   rX   w  s    rX   c                       s    e Zd ZdZ fddZ  ZS )YAMLObjectMetaclassz'
    The metaclass for YAMLObject.
    c                    sx   t t| ||| d|krt|d d k	rtt| jtrR| jD ]}|| j| j q:n| j| j| j | j	
| | j d S )Nyaml_tag)superrY   __init__
isinstanceyaml_loaderlistrS   rZ   	from_yamlyaml_dumperrV   to_yaml)clsnamebasesrC   r   	__class__r	   r
   r\     s    
zYAMLObjectMetaclass.__init__)r   r   r   __doc__r\   __classcell__r	   r	   rf   r
   rY     s   rY   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)rc   r   rA   r	   r	   r
   r`     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_objectrZ   yaml_flow_style)rc   r6   rH   r	   r	   r
   rb     s    zYAMLObject.to_yaml)r   r   r   rh   	__slots__r   r   r(   r^   r5   ra   rZ   rk   classmethodr`   rb   r	   r	   r	   r
   rj     s   

rj   )	metaclass)N)N)N)N)N)N)N).errortokensr4   r@   r   r6   __version__ZcyamlZ__with_libyaml__ImportErrorr0   r   r   RuntimeWarningr   r   r   r   r   r   r   r   r    r#   r$   r&   r'   r)   r*   r5   r3   rB   r>   rI   rJ   rL   rM   rN   rQ   rS   rU   rV   rX   r   rY   rj   r	   r	   r	   r
   <module>   s   
 









   
      
        
!

 


		