U
    Æ½„brŽ  ã                   @   s¸   d dl mZ d dlT d dlT d dlmZmZmZ d dlmZ d dl	m
Z
mZmZ d dlmZmZmZ ddd	gZd
d„ ZG dd	„ d	eƒZG dd„ dƒZG dd„ deƒZG dd„ deƒZdS )é    )ÚMarkedYAMLError)Ú*)ÚScannerÚRoundTripScannerÚScannerError)ÚBlankLineComment)ÚC_PREÚC_POSTÚC_SPLIT_ON_FIRST_BLANK)Ú_FÚnprintÚnprintfÚParserÚRoundTripParserÚParserErrorc                  O   s
   t | |ŽS ©N)r   )ÚargsÚkw© r   ú6/tmp/pip-unpacked-wheel-ctuyz3qg/ruamel/yaml/parser.pyÚxprintf[   s    r   c                   @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   a   s   c                   @   sH  e Zd ZdddœZdd„ Zdd„ Z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„ 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dNd)d*„Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ ZdOd9d:„Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dPdCdD„Z$dEdF„ Z%dGdH„ Z&dQdJdK„Z'dRdLdM„Z(dIS )Sr   ú!ztag:yaml.org,2002:)r   ú!!c                 C   s6   || _ | j d k	r*t| j dd ƒd kr*| | j _|  ¡  d S )NÚ_parser)ÚloaderÚgetattrr   Úreset_parser)Úselfr   r   r   r   Ú__init__k   s    zParser.__init__c                 C   s*   d  | _ | _i | _g | _g | _| j| _d S r   )Úcurrent_eventÚ
last_eventÚtag_handlesÚstatesÚmarksÚparse_stream_startÚstate©r    r   r   r   r   r   s
    zParser.reset_parserc                 C   s   |   ¡  d S r   )r   r)   r   r   r   Údispose{   s    zParser.disposec                 C   s   t | jdƒr| jjS | jjS ©NÚtyp)Úhasattrr   ÚscannerZ_scannerr)   r   r   r   r.      s    zParser.scannerc                 C   s   t | jdƒr| jjS | jjS r+   )r-   r   ÚresolverZ	_resolverr)   r   r   r   r/   †   s    zParser.resolverc                 G   sL   | j d kr| jr|  ¡ | _ | j d k	rH|s,dS |D ]}t| j |ƒr0 dS q0dS )NTF)r"   r(   Ú
isinstance)r    ÚchoicesÚchoicer   r   r   Úcheck_event�   s    


zParser.check_eventc                 C   s    | j d kr| jr|  ¡ | _ | j S r   )r"   r(   r)   r   r   r   Ú
peek_event›   s    

zParser.peek_eventc                 C   sJ   | j d kr| jr|  ¡ | _ tdt| j ƒ|  ¡ jjƒ | j  | _}d | _ |S )NÚ	get_event)r"   r(   r   Úreprr4   Ú
start_markÚliner#   )r    Úvaluer   r   r   r5   £   s    

zParser.get_eventc                 C   s4   | j  ¡ }|  |¡ t|j|j|jd�}| j| _|S )N)Úencoding)	r.   Ú	get_tokenÚmove_token_commentZStreamStartEventr7   Úend_markr:   Úparse_implicit_document_startr(   ©r    ÚtokenÚeventr   r   r   r'   µ   s
    

zParser.parse_stream_startc                 C   s`   | j  ttt¡sT| j| _| j  ¡ }|j }}t	||dd�}| j
 | j¡ | j| _|S |  ¡ S d S )NF©Úexplicit)r.   Úcheck_tokenÚDirectiveTokenÚDocumentStartTokenÚStreamEndTokenÚDEFAULT_TAGSr$   Ú
peek_tokenr7   ÚDocumentStartEventr%   ÚappendÚparse_document_endÚparse_block_noder(   Úparse_document_start)r    r@   r7   r=   rA   r   r   r   r>   Á   s    

z$Parser.parse_implicit_document_startc                 C   sâ   | j  t¡r| j  ¡  q | j  t¡s¦|  ¡ \}}| j  t¡sbtd d td| j  	¡ j
d�| j  	¡ jƒ‚| j  ¡ }|j}|j}t||d|||jd�}| j | j¡ | j| _n8| j  ¡ }t|j|j|jd�}| jrÎt‚| jrØt‚d | _|S )Nz-expected '<document start>', but found {pt!r})ÚptT)rC   ÚversionÚtagsÚcomment©rR   )r.   rD   ÚDocumentEndTokenr;   rG   Úprocess_directivesrF   r   r   rI   Úidr7   r=   rJ   rR   r%   rK   rL   Úparse_document_contentr(   ZStreamEndEventÚAssertionErrorr&   )r    rP   rQ   r@   r7   r=   rA   r   r   r   rN   Ó   sB    
þ
ù	
    þ



zParser.parse_document_startc                 C   sh   | j  ¡ }|j }}d}| j  t¡r8| j  ¡ }|j}d}t|||d�}| jj	dkr\| j
| _n| j| _|S )NFTrB   ©é   rZ   )r.   rI   r7   rD   rT   r;   r=   ZDocumentEndEventr/   Úprocessing_versionrN   r(   r>   )r    r@   r7   r=   rC   rA   r   r   r   rL   ú   s    



zParser.parse_document_endc                 C   s@   | j  tttt¡r4|  | j  ¡ j¡}| j	 
¡ | _|S |  ¡ S d S r   )r.   rD   rE   rF   rT   rG   Úprocess_empty_scalarrI   r7   r%   Úpopr(   rM   )r    rA   r   r   r   rW     s       ÿzParser.parse_document_contentc           
      C   sV  d }i | _ | j t¡r®| j ¡ }|jdkrl|d k	rBtd d d|jƒ‚|j\}}|dkrdtd d d|jƒ‚|j}q
|jdkr
|j\}}|| j kr¢td d t	d|d�|jƒ‚|| j |< q
t
| j ƒrÈ|| j  ¡ f}n|d f}| jd k	�r(t| jdƒ�r(|| j_| jjd k�ri | j_| j D ]}| j | | jj|< �q| jD ]"}	|	| j k�r.| j|	 | j |	< �q.|S )	NZYAMLzfound duplicate YAML directiverZ   z:found incompatible YAML document (version 1.* is required)ZTAGzduplicate tag handle {handle!r}©ÚhandlerQ   )r$   r.   rD   rE   r;   Únamer   r7   r9   r   ÚboolÚcopyr   r-   rP   rQ   rH   )
r    Zyaml_versionr@   ÚmajorÚminorr_   Úprefixr9   ÚkÚkeyr   r   r   rU     sX    

   ÿ
ü



ü


zParser.process_directivesc                 C   s   | j dd�S )NT)Úblock©Ú
parse_noder)   r   r   r   rM   V  s    zParser.parse_block_nodec                 C   s   |   ¡ S r   ri   r)   r   r   r   Úparse_flow_nodeZ  s    zParser.parse_flow_nodec                 C   s   | j ddd�S )NT)rh   Úindentless_sequenceri   r)   r   r   r   Ú'parse_block_node_or_indentless_sequence^  s    z.Parser.parse_block_node_or_indentless_sequencec                 C   s   | j | | S r   )r$   ©r    r_   Úsuffixr   r   r   Útransform_tagb  s    zParser.transform_tagFc              
   C   sh  | j  t¡r8| j  ¡ }t|j|j|jƒ}| j 	¡ | _
|S d }d }d  } }}	| j  t¡r¨| j  ¡ }|  |¡ |j}|j}|j}| j  t¡r¦| j  ¡ }|j}	|j}|j}n\| j  t¡�r| j  ¡ }|j }}	|j}|j}| j  t¡�r| j  ¡ }|j }}	|j}|j}|d k	�rT|\}
}|
d k	�rP|
| jk�rBtd|td|
d�|	ƒ‚|  |
|¡}n|}|d k�rn| j  ¡ j }}d }|d k�p‚|dk}|�r.| j  t¡�r.d }| j  ¡ }| j�rê| jjd k�rê|j�r |jd �r |jd g g}d |jd< n| j�r |j�r |j}| j  ¡ j}t|||||d|d�}| j| _
|S | j  t¡�r°| j  ¡ }|j}|j�r^|d k�sh|dk�rnd}n|d k�r~d	}nd
}t||||j|||j|jd�}| j 	¡ | _
�n´| j  t¡�rò| j  ¡ }|j}t|||||d|jd�}| j| _
�nr| j  t¡�r4| j  ¡ }|j}t |||||d|jd�}| j!| _
�n0|�r¤| j  t"¡�r¤| j  ¡ j}| j  ¡ }|j}|d k�s||d d k�r„| #¡ }t|||||d|d�}| j$| _
nÀ|�rð| j  t%¡�rð| j  ¡ j}| j  ¡ j}t |||||d|d�}| j&| _
nt|d k	�s|d k	�r(t|||dfd||ƒ}| j 	¡ | _
n<|�r4d}nd}| j  ¡ }ttd|d�|td|j'd�|jƒ‚|S )Nzwhile parsing a nodez%found undefined tag handle {handle!r}r^   r   r   F)Ú
flow_stylerR   ©TF)FT)FF)ÚstylerR   TrZ   Ú rh   Zflowzwhile parsing a {node!s} node)Únodez1expected the node content, but found {token_id!r}©Ztoken_id)(r.   rD   Z
AliasTokenr;   Z
AliasEventr9   r7   r=   r%   r]   r(   ZAnchorTokenr<   ZTagTokenr$   r   r   rp   rI   ÚBlockEntryTokenr   Úcomment_handlingrR   ZSequenceStartEventÚparse_indentless_sequence_entryZScalarTokenÚplainÚScalarEventrs   ZFlowSequenceStartTokenÚparse_flow_sequence_first_entryZFlowMappingStartTokenÚMappingStartEventÚparse_flow_mapping_first_keyZBlockSequenceStartTokenZsplit_old_commentÚ parse_block_sequence_first_entryZBlockMappingStartTokenÚparse_block_mapping_first_keyrV   )r    rh   rl   r@   rA   ÚanchorÚtagr7   r=   Ztag_markr_   ro   ZimplicitrR   rO   ru   r   r   r   rj   f  s6   










ü

      ÿ

ø

ù	
ù	
      ÿ
      ÿ


üzParser.parse_nodec                 C   s    | j  ¡ }| j |j¡ |  ¡ S r   )r.   r;   r&   rK   r7   Úparse_block_sequence_entry©r    r@   r   r   r   r     s    
z'Parser.parse_block_sequence_first_entryc                 C   sÆ   | j  t¡rX| j  ¡ }|  |¡ | j  tt¡sD| j | j¡ |  	¡ S | j| _
|  |j¡S | j  t¡sŽ| j  ¡ }td| jd td|jd�|jƒ‚| j  ¡ }t|j|j|jd�}| j ¡ | _
| j ¡  |S )Nz while parsing a block collectionéÿÿÿÿú,expected <block end>, but found {token_id!r}rv   rS   )r.   rD   rw   r;   r<   ÚBlockEndTokenr%   rK   rƒ   rM   r(   r\   r=   rI   r   r&   r   rV   r7   ÚSequenceEndEventrR   r]   r?   r   r   r   rƒ     s*    


ü

z!Parser.parse_block_sequence_entryc                 C   sÀ   | j  t¡r\| j  ¡ }|  |¡ | j  tttt¡sH| j 	| j
¡ |  ¡ S | j
| _|  |j¡S | j  ¡ }d }| jrŠ| jjd krŠ|j}|j}n| jj}|  |j|j¡}t|||d�}| j ¡ | _|S )NrS   )r.   rD   rw   r;   r<   ÚKeyTokenÚ
ValueTokenr‡   r%   rK   ry   rM   r(   r\   r=   rI   r   rx   rR   r7   r#   Údistribute_commentr8   rˆ   r]   )r    r@   Úcr7   rA   r   r   r   ry   0  s.    

   ÿ
z&Parser.parse_indentless_sequence_entryc                 C   s    | j  ¡ }| j |j¡ |  ¡ S r   )r.   r;   r&   rK   r7   Úparse_block_mapping_keyr„   r   r   r   r€   N  s    
z$Parser.parse_block_mapping_first_keyc                 C   s  | j  t¡rZ| j  ¡ }|  |¡ | j  ttt¡sF| j | j	¡ |  
¡ S | j	| _|  |j¡S | jjdkrŒ| j  t¡rŒ| j	| _|  | j  ¡ j¡S | j  t¡sÂ| j  ¡ }td| jd td|jd�|jƒ‚| j  ¡ }|  |¡ t|j|j|jd�}| j ¡ | _| j ¡  |S )NrY   zwhile parsing a block mappingr…   r†   rv   rS   )r.   rD   r‰   r;   r<   rŠ   r‡   r%   rK   Úparse_block_mapping_valuerm   r(   r\   r=   r/   r[   rI   r7   r   r&   r   rV   ÚMappingEndEventrR   r]   r?   r   r   r   r�   T  s2    


ü


zParser.parse_block_mapping_keyc                 C   sæ   | j  t¡rÄ| j  ¡ }| j  t¡r.|  |¡ n| j  t¡sH| j|dd� | j  ttt¡sn| j | j	¡ |  
¡ S | j	| _|j}|d kr²| j  ¡ }|j}|r²d |d g|_|d d g}| j|j|d�S n| j	| _| j  ¡ }|  |j¡S d S )NT©ÚemptyrZ   r   rS   )r.   rD   rŠ   r;   r<   r‰   r‡   r%   rK   r�   rm   r(   rR   rI   Ú_commentr\   r=   r7   )r    r@   rR   r   r   r   rŽ   q  s*    


z Parser.parse_block_mapping_valuec                 C   s$   | j  ¡ }| j |j¡ | jdd�S ©NT)Úfirst)r.   r;   r&   rK   r7   Úparse_flow_sequence_entryr„   r   r   r   r|   ™  s    
z&Parser.parse_flow_sequence_first_entryc                 C   sæ   | j  t¡s®|sR| j  t¡r(| j  ¡  n*| j  ¡ }td| jd td|j	d�|j
ƒ‚| j  t¡rŒ| j  ¡ }td d d|j
|jdd�}| j| _|S | j  t¡s®| j | j¡ |  ¡ S | j  ¡ }t|j
|j|jd�}| j ¡ | _| j ¡  |S )Nzwhile parsing a flow sequencer…   z)expected ',' or ']', but got {token_id!r}rv   T)rq   rS   )r.   rD   ÚFlowSequenceEndTokenÚFlowEntryTokenr;   rI   r   r&   r   rV   r7   r‰   r}   r=   Ú%parse_flow_sequence_entry_mapping_keyr(   r%   rK   r•   rk   rˆ   rR   r]   ©r    r”   r@   rA   r   r   r   r•   Ÿ  s>    
ü
     ÿ

z Parser.parse_flow_sequence_entryc                 C   sH   | j  ¡ }| j  ttt¡s0| j | j¡ |  	¡ S | j| _
|  |j¡S d S r   )r.   r;   rD   rŠ   r—   r–   r%   rK   Ú'parse_flow_sequence_entry_mapping_valuerk   r(   r\   r=   r„   r   r   r   r˜   ¾  s    
z,Parser.parse_flow_sequence_entry_mapping_keyc                 C   sr   | j  t¡rP| j  ¡ }| j  tt¡s:| j | j¡ |  	¡ S | j| _
|  |j¡S n| j| _
| j  ¡ }|  |j¡S d S r   )r.   rD   rŠ   r;   r—   r–   r%   rK   Ú%parse_flow_sequence_entry_mapping_endrk   r(   r\   r=   rI   r7   r„   r   r   r   rš   È  s    

z.Parser.parse_flow_sequence_entry_mapping_valuec                 C   s    | j | _| j ¡ }t|j|jƒS r   )r•   r(   r.   rI   r�   r7   r„   r   r   r   r›   ×  s    
z,Parser.parse_flow_sequence_entry_mapping_endc                 C   s$   | j  ¡ }| j |j¡ | jdd�S r“   )r.   r;   r&   rK   r7   Úparse_flow_mapping_keyr„   r   r   r   r~   ã  s    
z#Parser.parse_flow_mapping_first_keyc                 C   s0  | j  t¡sø|sR| j  t¡r(| j  ¡  n*| j  ¡ }td| jd td|j	d�|j
ƒ‚| j  t¡r¤| j  ¡ }| j  ttt¡sŽ| j | j¡ |  ¡ S | j| _|  |j¡S nT| jjdkrÖ| j  t¡rÖ| j| _|  | j  ¡ j¡S | j  t¡sø| j | j¡ |  ¡ S | j  ¡ }t|j
|j|jd�}| j ¡ | _| j ¡  |S )Nzwhile parsing a flow mappingr…   z*expected ',' or '}}', but got {token_id!r}rv   rY   rS   )r.   rD   ÚFlowMappingEndTokenr—   r;   rI   r   r&   r   rV   r7   r‰   rŠ   r%   rK   Úparse_flow_mapping_valuerk   r(   r\   r=   r/   r[   Úparse_flow_mapping_empty_valuer�   rR   r]   r™   r   r   r   rœ   é  sF    
ü
  ÿÿ

zParser.parse_flow_mapping_keyc                 C   sr   | j  t¡rP| j  ¡ }| j  tt¡s:| j | j¡ |  	¡ S | j| _
|  |j¡S n| j| _
| j  ¡ }|  |j¡S d S r   )r.   rD   rŠ   r;   r—   r�   r%   rK   rœ   rk   r(   r\   r=   rI   r7   r„   r   r   r   rž     s    

zParser.parse_flow_mapping_valuec                 C   s   | j | _|  | j ¡ j¡S r   )rœ   r(   r\   r.   rI   r7   r)   r   r   r   rŸ     s    z%Parser.parse_flow_mapping_empty_valueNc              	   C   s   t d d dd|||d�S )Nrr   rt   rS   )r{   )r    ÚmarkrR   r   r   r   r\   #  s    zParser.process_empty_scalarc                 C   s   d S r   r   ©r    r@   Úntr‘   r   r   r   r<   '  s    zParser.move_token_comment)FF)F)F)N)NF))r   r   r   rH   r!   r   r*   Úpropertyr.   r/   r3   r4   r5   r'   r>   rN   rL   rW   rU   rM   rk   rm   rp   rj   r   rƒ   ry   r€   r�   rŽ   r|   r•   r˜   rš   r›   r~   rœ   rž   rŸ   r\   r<   r   r   r   r   r   e   sP   
	

'=
 # (


&
c                   @   s"   e Zd ZdZdd„ Zddd„ZdS )	r   ú?roundtrip is a safe loader, that wants to see the unmangled tagc                 C   s&   |dkr|dkrt  | ||¡S || S )Nr   )Únullra   ÚintÚfloatÚbinaryÚ	timestampZomapÚpairsÚsetÚstrÚseqÚmap)r   rp   rn   r   r   r   rp   /  s    zRoundTripParser.transform_tagNFc                 C   s$   |j |d kr| j ¡ n||d� d S ©Nr�   )Zmove_old_commentr.   rI   r¡   r   r   r   r<   C  s    z"RoundTripParser.move_token_comment)NF)r   r   r   Ú__doc__rp   r<   r   r   r   r   r   ,  s   c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )	ÚRoundTripParserSCr¤   NFc                 C   s$   |j |d kr| j ¡ n||d� d S r¯   )Zmove_new_commentr.   rI   r¡   r   r   r   r<   N  s    z$RoundTripParserSC.move_token_commentc                 C   s  |d krd S |d sd S |d d |d kr8t d||ƒ |d d |d ksPt‚| jjd@ }|tkrhd S |tkrŠd d |d g}d |d< |S t|d ƒD ]\}}t| jj	| t
ƒr– qºq–d S |dkrÆd S |tkrüd d |d d |… g}|d |d … |d< |S t‚d S )Nr   rZ   z>>>dcxxxé   )r   rX   r   rx   r	   r   Ú	enumerater0   r.   Úcommentsr   r
   ÚNotImplementedError)r    rR   r8   r,   rŒ   Z_idxZcmntidxr   r   r   r‹   R  s2    z$RoundTripParserSC.distribute_comment)NF)r   r   r   r°   r<   r‹   r   r   r   r   r±   H  s   
r±   N)Zruamel.yaml.errorr   Zruamel.yaml.tokensZruamel.yaml.eventsZruamel.yaml.scannerr   r   r   r   Zruamel.yaml.commentsr   r	   r
   Zruamel.yaml.compatr   r   r   ÚAnyÚDictÚOptionalÚListÚ__all__r   r   r   r   r±   r   r   r   r   Ú<module>M   s"   
     L