B
    |?_[                 @   s*  d dl mZmZm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	d dl
Z
d dlmZmZmZ d dlT d dlmZmZmZ d dlmZmZmZmZmZmZmZmZmZmZ d dlT d dlmZm Z m!Z!m"Z"m#Z#m$Z$ d dl%T d dl%m&Z&m'Z'm(Z(m)Z) d d	l*m+Z+m,Z,m-Z-m.Z.m/Z/ d d
l0m1Z1 d dl2m3Z3 d dl4m5Z5 dddddgZ6G dd deZ7G dd deZ8G dd deZ9G dd de:Z;G dd de;Z<e<=de<j> e<=de<j? e<=de<j@ e<=de<jA e<=de<jB e<=de<jC e<=de<jD e<=d e<jE e<=d!e<jF e<=d"e<jG e<=d#e<jH e<=d$e<jI e<=de<jJ er\G d%d& d&ZKG d'd de<ZLeL=d(eLj> eL=d)eLj? eL=d*eLjM eL=d+eLjN ereL=d,eLjO eL=d-eLj@ eL=d.eLjP eL=d/eLjA eL=d0eLjQ eL=d1eLjH eL=d2eLjR eL=d3eLjI eLSd4eLjT eLSd5eLjU eLSd6eLjV eLSd7eLjW eLSd8eLjX G d9d de<ZYeY=deYj> eY=deYj? eY=deYj@ eY=deYjA eY=deYjB eY=deYjC eY=deYjD eY=d eYjE eY=d!eYjF eY=d"eYjG eY=d#eYjH eY=d$eYjI eY=deYjJ dS ):    )print_functionabsolute_importdivisionN)MarkedYAMLErrorMarkedYAMLFutureWarningMantissaNoDotYAML1_1Warning)*)SequenceNodeMappingNode
ScalarNode)
utf8builtins_moduleto_strPY2PY3ordereddict	text_typenprintversion_tnfHashable)CommentedMapCommentedOrderedMapCommentedSetCommentedKeySeqCommentedSeqTaggedScalar)PreservedScalarStringSingleQuotedScalarStringDoubleQuotedScalarStringScalarString)	ScalarInt	BinaryIntOctalIntHexInt
HexCapsInt)ScalarFloat)	TimeStamp)RegExpBaseConstructorSafeConstructorConstructorConstructorErrorRoundTripConstructorc               @   s   e Zd ZdS )r+   N)__name__
__module____qualname__ r0   r0   6lib/python3.7/site-packages/ruamel_yaml/constructor.pyr+   &   s   c               @   s   e Zd ZdS )DuplicateKeyFutureWarningN)r-   r.   r/   r0   r0   r0   r1   r2   *   s   r2   c               @   s   e Zd ZdS )DuplicateKeyErrorN)r-   r.   r/   r0   r0   r0   r1   r3   .   s   r3   c               @   s   e Zd Zi Zi Zd!ddZedd Ze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 Zd%ddZedd Zedd  ZdS )&r(   Nc             C   s^   || _ | j d k	r*t| j dd d kr*| | j _|| _ i | _i | _g | _d| _|| _tdd| _	d S )N_constructorF)r         )r      )
loadergetattrr4   constructed_objectsrecursive_objectsstate_generatorsdeep_construct_preserve_quotesr   allow_duplicate_keys)selfZpreserve_quotesr8   r0   r0   r1   __init__7   s    zBaseConstructor.__init__c             C   s`   t | jdr| jjS y| jjS  tk
rZ   tdt|  td| jj tt|   Y nX d S )NtypZsltZslc)hasattrr8   composerZ	_composerAttributeErrorprinttypedir)r@   r0   r0   r1   rD   D   s    zBaseConstructor.composerc             C   s   t | jdr| jjS | jjS )NrB   )rC   r8   resolverZ	_resolver)r@   r0   r0   r1   rI   Q   s    zBaseConstructor.resolverc             C   s
   | j  S )N)rD   
check_node)r@   r0   r0   r1   
check_dataX   s    zBaseConstructor.check_datac             C   s   | j  r| | j  S d S )N)rD   rJ   construct_documentZget_node)r@   r0   r0   r1   get_data]   s    
zBaseConstructor.get_datac             C   s    | j  }|d k	r| |S d S )N)rD   Zget_single_noderL   )r@   noder0   r0   r1   get_single_datac   s    

zBaseConstructor.get_single_datac             C   sX   |  |}x6t| jr@| j}g | _x|D ]}x|D ]}q2W q(W qW i | _i | _d| _|S )NF)construct_objectboolr<   r:   r;   r=   )r@   rN   datar<   	generatordummyr0   r0   r1   rL   k   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 ].}|j|rr|jt	|d }| j| }P qrW d| jkr|j}| jd }nRd| 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r(|| |}n|| ||}t
|tjrt|}t|}| jrhx|D ]}	q\W n| j| || j |< | j|= |r|| _|S )zdeep is True when creating an object/mapping recursively,
        in that case want the underlying elements available during construction
        TNz$found unconstructable recursive node)r:   r=   r;   r+   
start_marktagyaml_constructorsyaml_multi_constructors
startswithlen
isinstancer   	__class__construct_scalarr	   construct_sequencer
   construct_mappingtypesGeneratorTypenextr<   append)
r@   rN   deepZold_deepconstructorZ
tag_suffix
tag_prefixrR   rS   rT   r0   r0   r1   rP   y   sZ    














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+   idrU   value)r@   rN   r0   r0   r1   r]      s    
z BaseConstructor.construct_scalarc                s6   t |ts tddd|j |j fdd|jD S )zdeep is True when creating an object/mapping recursively,
        in that case want the underlying elements available during construction
        Nz&expected a sequence node, but found %sc                s   g | ]}j | d qS ))rd   )rP   ).0child)rd   r@   r0   r1   
<listcomp>   s   z6BaseConstructor.construct_sequence.<locals>.<listcomp>)r[   r	   r+   rg   rU   rh   )r@   rN   rd   r0   )rd   r@   r1   r^      s    
z"BaseConstructor.construct_sequencec             C   sN  t |ts tddd|j |ji }t|dddk	rJ|jdf|jdfg}n|jdfg}x|D ]\}}i }x|D ]\}}	| j|dd}
t |
t	st |
t
rt|
}
tryt|
 W n8 tk
r } ztd|jd| |jW dd}~X Y nX nt |
t	s
td|jd	|j| j|	|d}|r0| ||||
| |||
< qnW || q\W |S )
zdeep is True when creating an object/mapping recursively,
        in that case want the underlying elements available during construction
        Nz%expected a mapping node, but found %smergeFT)rd   zwhile constructing a mappingzfound unacceptable key (%s)zfound unhashable key)r[   r
   r+   rg   rU   r9   rl   rh   rP   r   listtupler   hash	TypeErrorcheck_mapping_keyupdate)r@   rN   rd   Ztotal_mappingZtodovaluesZcheckmappingkey_node
value_nodekeyexcrh   r0   r0   r1   r_      sD    


 
z!BaseConstructor.construct_mappingc          	   C   sX   ||krT| j sTd|jd|||||jddg}| j d krLtt|  nt| d S )Nzwhile constructing a mappingz?found duplicate key "{}" with value "{}" (original value: "{}")z
                    To suppress this check see:
                        http://yaml.readthedocs.io/en/latest/api.html#duplicate-keys
                    z                    Duplicate keys will become an error in future releases, and are errors
                    by default when using the new API.
                    )r?   rU   formatgetwarningswarnr2   r3   )r@   rN   ru   rt   rw   rh   argsr0   r0   r1   rq      s    
z!BaseConstructor.check_mapping_keyc             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)rd   )r[   r
   r+   rg   rU   rh   rP   rc   )r@   rN   rd   pairsru   rv   rw   rh   r0   r0   r1   construct_pairs
  s    
zBaseConstructor.construct_pairsc             C   s$   d| j kr| j | _|| j|< d S )NrW   )__dict__rW   copy)clsrV   re   r0   r0   r1   add_constructor  s    
zBaseConstructor.add_constructorc             C   s$   d| j kr| j | _|| j|< d S )NrX   )r   rX   r   )r   rf   Zmulti_constructorr0   r0   r1   add_multi_constructor  s    
z%BaseConstructor.add_multi_constructor)NN)F)F)F)F)r-   r.   r/   rW   rX   rA   propertyrD   rI   rK   rM   rO   rL   rP   r]   r^   r_   rq   r   classmethodr   r   r0   r0   r0   r1   r(   2   s"   

7	

-
c               @   s   e Zd Zdd Zdd Zd*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rhe
e
9 Z
qRW e
 e
 Zdd Zerdd Zndd ZedejZd+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dS ),r)   c             C   s>   t |tr2x&|jD ]\}}|jdkr| |S qW t| |S )Nztag:yaml.org,2002:value)r[   r
   rh   rV   r]   r(   )r@   rN   ru   rv   r0   r0   r1   r]   (  s
    

z SafeConstructor.construct_scalarc       	      C   s8  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 t|r4||_||j |_d	S )
z
        This implements the merge key feature http://yaml.org/type/merge.html
        by inserting keys from the merge dict/list of dicts if not yet
        available in this node
        r   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:strr6   N)rZ   rh   rV   r[   r
   flatten_mappingextendr	   r+   rU   rg   rc   reverserQ   rl   )	r@   rN   rl   indexru   rv   Zsubmergesubnoderh   r0   r0   r1   r   0  sD    








zSafeConstructor.flatten_mappingFc             C   s$   t |tr| | tj| ||dS )zdeep is True when creating an object/mapping recursively,
        in that case want the underlying elements available during construction
        )rd   )r[   r
   r   r(   r_   )r@   rN   rd   r0   r0   r1   r_   ]  s    

z!SafeConstructor.construct_mappingc             C   s   |  | d S )N)r]   )r@   rN   r0   r0   r1   construct_yaml_nullf  s    
z#SafeConstructor.construct_yaml_nullT)ZyesZnotrueZfalseZonZoffc             C   s   |  |}| j|  S )N)r]   bool_valueslower)r@   rN   rh   r0   r0   r1   construct_yaml_boolu  s    
z#SafeConstructor.construct_yaml_boolc             C   sP  t | |}|dd}d}|d dkr.d}|d dkrF|dd  }|dkrRdS |d	rr|t|d
d  d
 S |dr|t|d
d  d S |dr|t|d
d  d S | jjdkr|d dkr|t|d S | jjdkr@d|kr@dd |dD }|  d}d}x"|D ]}||| 7 }|d9 }qW || S |t| S d S )N_ r6   r   -z+-00b   0xr7   0o   )r6   r   :c             S   s   g | ]}t |qS r0   )int)ri   partr0   r0   r1   rk     s    z6SafeConstructor.construct_yaml_int.<locals>.<listcomp><   )	r   r]   replacerY   r   rI   processing_versionsplitr   )r@   rN   value_ssigndigitsbaserh   digitr0   r0   r1   construct_yaml_intz  s6    



z"SafeConstructor.construct_yaml_intgu <7~c             C   s  t | |}|dd }d}|d dkr2d}|d dkrJ|dd  }|dkr\|| j S |d	krj| jS | jjd
krd|krdd |dD }|	  d}d}x |D ]}||| 7 }|d9 }qW || S | jjd
krd|kr|d\}	}
d|	krt
t|| |t| S d S )Nr   r   r6   r   r   r   z+-z.infz.nan)r6   r   r   c             S   s   g | ]}t |qS r0   )float)ri   r   r0   r0   r1   rk     s    z8SafeConstructor.construct_yaml_float.<locals>.<listcomp>g        r   e.)r   r]   r   r   	inf_value	nan_valuerI   r   r   r   r{   r|   r   r   )r@   rN   value_sor   r   r   r   rh   r   mantissaexponentr0   r0   r1   construct_yaml_float  s2    


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+   rU   rC   base64r   decodestringbinasciiError)r@   rN   rh   rx   r0   r0   r1   construct_yaml_binary  s    

z%SafeConstructor.construct_yaml_binaryc          
   C   sZ   |  |}yt|dS  tjtfk
rT } ztd d d| |jW d d }~X Y nX d S )Nr   z failed to decode base64 data: %s)r]   r   decoder   r   r   r+   rU   )r@   rN   rh   rx   r0   r0   r1   r     s    
a  ^(?P<year>[0-9][0-9][0-9][0-9])
          -(?P<month>[0-9][0-9]?)
          -(?P<day>[0-9][0-9]?)
          (?:((?P<t>[Tt])|[ \t]+)   # explictly not retaining extra spaces
          (?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]))?))?)?$Nc          	   C   s  |d kr\y| j |j}W n tk
r2   d }Y nX |d krTtd d d|j|j| }t|d }t|d }t|d }|d st	
|||S t|d }t|d }t|d }	d}
|d	 r*|d	 d d
 }xt|d
k r|d7 }qW t|}
t|d	 d
kr*t|d	 d
 dkr*|
d7 }
d }|d rt|d }|d }|rZt|nd}t	j||d}|d dkr| }t		||||||	|
}|r||8 }|S )Nz'failed to construct timestamp from "{}"yearmonthdayhourminutesecondr   fraction   r      r6   tz_signtz_hour	tz_minute)hoursminutesr   )timestamp_regexpmatchrh   rp   r+   ry   rU   	groupdictr   datetimeZdaterZ   	timedelta)r@   rN   rs   r   r   r   r   r   r   r   r   
fraction_sdeltar   r   r   rR   r0   r0   r1   construct_yaml_timestamp  sP    


(
z(SafeConstructor.construct_yaml_timestampc             c   s   t  }|V  t|ts.td|jd|j |jx|jD ]}t|ts\td|jd|j |jt|jdkrtd|jdt|j |j|jd \}}| 	|}||kst
| 	|}|||< q6W d S )Nz!while constructing an ordered mapz!expected a sequence, but found %sz,expected a mapping of length 1, but found %sr6   z2expected a single mapping item, but found %d itemsr   )r   r[   r	   r+   rU   rg   rh   r
   rZ   rP   AssertionError)r@   rN   omapr   ru   rv   rw   rh   r0   r0   r1   construct_yaml_omap  s0    




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 %sr6   z2expected a single mapping item, but found %d itemsr   )
r[   r	   r+   rU   rg   rh   r
   rZ   rP   rc   )r@   rN   r~   r   ru   rv   rw   rh   r0   r0   r1   construct_yaml_pairs-  s.    




z$SafeConstructor.construct_yaml_pairsc             c   s$   t  }|V  | |}|| d S )N)setr_   rr   )r@   rN   rR   rh   r0   r0   r1   construct_yaml_setH  s    
z"SafeConstructor.construct_yaml_setc             C   s6   |  |}tr|S y
|dS  tk
r0   |S X d S )Nr   )r]   r   r   r   )r@   rN   rh   r0   r0   r1   construct_yaml_strO  s    

z"SafeConstructor.construct_yaml_strc             c   s   g }|V  | | | d S )N)r   r^   )r@   rN   rR   r0   r0   r1   construct_yaml_seqY  s    z"SafeConstructor.construct_yaml_seqc             c   s"   i }|V  |  |}|| d S )N)r_   rr   )r@   rN   rR   rh   r0   r0   r1   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)rd   )__new__rC   r_   r   r   rr   )r@   rN   r   rR   stater0   r0   r1   construct_yaml_objectf  s    


z%SafeConstructor.construct_yaml_objectc             C   s   t d d dt|j |jd S )Nz0could not determine a constructor for the tag %r)r+   r   rV   rU   )r@   rN   r0   r0   r1   construct_undefinedq  s
    
z#SafeConstructor.construct_undefined)F)N)r-   r.   r/   r]   r   r_   r   r   r   r   r   r   r   r   r   r'   reXr   r   r   r   r   r   r   r   r   r   r0   r0   r0   r1   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S )classobjN)r-   r.   r/   r0   r0   r0   r1   r     s   r   c               @   s   e Zd Zdd Zdd Zer$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 Zdd Zd"ddZdd  ZdS )#r*   c             C   s   t | |S )N)r   r]   )r@   rN   r0   r0   r1   construct_python_str  s    z Constructor.construct_python_strc             C   s
   |  |S )N)r]   )r@   rN   r0   r0   r1   construct_python_unicode  s    z$Constructor.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 )Nr   z,failed to convert base64 data into ascii: %sr   z failed to decode base64 data: %s)r]   r   r   r+   rU   rC   r   r   r   r   r   )r@   rN   rh   rx   r0   r0   r1   construct_python_bytes  s    

z"Constructor.construct_python_bytesc             C   s   |  |}tr|S t|S )N)r   r   r   )r@   rN   valr0   r0   r1   construct_python_long  s    
z!Constructor.construct_python_longc             C   s   t | |S )N)complexr]   )r@   rN   r0   r0   r1   construct_python_complex  s    z$Constructor.construct_python_complexc             C   s   t | |S )N)rn   r^   )r@   rN   r0   r0   r1   construct_python_tuple  s    z"Constructor.construct_python_tuplec          
   C   sf   |st d|d|yt| W n< tk
rZ } zt d|dt||f |W d d }~X Y nX tj| S )Nz"while constructing a Python modulez+expected non-empty name appended to the tagzcannot find module %r (%s))r+   
__import__ImportErrorr   sysmodules)r@   namemarkrx   r0   r0   r1   find_python_module  s    &zConstructor.find_python_modulec          
   C   s   |st d|d|d|kr,|dd\}}nt}|}yt| W n< tk
r| } zt d|dt||f |W d d }~X Y nX tj| }t||st d|dt||j	f |t
||S )Nz"while constructing a Python objectz+expected non-empty name appended to the tagr   r6   zcannot find module %r (%s)zcannot find %r in the module %r)r+   rsplitr   r   r   r   r   r   rC   r-   r9   )r@   r   r   Zmodule_nameZobject_namerx   moduler0   r0   r1   find_python_name  s*    &

zConstructor.find_python_namec             C   s6   |  |}|r(td|jdt| |j| ||jS )Nz while constructing a Python namez&expected the empty value, but found %r)r]   r+   rU   r   r   )r@   suffixrN   rh   r0   r0   r1   construct_python_name  s    

z!Constructor.construct_python_namec             C   s6   |  |}|r(td|jdt| |j| ||jS )Nz"while constructing a Python modulez&expected the empty value, but found %r)r]   r+   rU   r   r   )r@   r   rN   rh   r0   r0   r1   construct_python_module  s    

z#Constructor.construct_python_moduleNFc             C   s   |sg }|si }|  ||j}trN|rBt|trB|j|f||S |||S nT|rxt|ttrx|sx|sxt }||_|S |rt|tr|j|f||S |||S d S )N)r   rU   r   r[   rG   r   r   r\   )r@   r   rN   r}   kwdsnewobjr   instancer0   r0   r1   make_python_instance  s"    z Constructor.make_python_instancec             C   s   t |dr|| nji }t|tr8t|dkr8|\}}t |drP|j| n|r^|| x | D ]\}}tt	|| qhW d S )Nr   r   r   )
rC   r   r[   rn   rZ   r   rr   itemssetattrobject)r@   r   r   Z	slotstaterw   rh   r0   r0   r1   set_python_instance_state2  s    


z%Constructor.set_python_instance_statec             c   s>   | j ||dd}|V  t|d}| j||d}| || d S )NT)r   r   )rd   )r   rC   r_   r   )r@   r   rN   r   rd   r   r0   r0   r1   construct_python_objectA  s
    
z#Constructor.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 }| |||||}
t|r| |
| t|r|
| t|rx|D ]}|| |
|< qW |
S )NT)rd   r}   r   r   	listitems	dictitems)	r[   r	   r^   r_   rz   r   rQ   r   r   )r@   r   rN   r   r}   r   r   r   r  rh   r   rw   r0   r0   r1   construct_python_object_applyK  s*    


z)Constructor.construct_python_object_applyc             C   s   | j ||ddS )NT)r   )r  )r@   r   rN   r0   r0   r1   construct_python_object_newo  s    z'Constructor.construct_python_object_new)NNF)F)r-   r.   r/   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r0   r0   r0   r1   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:z tag:yaml.org,2002:python/module:z tag:yaml.org,2002:python/object:z&tag:yaml.org,2002:python/object/apply:z$tag:yaml.org,2002:python/object/new:c               @   s   e Zd ZdZdd Zdd Zdd Z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 Zdd Zdd Zdd Zd d! Zd'd"d#ZdS )(r,   zOneed to store the comments on the node itself,
    as well as on the items
    c             C   s   t |ts td d d|j |j|jdkr@t |jtr@t|jS t	| j
r~t |jtr~|jdkrjt|jS |jdkr~t|jS |jS )Nz$expected a scalar node, but found %s|'")r[   r   r+   rg   rU   stylerh   r   r   rQ   r>   r   r   )r@   rN   r0   r0   r1   r]     s    





z%RoundTripConstructor.construct_scalarc             C   s  d }t | |}y*|d}t||d d ddg}W n. tk
rT   d }Y n tk
rj   d }Y nX |dd}d}|d dkrd}|d dkr|dd  }|d	krdS |d
rD| j	j
dkr|d d	krt|dd  }|d k	r$|d dk|d< t|dd  dko|d dk|d< t|t|dd  d ||dS |dr| j	j
dkr||d d	kr|t|dd  }t}x2|dd  D ]"}	|	dkrt}P |	dkrP qW |d k	r|d dk|d< t|dd  dko|d dk|d< ||t|dd  d ||dS |dr| j	j
dkrL|d d	krLt|dd  }|d k	r|d dk|d< t|dd  dko|d dk|d< t|t|dd  d ||dS | j	j
dkr|d d	kr|t|d S | j	j
dkr>d|kr>dd |dD }
|
  d}d}x"|
D ]}||| 7 }|d9 }qW || S | j	j
dkr|d d	kr|d k	rt|dko||d dk|d< t|t| t||dS |rt|dko|d dk|d< t|t| d |dS |t| S d S )Nr   r6   Fr   r   r   r   z+-r   r   )r6   r6   r   )width
underscorer   ZABCDEFZabcdefr7   r   r   )r6   r   r   c             S   s   g | ]}t |qS r0   )r   )ri   r   r0   r0   r1   rk     s    z;RoundTripConstructor.construct_yaml_int.<locals>.<listcomp>r   )r   r]   rstriprZ   rindex
ValueError
IndexErrorr   rY   rI   r   r!   r   r#   r$   r"   r   r   r    )r@   rN   r  Zvalue_suZsxr	  r   r   Zhex_funZchr   r   rh   r   r0   r0   r1   r     s    
 

&


& 
&

z'RoundTripConstructor.construct_yaml_intc          
   C   s  dd }d}t | |}|dd }d}|d dkr>d	}|d d
kr^|d }|dd  }|dkrp|| j S |dkr~| jS | jjdkrd|krdd |dD }|	  d}d}	x |D ]}
|	|
| 7 }	|d9 }qW ||	 S d|kry|d\}}d}W n( t
k
r(   |d\}}d}Y nX | jjdkrRd|krRtt|| ||}t|}|d}|rz|d8 }t|}|d d
k}t|t| |||||||dS t|}|d}||}t|t| ||||dS )Nc             S   sF   d}d}x8|t | k r@| | dkr@| | dkr6|d7 }|d7 }q
W |S )Nr   z0.r   r6   )rZ   )vlead0idxr0   r0   r1   leading_zeros  s    z@RoundTripConstructor.construct_yaml_float.<locals>.leading_zerosFr   r   r6   r   r   r   z+-z.infz.nan)r6   r   r   c             S   s   g | ]}t |qS r0   )r   )ri   r   r0   r0   r1   rk   6  s    z=RoundTripConstructor.construct_yaml_float.<locals>.<listcomp>g        r   r   Er   )r  precm_signm_lead0expe_widthe_sign)r  r  r  r  )r   r]   r   r   r   r   rI   r   r   r   r  r{   r|   r   rZ   findr%   r   r   )r@   rN   r  r  r   r   r   r   r   rh   r   r   r   r  r  r  r  r  r  r0   r0   r1   r     s`    







z)RoundTripConstructor.construct_yaml_floatc             C   sV   |  |}t|tr|S tr |S y
|dS  tk
r>   |S  tk
rP   |S X d S )Nr   )r]   r[   r   r   r   rE   r   )r@   rN   rh   r0   r0   r1   r   Z  s    


z'RoundTripConstructor.construct_yaml_strFc             C   s   t |ts td d d|j |jg }|jr`||jd d  t|jdkr`|j|jd dd |j	rddl
m} ||j	s||j	 xXt|jD ]J\}}|| j||d |jr|j|j|d |||jj|jjg qW |S )	Nz&expected a sequence node, but found %sr   T)clearr   )templated_id)rd   )rw   )r[   r	   r+   rg   rU   comment_yaml_add_commentrZ   yaml_end_comment_extendanchorruamel_yaml.serializerr  yaml_set_anchor	enumeraterh   rc   rP   Z_yaml_set_idx_line_collinecolumn)r@   rN   Zseqtyprd   Zret_valr  r  rj   r0   r0   r1   construct_rt_sequencei  s*    

z*RoundTripConstructor.construct_rt_sequencec                s    fdd}g }d}x|t |jk r|j| \}}|jdkr|j|= t|trb||||f qt|trx\|jD ]8}t|tstd|jd|j	 |j||||f qtW qtd|jd|j	 |jq|jdkrd	|_|d
7 }q|d
7 }qW |S )z
        This implements the merge key feature http://yaml.org/type/merge.html
        by inserting keys from the merge dict/list of dicts if not yet
        available in this node
        c                s(   |  j kr j |  }n j| dd}|S )NF)rd   )r:   rP   )rv   rh   )r@   r0   r1   constructed  s    
z9RoundTripConstructor.flatten_mapping.<locals>.constructedr   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:strr6   )
rZ   rh   rV   r[   r
   rc   r	   r+   rU   rg   )r@   rN   r&  Zmerge_map_listr   ru   rv   r   r0   )r@   r1   r     s:    





z$RoundTripConstructor.flatten_mappingc             C   s   d S )Nr0   )r@   r0   r0   r1   	_sentinel  s    zRoundTripConstructor._sentinelNc             C   s  t |ts td d d|j |j| |}|jrf||jd d  t|jdkrf|j	|jd dd |j
rddlm} ||j
s||j
 d | j }}x|jD ]\}}	| j|dd}
t |
tst |
trt|
}|jdkr|j  n|jdkr|j  |}
tr\yt|
 W n: tk
rX } ztd	|jd
| |jW d d }~X Y nX nt |
tsztd	|jd|j| j|	|d}| ||||
| |jrt|jdkr|jd r|d kr|jd|jd< |j|j|d n"|jd|jd< |j|j|
d d |_|jr,|j|j|
d |	jrD|j|	j|
d ||
|jj|jj|	jj|	jjg |||
< |
| }}qW |r| | d S )Nz%expected a mapping node, but found %sr   T)r  r   )r  )rd   Fzwhile constructing a mappingzfound unacceptable key (%s)zfound unhashable keyr   )rh   )rw   )!r[   r
   r+   rg   rU   r   r  r  rZ   r  r  r   r  r!  r'  rh   rP   r   rm   r   
flow_stylefaset_flow_styleset_block_styler   ro   rp   rq   popZ_yaml_set_kv_line_colr#  r$  Zadd_yaml_merge)r@   rN   Zmaptyprd   Z	merge_mapr  Zlast_key
last_valueru   rv   rw   Zkey_arx   rh   r0   r0   r1   r_     st    




 

z&RoundTripConstructor.construct_mappingc       
      C   s  t |ts td d d|j |j|jr\||jd d  t|jdkr\|j|jd dd |j	rddl
m} ||j	s||j	 x|jD ]\}}| j|dd}t |tst |trt|}tryt| W n: tk
r } ztd|jd	| |jW d d }~X Y nX nt |ts.td|jd
|j| j||d}	| |||||	 |jrf|j|j|d |jr~|j|j|d || qW d S )Nz%expected a mapping node, but found %sr   T)r  r   )r  )rd   zwhile constructing a mappingzfound unacceptable key (%s)zfound unhashable key)rw   )rh   )r[   r
   r+   rg   rU   r  r  rZ   r  r  r   r  r!  rh   rP   r   rm   rn   r   ro   rp   rq   add)
r@   rN   rB   rd   r  ru   rv   rw   rx   rh   r0   r0   r1   construct_setting
  sJ    



 
z&RoundTripConstructor.construct_settingc             c   sr   t  }||jj|jj |jdkr0|j  n|jdkrD|j  |j	rV|
|j	 |V  || || d S )NTF)r   _yaml_set_line_colrU   r#  r$  r(  r)  r*  r+  r  r  r   r%  )r@   rN   rR   r0   r0   r1   r   6  s    


z'RoundTripConstructor.construct_yaml_seqc             c   sZ   t  }||jj|jj |jdkr0|j  n|jdkrD|j  |V  | 	|| d S )NTF)
r   r0  rU   r#  r$  r(  r)  r*  r+  r_   )r@   rN   rR   r0   r0   r1   r   C  s    


z'RoundTripConstructor.construct_yaml_mapc             c   sR   | |}|V  t|dr6tj| |dd}|| nt| |}|j| d S )Nr   T)rd   )r   rC   r)   r_   r   r   rr   )r@   rN   r   rR   r   r0   r0   r1   r   N  s    

z*RoundTripConstructor.construct_yaml_objectc             c   s  t  }||jj|jj |jdkr0|j  n|jdkrD|j  |V  |j	r|
|j	d d  t|j	dkr|j|j	d dd t|tstd|jd|j |jx|jD ]}t|tstd|jd|j |jt|jdkrtd|jd	t|j |j|jd
 \}}| |}||ks(t| |}|j	rJ|j
|j	|d |j	rb|j
|j	|d |j	rz|j
|j	|d |||< qW d S )NTFr   )r  z!while constructing an ordered mapz!expected a sequence, but found %sz,expected a mapping of length 1, but found %sr6   z2expected a single mapping item, but found %d itemsr   )rw   )rh   )r   r0  rU   r#  r$  r(  r)  r*  r+  r  r  rZ   r  r[   r	   r+   rg   rh   r
   rP   r   )r@   rN   r   r   ru   rv   rw   rh   r0   r0   r1   r   Y  sN    







z(RoundTripConstructor.construct_yaml_omapc             c   s0   t  }||jj|jj |V  | || d S )N)r   r0  rU   r#  r$  r/  )r@   rN   rR   r0   r0   r1   r     s    z'RoundTripConstructor.construct_yaml_setc             c   s   yt |trrt }||jj|jj |jdkr<|j	  n|jdkrP|j
  ||j |V  | || d S t |trt }| ||_|j|_||j |V  d S W n   Y nX td d dt|j |jd S )NTFz0could not determine a constructor for the tag %r)r[   r
   r   r0  rU   r#  r$  r(  r)  r*  r+  Zyaml_set_tagrV   r_   r   r   r]   rh   r  r+   r   )r@   rN   rR   r0   r0   r1   r     s4    





z(RoundTripConstructor.construct_undefinedc             C   sb  y| j |j}W n tk
r*   d }Y nX |d krLtd d d|j|j| }|d sjt	| ||S x$dD ]}|| rpP qpW t	| ||S t
|d }t
|d }t
|d }t
|d }t
|d }	t
|d }
d	}|d
 rJ|d
 d d }xt|dk r|d7 }qW t
|}t|d
 dkrJt
|d
 d dkrJ|d7 }d }|d rt
|d }|d }|rzt
|nd	}tj||d}|d dkr| }|rt|||||	}||8 }t|j|j|j|j|j|
|}||jd< |d |d  }|d r|d|d  7 }||jd< n,t|||||	|
|}|d rJ|d |jd< |d r^d|jd< |S )Nz'failed to construct timestamp from "{}"r   )tr   r   r   r   r   r   r   r   r   r   r   r   r   r6   r   r   r   )r   r   r   r   r   tzr1  T)r   r   rh   rp   r+   ry   rU   r   r)   r   r   rZ   r   r   r&   r   r   r   r   r   Z_yaml)r@   rN   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ZdtrR   r2  r0   r0   r1   r     sl    



(





z-RoundTripConstructor.construct_yaml_timestamp)F)NF)F)N)r-   r.   r/   __doc__r]   r   r   r   r%  r   r'  r_   r/  r   r   r   r   r   r   r   r0   r0   r0   r1   r,     s"   L>
?
F
,+)ZZ
__future__r   r   r   r   r   r   r   r   r`   r{   Zruamel_yaml.errorr   r   r   Zruamel_yaml.nodesr	   r
   r   Zruamel_yaml.compatr   r   r   r   r   r   r   r   r   r   Zruamel_yaml.commentsr   r   r   r   r   r   Zruamel_yaml.scalarstringr   r   r   r   Zruamel_yaml.scalarintr    r!   r"   r#   r$   Zruamel_yaml.scalarfloatr%   Zruamel_yaml.timestampr&   Zruamel_yaml.utilr'   __all__r+   r2   r3   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   r   r   r   r   r  r  r,   r0   r0   r0   r1   <module>   sL  0  v  U
 C    /