U
    Æ½„b ã                   @   s*  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
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 d dlmZ d dlT d dlmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d d	l'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- d d
l.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z< dddddgZDG dd„ deƒZEG dd„ deƒZFG dd„ deƒZGG dd„ dƒZHG dd„ deHƒZIeI JdeIjK¡ eI JdeIjL¡ eI JdeIjM¡ eI JdeIjN¡ eI JdeIjO¡ eI Jd eIjP¡ eI Jd!eIjQ¡ eI Jd"eIjR¡ eI Jd#eIjS¡ eI Jd$eIjT¡ eI Jd%eIjU¡ eI Jd&eIjV¡ eI JdeIjW¡ G d'd„ deIƒZXeX Jd(eXjK¡ eX Jd)eXjL¡ eX Jd*eXjY¡ eX Jd+eXjZ¡ eX Jd,eXj[¡ eX Jd-eXjM¡ eX Jd.eXj\¡ eX Jd/eXjN¡ eX Jd0eXj]¡ eX Jd1eXjU¡ eX Jd2eXj^¡ eX Jd3eXjV¡ eX _d4eXj`¡ eX _d5eXja¡ eX _d6eXjb¡ eX _d7eXjc¡ eX _d8eXjd¡ G d9d„ deIƒZeee JdeejK¡ ee JdeejL¡ ee JdeejM¡ ee JdeejN¡ ee JdeejO¡ ee Jd eejP¡ ee Jd!eejQ¡ ee Jd"eejR¡ ee Jd#eejS¡ ee Jd$eejT¡ ee Jd%eejU¡ ee Jd&eejV¡ ee JdeejW¡ dS ):é    N)ÚHashableÚMutableSequenceÚMutableMapping)ÚMarkedYAMLErrorÚMarkedYAMLFutureWarningÚMantissaNoDotYAML1_1Warning)Ú*)ÚSequenceNodeÚMappingNodeÚ
ScalarNode)Ú_FÚbuiltins_moduleÚnprintÚnprintfÚversion_tnf)Úordereddict)ÚCommentedMapÚCommentedOrderedMapÚCommentedSetÚCommentedKeySeqÚCommentedSeqÚTaggedScalarÚCommentedKeyMapÚ	C_KEY_PREÚ	C_KEY_EOLÚ
C_KEY_POSTÚC_VALUE_PREÚC_VALUE_EOLÚC_VALUE_POST)ÚSingleQuotedScalarStringÚDoubleQuotedScalarStringÚLiteralScalarStringÚFoldedScalarStringÚPlainScalarStringÚScalarString)Ú	ScalarIntÚ	BinaryIntÚOctalIntÚHexIntÚ
HexCapsInt)ÚScalarFloat)ÚScalarBoolean)Ú	TimeStamp)Útimestamp_regexpÚcreate_timestampÚBaseConstructorÚSafeConstructorÚConstructorÚConstructorErrorÚRoundTripConstructorc                   @   s   e Zd ZdS )r2   N©Ú__name__Ú
__module__Ú__qualname__© r8   r8   ú;/tmp/pip-unpacked-wheel-ctuyz3qg/ruamel/yaml/constructor.pyr2   -   s   c                   @   s   e Zd ZdS )ÚDuplicateKeyFutureWarningNr4   r8   r8   r8   r9   r:   1   s   r:   c                   @   s   e Zd ZdS )ÚDuplicateKeyErrorNr4   r8   r8   r8   r9   r;   5   s   r;   c                   @   sÄ   e Zd Zi Zi Zd'dd„Ze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d„Zdd„ Zd*dd„Zd+dd„Zdd„ Zdd „ Zd,d!d"„Zed#d$„ ƒZed%d&„ ƒZdS )-r/   Nc                 C   sj   || _ | j d k	r*t| j dd ƒd kr*| | j _|| _ t| _t| _i | _i | _g | _	d| _
|| _tddƒ| _d S )NÚ_constructorF)r   é   é   )r   é   )ÚloaderÚgetattrr<   ÚdictÚyaml_base_dict_typeÚlistÚyaml_base_list_typeÚconstructed_objectsÚrecursive_objectsÚstate_generatorsÚdeep_constructÚ_preserve_quotesr   Úallow_duplicate_keys)ÚselfZpreserve_quotesr@   r8   r8   r9   Ú__init__>   s    zBaseConstructor.__init__c              	   C   s|   t | jdƒr| jjS z
| jjW S  tk
rv   tj d t	| ƒ¡¡ tj d | jj¡¡ tj d t
| ƒ¡¡ ‚ Y nX d S )NÚtypzslt {}
zslc {}
z{}
)Úhasattrr@   ÚcomposerZ	_composerÚAttributeErrorÚsysÚstdoutÚwriteÚformatÚtypeÚdir©rL   r8   r8   r9   rP   M   s    
zBaseConstructor.composerc                 C   s   t | jdƒr| jjS | jjS ©NrN   )rO   r@   ÚresolverZ	_resolverrX   r8   r8   r9   rZ   Z   s    zBaseConstructor.resolverc                 C   s   t | jdƒr| jjS | jjS rY   )rO   r@   ÚscannerZ_scannerrX   r8   r8   r9   r[   a   s    zBaseConstructor.scannerc                 C   s
   | j  ¡ S ©N)rP   Ú
check_noderX   r8   r8   r9   Ú
check_datai   s    zBaseConstructor.check_datac                 C   s   | j  ¡ r|  | j  ¡ ¡S d S r\   )rP   r]   Úconstruct_documentZget_noderX   r8   r8   r9   Úget_datan   s    
zBaseConstructor.get_datac                 C   s    | j  ¡ }|d k	r|  |¡S d S r\   )rP   Zget_single_noder_   ©rL   Únoder8   r8   r9   Úget_single_datat   s    

zBaseConstructor.get_single_datac                 C   sL   |   |¡}t| jƒr6| j}g | _|D ]}|D ]}q,q$q
i | _i | _d| _|S )NF)Úconstruct_objectÚboolrH   rF   rG   rI   )rL   rb   ÚdatarH   Ú	generatorÚ_dummyr8   r8   r9   r_   |   s    

z"BaseConstructor.construct_documentFc                 C   sl   || j kr| j | S |r$| j}d| _|| jkr8| j| S d| j|< |  |¡}|| j |< | j|= |rh|| _|S )ú’deep is True when creating an object/mapping recursively,
        in that case want the underlying elements available during construction
        TN)rF   rI   rG   Úconstruct_non_recursive_object)rL   rb   ÚdeepZold_deeprf   r8   r8   r9   rd   Š   s    






z BaseConstructor.construct_objectc           	      C   s*  d }d }|d kr|j }|| jkr,| j| }nž| jD ],}| |¡r2|t|ƒd … }| j| } qÊq2d | jkrz|}| jd  }nPd | 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ƒ�r&|}t|ƒ}| j�r|D ]}�qn| j |¡ |S r\   )ÚtagÚyaml_constructorsÚyaml_multi_constructorsÚ
startswithÚlenÚ
isinstancer   Ú	__class__Úconstruct_scalarr	   Úconstruct_sequencer
   Úconstruct_mappingÚtypesÚGeneratorTypeÚnextrI   rH   Úappend)	rL   rb   rl   ÚconstructorZ
tag_suffixÚ
tag_prefixrf   rg   rh   r8   r8   r9   rj   ¢   sB    










z.BaseConstructor.construct_non_recursive_objectc                 C   s*   t |tƒs$td d td|jd�|jƒ‚|jS )Nú-expected a scalar node, but found {node_id!s}©Znode_id)rq   r   r2   r   ÚidÚ
start_markÚvaluera   r8   r8   r9   rs   Ê   s    
üz BaseConstructor.construct_scalarc                    s:   t |tƒs$tddtd|jd�|jƒ‚‡ ‡fdd„|jD ƒS )ri   Nú/expected a sequence node, but found {node_id!s}r}   c                    s   g | ]}ˆj |ˆ d �‘qS )©rk   )rd   )Ú.0Úchild©rk   rL   r8   r9   Ú
<listcomp>á   s     z6BaseConstructor.construct_sequence.<locals>.<listcomp>)rq   r	   r2   r   r~   r   r€   ©rL   rb   rk   r8   r…   r9   rt   Õ   s    
üz"BaseConstructor.construct_sequencec              	   C   s  t |tƒs$tddtd|jd�|jƒ‚|  ¡ }t|ddƒdk	rR|jdf|j	dfg}n|j	dfg}|D ]¤\}}|  ¡ }|D ]„\}}	| j
|dd�}
t |
tƒs¨t |
tƒr¨t|
ƒ}
t |
tƒsÄtd|jd	|jƒ‚| j
|	|d�}|rò|  ||||
|¡rú|||
< qv|||
< qv| |¡ qb|S )
ri   Nú.expected a mapping node, but found {node_id!s}r}   ÚmergeFTr‚   úwhile constructing a mappingúfound unhashable key)rq   r
   r2   r   r~   r   rC   rA   r‰   r€   rd   r   rD   ÚtupleÚcheck_mapping_keyÚupdate)rL   rb   rk   Ztotal_mappingÚtodoÚvaluesÚcheckÚmappingÚkey_nodeÚ
value_nodeÚkeyr€   r8   r8   r9   ru   ã   s@    
ü


ü

z!BaseConstructor.construct_mappingc                 C   s`   ||kr\| j sX| |¡}d|jd |||¡|jddg}| j dkrPt t|Ž ¡ nt|Ž ‚dS dS )zreturn True if key is uniquerŠ   z?found duplicate key "{}" with value "{}" (original value: "{}")úš
                    To suppress this check see:
                        http://yaml.readthedocs.io/en/latest/api.html#duplicate-keys
                    ú¦                    Duplicate keys will become an error in future releases, and are errors
                    by default when using the new API.
                    NFT)rK   Úgetr   rU   ÚwarningsÚwarnr:   r;   )rL   rb   r“   r’   r•   r€   ÚmkÚargsr8   r8   r9   r�     s&    
  ÿö
z!BaseConstructor.check_mapping_keyc                 C   sN   ||krJ| j sJd|jd |¡|jddg}| j d krBt t|Ž ¡ nt|Ž ‚d S )Nzwhile constructing a setúfound duplicate key "{}"r–   r—   )rK   r   rU   r™   rš   r:   r;   )rL   rb   r“   Zsettingr•   rœ   r8   r8   r9   Úcheck_set_key*  s    ÷
zBaseConstructor.check_set_keyc                 C   sf   t |tƒs$td d td|jd�|jƒ‚g }|jD ]2\}}| j||d�}| j||d�}| ||f¡ q.|S )Nrˆ   r}   r‚   )	rq   r
   r2   r   r~   r   r€   rd   ry   )rL   rb   rk   Úpairsr“   r”   r•   r€   r8   r8   r9   Úconstruct_pairsA  s    
üzBaseConstructor.construct_pairsc                 C   s$   d| j kr| j ¡ | _|| j|< d S )Nrm   )Ú__dict__rm   Úcopy)Úclsrl   rz   r8   r8   r9   Úadd_constructorQ  s    
zBaseConstructor.add_constructorc                 C   s$   d| j kr| j ¡ | _|| j|< d S )Nrn   )r¡   rn   r¢   )r£   r{   Zmulti_constructorr8   r8   r9   Úadd_multi_constructorX  s    
z%BaseConstructor.add_multi_constructor)NN)F)N)F)F)F)r5   r6   r7   rm   rn   rM   ÚpropertyrP   rZ   r[   r^   r`   rc   r_   rd   rj   rs   rt   ru   r�   rž   r    Úclassmethodr¤   r¥   r8   r8   r8   r9   r/   9   s2   





(

+

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
ddœZdd„ Zdd„ Z	dZ
e
e
e
 krje
e
9 Z
qTe
 e
 Zdd„ Zdd„ Ze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 )*r0   c                 C   s>   t |tƒr2|jD ] \}}|jdkr|  |¡  S qt | |¡S )Nútag:yaml.org,2002:value)rq   r
   r€   rl   rs   r/   )rL   rb   r“   r”   r8   r8   r9   rs   a  s
    

z SafeConstructor.construct_scalarc           
      C   s’  g }d}|t |jƒk �rr|j| \}}|jdk�rL|rŒ| jrN|j|= |d7 }qd|jd |j¡|jddg}| jdkr„t t|Ž ¡ nt	|Ž ‚|j|= t
|tƒr¶|  |¡ | |j¡ n”t
|tƒ�r.g }|jD ]@}t
|tƒsötd|jtd	|jd
�|jƒ‚|  |¡ | |j¡ qÌ| ¡  |D ]}	| |	¡ �qntd|jtd|jd�|jƒ‚q|jdk�rhd|_|d7 }q|d7 }qt|ƒ�rŽ||_||j |_dS )ú½
        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   útag:yaml.org,2002:merger>   rŠ   r�   ú¥
                        To suppress this check see:
                           http://yaml.readthedocs.io/en/latest/api.html#duplicate-keys
                        ú²                        Duplicate keys will become an error in future releases, and are errors
                        by default when using the new API.
                        Nú8expected a mapping for merging, but found {subnode_id!s}©Z
subnode_idúOexpected a mapping or list of mappings for merging, but found {value_node_id!s}©Zvalue_node_idr¨   útag:yaml.org,2002:str)rp   r€   rl   rK   r   rU   r™   rš   r:   r;   rq   r
   Úflatten_mappingÚextendr	   r2   r   r~   ry   Úreversere   r‰   )
rL   rb   r‰   Úindexr“   r”   rœ   ZsubmergeÚsubnoder€   r8   r8   r9   r²   i  st    
÷




þù	
ýø



zSafeConstructor.flatten_mappingFc                 C   s$   t |tƒr|  |¡ tj| ||d�S )ri   r‚   )rq   r
   r²   r/   ru   r‡   r8   r8   r9   ru   ¶  s    

z!SafeConstructor.construct_mappingc                 C   s   |   |¡ d S r\   ©rs   ra   r8   r8   r9   Úconstruct_yaml_null¿  s    
z#SafeConstructor.construct_yaml_nullT)ÚyesÚnoÚyÚnÚtrueÚfalseÚonÚoffc                 C   s   |   |¡}| j| ¡  S r\   )rs   Úbool_valuesÚlower©rL   rb   r€   r8   r8   r9   Úconstruct_yaml_boolÐ  s    
z#SafeConstructor.construct_yaml_boolc                 C   sH  |   |¡}| 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¡r®|t|d
d … dƒ S | jjdkrÔ|d dkrÔ|t|dƒ S | jjdk�r8d|k�r8dd„ | d¡D ƒ}| ¡  d}d}|D ]}||| 7 }|d9 }�q|| S |t|ƒ S d S )NÚ_Ú r>   r   ú-éÿÿÿÿú+-Ú0Ú0bé   Ú0xr?   Ú0oé   ©r>   r>   ú:c                 S   s   g | ]}t |ƒ‘qS r8   ©Úint©rƒ   Úpartr8   r8   r9   r†   é  s     z6SafeConstructor.construct_yaml_int.<locals>.<listcomp>é<   )rs   Úreplacero   rÓ   rZ   Úprocessing_versionÚsplitr´   )rL   rb   Úvalue_sÚsignÚdigitsÚbaser€   Údigitr8   r8   r9   Úconstruct_yaml_intÕ  s6    



z"SafeConstructor.construct_yaml_intgœu ˆ<ä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 | jjd
krÄd|krÄdd„ | d¡D ƒ}| ¡  d}d}|D ]}||| 7 }|d9 }q¢|| S | jjd
k�rd|k�r| d¡\}	}
d|	k�rt	 
t||ƒ¡ |t|ƒ S d S )NrÅ   rÆ   r>   r   rÇ   rÈ   rÉ   ú.infú.nan©r>   rÌ   rÑ   c                 S   s   g | ]}t |ƒ‘qS r8   ©ÚfloatrÔ   r8   r8   r9   r†     s     z8SafeConstructor.construct_yaml_float.<locals>.<listcomp>ç        rÖ   ÚeÚ.)rs   r×   rÂ   Ú	inf_valueÚ	nan_valuerZ   rØ   rÙ   r´   r™   rš   r   rä   )rL   rb   Úvalue_sorÚ   rÛ   rÜ   rÝ   r€   rÞ   ÚmantissaÚexponentr8   r8   r9   Úconstruct_yaml_floatù  s2    



z$SafeConstructor.construct_yaml_floatc              
   C   sž   z|   |¡ d¡}W n: tk
rN } ztd d td|d�|jƒ‚W 5 d }~X Y nX zt |¡W S  tj	k
r˜ } ztd d td|d�|jƒ‚W 5 d }~X Y nX d S ©NÚasciiz1failed to convert base64 data into ascii: {exc!s})Úexcz%failed to decode base64 data: {exc!s}©
rs   ÚencodeÚUnicodeEncodeErrorr2   r   r   Úbase64ÚdecodebytesÚbinasciiÚError©rL   rb   r€   rð   r8   r8   r9   Úconstruct_yaml_binary  s$    
ü
üz%SafeConstructor.construct_yaml_binaryNc                 C   sf   |d kr\z| j  |j¡}W n tk
r2   d }Y nX |d krTtd d d |j¡|jƒ‚| ¡ }tf |ŽS )Nú'failed to construct timestamp from "{}")	r-   Úmatchr€   Ú	TypeErrorr2   rU   r   Ú	groupdictr.   )rL   rb   r�   rû   r8   r8   r9   Úconstruct_yaml_timestamp.  s    

üz(SafeConstructor.construct_yaml_timestampc                 c   sÌ   t ƒ }|V  t|tƒs2td|jtd|jd�|jƒ‚|jD ]Ž}t|tƒsbtd|jtd|jd�|jƒ‚t	|jƒdkr�td|jtdt	|jƒd�|jƒ‚|jd	 \}}|  
|¡}||ks´t‚|  
|¡}|||< q8d S )
Nú!while constructing an ordered mapú*expected a sequence, but found {node_id!s}r}   ú8expected a mapping of length 1, but found {subnode_id!s}r®   r>   úCexpected a single mapping item, but found {len_subnode_val:d} items©Zlen_subnode_valr   )r   rq   r	   r2   r   r   r~   r€   r
   rp   rd   ÚAssertionError©rL   rb   Zomapr¶   r“   r”   r•   r€   r8   r8   r9   Úconstruct_yaml_omap?  sF    
ü

þù	þù	

z#SafeConstructor.construct_yaml_omapc                 c   sÄ   g }|V  t |tƒs0td|jtd|jd�|jƒ‚|jD ]ˆ}t |tƒs`td|jtd|jd�|jƒ‚t|jƒdkrŽtd|jtdt|jƒd�|jƒ‚|jd	 \}}|  	|¡}|  	|¡}| 
||f¡ q6d S )
Nzwhile constructing pairsr   r}   r  r®   r>   r  r  r   )rq   r	   r2   r   r   r~   r€   r
   rp   rd   ry   )rL   rb   rŸ   r¶   r“   r”   r•   r€   r8   r8   r9   Úconstruct_yaml_pairsf  sD    
ü

þù	þù	

z$SafeConstructor.construct_yaml_pairsc                 c   s$   t ƒ }|V  |  |¡}| |¡ d S r\   )Úsetru   rŽ   ©rL   rb   rf   r€   r8   r8   r9   Úconstruct_yaml_setŒ  s    
z"SafeConstructor.construct_yaml_setc                 C   s   |   |¡}|S r\   r·   rÃ   r8   r8   r9   Úconstruct_yaml_str“  s    
z"SafeConstructor.construct_yaml_strc                 c   s"   |   ¡ }|V  | |  |¡¡ d S r\   )rE   r³   rt   ©rL   rb   rf   r8   r8   r9   Úconstruct_yaml_seq˜  s    z"SafeConstructor.construct_yaml_seqc                 c   s&   |   ¡ }|V  |  |¡}| |¡ d S r\   )rC   ru   rŽ   r	  r8   r8   r9   Úconstruct_yaml_mapž  s    
z"SafeConstructor.construct_yaml_mapc                 c   sN   |  |¡}|V  t|dƒr4| j|dd�}| |¡ n|  |¡}|j |¡ d S )NÚ__setstate__Tr‚   )Ú__new__rO   ru   r  r¡   rŽ   )rL   rb   r£   rf   Ústater8   r8   r9   Úconstruct_yaml_object¥  s    


z%SafeConstructor.construct_yaml_objectc                 C   s   t d d td|jd�|jƒ‚d S )Nú:could not determine a constructor for the tag {node_tag!r}©Znode_tag)r2   r   rl   r   ra   r8   r8   r9   Úconstruct_undefined°  s     ÿúz#SafeConstructor.construct_undefined)F)N)r5   r6   r7   rs   r²   ru   r¸   rÁ   rÄ   rß   rè   ré   rí   rù   r-   rþ   r  r  r
  r  r  r  r  r  r8   r8   r8   r9   r0   `  s>   M
	ø


'&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:setr±   z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„ Zdd„ Zd!dd„Zdd„ Zdd„ Zd"dd„Zdd „ ZdS )#r1   c                 C   s
   |   |¡S r\   r·   ra   r8   r8   r9   Úconstruct_python_strà  s    z Constructor.construct_python_strc                 C   s
   |   |¡S r\   r·   ra   r8   r8   r9   Úconstruct_python_unicodeä  s    z$Constructor.construct_python_unicodec              
   C   sž   z|   |¡ d¡}W n: tk
rN } ztd d td|d�|jƒ‚W 5 d }~X Y nX zt |¡W S  tj	k
r˜ } ztd d td|d�|jƒ‚W 5 d }~X Y nX d S rî   rñ   rø   r8   r8   r9   Úconstruct_python_bytesè  s$    
ü
üz"Constructor.construct_python_bytesc                 C   s   |   |¡}|S r\   )rß   )rL   rb   Úvalr8   r8   r9   Úconstruct_python_longý  s    
z!Constructor.construct_python_longc                 C   s   t |  |¡ƒS r\   )Úcomplexrs   ra   r8   r8   r9   Úconstruct_python_complex  s    z$Constructor.construct_python_complexc                 C   s   t |  |¡ƒS r\   )rŒ   rt   ra   r8   r8   r9   Úconstruct_python_tuple  s    z"Constructor.construct_python_tuplec                 C   sd   |st d|d|ƒ‚zt|ƒ W n: tk
rX } zt d|td||d�|ƒ‚W 5 d }~X Y nX tj| S )Nú"while constructing a Python moduleú+expected non-empty name appended to the tagz%cannot find module {name!r} ({exc!s}))Únamerð   )r2   Ú
__import__ÚImportErrorr   rR   Úmodules)rL   r   Úmarkrð   r8   r8   r9   Úfind_python_module
  s"    üüzConstructor.find_python_modulec                 C   s0  |st d|d|ƒ‚d|kr€| d¡}|}g }t|ƒdkrŠ| d| ¡ ¡ d |¡}zt|ƒ W qŠW q, tk
rz   Y q,Y q,X q,n
t}|g}zt|ƒ W n: tk
rÐ } zt d|t	d||d�|ƒ‚W 5 d }~X Y nX t
j| }d |¡}	|}
|�r,t|
|d ƒ�st d|t	d|	|jd	�|ƒ‚t|
| d¡ƒ}
qê|
S )
Nz"while constructing a Python objectr  rç   r>   r   z,cannot find module {module_name!r} ({exc!s}))Úmodule_namerð   z9cannot find {object_name!r} in the module {module_name!r})Úobject_namer&  )r2   rÙ   rp   ÚinsertÚpopÚjoinr!  r"  r   r   rR   r#  rO   r5   rA   )rL   r   r$  ÚlnameZlmodule_nameZlobject_namer&  rð   Úmoduler'  Úobjr8   r8   r9   Úfind_python_name  sf    ü

ýø


ýø
zConstructor.find_python_namec                 C   s6   |   |¡}|r(td|jtd|d�|jƒ‚|  ||j¡S )Nz while constructing a Python nameú-expected the empty value, but found {value!r}©r€   )rs   r2   r   r   r.  ©rL   Úsuffixrb   r€   r8   r8   r9   Úconstruct_python_nameW  s    

üz!Constructor.construct_python_namec                 C   s6   |   |¡}|r(td|jtd|d�|jƒ‚|  ||j¡S )Nr  r/  r0  )rs   r2   r   r   r%  r1  r8   r8   r9   Úconstruct_python_modulec  s    

üz#Constructor.construct_python_moduleNFc                 C   sL   |sg }|si }|   ||j¡}|r>t|tƒr>|j|f|ž|ŽS |||ŽS d S r\   )r.  r   rq   rV   r  )rL   r2  rb   rœ   ÚkwdsÚnewobjr£   r8   r8   r9   Úmake_python_instanceo  s    z Constructor.make_python_instancec                 C   s€   t |dƒr| |¡ nfi }t|tƒr8t|ƒdkr8|\}}t |dƒrP|j |¡ n|r^| |¡ | ¡ D ]\}}t|||ƒ qfd S )Nr  rÌ   r¡   )	rO   r  rq   rŒ   rp   r¡   rŽ   ÚitemsÚsetattr)rL   Úinstancer  Ú	slotstater•   r€   r8   r8   r9   Úset_python_instance_state{  s    


z%Constructor.set_python_instance_statec                 c   sH   | j ||dd�}|| j|< |V  t|dƒ}| j||d�}|  ||¡ d S )NT©r6  r  r‚   )r7  rG   rO   ru   r<  )rL   r2  rb   r:  rk   r  r8   r8   r9   Úconstruct_python_objectŠ  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|ƒrÊ|D ]}|| |
|< q¸|
S )NTr‚   rœ   r5  r  Ú	listitemsÚ	dictitems)	rq   r	   rt   ru   r˜   r7  re   r<  r³   )rL   r2  rb   r6  rœ   r5  r  r?  r@  r€   r:  r•   r8   r8   r9   Úconstruct_python_object_apply•  s*    

z)Constructor.construct_python_object_applyc                 C   s   | j ||dd�S )NTr=  )rA  )rL   r2  rb   r8   r8   r9   Úconstruct_python_object_new¹  s    z'Constructor.construct_python_object_new)NNF)F)r5   r6   r7   r  r  r  r  r  r  r%  r.  r3  r4  r7  r<  r>  rA  rB  r8   r8   r8   r9   r1   ß  s   9

$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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'„ Zd0d(d)„Zd*d+„ ZdS )1r3   zOneed to store the comments on the node itself,
    as well as on the items
    c                 C   s(   | j jd k	st‚| jj| }| ¡  |S r\   )r@   Úcomment_handlingr  r[   ÚcommentsZset_assigned)rL   ÚidxÚxr8   r8   r9   Úcommentø  s    zRoundTripConstructor.commentNc                 c   sF   |d krg S |d k	r,|| d kr$g S || }|D ]}|   |¡V  q0d S r\   )rG  )rL   Zlist_of_commentsrE  rF  r8   r8   r9   rD  ÿ  s    zRoundTripConstructor.commentsc                 C   s   t |tƒs$td d td|jd�|jƒ‚|jdkr¬t |jtƒr¬t	|j|j
d�}| jr~| jjd kr~|jr¨|jd r¨|jd d |_n*|jd k	r¨|jd r¨|  |jd d ¡|_|S |jdk�r�t |jtƒ�r�g }d}|j d	|d ¡}|dk rêqþ| |t|ƒ ¡ qÎt|j d	d
¡|j
d�}| j�rR| jjd k�rR|j�r€|jd �r€|jd d |_n.|jd k	�r€|jd �r€|  |jd d ¡|_|�rŒ||_|S t| jƒ�rât |jtƒ�râ|jdk�rÆt|j|j
d�S |jdk�rât|j|j
d�S |j
�rút|j|j
d�S |jS )Nr|   r}   ú|©Úanchorr>   r   ú>rÈ   úrÆ   ú'ú")rq   r   r2   r   r~   r   Ústyler€   Ústrr!   rJ  r@   rC  rG  Úfindry   rp   r"   r×   Zfold_posre   rJ   r   r    r#   )rL   rb   ZlssZfold_positionsrE  Zfssr8   r8   r9   rs     sN    
üz%RoundTripConstructor.construct_scalarc                 C   s  d }|   |¡}z*| d¡}t|ƒ| d¡ d ddg}W n. tk
rP   d }Y n tk
rf   d }Y nX | dd¡}d}|d dkrˆd}|d dkr |dd … }|d	kr¬dS | d
¡�rD| jj	dkrà|d d	kràt|dd … ƒ}|d k	�r |d dk|d< t|dd … ƒdk�o|d dk|d< t
|t|dd … dƒ |||jd�S | d¡�r| jj	dk�r||d d	k�r|t|dd … ƒ}t}|dd … D ]*}	|	dk�r¤t} �q¸|	dk�rŒ �q¸�qŒ|d k	�rø|d dk|d< t|dd … ƒdk�oò|d dk|d< ||t|dd … dƒ |||jd�S | d¡�r¸| jj	dk�rT|d d	k�rTt|dd … ƒ}|d k	�r”|d dk|d< t|dd … ƒdk�oŽ|d dk|d< t|t|dd … dƒ |||jd�S | jj	dk�râ|d d	k�râ|t|dƒ S | jj	dk�rFd|k�rFdd„ | d¡D ƒ}
|
 ¡  d}d}|
D ]}||| 7 }|d9 }�q"|| S | jj	dk�r¤|d d	k�r¤|d k	�rŠt|ƒdk�o„|d dk|d< t|t|ƒ t|ƒ|d�S |�rât|ƒdk�oÂ|d dk|d< t|t|ƒ d ||jd�S |j�rt|t|ƒ d |jd�S |t|ƒ S d S )NrÅ   r>   FrÆ   r   rÇ   rÈ   rÉ   rÊ   rË   rÐ   rÌ   )ÚwidthÚ
underscorerJ  rÍ   ZABCDEFZabcdefr?   rÎ   rÏ   râ   rÑ   c                 S   s   g | ]}t |ƒ‘qS r8   rÒ   rÔ   r8   r8   r9   r†   �  s     z;RoundTripConstructor.construct_yaml_int.<locals>.<listcomp>rÖ   )rR  rS  )rR  rJ  )rs   Úrstriprp   ÚrindexÚ
ValueErrorÚ
IndexErrorr×   ro   rZ   rØ   r&   rÓ   rJ  r(   r)   r'   rÙ   r´   r%   )rL   rb   rR  Zvalue_suZsxrS  rÚ   rÛ   Zhex_funÚchrÜ   rÝ   r€   rÞ   r8   r8   r9   rß   ?  s¬    

 

&ü



&ü
&ü

   ÿz'RoundTripConstructor.construct_yaml_intc                 C   sâ  dd„ }d}|   |¡}| dd¡ ¡ }d}|d dkr:d	}|d d
krZ|d }|dd … }|dkrl|| j S |dkrz| jS | jjdkrØd|krØdd„ | d¡D ƒ}| ¡  d}d}	|D ]}
|	|
| 7 }	|d9 }q¶||	 S d|k�rªz| d¡\}}d}W n( t	k
�r    | d¡\}}d}Y nX | jjdk�rJd|k�rJt
 t||ƒ¡ ||ƒ}t|ƒ}| d¡}|�rr|d8 }t|ƒ}|d d
k}t|t|ƒ ||||||||jd�	S t|ƒ}| d¡}||ƒ}t|t|ƒ |||||jd�S )Nc                 S   sB   d}d}|t | ƒk r>| | dkr>| | dkr4|d7 }|d7 }q|S )Nr   z0.rÊ   r>   )rp   )ÚvÚlead0rE  r8   r8   r9   Úleading_zerosœ  s    
z@RoundTripConstructor.construct_yaml_float.<locals>.leading_zerosFrÅ   rÆ   r>   r   rÇ   rÈ   rÉ   rà   rá   râ   rÑ   c                 S   s   g | ]}t |ƒ‘qS r8   rã   rÔ   r8   r8   r9   r†   µ  s     z=RoundTripConstructor.construct_yaml_float.<locals>.<listcomp>rå   rÖ   ræ   ÚErç   )rR  ÚprecÚm_signÚm_lead0ÚexpÚe_widthÚe_signrJ  )rR  r]  r^  r_  rJ  )rs   r×   rÂ   rè   ré   rZ   rØ   rÙ   r´   rV  r™   rš   r   rp   rQ  r*   rä   rJ  rµ   )rL   rb   r[  r^  rê   rÚ   rÛ   rÜ   rÝ   r€   rÞ   rë   rì   r`  rZ  rR  r]  ra  rb  r8   r8   r9   rí   š  s|    







÷

úz)RoundTripConstructor.construct_yaml_floatc                 C   s   |   |¡}t|tƒr|S |S r\   )rs   rq   r$   rÃ   r8   r8   r9   r  ç  s    

z'RoundTripConstructor.construct_yaml_strFc                 C   s  t |tƒs$td d td|jd�|jƒ‚g }| jrx| jjd krx|jrŠ| 	|jd d… ¡ t
|jƒdkrŠ|j|jd dd� n|jrŠtd|jƒ |jr²ddlm} ||jƒs²| |j¡ t|jƒD ]P\}}|jrà|j	|j|d	� d |_| | j||d
�¡ | ||jj|jjg¡ q¼|S )Nr�   r}   rÌ   T©ÚclearZnc3r   ©Útemplated_id©r•   r‚   )rq   r	   r2   r   r~   r   r@   rC  rG  Ú_yaml_add_commentrp   Úyaml_end_comment_extendr   rJ  Úruamel.yaml.serializerrf  Úyaml_set_anchorÚ	enumerater€   ry   rd   Z_yaml_set_idx_line_colÚlineÚcolumn)rL   rb   Zseqtyprk   Zret_valrf  rE  r„   r8   r8   r9   Úconstruct_rt_sequenceî  s:    
ü
 ÿz*RoundTripConstructor.construct_rt_sequencec           	         sX  ‡ fdd„}g }d}|t |jƒk �rT|j| \}}|jdk�r.|r˜ˆ jrZ|j|= |d7 }qd|jd |j¡|jdd	g}ˆ jd
kr�t t|Ž ¡ nt	|Ž ‚|j|= t
|tƒr¾| |||ƒf¡ nnt
|tƒ�r|jD ]<}t
|tƒsútd|jtd|jd�|jƒ‚| |||ƒf¡ qÐntd|jtd|jd�|jƒ‚q|jdk�rJd|_|d7 }q|d7 }q|S )r©   c                    s(   | ˆ j krˆ j |  }nˆ j| dd�}|S )NFr‚   )rF   rd   )r”   r€   rX   r8   r9   Úconstructed  s    
z9RoundTripConstructor.flatten_mapping.<locals>.constructedr   rª   r>   rŠ   r�   r«   r¬   Nr­   r®   r¯   r°   r¨   r±   )rp   r€   rl   rK   r   rU   r™   rš   r:   r;   rq   r
   ry   r	   r2   r   r~   )	rL   rb   rp  Zmerge_map_listrµ   r“   r”   rœ   r¶   r8   rX   r9   r²     sf    
÷



þù	ýø


z$RoundTripConstructor.flatten_mappingc                 C   s   d S r\   r8   rX   r8   r8   r9   Ú	_sentinelp  s    zRoundTripConstructor._sentinelc                 C   sê  t |tƒs$td d td|jd�|jƒ‚|  |¡}| jr~| jjd kr~|j	rº| 
|j	d d… ¡ t|j	ƒdkrº|j|j	d dd� n<|j	rº|jjd kr˜g |j_|  |j	d¡D ]}|jj |¡ q¦|jrâddlm} ||jƒsâ| |j¡ d | j }}|jD �]Þ\}	}
| j|	dd�}t |tƒ�s¦t |tƒ�r`t|ƒ}|	jdk�rD|j ¡  n|	jd	k�rZ|j ¡  |}nFt |tƒ�r¦t |ƒ}|	jdk�rŒ|j ¡  n|	jd	k�r¢|j ¡  |}t |tƒ�sÄtd
|jd|	jƒ‚| j|
|d�}|  !||	|||¡rô| j�r¦| jjd k�r¦|	j	�rtt|	j	ƒdk�rt|	j	d �rt|d k�rL|	j	 "d¡|	j	d< |j
|	j	|d� n"|	j	 "d¡|	j	d< |j
|	j	|d� d |	_	|	j	�rŒ|j
|	j	|d� |
j	�rž|j
|
j	|d� nø|	j	�r"t#d||	j	ƒ |	j	d �rÞ|j $|t%|	j	d ¡ |	j	d �r |j $|t&|	j	d ¡ |	j	d �r"|j $|t'|	j	d ¡ |
j	�ržt#d||
j	ƒ |
j	d �rZ|j $|t(|
j	d ¡ |
j	d �r||j $|t)|
j	d ¡ |
j	d �rž|j $|t*|
j	d ¡ | +||	jj,|	jj-|
jj,|
jj-g¡ |||< || }}qô|�ræ| .|¡ d S )Nrˆ   r}   rÌ   Trc  r   re  r‚   FrŠ   r‹   é   r0  rg  Znc5ar>   Znc5b)/rq   r
   r2   r   r~   r   r²   r@   rC  rG  rh  rp   ri  ÚcaÚprerD  ry   rJ  rj  rf  rk  rq  r€   rd   r   r   r   Ú
flow_styleÚfaÚset_flow_styleÚset_block_styler   r   r�   r)  r   r  r   r   r   r   r   r   Z_yaml_set_kv_line_colrm  rn  Zadd_yaml_merge)rL   rb   Zmaptyprk   Z	merge_mapZcmntrf  Zlast_keyÚ
last_valuer“   r”   r•   Zkey_sZkey_mr€   r8   r8   r9   ru   t  s²    
ü



ü$
üþ	z&RoundTripConstructor.construct_mappingc           	      C   s¢  t |tƒs$td d td|jd�|jƒ‚| jrt| jjd krt|jr†| 	|jd d… ¡ t
|jƒdkr†|j|jd dd� n|jr†td|jƒ |jr®ddlm} ||jƒs®| |j¡ |jD ]è\}}| j|dd	�}t |tƒsæt |tƒræt|ƒ}t |tƒ�std
|jd|jƒ‚| j||d	�}|  ||||¡ | j�rj| jjd k�rj|j�rP|j	|j|d� |j�r’|j	|j|d� n(|j�r~td|jƒ |j�r’td|jƒ | |¡ q´d S )Nrˆ   r}   rÌ   Trc  Znc6r   re  r‚   rŠ   r‹   rg  r0  Znc7aZnc7b)rq   r
   r2   r   r~   r   r@   rC  rG  rh  rp   ri  r   rJ  rj  rf  rk  r€   rd   r   rD   rŒ   rž   Úadd)	rL   rb   rN   rk   rf  r“   r”   r•   r€   r8   r8   r9   Úconstruct_settingÝ  sT    
ü


üz&RoundTripConstructor.construct_settingc                 c   sB   t ƒ }| |jj|jj¡ |V  | |  ||¡¡ |  ||¡ d S r\   )r   Ú_yaml_set_line_colr   rm  rn  r³   ro  Úset_collection_styler  r8   r8   r9   r    s
    z'RoundTripConstructor.construct_yaml_seqc                 c   s@   t ƒ }| |jj|jj¡ |V  | j||dd� |  ||¡ d S )NTr‚   )r   r|  r   rm  rn  ru   r}  r  r8   r8   r9   r    s
    z'RoundTripConstructor.construct_yaml_mapc                 C   s>   t |ƒdkrd S |jdkr&|j ¡  n|jdkr:|j ¡  d S )Nr   TF)rp   ru  rv  rw  rx  )rL   rf   rb   r8   r8   r9   r}  $  s    

z)RoundTripConstructor.set_collection_stylec                 c   sÈ   |  |¡}|V  t|dƒr6tj| |dd�}| |¡ n0t | |¡}t|dƒrZ|jf |Ž n|j |¡ |jrÄddl	m
} ddlm} ||jƒsÄt||jƒs°|ƒ }t||j|ƒ nt||jƒ}|j|_d S )Nr  Tr‚   Z__attrs_attrs__r   re  )ÚAnchor)r  rO   r0   ru   r  rM   r¡   rŽ   rJ  rj  rf  Zruamel.yaml.anchorr~  Úattribr9  rA   r€   )rL   rb   r£   rf   r  rf  r~  Úar8   r8   r9   r  -  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	j
d krš|jr¬| |jd d… ¡ t|jƒdkr¬|j|jd dd� n|jr¬td|jƒ t|tƒsÒtd|jtd|jd�|jƒ‚|jD �]0}t|tƒ�std|jtd	|jd
�|jƒ‚t|jƒdk�r6td|jtdt|jƒd�|jƒ‚|jd \}}|  |¡}||k�s\t‚|  |¡}| j	�rÆ| j	j
d k�rÆ|j�r”|j|j|d� |j�r¬|j|j|d� |j�r|j|j|d� n<|j�rÚtd|jƒ |j�rîtd|jƒ |j�rtd|jƒ |||< qØd S )NTFrÌ   rc  Znc8rÿ   r   r}   r  r®   r>   r  r  r   rg  r0  Znc9aZnc9bZnc9c)r   r|  r   rm  rn  ru  rv  rw  rx  r@   rC  rG  rh  rp   ri  r   rq   r	   r2   r   r~   r€   r
   rd   r  r  r8   r8   r9   r  F  sx    



üþù	þù	

z(RoundTripConstructor.construct_yaml_omapc                 c   s0   t ƒ }| |jj|jj¡ |V  |  ||¡ d S r\   )r   r|  r   rm  rn  r{  r  r8   r8   r9   r
  Š  s    z'RoundTripConstructor.construct_yaml_setc                 c   sâ  �z´t |tƒržtƒ }| |jj|jj¡ |jdkr>|j 	¡  n|jdkrR|j 
¡  | |j¡ |V  |jrŒddlm} ||jƒsŒ| |j¡ |  ||¡ W d S t |tƒ�rtƒ }|  |¡|_|j|_| |j¡ |V  |j�rddlm} ||jƒ�s|j|jdd� W d S t |tƒ�r´tƒ }| |jj|jj¡ |jdk�rJ|j 	¡  n|jdk�r`|j 
¡  | |j¡ |V  |j�ržddlm} ||jƒ�sž| |j¡ | |  |¡¡ W d S W n   Y nX td d td|jd�|jƒ‚d S )NTFr   re  )Zalways_dumpr  r  )rq   r
   r   r|  r   rm  rn  ru  rv  rw  rx  Zyaml_set_tagrl   rJ  rj  rf  rk  ru   r   r   rs   r€   rO  r	   r   r³   rt   r2   r   )rL   rb   rf   rf  Zdata2Zdata3r8   r8   r9   r  ‘  sj    






 ÿúz(RoundTripConstructor.construct_undefinedc                 C   sx  z| j  |j¡}W n tk
r*   d }Y nX |d krLtd d d |j¡|jƒ‚| ¡ }|d sftf |ŽS dD ]}|| rj q†qjtf |ŽS tf |Ž}d }|d ràt	|d ƒ}|d }|r¼t	|ƒnd}	t
j||	d�}|d d	krà| }t|j|j|j|j|j|j|jƒ}
|�rH||
jd
< |d |d  }|d �r<|d|d  7 }||
jd< n|d �r`|d |
jd< |d �rtd|
jd< |
S )Nrú   Úhour)ÚtÚtz_signÚtz_hourÚ	tz_minuterƒ  r„  r…  r   )ÚhoursÚminutesrÇ   ÚdeltarÑ   Útzr‚  T)r-   rû   r€   rü   r2   rU   r   rý   r.   rÓ   ÚdatetimeÚ	timedeltar,   ÚyearÚmonthÚdayr�  ÚminuteÚsecondÚmicrosecondZ_yaml)rL   rb   r�   rû   rÕ   Úddrˆ  r„  r‡  r…  rf   r‰  r8   r8   r9   rþ   Ë  s^    

ü


      ÿ




z-RoundTripConstructor.construct_yaml_timestampc                 C   s$   t  | |¡}|jr t||jd�S |S )NrI  )r0   rÄ   rJ  r+   )rL   rb   Úbr8   r8   r9   rÄ   ý  s    z(RoundTripConstructor.construct_yaml_bool)N)F)F)F)N)r5   r6   r7   Ú__doc__rG  rD  rs   rß   rí   r  ro  r²   rq  ru   r{  r  r  r}  r  r  r
  r  rþ   rÄ   r8   r8   r8   r9   r3   ó  s*   
4[M
%]
i
5
	D:
2)frŠ  rô   rö   rR   rv   r™   Úcollections.abcr   r   r   Zruamel.yaml.errorr   r   r   Zruamel.yaml.nodesr	   r
   r   Zruamel.yaml.compatr   r   r   r   r   r   Zruamel.yaml.commentsr   r   r   r   r   r   r   r   r   r   r   r   r   Zruamel.yaml.scalarstringr   r    r!   r"   r#   r$   Zruamel.yaml.scalarintr%   r&   r'   r(   r)   Zruamel.yaml.scalarfloatr*   Zruamel.yaml.scalarboolr+   Zruamel.yaml.timestampr,   Zruamel.yaml.utilr-   r.   ÚAnyÚDictÚListÚSetÚ	GeneratorÚUnionÚOptionalÚ__all__r2   r:   r;   r/   r0   r¤   r¸   rÄ   rß   rí   rù   rþ   r  r  r
  r  r  r  r  r1   r  r  r  r  r  r  r¥   r3  r4  r>  rA  rB  r3   r8   r8   r8   r9   Ú<module>   s>  <  ÿ  )  ^ ÿ ÿ ÿ ÿ ` ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ       ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ