B
    do                 @   s^  d dddddgZ ddlT ddlT dd	lZdd	lZdd	lZdd	lZdd	lZdd	l	Z	dd	l
Z
G d
d deZG dd  d ZG dd deZedej edej edej edej edej edej edej edej edej edej edej edej ed	ej G dd deZedej edej edej edej edej  edej ed ej! ed!ej ed"ej" ed#ej ed$ej# ed%ej e$d&ej% G d'd deZ&e&$d(e&j' e&$d)e&j( e&$d*e&j) e&$d+e&j* G d,d de&Z+d	S )-BaseConstructorSafeConstructorFullConstructorUnsafeConstructorConstructorConstructorError   )*    Nc               @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r   r   ]/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/yaml/constructor.pyr      s   c               @   s   e Zd Zi Zi Zdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dddZdd ZdddZdddZd ddZedd Zedd ZdS )!r   c             C   s   i | _ i | _g | _d| _d S )NF)constructed_objectsrecursive_objectsstate_generatorsdeep_construct)selfr   r   r   __init__   s    zBaseConstructor.__init__c             C   s   |   S )N)
check_node)r   r   r   r   
check_data   s    zBaseConstructor.check_datac             C   s&   |   |r"tddd|f ddS )zBlock special attributes/methods from being set in a newly created
        object, to prevent user-controlled methods from being called during
        deserializationNz,blacklisted key '%s' in instance state found)get_state_keys_blacklist_regexpmatchr   )r   keyr   r   r   check_state_key"   s    zBaseConstructor.check_state_keyc             C   s   |   r| |  S d S )N)r   construct_documentZget_node)r   r   r   r   get_data*   s    zBaseConstructor.get_datac             C   s   |   }|d k	r| |S d S )N)Zget_single_noder   )r   noder   r   r   get_single_data/   s    
zBaseConstructor.get_single_datac             C   sT   |  |}x2| jr<| j}g | _x|D ]}x|D ]}q.W q$W qW i | _i | _d| _|S )NF)construct_objectr   r   r   r   )r   r   datar   	generatordummyr   r   r   r   6   s    


z"BaseConstructor.construct_documentFc       
      C   s  || j kr| j | S |r$| j}d| _|| jkr>td d d|jd | j|< d }d }|j| jkrj| j|j }nx| jD ]6}|d k	rr|j|rr|jt	|d  }| j| }P qrW d | jkr|j}| jd  }nTd | jkr| jd  }n>t
|tr| jj}n*t
|tr| jj}nt
|tr| jj}|d kr2|| |}n|| ||}t
|tjr~|}t|}| jrrx|D ]}	qfW n| j| || j |< | j|= |r|| _|S )NTz$found unconstructable recursive node)r   r   r   r   
start_marktagyaml_constructorsyaml_multi_constructors
startswithlen
isinstance
ScalarNode	__class__construct_scalarSequenceNodeconstruct_sequenceMappingNodeconstruct_mappingtypesGeneratorTypenextr   append)
r   r   deepZold_deepconstructorZ
tag_suffix
tag_prefixr    r!   r"   r   r   r   r   C   sX    













z BaseConstructor.construct_objectc             C   s&   t |ts td d d|j |j|jS )Nz$expected a scalar node, but found %s)r)   r*   r   idr#   value)r   r   r   r   r   r,   u   s
    
z BaseConstructor.construct_scalarc                s6   t |ts td d d|j |j fdd|jD S )Nz&expected a sequence node, but found %sc                s   g | ]}j | d qS ))r5   )r   ).0child)r5   r   r   r   
<listcomp>   s   z6BaseConstructor.construct_sequence.<locals>.<listcomp>)r)   r-   r   r8   r#   r9   )r   r   r5   r   )r5   r   r   r.   |   s    
z"BaseConstructor.construct_sequencec             C   s   t |ts td d d|j |ji }xV|jD ]L\}}| j||d}t |tjj	sbtd|jd|j| j||d}|||< q,W |S )Nz%expected a mapping node, but found %s)r5   zwhile constructing a mappingzfound unhashable key)
r)   r/   r   r8   r#   r9   r   collectionsabcHashable)r   r   r5   mappingkey_node
value_noder   r9   r   r   r   r0      s    

z!BaseConstructor.construct_mappingc             C   sf   t |ts td d d|j |jg }x<|jD ]2\}}| j||d}| j||d}|||f q,W |S )Nz%expected a mapping node, but found %s)r5   )r)   r/   r   r8   r#   r9   r   r4   )r   r   r5   pairsrA   rB   r   r9   r   r   r   construct_pairs   s    
zBaseConstructor.construct_pairsc             C   s$   d| j kr| j | _|| j|< d S )Nr%   )__dict__r%   copy)clsr$   r6   r   r   r   add_constructor   s    
zBaseConstructor.add_constructorc             C   s$   d| j kr| j | _|| j|< d S )Nr&   )rE   r&   rF   )rG   r7   Zmulti_constructorr   r   r   add_multi_constructor   s    
z%BaseConstructor.add_multi_constructorN)F)F)F)F)r
   r   r   r%   r&   r   r   r   r   r   r   r   r,   r.   r0   rD   classmethodrH   rI   r   r   r   r   r      s   
2


c                   s   e Zd Z fddZdd Zd( fdd	Zdd	 Zd
dd
dd
ddZdd Zdd Z	dZ
xe
e
e
 krpe
e
9 Z
qZW e
 e
 Zdd Zdd ZedejZdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Z  ZS ))r   c                s>   t |tr2x&|jD ]\}}|jdkr| |S qW t |S )Nztag:yaml.org,2002:value)r)   r/   r9   r$   r,   super)r   r   rA   rB   )r+   r   r   r,      s
    

z SafeConstructor.construct_scalarc       	      C   s.  g }d}x|t |jk r|j| \}}|jdkr|j|= t|tr^| | ||j nt|trg }xF|jD ]<}t|tstd|j	d|j
 |j	| | ||j qtW |  x0|D ]}|| qW ntd|j	d|j
 |j	q|jdkrd|_|d7 }q|d7 }qW |r*||j |_d S )	Nr	   ztag:yaml.org,2002:mergezwhile constructing a mappingz,expected a mapping for merging, but found %sz@expected a mapping or list of mappings for merging, but found %sztag:yaml.org,2002:valueztag:yaml.org,2002:strr   )r(   r9   r$   r)   r/   flatten_mappingextendr-   r   r#   r8   r4   reverse)	r   r   mergeindexrA   rB   Zsubmergesubnoder9   r   r   r   rL      s>    







zSafeConstructor.flatten_mappingFc                s$   t |tr| | t j||dS )N)r5   )r)   r/   rL   rK   r0   )r   r   r5   )r+   r   r   r0      s    

z!SafeConstructor.construct_mappingc             C   s   |  | d S )N)r,   )r   r   r   r   r   construct_yaml_null   s    
z#SafeConstructor.construct_yaml_nullT)yesnotruefalseonoffc             C   s   |  |}| j|  S )N)r,   bool_valueslower)r   r   r9   r   r   r   construct_yaml_bool   s    
z#SafeConstructor.construct_yaml_boolc             C   s  |  |}|dd}d}|d dkr*d}|d dkrB|dd  }|dkrNdS |d	rn|t|d
d  d
 S |dr|t|d
d  d S |d dkr|t|d S d|kr dd |dD }|  d}d}x |D ]}||| 7 }|d9 }qW || S |t| S d S )N_ r   r	   -z+-00b   0x      :c             S   s   g | ]}t |qS r   )int)r:   partr   r   r   r<      s    z6SafeConstructor.construct_yaml_int.<locals>.<listcomp><   )r,   replacer'   rg   splitrN   )r   r   r9   signdigitsbasedigitr   r   r   construct_yaml_int   s2    




z"SafeConstructor.construct_yaml_intgu <7~c             C   s   |  |}|dd }d}|d dkr.d}|d dkrF|dd  }|dkrX|| j S |d	krf| jS d
|krdd |d
D }|  d}d}x |D ]}||| 7 }|d9 }qW || S |t| S d S )Nr\   r]   r   r	   r^   r_   z+-z.infz.nanrf   c             S   s   g | ]}t |qS r   )float)r:   rh   r   r   r   r<     s    z8SafeConstructor.construct_yaml_float.<locals>.<listcomp>g        ri   )r,   rj   rZ   	inf_value	nan_valuerk   rN   rq   )r   r   r9   rl   rm   rn   ro   r   r   r   construct_yaml_float  s*    


z$SafeConstructor.construct_yaml_floatc          
   C   s   y|  |d}W n6 tk
rJ } ztd d d| |jW d d }~X Y nX y"ttdrbt|S t|S W n8 t	j
k
r } ztd d d| |jW d d }~X Y nX d S )Nasciiz,failed to convert base64 data into ascii: %sdecodebytesz failed to decode base64 data: %s)r,   encodeUnicodeEncodeErrorr   r#   hasattrbase64rv   decodestringbinasciiError)r   r   r9   excr   r   r   construct_yaml_binary&  s    

z%SafeConstructor.construct_yaml_binarya  ^(?P<year>[0-9][0-9][0-9][0-9])
                -(?P<month>[0-9][0-9]?)
                -(?P<day>[0-9][0-9]?)
                (?:(?:[Tt]|[ \t]+)
                (?P<hour>[0-9][0-9]?)
                :(?P<minute>[0-9][0-9])
                :(?P<second>[0-9][0-9])
                (?:\.(?P<fraction>[0-9]*))?
                (?:[ \t]*(?P<tz>Z|(?P<tz_sign>[-+])(?P<tz_hour>[0-9][0-9]?)
                (?::(?P<tz_minute>[0-9][0-9]))?))?)?$c          
   C   s@  |  |}| j|j}| }t|d }t|d }t|d }|d sZt|||S t|d }t|d }	t|d }
d}d }|d r|d d d	 }xt|d	k r|d
7 }qW t|}|d rt|d }t|d pd}tj	||d}|d dkr| }t
|}n|d r&tj
j}tj|||||	|
||dS )Nyearmonthdayhourminutesecondr	   fraction   r`   Ztz_signtz_hour	tz_minute)hoursminutesr^   tz)tzinfo)r,   timestamp_regexpr   r9   	groupdictrg   datetimedater(   	timedeltatimezoneutc)r   r   r9   r   valuesr   r   r   r   r   r   r   r   r   r   deltar   r   r   construct_yaml_timestampB  s:    


z(SafeConstructor.construct_yaml_timestampc             c   s   g }|V  t |ts,td|jd|j |jx|jD ]}t |tsZtd|jd|j |jt|jdkrtd|jdt|j |j|jd \}}| |}| |}|	||f q4W d S )Nz!while constructing an ordered mapz!expected a sequence, but found %sz,expected a mapping of length 1, but found %sr   z2expected a single mapping item, but found %d itemsr	   )
r)   r-   r   r#   r8   r9   r/   r(   r   r4   )r   r   ZomaprQ   rA   rB   r   r9   r   r   r   construct_yaml_omapa  s$    



z#SafeConstructor.construct_yaml_omapc             c   s   g }|V  t |ts,td|jd|j |jx|jD ]}t |tsZtd|jd|j |jt|jdkrtd|jdt|j |j|jd \}}| |}| |}|	||f q4W d S )Nzwhile constructing pairsz!expected a sequence, but found %sz,expected a mapping of length 1, but found %sr   z2expected a single mapping item, but found %d itemsr	   )
r)   r-   r   r#   r8   r9   r/   r(   r   r4   )r   r   rC   rQ   rA   rB   r   r9   r   r   r   construct_yaml_pairsw  s$    



z$SafeConstructor.construct_yaml_pairsc             c   s$   t  }|V  | |}|| d S )N)setr0   update)r   r   r    r9   r   r   r   construct_yaml_set  s    
z"SafeConstructor.construct_yaml_setc             C   s
   |  |S )N)r,   )r   r   r   r   r   construct_yaml_str  s    z"SafeConstructor.construct_yaml_strc             c   s   g }|V  | | | d S )N)rM   r.   )r   r   r    r   r   r   construct_yaml_seq  s    z"SafeConstructor.construct_yaml_seqc             c   s"   i }|V  |  |}|| d S )N)r0   r   )r   r   r    r9   r   r   r   construct_yaml_map  s    
z"SafeConstructor.construct_yaml_mapc             c   sN   | |}|V  t|dr4| j|dd}|| n| |}|j| d S )N__setstate__T)r5   )__new__ry   r0   r   rE   r   )r   r   rG   r    stater   r   r   construct_yaml_object  s    


z%SafeConstructor.construct_yaml_objectc             C   s   t d d d|j |jd S )Nz0could not determine a constructor for the tag %r)r   r$   r#   )r   r   r   r   r   construct_undefined  s    z#SafeConstructor.construct_undefined)F)r
   r   r   r,   rL   r0   rR   rY   r[   rp   rr   rs   rt   r   recompileXr   r   r   r   r   r   r   r   r   r   __classcell__r   r   )r+   r   r      s:   #



ztag:yaml.org,2002:nullztag:yaml.org,2002:boolztag:yaml.org,2002:intztag:yaml.org,2002:floatztag:yaml.org,2002:binaryztag:yaml.org,2002:timestampztag:yaml.org,2002:omapztag:yaml.org,2002:pairsztag:yaml.org,2002:setztag:yaml.org,2002:strztag:yaml.org,2002:seqztag:yaml.org,2002:mapc               @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
d%ddZd&ddZdd Zdd Zd'ddZd(ddZdd  Zd)d!d"Zd#d$ ZdS )*r   c             C   s   ddgS )Nz^extend$z^__.*__$r   )r   r   r   r   get_state_keys_blacklist  s    z(FullConstructor.get_state_keys_blacklistc             C   s.   t | ds(tdd|   d | _| jS )Nstate_keys_blacklist_regexp(|))ry   r   r   joinr   r   )r   r   r   r   r     s    
z/FullConstructor.get_state_keys_blacklist_regexpc             C   s
   |  |S )N)r,   )r   r   r   r   r   construct_python_str  s    z$FullConstructor.construct_python_strc             C   s
   |  |S )N)r,   )r   r   r   r   r   construct_python_unicode  s    z(FullConstructor.construct_python_unicodec          
   C   s   y|  |d}W n6 tk
rJ } ztd d d| |jW d d }~X Y nX y"ttdrbt|S t|S W n8 t	j
k
r } ztd d d| |jW d d }~X Y nX d S )Nru   z,failed to convert base64 data into ascii: %srv   z failed to decode base64 data: %s)r,   rw   rx   r   r#   ry   rz   rv   r{   r|   r}   )r   r   r9   r~   r   r   r   construct_python_bytes  s    

z&FullConstructor.construct_python_bytesc             C   s
   |  |S )N)rp   )r   r   r   r   r   construct_python_long  s    z%FullConstructor.construct_python_longc             C   s   t | |S )N)complexr,   )r   r   r   r   r   construct_python_complex  s    z(FullConstructor.construct_python_complexc             C   s   t | |S )N)tupler.   )r   r   r   r   r   construct_python_tuple
  s    z&FullConstructor.construct_python_tupleFc          
   C   s   |st d|d||r\yt| W n8 tk
rZ } zt d|d||f |W d d }~X Y nX |tjkrxt d|d| |tj| S )Nz"while constructing a Python modulez+expected non-empty name appended to the tagzcannot find module %r (%s)zmodule %r is not imported)r   
__import__ImportErrorsysmodules)r   namemarkunsafer~   r   r   r   find_python_module  s    "
z"FullConstructor.find_python_modulec          
   C   s   |st d|d|d|kr,|dd\}}nd}|}|r~yt| W n8 tk
r| } zt d|d||f |W d d }~X Y nX |tjkrt d|d| |tj| }t||st d|d||jf |t||S )	Nz"while constructing a Python objectz+expected non-empty name appended to the tag.r   builtinszcannot find module %r (%s)zmodule %r is not importedzcannot find %r in the module %r)	r   rsplitr   r   r   r   ry   r
   getattr)r   r   r   r   module_nameZobject_namer~   moduler   r   r   find_python_name  s,    "


z FullConstructor.find_python_namec             C   s2   |  |}|r$td|jd| |j| ||jS )Nz while constructing a Python namez&expected the empty value, but found %r)r,   r   r#   r   )r   suffixr   r9   r   r   r   construct_python_name5  s
    
z%FullConstructor.construct_python_namec             C   s2   |  |}|r$td|jd| |j| ||jS )Nz"while constructing a Python modulez&expected the empty value, but found %r)r,   r   r#   r   )r   r   r   r9   r   r   r   construct_python_module<  s
    
z'FullConstructor.construct_python_moduleNc             C   st   |sg }|si }|  ||j}|sFt|tsFtd|jdt| |j|rft|trf|j|f||S |||S d S )Nz$while constructing a Python instancezexpected a class, but found %r)r   r#   r)   typer   r   )r   r   r   argskwdsnewobjr   rG   r   r   r   make_python_instanceC  s    
z$FullConstructor.make_python_instancec             C   s   t |dr|| ni }t|tr8t|dkr8|\}}t |drt|sf|rfx| D ]}| | qTW |j| n|r|| x.|	 D ]"\}}|s| | t
||| qW d S )Nr   rb   rE   )ry   r   r)   r   r(   keysr   rE   r   itemssetattr)r   instancer   r   	slotstater   r9   r   r   r   set_python_instance_stateS  s     



z)FullConstructor.set_python_instance_statec             c   s>   | j ||dd}|V  t|d}| j||d}| || d S )NT)r   r   )r5   )r   ry   r0   r   )r   r   r   r   r5   r   r   r   r   construct_python_objectf  s
    
z'FullConstructor.construct_python_objectc             C   s   t |tr*| j|dd}i }i }g }i }nJ| j|dd}	|	dg }|	di }|	di }|	dg }|	di }| |||||}
|r| |
| |r|
| |rx|D ]}|| |
|< qW |
S )NT)r5   r   r   r   	listitems	dictitems)r)   r-   r.   r0   getr   r   rM   )r   r   r   r   r   r   r   r   r   r9   r   r   r   r   r   construct_python_object_applyo  s*    


z-FullConstructor.construct_python_object_applyc             C   s   | j ||ddS )NT)r   )r   )r   r   r   r   r   r   construct_python_object_new  s    z+FullConstructor.construct_python_object_new)F)F)NNFF)F)F)r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s"   



	
#ztag:yaml.org,2002:python/noneztag:yaml.org,2002:python/boolztag:yaml.org,2002:python/strz tag:yaml.org,2002:python/unicodeztag:yaml.org,2002:python/bytesztag:yaml.org,2002:python/intztag:yaml.org,2002:python/longztag:yaml.org,2002:python/floatz tag:yaml.org,2002:python/complexztag:yaml.org,2002:python/listztag:yaml.org,2002:python/tupleztag:yaml.org,2002:python/dictztag:yaml.org,2002:python/name:c                   sB   e Zd Z fddZ fddZd fdd	Z fd	d
Z  ZS )r   c                s   t t| j||ddS )NT)r   )rK   r   r   )r   r   r   )r+   r   r   r     s    z$UnsafeConstructor.find_python_modulec                s   t t| j||ddS )NT)r   )rK   r   r   )r   r   r   )r+   r   r   r     s    z"UnsafeConstructor.find_python_nameNFc                s   t t| j|||||ddS )NT)r   )rK   r   r   )r   r   r   r   r   r   )r+   r   r   r     s    
z&UnsafeConstructor.make_python_instancec                s   t t| j||ddS )NT)r   )rK   r   r   )r   r   r   )r+   r   r   r     s    
z+UnsafeConstructor.set_python_instance_state)NNF)r
   r   r   r   r   r   r   r   r   r   )r+   r   r     s   z tag:yaml.org,2002:python/module:z tag:yaml.org,2002:python/object:z$tag:yaml.org,2002:python/object/new:z&tag:yaml.org,2002:python/object/apply:c               @   s   e Zd ZdS )r   N)r
   r   r   r   r   r   r   r     s   ),__all__errorZnodescollections.abcr=   r   rz   r|   r   r   r1   ZMarkedYAMLErrorr   r   r   rH   rR   r[   rp   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rI   r   r   r   r   r   r   r   r   r   r   r   <module>   s   8    4