B
    |?_[;C                 @   s\  d dl mZ d dlZd dlmZmZ d dlT d dlT 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
e	d.ejed ede	d/ejed ede	d0ejed ede	ddg ede	d1ejdddd g ed!e	d2ejed# ed$e	d%d&g ed'e	d(ed) G d3d deZdS )4    )absolute_importN)string_types_DEFAULT_YAML_VERSION)*)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.7/site-packages/ruamel_yaml/resolver.pyr   d   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__q   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#   z   s
    
zBaseResolver.parserc                s\   d j kr$t fdd jD  _|d kr2d g}x$|D ]} j|g ||f q8W d 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)r'   tagregexpfirstchr   )r'   r   add_implicit_resolver_base   s    

z'BaseResolver.add_implicit_resolver_basec                sr   d j kr$t fdd jD  _|d kr2d g}x$|D ]} j|g ||f q8W tddg|||f d S )Nr$   c             3   s$   | ]}| j | d d  fV  qd S )N)r$   )r%   r&   )r'   r   r   r(      s   z5BaseResolver.add_implicit_resolver.<locals>.<genexpr>)r
   r   )r
   r
   )r)   r*   r$   r+   r,   implicit_resolvers)r'   r-   r.   r/   r0   r   )r'   r   add_implicit_resolver   s    

z"BaseResolver.add_implicit_resolverc             C   sn  d| j kr| j | _g }x|D ]}t|ttfrpt|dkrH|\}}qxt|dkrb|d }d}qxtd| nd }|}|tkrt	}nH|tkrt
}n:|tkrt}n,|t	t
tgkrt|ts|d k	rtd| t|ttfs|d k	rtd| |||f q W |tkrt	}nF|tkr"t
}n6|tkr2t}n&|t	t
tgkrX|d k	rXt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)r)   r4   copy
isinstancelisttuplelenr   str
ScalarNodeSequenceNoder*   MappingNoder   intr,   )r'   r-   pathkindnew_pathelement
node_checkindex_checkr   r   r   add_path_resolver   sJ    







zBaseResolver.add_path_resolverc             C   s   | j s
d S i }g }|rzt| j}x| jd D ]H\}}| |||||r,t||krb|||f q,| j ||f ||< q,W n:x8| j D ].\}}|s| j ||f ||< q|||f qW | j| | j| d S )N)r4   r9   r   check_resolver_prefixr,   r   )r   current_nodecurrent_indexexact_pathsZprefix_pathsdepthr?   r@   r   r   r   descend_resolver   s&    

zBaseResolver.descend_resolverc             C   s"   | j s
d S | j  | j  d S )N)r4   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)r6   r   r-   r;   valuer>   bool)r   rK   r?   r@   rH   rI   rC   rD   r   r   r   rG      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 }x|D ]\}}||rR|S qRW |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
   rF   )r;   r$   getmatchrP   r4   r   DEFAULT_SCALAR_TAGr<   DEFAULT_SEQUENCE_TAGr=   DEFAULT_MAPPING_TAG)r   r@   rO   implicit	resolversr-   r.   rJ   r   r   r   resolve  s*    


zBaseResolver.resolvec             C   s   d S )Nr   )r   r   r   r   processing_version,  s    zBaseResolver.processing_version)N)N)r   r   r   rS   rT   rU   r$   r4   r    propertyr#   classmethodr1   r3   rE   rL   rN   rG   rX   rY   r   r   r   r   r   h   s    
		6c               @   s   e Zd ZdS )r   N)r   r   r   r   r   r   r   r   2  s   zZ^(?:yes|Yes|YES|no|No|NO
    |true|True|TRUE|false|False|FALSE
    |on|On|ON|off|Off|OFF)$z^(?:
     [-+]?(?:[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_]*
    |[-+]?\.(?:inf|Inf|INF)
    |\.(?:nan|NaN|NAN))$z^(?:[-+]?0b[0-1_]+
    |[-+]?0o?[0-7_]+
    |[-+]?(?:0|[1-9][0-9_]*)
    |[-+]?0x[0-9a-fA-F_]+
    |[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$z#^(?: ~
    |null|Null|NULL
    | )$z^(?:[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])?))?)$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   s"   t | | | || _i | _d S )N)r   r    get_loader_versionr   _version_implicit_resolver)r   versionloaderr   r   r   r    {  s    zVersionedResolver.__init__c             C   sD   |d krd g}| j |i }x"|D ]}||g ||f q"W d S )N)r]   r+   r,   )r   r^   r-   r.   r/   Zimpl_resolverr0   r   r   r   add_version_implicit_resolver  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.)r6   r8   r7   mapr>   split)r   r^   r   r   r   r\     s
    
z$VersionedResolver.get_loader_versionc             C   sP   | j }|| jkrFx4tD ],}||d kr| ||d |d |d  qW | j| S )zI
        select the resolver based on the version we are parsing
        r   r
   r      )rY   r]   r2   r`   )r   r^   xr   r   r   versioned_resolver  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 }x|D ]\}}||rR|S qRW |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
   rF   )r;   rf   rQ   rR   rP   r4   r   rS   r<   rT   r=   rU   )r   r@   rO   rV   rW   r-   r.   rJ   r   r   r   rX     s*    


zVersionedResolver.resolvec             C   s`   y| j j}W n4 tk
r@   t| jdr2| jj}n
| jjj}Y nX |d kr\| j}|d kr\t	}|S )Nr!   )
r#   Zyaml_versionAttributeErrorr"   r   r^   Z_serializerZuse_versionr   r   )r   r^   r   r   r   rY     s    
z$VersionedResolver.processing_version)NN)r   r   r   __doc__r    r`   r\   rZ   rf   rX   rY   r   r   r   r   r	   s  s   
	)Z
__future__r   reZruamel_yaml.compatr   r   Zruamel_yaml.errorZruamel_yaml.nodesZruamel_yaml.utilr   __all__Xr7   r2   Z	YAMLErrorr   objectr   r   r1   r	   r   r   r   r   <module>   s   
	
 K




