U
    e;                     @   s  d dl mZ d dlZd dl
mZmZ d dlT d dlmZmZmZ d dlmZ ddd	gZd
gdedejedfdgdedejedfd
gdedejedfdgdedejedfd
gdedejedfdgdedejedfd
dgdeddgfd
dgdedejddd d!gfd
dgd"ed#ejed$fd
dgd%ed&d'gfd
dgd(ed)ed*fgZG d+d, d,eZG d-d deZG d.d deZeD ]&Zd
ed  krejed/d   qG d0d	 d	eZdS )1    )absolute_importN)string_types_DEFAULT_YAML_VERSION)*)MappingNode
ScalarNodeSequenceNode)RegExpBaseResolverResolverVersionedResolver      ztag:yaml.org,2002:boolz&^(?:true|True|TRUE|false|False|FALSE)$ZtTfFr   r   zb^(?:yes|Yes|YES|no|No|NO
        |true|True|TRUE|false|False|FALSE
        |on|On|ON|off|Off|OFF)$Z
yYnNtTfFoOztag:yaml.org,2002:floatz^(?:
         [-+]?(?:[0-9][0-9_]*)\.[0-9_]*(?:[eE][-+]?[0-9]+)?
        |[-+]?(?:[0-9][0-9_]*)(?:[eE][-+]?[0-9]+)
        |[-+]?\.[0-9_]+(?:[eE][-+][0-9]+)?
        |[-+]?\.(?:inf|Inf|INF)
        |\.(?:nan|NaN|NAN))$z-+0123456789.a  ^(?:
         [-+]?(?:[0-9][0-9_]*)\.[0-9_]*(?:[eE][-+]?[0-9]+)?
        |[-+]?(?:[0-9][0-9_]*)(?:[eE][-+]?[0-9]+)
        |\.[0-9_]+(?:[eE][-+][0-9]+)?
        |[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*  # sexagesimal float
        |[-+]?\.(?:inf|Inf|INF)
        |\.(?:nan|NaN|NAN))$ztag:yaml.org,2002:intza^(?:[-+]?0b[0-1_]+
        |[-+]?0o?[0-7_]+
        |[-+]?[0-9_]+
        |[-+]?0x[0-9a-fA-F_]+)$z-+0123456789z^(?:[-+]?0b[0-1_]+
        |[-+]?0?[0-7_]+
        |[-+]?(?:0|[1-9][0-9_]*)
        |[-+]?0x[0-9a-fA-F_]+
        |[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$ztag:yaml.org,2002:mergez^(?:<<)$<ztag:yaml.org,2002:nullz+^(?: ~
        |null|Null|NULL
        | )$~nN ztag:yaml.org,2002:timestampz^(?:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]
        |[0-9][0-9][0-9][0-9] -[0-9][0-9]? -[0-9][0-9]?
        (?:[Tt]|[ \t]+)[0-9][0-9]?
        :[0-9][0-9] :[0-9][0-9] (?:\.[0-9]*)?
        (?:[ \t]*(?:Z|[-+][0-9][0-9]?(?::[0-9][0-9])?))?)$
0123456789ztag:yaml.org,2002:valuez^(?:=)$=ztag:yaml.org,2002:yamlz^(?:!|&|\*)$z!&*c                   @   s   e Zd ZdS )ResolverErrorN__name__
__module____qualname__ r   r   3lib/python3.8/site-packages/ruamel_yaml/resolver.pyr   f   s   r   c                   @   s   e Zd ZdZdZdZi Zi ZdddZe	dd Z
ed	d
 Zedd ZedddZdd Zdd Zdd Zdd Ze	dd ZdS )r
   ztag:yaml.org,2002:strztag:yaml.org,2002:seqztag:yaml.org,2002:mapNc                 C   sB   || _ | j d k	r,t| j dd d kr,| j | j _d | _g | _g | _d S )N	_resolver)	loadumpergetattrr   _loader_versionresolver_exact_pathsresolver_prefix_paths)selfr    r   r   r   __init__s   s    
zBaseResolver.__init__c                 C   s*   | j d k	r&t| j dr| j jS | j jS d S Ntyp)r    hasattrparserZ_parserr%   r   r   r   r*   |   s
    
zBaseResolver.parserc                    sX   d j kr$t fdd jD  _|d kr2d g}|D ]} j|g ||f q6d S )Nyaml_implicit_resolversc                 3   s$   | ]}| j | d d  fV  qd S Nr,   .0kclsr   r   	<genexpr>   s    z:BaseResolver.add_implicit_resolver_base.<locals>.<genexpr>)__dict__dictr,   
setdefaultappendr3   tagregexpfirstchr   r2   r   add_implicit_resolver_base   s    

z'BaseResolver.add_implicit_resolver_basec                    sn   d j kr$t fdd jD  _|d kr2d g}|D ]} j|g ||f q6tddg|||f d S )Nr,   c                 3   s$   | ]}| j | d d  fV  qd S r-   r.   r/   r2   r   r   r4      s    z5BaseResolver.add_implicit_resolver.<locals>.<genexpr>r   r   )r5   r6   r,   r7   r8   implicit_resolversr9   r   r2   r   add_implicit_resolver   s    

z"BaseResolver.add_implicit_resolverc                 C   sj  d| j kr| j | _g }|D ]}t|ttfrnt|dkrF|\}}qvt|dkr`|d }d}qvtd| nd }|}|tkrt	}nH|tkrt
}n:|tkrt}n,|t	t
tfkrt|ts|d k	rtd| t|ttfs|d k	rtd| |||f q|tkrt	}nF|tkrt
}n6|tkr.t}n&|t	t
tfkrT|d k	rTtd	| || jt||f< d S )
Nyaml_path_resolversr   r   r   TzInvalid path element: %szInvalid node checker: %szInvalid index checker: %szInvalid node kind: %s)r5   rA   copy
isinstancelisttuplelenr   strr   r   r6   r   r   intr8   )r3   r:   pathkindnew_pathelement
node_checkindex_checkr   r   r   add_path_resolver   sL    




zBaseResolver.add_path_resolverc                 C   s   | j s
d S i }g }|rvt| j}| jd D ]H\}}| |||||r*t||kr`|||f q*| j ||f ||< q*n6| j D ].\}}|s| j ||f ||< q||||f q|| j| | j| d S )N)rA   rF   r$   check_resolver_prefixr8   r#   )r%   current_nodecurrent_indexexact_pathsZprefix_pathsdepthrI   rJ   r   r   r   descend_resolver   s"    
zBaseResolver.descend_resolverc                 C   s"   | j s
d S | j  | j  d S r-   )rA   r#   popr$   r+   r   r   r   ascend_resolver   s    
zBaseResolver.ascend_resolverc                 C   s   ||d  \}}t |tr*|j|kr@dS n|d k	r@t ||s@dS |dkrT|d k	rTdS |dksd|d krp|d krpdS t |trt |tr||jksdS n t |trt |ts||krdS dS )Nr   FT)rC   r   r:   r   valuerH   bool)r%   rU   rI   rJ   rR   rS   rM   rN   r   r   r   rQ      s*    



z"BaseResolver.check_resolver_prefixc                 C   s   |t krt|d rt|dkr(| jdg }n| j|d g }|| jd g 7 }|D ]\}}||rP|  S qP|d }t| jr| jd }||kr|| S d |kr|d  S |t kr| jS |tkr| j	S |t
kr| jS d S Nr   r   r   rP   )r   r,   getmatchrZ   rA   r#   DEFAULT_SCALAR_TAGr   DEFAULT_SEQUENCE_TAGr   DEFAULT_MAPPING_TAGr%   rJ   rY   ZimplicitZ	resolversr:   r;   rT   r   r   r   resolve  s*    



zBaseResolver.resolvec                 C   s   d S r-   r   r+   r   r   r   processing_version(  s    zBaseResolver.processing_version)N)N)r   r   r   r^   r_   r`   r,   rA   r&   propertyr*   classmethodr>   r@   rO   rV   rX   rQ   rb   rc   r   r   r   r   r
   j   s(   
	


6c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r   .  s   r   c                   @   sJ   e Zd ZdZdddZdd Zdd Zed	d
 Zdd Z	edd Z
dS )r   a  
    contrary to the "normal" resolver, the smart resolver delays loading
    the pattern matching rules. That way it can decide to load 1.1 rules
    or the (default) 1.2 rules, that no longer support octal without 0o, sexagesimals
    and Yes/No/On/Off booleans.
    Nc                 C   s6   |d kr|d k	r|}t | | | || _i | _d S r-   )r
   r&   get_loader_versionr"   _version_implicit_resolver)r%   versionloaderr    r   r   r   r&   ?  s
    zVersionedResolver.__init__c                 C   s@   |d krd g}| j |i }|D ]}||g ||f q d S r-   )rg   r7   r8   )r%   rh   r:   r;   r<   Zimpl_resolverr=   r   r   r   add_version_implicit_resolverG  s
    z/VersionedResolver.add_version_implicit_resolverc                 C   s<   |d kst |tr|S t |tr(t|S ttt|dS )N.)rC   rE   rD   maprH   splitr%   rh   r   r   r   rf   O  s
    
z$VersionedResolver.get_loader_versionc                 C   sL   | j }|| jkrBtD ],}||d kr| ||d |d |d  q| j| S )zI
        select the resolver based on the version we are parsing
        r   r   r      )rc   rg   r?   rj   )r%   rh   xr   r   r   versioned_resolverX  s    
z$VersionedResolver.versioned_resolverc                 C   s   |t krt|d rt|dkr(| jdg }n| j|d g }|| jd g 7 }|D ]\}}||rP|  S qP|d }t| jr| jd }||kr|| S d |kr|d  S |t kr| jS |tkr| j	S |t
kr| jS d S r[   )r   rq   r\   r]   rZ   rA   r#   r^   r   r_   r   r`   ra   r   r   r   rb   e  s*    



zVersionedResolver.resolvec                 C   s~   z| j j}W nR tk
r^   z$t| jdr4| jj}n
| jjj}W n tk
rX   d }Y nX Y nX |d krz| j}|d krzt	}|S r'   )
r*   Zyaml_versionAttributeErrorr)   r    rh   Z_serializerZuse_versionr"   r   rn   r   r   r   rc   ~  s    
z$VersionedResolver.processing_version)NNN)r   r   r   __doc__r&   rj   rf   rd   rq   rb   rc   r   r   r   r   r   7  s   
	
) Z
__future__r   reZAnyZDictZListZUnionZTextZOptionalZVersionTypeZruamel_yaml.compatr   r   Zruamel_yaml.errorZruamel_yaml.nodesr   r   r   Zruamel_yaml.utilr	   __all__XrD   r?   Z	YAMLErrorr   objectr
   r   Zirr>   r   r   r   r   r   <module>   s   


	

M E