a
    ܌xd8                     @   sh  d Z ddlZddlZddlmZ ddlmZmZ ddlmZ ddl	m
Z
 ddlmZmZmZmZ ddlmZmZmZmZmZmZmZ g d	ZdZd
ZdZdZG dd dZe Ze  ZZe Z e  Z!Z"e  Z#Z$e Z%e Z&e Z'e Z(e Z)e Z*e Z+e Z,dZ-dZ.dZ/dZ0dZ1G dd dZ2ddddZ3G dd dZ4G dd dZ5G dd dZ6G dd  d Z7G d!d" d"ee8e7Z9G d#d$ d$e:e7Z;G d%d& d&eZ<G d'd( d(e<eZ=G d)d* d*e<eZ>G d+d, d,e<Z?G d-d. d.ee7Z@eAeeedd/d0d1ZBG d2d3 d3e7eZCG d4d5 d5e@ZDG d6d7 d7ee7ZEG d8d9 d9e7ZFd:d;ejGfeeHeHedd<d=d>ZIdS )?z
stuff to deal with comments and formatting on dict/list/ordereddict/set
these are not really related, formatting could be factored out as
a separate base
    N)ordereddict)MutableSliceableSequencenprintf)ScalarString)Anchor)
MutableSetSizedSetMapping)AnyDictOptionalListUnionr   Iterator)CommentedSeqCommentedKeySeqCommentedMapCommentedOrderedMapCommentedSetcomment_attribmerge_attribC_POSTC_PREC_SPLIT_ON_FIRST_BLANKC_BLANK_LINE_PRESERVE_SPACE         c                   @   s6   e Zd ZddddZedddZedddZdS )	IDXNreturnc                 C   s
   d| _ d S Nr   _idxself r'   L/var/www/html/Ranjet/env/lib/python3.9/site-packages/ruamel/yaml/comments.py__init__0   s    zIDX.__init__c                 C   s   | j }|  j d7  _ |S Nr   r#   r&   xr'   r'   r(   __call__3   s    zIDX.__call__c                 C   s
   t | jS N)strr$   r%   r'   r'   r(   __str__8   s    zIDX.__str__)__name__
__module____qualname__r)   r   r-   r0   r'   r'   r'   r(   r   .   s   r   Z_yaml_commentZ_yaml_formatZ_yaml_line_colZ_yaml_mergeZ	_yaml_tagc                   @   s   e Zd ZdZeZd eddddZeddd	Z	edd
dZ
edddZeedddZeedddZejeddddZeedddZejeddddZeeedddZeeeedddZeedddZdS )!Comment)comment_items_post_preTN)oldr!   c                 C   s$   |rd ng | _ d | _i | _g | _d S r.   )r8   r5   r6   r7   )r&   r9   r'   r'   r(   r)   [   s    zComment.__init__r    c                 C   s8   t | jrdt| j }nd}d| j d| j | dS )N,
  end= zComment(comment=z
,
  items=))boolr7   r/   r5   r6   )r&   endr'   r'   r(   r0   e   s    
zComment.__str__c                    s   t | jrdt| j }nd}ztdd | jD d  W n tyP   d Y n0 d fdd| j D }|rd| d	 }d
| j d| d| dS )Nr:   r;   c                 S   s   g | ]}t t|qS r'   lenr/   .0kr'   r'   r(   
<listcomp>r       z(Comment._old__repr__.<locals>.<listcomp>r       c                    s,   g | ]$\}}t |d    d| dqS : 
r/   rB   rC   vlnr'   r(   rD   u   rE   
      zComment(
  start=,
  items={}r<   )	r=   r7   r/   maxr6   
ValueErrorjoinitemsr5   r&   r>   itr'   rN   r(   _old__repr__l   s    

zComment._old__repr__c                    s   | j d u r|  S t| jr,dt| j }nd}ztdd | jD d  W n tyb   d Y n0 d fdd| j	 D }|rd| d	 }d
| j
 d| d| dS )Nr:   r;   c                 S   s   g | ]}t t|qS r'   r?   rA   r'   r'   r(   rD      rE   z$Comment.__repr__.<locals>.<listcomp>r   rF   c                    s,   g | ]$\}}t |d    d| dqS rG   rK   rL   rN   r'   r(   rD      rE   rP   rQ   zComment(
  pre=rR   rS   r<   )r8   rZ   r=   r7   reprrT   r6   rU   rV   rW   prerX   r'   rN   r(   __repr__z   s    


zComment.__repr__c                 C   s   | j S r.   )r6   r%   r'   r'   r(   rW      s    zComment.itemsc                 C   s   | j S r.   r7   r%   r'   r'   r(   r>      s    zComment.endvaluer!   c                 C   s
   || _ d S r.   r^   r&   r`   r'   r'   r(   r>      s    c                 C   s   | j S r.   r8   r%   r'   r'   r(   r\      s    zComment.prec                 C   s
   || _ d S r.   rb   ra   r'   r'   r(   r\      s    )itemposr!   c                 C   s,   | j |}|d u s t||k r$d S || S r.   )r6   getr@   )r&   rc   rd   r,   r'   r'   r(   re      s    zComment.get)rc   rd   r`   r!   c                 C   sb   | j |}|d u r.d g|d   | j |< }nt||krF|d  q.|| d u sVJ |||< d S r*   )r6   re   r@   append)r&   rc   rd   r`   r,   r'   r'   r(   set   s    zComment.setr,   r!   c                 C   s   | j rN| j d r$|| j d jv r$dS | j d rN| j d D ]}||jv r8 dS q8| j D ]*}|sbqX|D ]}|rf||jv rf  dS qfqX| jr| jD ]}||jv r dS qdS )Nr   Tr   F)r5   r`   rW   valuesr>   )r&   r,   cr`   r'   r'   r(   __contains__   s$    



zComment.__contains__)T)r1   r2   r3   	__slots__r   attribr=   r)   r/   r0   rZ   r]   propertyr   rW   r>   setterr\   re   rg   rk   r'   r'   r'   r(   r4   U   s&   

r4   r    c                   C   s   d S r.   r'   r'   r'   r'   r(   	NoComment   s    rp   c                   @   sT   e Zd ZdZeZddddZddddZdddd	Zde	e
 e
d
ddZdS )FormatZ_flow_styleNr    c                 C   s
   d | _ d S r.   rr   r%   r'   r'   r(   r)      s    zFormat.__init__c                 C   s
   d| _ d S NTrr   r%   r'   r'   r(   set_flow_style   s    zFormat.set_flow_stylec                 C   s
   d| _ d S NFrr   r%   r'   r'   r(   set_block_style   s    zFormat.set_block_style)defaultr!   c                 C   s   | j du r|S | j S )a  if default (the flow_style) is None, the flow style tacked on to
        the object explicitly will be taken. If that is None as well the
        default flow style rules the format down the line, or the type
        of the constituent values (simple -> flow, map/list -> block)Nrr   )r&   rw   r'   r'   r(   
flow_style   s    
zFormat.flow_style)N)r1   r2   r3   rl   format_attribrm   r)   rt   rv   r   r   rx   r'   r'   r'   r(   rq      s   rq   c                   @   s   e Zd ZdZeZddddZeeddddZeed	d
dZ	eed	ddZ
eeeedddZeedddZeeddddZedddZdS )LineColzL
    line and column information wrt document, values start at zero (0)
    Nr    c                 C   s   d | _ d | _d | _d S r.   )linecoldatar%   r'   r'   r(   r)      s    zLineCol.__init__keyr}   r!   c                 C   s   | j d u ri | _ || j |< d S r.   r}   r&   r   r}   r'   r'   r(   add_kv_line_col   s    
zLineCol.add_kv_line_col)rC   r!   c                 C   s   |  |ddS Nr   r   _kvr&   rC   r'   r'   r(   r      s    zLineCol.keyc                 C   s   |  |ddS )Nr      r   r   r'   r'   r(   r`      s    zLineCol.value)rC   x0x1r!   c                 C   s(   | j d u rd S | j | }|| || fS r.   r   )r&   rC   r   r   r}   r'   r'   r(   r      s    

zLineCol._kvidxr!   c                 C   s*   | j d u rd S | j | d | j | d fS r   r   r&   r   r'   r'   r(   rc      s    
zLineCol.itemc                 C   s   | j d u ri | _ || j |< d S r.   r   r   r'   r'   r(   add_idx_line_col  s    
zLineCol.add_idx_line_colc                 C   s   d| j  d| j dS )NzLineCol(, r<   )r{   r|   r%   r'   r'   r(   r]     s    zLineCol.__repr__)r1   r2   r3   __doc__line_col_attribrm   r)   r   r   r   r`   r   rc   r   r/   r]   r'   r'   r'   r(   rz      s   rz   c                   @   s4   e Zd ZdZdZeZddddZedddZ	dS )	Tagz'store tag information for roundtrippingr`   Nr    c                 C   s
   d | _ d S r.   r   r%   r'   r'   r(   r)     s    zTag.__init__c                 C   s   | j j d| jdS )N(r<   )	__class__r1   r`   r%   r'   r'   r(   r]     s    zTag.__repr__)
r1   r2   r3   r   rl   
tag_attribrm   r)   r   r]   r'   r'   r'   r(   r     s
   r   c                   @   s  e Zd Zedd Zd;eeddddZd<eeeddd	d
Zd=eeeddddZ	d>eeddddZ
d?eeeeeddddZeedddZedfeee ee ddddZeedddZeeddddZeeddd d!Zeeddd"d#Zeedd$d%Zedd&d'Zd@eedd(d)d*Zeedd+d,Zedd-d.d/ZdAeedd0d1d2Zeedd3d4d5Zedd6d7Zeed8d9d:ZdS )BCommentedBasec                 C   s(   t | tjst| tjt  t| tjS r.   )hasattrr4   rm   setattrgetattrr%   r'   r'   r(   ca  s    zCommentedBase.caFN)r5   clearr!   c                 C   s6   |d u rd S |s| j jd u r$g | j _| j j| d S r.   )r   r>   extend)r&   r5   r   r'   r'   r(   yaml_end_comment_extend   s
    z%CommentedBase.yaml_end_comment_extend)r   r5   r   r!   c                 C   sr   | j j|g d}|s$|d d u rP|d d urBt|d tsBJ |d |d< n|d |d  |d |d< d S )NNNNNr   r   r   r6   
setdefault
isinstancelistr   r&   r   r5   r   rr'   r'   r(   yaml_key_comment_extend'  s    z%CommentedBase.yaml_key_comment_extendc                 C   sr   | j j|g d}|s$|d d u rP|d d urBt|d tsBJ |d |d< n|d |d  |d |d< d S )Nr   r   r   r   r   r   r   r'   r'   r(   yaml_value_comment_extend1  s    z'CommentedBase.yaml_value_comment_extendr   )r5   indentr!   c           	      C   s   ddl m} ddlm} |  }|d dkr8|dd }||}|dD ]@}| }t|dkrv|d dkrvd	| }|||d | qJdS )
zoverwrites any preceding comment lines on an object
        expects comment to be without `#` and possible have multiple lines
        r   CommentMarkCommentTokenrJ   Nr   ## )	errorr   tokensr   _yaml_clear_pre_commentsplitstripr@   rf   )	r&   r5   r   r   r   pre_comments
start_markcomrj   r'   r'   r(   yaml_set_start_comment;  s    z$CommentedBase.yaml_set_start_comment)r   beforer   afterafter_indentr!   c                    sP  ddl m} ddlm  tttd fdd}|du r>|d }|rft|d	krf|d
 dkrf|dd
 }|r|d
 dkr|dd
 }||}| jj|dg ddg}	|dur|	d	 du rg |	d	< |dkr|	d	 	|d| n$|
dD ]}
|	d	 	||
| q|rL||}|	d du r&g |	d< |
dD ]}
|	d 	||
| q0dS )zc
        expects comment (before/after) to be without `#` and possible have multiple lines
        r   r   r   )smarkr!   c                    s    | r
dnd|  d |S )Nr   r;   rJ   r'   )r   r   r   r'   r(   comment_tokenZ  s    zFCommentedBase.yaml_set_comment_before_after_key.<locals>.comment_tokenNr   r   r   rJ   r;   r   )Zruamel.yaml.errorr   Zruamel.yaml.tokensr   r   r@   r   rW   r   rf   r   )r&   r   r   r   r   r   r   r   r   rj   r   r'   r   r(   !yaml_set_comment_before_after_keyL  s0    
z/CommentedBase.yaml_set_comment_before_after_keyr    c                 C   s(   t | tjst| tjt  t| tjS )z<format attribute

        set_flow_style()/set_block_style())r   rq   rm   r   r   r%   r'   r'   r(   fau  s    zCommentedBase.fa)r5   r   columnr!   c                 C   s   ddl m} ddlm} |du rFz| |}W n tyD   d}Y n0 |d dkrZd| }|du rz|d dkrzd| }d}||}|||dg}| j||d	 dS )
z
        there is a problem as eol comments should start with ' #'
        (but at the beginning of the line the space doesn't have to be before
        the #. The column index is for the # mark
        r   r   r   Nr   r   r   rI   r   )r   r   r   r   _yaml_get_columnAttributeError_yaml_add_eol_comment)r&   r5   r   r   r   r   r   ctr'   r'   r(   yaml_add_eol_comment~  s     
z"CommentedBase.yaml_add_eol_commentc                 C   s(   t | tjst| tjt  t| tjS r.   )r   rz   rm   r   r   r%   r'   r'   r(   lc  s    zCommentedBase.lc)r{   r|   r!   c                 C   s   || j _|| j _d S r.   )r   r{   r|   )r&   r{   r|   r'   r'   r(   _yaml_set_line_col  s    z CommentedBase._yaml_set_line_colr~   c                 C   s   | j || d S r.   )r   r   r   r'   r'   r(   _yaml_set_kv_line_col  s    z#CommentedBase._yaml_set_kv_line_colc                 C   s   | j || d S r.   )r   r   r   r'   r'   r(   _yaml_set_idx_line_col  s    z$CommentedBase._yaml_set_idx_line_colc                 C   s(   t | tjst| tjt  t| tjS r.   )r   r   rm   r   r   r%   r'   r'   r(   anchor  s    zCommentedBase.anchorc                 C   s   t | tjsd S | jS r.   )r   r   rm   r   r%   r'   r'   r(   yaml_anchor  s    zCommentedBase.yaml_anchor)r`   always_dumpr!   c                 C   s   || j _|| j _d S r.   )r   r`   r   )r&   r`   r   r'   r'   r(   yaml_set_anchor  s    zCommentedBase.yaml_set_anchorc                 C   s(   t | tjst| tjt  t| tjS r.   )r   r   rm   r   r   r%   r'   r'   r(   tag  s    zCommentedBase.tagr_   c                 C   s   || j _d S r.   )r   r`   ra   r'   r'   r(   yaml_set_tag  s    zCommentedBase.yaml_set_tag)tmemor!   c              
   C   sd   t jtjtjtjtjtfD ]D}t| |r|d urLt||t	
t| || qt||t| | qd S r.   )r4   rm   rq   rz   r   r   r   r   r   copydeepcopyr   )r&   r   r   ar'   r'   r(   copy_attributes  s    
zCommentedBase.copy_attributesr5   r   r!   c                 C   s   t d S r.   NotImplementedErrorr&   r5   r   r'   r'   r(   r     s    z#CommentedBase._yaml_add_eol_commentc                 C   s   t d S r.   r   r%   r'   r'   r(   _yaml_get_pre_comment  s    z#CommentedBase._yaml_get_pre_commentr   r!   c                 C   s   t d S r.   r   r&   r   r'   r'   r(   r     s    zCommentedBase._yaml_get_column)F)F)F)r   )Nr   NN)F)N)r1   r2   r3   rn   r   r   r=   r   r   r   r   r   r   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r'   r'   r'   r(   r     sR   


    )	r   c                   @   sF  e Zd ZejdfZeeddddZeedddZeedd	d
dZ	d3eedddZ
edddZeeddddZeddddZeedddZefeee ddddZeeddddZeedd d!Zeedd"d#Zedd$d%Zedd&d'Zeed(d)d*Zeedd+d,Zd4eedd.d/d0Zedd1d2ZdS )5r   Z_lstNargskwr!   c                 O   s   t j| g|R i | d S r.   )r   r)   r&   r   r   r'   r'   r(   r)     s    zCommentedSeq.__init__r   c                 C   s   t | |S r.   r   __getitem__r   r'   r'   r(   __getsingleitem__  s    zCommentedSeq.__getsingleitem__)r   r`   r!   c                 C   sP   |t | k r>t|tr>t|ts>t| | tr>t| | |}t| || d S r.   )r@   r   r/   r   typer   __setitem__)r&   r   r`   r'   r'   r(   __setsingleitem__  s    zCommentedSeq.__setsingleitem__c                 C   sV   t | | | jj|d  t| jjD ](}||k r6q(| jj|| jj|d < q(d S r*   )r   __delitem__r   rW   popsorted)r&   r   
list_indexr'   r'   r(   __delsingleitem__  s    zCommentedSeq.__delsingleitem__r    c                 C   s
   t | S r.   )r   __len__r%   r'   r'   r(   r     s    zCommentedSeq.__len__)r   valr!   c                 C   sN   t | || t| jjddD ]*}||k r. qJ| jj|| jj|d < qdS )z5the comments after the insertion have to move forwardTreverser   N)r   insertr   r   rW   r   )r&   r   r   r   r'   r'   r(   r     s
    zCommentedSeq.insert)r   r!   c                 C   s   t | | d S r.   )r   r   )r&   r   r'   r'   r(   r     s    zCommentedSeq.extendotherr!   c                 C   s   t | |S r.   )r   __eq__r&   r   r'   r'   r(   r     s    zCommentedSeq.__eq__r   c                 C   s"   |t ur| || n|| j_d S r.   rp   r   r   r5   r   r'   r'   r(   _yaml_add_comment  s    zCommentedSeq._yaml_add_commentc                 C   s   | j ||d d S Nr   r   r   r'   r'   r(   r     s    z"CommentedSeq._yaml_add_eol_commentr   c                 C   s   | j j| d jjS r"   r   rW   r   r   r   r'   r'   r(   _yaml_get_columnX  s    zCommentedSeq._yaml_get_columnXc                 C   s   d }d }|d |d  }}|| j jv r,|}nB|| j jv r>|}n0t| D ]&\}}||krZ qn|| j jvrhqF|}qF|d ur| |}|S r*   r   rW   	enumerater   r&   r   r   sel_idxr\   postZrow_idxZ_k1r'   r'   r(   r     s     
zCommentedSeq._yaml_get_columnc                 C   s.   g }| j jd u rd |g| j _n| j jd }|S r*   r   r5   r&   r   r'   r'   r(   r   "  s
    z"CommentedSeq._yaml_get_pre_commentc                 C   s.   g }| j jd u rd |g| j _n|| j jd< |S r*   r  r  r'   r'   r(   r   *  s
    z$CommentedSeq._yaml_clear_pre_commentr   r!   c                 C   sB   |   }||t| < | D ]$}|t|| | j||d q|S N)r   )r   idrf   r   r   r   r&   r   resrC   r'   r'   r(   __deepcopy__2  s    zCommentedSeq.__deepcopy__c                 C   s   t | |S r.   )r   __add__r   r'   r'   r(   r	  :  s    zCommentedSeq.__add__F)r   r   r!   c                    s   |d u r:t t tt |d}t dd |D  n@t tt|t tt |d}t  fdd|D   jj	}i  j_
t|D ](\}}|d }||v r||  jj	|< qd S )Nr   c                 S   s   g | ]}|d  qS )r   r'   rB   r,   r'   r'   r(   rD   @  rE   z%CommentedSeq.sort.<locals>.<listcomp>c                    s   g | ]}t  |d  qS )r   r   r
  r%   r'   r(   rD   E  rE   r   )r   zipranger@   r   r)   map__iter__r   rW   r6   r   )r&   r   r   Ztmp_lstZitmr   r,   Z	old_indexr'   r%   r(   sort=  s    zCommentedSeq.sortc                 C   s
   t | S r.   )r   r]   r%   r'   r'   r(   r]   M  s    zCommentedSeq.__repr__)N)NF)r1   r2   r3   r4   rm   rl   r   r)   r   r   r   intr   r   r   r=   r   rp   r   r   r   r   r   r   r   r  r	  r  r]   r'   r'   r'   r(   r     s&   
r   c                   @   sx   e Zd ZdZefeee ddddZeeddddZeedd	d
Z	eedddZ
edddZedddZdS )r   zEThis primarily exists to be able to roundtrip keys that are sequencesNr   c                 C   s"   |t ur| || n|| j_d S r.   r   r   r'   r'   r(   r   T  s    z!CommentedKeySeq._yaml_add_commentc                 C   s   | j ||d d S r   r   r   r'   r'   r(   r   Z  s    z%CommentedKeySeq._yaml_add_eol_commentr   c                 C   s   | j j| d jjS r"   r   r   r'   r'   r(   r   ]  s    z!CommentedKeySeq._yaml_get_columnXc                 C   s   d }d }|d |d  }}|| j jv r,|}nB|| j jv r>|}n0t| D ]&\}}||krZ qn|| j jvrhqF|}qF|d ur| |}|S r*   r   r   r'   r'   r(   r   `  s     
z CommentedKeySeq._yaml_get_columnr    c                 C   s.   g }| j jd u rd |g| j _n| j jd }|S r*   r  r  r'   r'   r(   r   t  s
    z%CommentedKeySeq._yaml_get_pre_commentc                 C   s.   g }| j jd u rd |g| j _n|| j jd< |S r*   r  r  r'   r'   r(   r   |  s
    z'CommentedKeySeq._yaml_clear_pre_comment)r1   r2   r3   r   rp   r   r   r   r   r   r   r   r   r'   r'   r'   r(   r   Q  s   r   c                   @   s.   e Zd ZdZeddddZedddZdS )	CommentedMapView_mappingN)mappingr!   c                 C   s
   || _ d S r.   r  )r&   r  r'   r'   r(   r)     s    zCommentedMapView.__init__r    c                 C   s   t | j}|S r.   )r@   r  )r&   countr'   r'   r(   r     s    
zCommentedMapView.__len__)r1   r2   r3   rl   r   r)   r  r   r'   r'   r'   r(   r    s   r  c                   @   sB   e Zd ZdZeeedddZeedddZedd	d
ZdS )CommentedMapKeysViewr'   rY   r!   c                 C   s   t |S r.   rg   r&   rY   r'   r'   r(   _from_iterable  s    z#CommentedMapKeysView._from_iterabler   c                 C   s
   || j v S r.   r  r   r'   r'   r(   rk     s    z!CommentedMapKeysView.__contains__r    c                 c   s   | j D ]
}|V  qd S r.   r  r+   r'   r'   r(   r    s    
zCommentedMapKeysView.__iter__N	r1   r2   r3   rl   classmethodr   r  rk   r  r'   r'   r'   r(   r    s
   r  c                   @   sB   e Zd ZdZeeedddZeedddZedd	d
ZdS )CommentedMapItemsViewr'   r  c                 C   s   t |S r.   r  r  r'   r'   r(   r    s    z$CommentedMapItemsView._from_iterable)rc   r!   c                 C   s8   |\}}z| j | }W n ty*   Y dS 0 ||kS d S ru   )r  KeyError)r&   rc   r   r`   rM   r'   r'   r(   rk     s    z"CommentedMapItemsView.__contains__r    c                 c   s$   | j  D ]}|| j | fV  q
d S r.   r  _keysr   r'   r'   r(   r    s    zCommentedMapItemsView.__iter__Nr  r'   r'   r'   r(   r    s
   	r  c                   @   s.   e Zd ZdZeedddZedddZdS )	CommentedMapValuesViewr'   r_   c                 C   s$   | j D ]}|| j | kr dS qdS )NTFr  )r&   r`   r   r'   r'   r(   rk     s    
z#CommentedMapValuesView.__contains__r    c                 c   s    | j  D ]}| j | V  q
d S r.   r  r   r'   r'   r(   r    s    zCommentedMapValuesView.__iter__N)r1   r2   r3   rl   r   rk   r  r'   r'   r'   r(   r!    s   r!  c                   @   s2  e Zd ZejddfZeeddddZeefee	e e	e dddd	Z
eedd
ddZeedddZeedddZedddZedddZeeddddZdSeeee	e ddddZdTeeeeddd Zeedd!d"Zeedd#d$d%Zeedd&d'Zeedd(d)ZdUeeed*d+d,Zedd-d.Zedd/d0Zeddd1d2Zedd3d4Zedd5d6Zedd7d8Zeed9d:d;Z edd<d=Z!edd>d?Z"edd@dAZ#eddBdCZ$e%eddDdEZ&eddFdGZ'eddHdIdJZ(eddKdLdMZ)edddNdOZ*eedPdQdRZ+dS )Vr   _ok_refNr   c                 O   s*   t  | _g | _tj| g|R i | d S r.   )rg   r"  r#  r   r)   r   r'   r'   r(   r)     s    zCommentedMap.__init__r5   r   r`   r!   c                 C   s:   |t ur| || dS |t ur.| || n|| j_dS z>values is set to key to indicate a value attachment of commentNrp   r   r   r   r5   r&   r5   r   r`   r'   r'   r(   r     s    zCommentedMap._yaml_add_commentr   c                 C   s   | j ||d dS z6add on the value line, with value specified by the keyr   Nr   r   r'   r'   r(   r     s    z"CommentedMap._yaml_add_eol_commentr   c                 C   s   | j j| d jjS )Nr   r   r   r'   r'   r(   r     s    zCommentedMap._yaml_get_columnXc           	      C   s   d }d }d\}}}| D ],}|d ur2||kr2|} qD||kr>|}|}q|| j jv rV|}n:|| j jv rh|}n(| D ]"}||kr| q|| j jvrql|}ql|d ur| |}|S )N)NNN)r   rW   r   )	r&   r   r   r   r\   r   lastr,   k1r'   r'   r(   r     s.    

zCommentedMap._yaml_get_columnr    c                 C   s.   g }| j jd u rd |g| j _n| j jd }|S r*   r  r  r'   r'   r(   r     s
    z"CommentedMap._yaml_get_pre_commentc                 C   s.   g }| j jd u rd |g| j _n|| j jd< |S r*   r  r  r'   r'   r(   r     s
    z$CommentedMap._yaml_clear_pre_comment)valsr   r!   c                 O   s   zt j| g|R i | W n0 tyL   |d D ]}|d | | |< q2Y n0 |rz| j|d   W n0 ty   |d D ]}| j|d  qY n0 |r| jj|   d S r"   )r   update	TypeErrorr"  keysr   add)r&   r+  r   r,   r'   r'   r(   r,  
  s    zCommentedMap.update)rd   r   r`   r5   r!   c                    s   | j v r |=  fdd  D }t tdggd }|d }|dkr||kr||d |d ft td< |}t j }	q|d }t j }	n|}t j }	| |< t||	D ]}
 ||
  q j | |dur j||d dS )zkinsert key value into given position, as defined by source YAML
        attach comment if provided
        c                    s   g | ]}| j v r|qS r'   r"  rA   r%   r'   r(   rD   !  rE   z'CommentedMap.insert.<locals>.<listcomp>r   r   r   Nr   )	r"  r.  r   r   r@   r  move_to_endr/  r   )r&   rd   r   r`   r5   r.  Zma0Z	merge_posZidx_minZidx_maxr   r'   r%   r(   r     s(    

zCommentedMap.insertF)r   rw   list_okr!   c              	      sx   t |ts| ||S ttttd fdd z |d| W S  tyT   | Y S  ttfyr   sj | Y S 0 dS )z/multi-level get that expects dicts within dicts)key_listleveldr!   c                    sZ   st |tsJ |t| kr>|t| kr.t|| |d   S  | |d || |d   S r*   )r   dictr@   
IndexError)r3  r4  r5  get_one_levelr2  r'   r(   r9  @  s    z)CommentedMap.mlget.<locals>.get_one_levelr   N)r   r   re   r   r  r-  r7  )r&   r   rw   r2  r'   r8  r(   mlget:  s    
	zCommentedMap.mlgetc                 C   sZ   zt | |W S  tyT   t| tg D ]$}||d v r(|d |    Y S q( Y n0 d S r*   )r   r   r  r   r   )r&   r   mergedr'   r'   r(   r   R  s    zCommentedMap.__getitem__)r   r`   r!   c                 C   sX   || v r:t |tr:t |ts:t | | tr:t| | |}t| || | j| d S r.   )r   r/   r   r   r   r   r"  r/  )r&   r   r`   r'   r'   r(   r   [  s    zCommentedMap.__setitem__c                 C   s   || j v rdS d S rs   r0  r   r'   r'   r(   _unmerged_containsg  s    
zCommentedMap._unmerged_containsc                 C   s   t t| |S r.   )r=   r   rk   r   r'   r'   r(   rk   l  s    zCommentedMap.__contains__)r   rw   r!   c                 C   s"   z|  |W S    | Y S 0 d S r.   )r   )r&   r   rw   r'   r'   r(   re   o  s    zCommentedMap.getc                 C   sD   d}d}|   D ]&\}}|| |d|7 }|sd}q|d7 }|S )N{r;   z: r   rS   )rW   )r&   r  seprC   rM   r'   r'   r(   r]   u  s    zCommentedMap.__repr__c                 c   s0   t | D ] }|| jv r
|t | |fV  q
d S r.   )r   r  r"  r   r+   r'   r'   r(   non_merged_items  s    
zCommentedMap.non_merged_itemsc                 C   s2   | j | t| | | jD ]}|| qd S r.   )r"  discardr   r   r#  update_key_value)r&   r   Zrefererr'   r'   r(   r     s    
zCommentedMap.__delitem__c                 c   s   t | D ]
}|V  q
d S r.   r   r  r+   r'   r'   r(   r    s    zCommentedMap.__iter__c                 c   s   t | D ]
}|V  q
d S r.   rB  r+   r'   r'   r(   r     s    zCommentedMap._keysc                 C   s   t t| S r.   )r  r   r   r%   r'   r'   r(   r     s    zCommentedMap.__len__r   c                 C   s   t t| |kS r.   )r=   r6  r   r'   r'   r(   r     s    zCommentedMap.__eq__c                 C   s   t | S r.   )r  r%   r'   r'   r(   r.    s    zCommentedMap.keysc                 C   s   t | S r.   )r!  r%   r'   r'   r(   ri     s    zCommentedMap.valuesc                 c   s&   t | D ]}|t | |fV  q
d S r.   )r   r  r   r+   r'   r'   r(   r6     s    zCommentedMap._itemsc                 C   s   t | S r.   )r  r%   r'   r'   r(   rW     s    zCommentedMap.itemsc                 C   s    t | tst| tg  t| tS r.   )r   r   r   r   r%   r'   r'   r(   merge  s    
zCommentedMap.mergec                 C   s2   t |  }|  D ]\}}|||< q| | |S r.   )r   r6   r   )r&   r,   rC   rM   r'   r'   r(   r     s
    


zCommentedMap.copy)cmr!   c                 C   s   || j vr| j | d S r.   )r#  rf   )r&   rD  r'   r'   r(   add_referent  s    
zCommentedMap.add_referentr_   c                 C   sZ   |D ]D}|d  |  |d  D ]$\}}t| |r8q"t| || q"q| j| d S r*   )rE  rW   r   rk   r   rC  r   )r&   r`   rM   r*  Zv1r'   r'   r(   add_yaml_merge  s    zCommentedMap.add_yaml_mergec                 C   sR   || j v rd S | jD ],}||d v rt| ||d |   d S qt| | d S r*   )r"  rC  r   r   r   )r&   r   rM   r'   r'   r(   rA    s    

zCommentedMap.update_key_valuer  c                 C   sD   |   }||t| < | D ]}t| | |||< q| j||d |S r  )r   r  r   r   r   r  r'   r'   r(   r    s    zCommentedMap.__deepcopy__)N)NF)N),r1   r2   r3   r4   rm   rl   r   r)   rp   r   r   r   r   r   r   r   r,  r   r:  r   r   r<  r=   rk   re   r]   r?  r   r  r   r  r   r   r.  ri   r6   rW   rn   rC  r   rE  rF  rA  r  r'   r'   r'   r(   r     sL   	
		r   )clsr   kwargsr!   c                 O   s   t | j dd S )Nz objects are immutable)r-  r1   )rG  r   rH  r'   r'   r(   raise_immutable  s    rI  c                   @   s  e Zd ZejdfZeeddddZe Z	 Z
 Z Z Z ZZeedddZee d	d
dZed	ddZed	ddZed	ddZed!eeedddZefeee ddddZeeddddZeedddZeedddZed	dd ZdS )"CommentedKeyMap_odNr   c                 O   s@   t | drt|  zt|i || _W n ty:    Y n0 d S )NrK  )r   rI  r   rK  r-  r   r'   r'   r(   r)     s    
zCommentedKeyMap.__init__)indexr!   c                 C   s
   | j | S r.   )rK  )r&   rL  r'   r'   r(   r     s    zCommentedKeyMap.__getitem__r    c                 c   s   | j  D ]
}|V  q
d S r.   )rK  r  r+   r'   r'   r(   r    s    zCommentedKeyMap.__iter__c                 C   s
   t | jS r.   )r@   rK  r%   r'   r'   r(   r     s    zCommentedKeyMap.__len__c                 C   s   t t|  S r.   )hashtuplerW   r%   r'   r'   r(   __hash__  s    zCommentedKeyMap.__hash__c                 C   s.   t | ts| j S dtt| j  d S )Nzordereddict(r<   )r   r   rK  r]   r[   r   rW   r%   r'   r'   r(   r]      s    

zCommentedKeyMap.__repr__)r.  rM   r!   c                 C   s   t t| |S r.   )rJ  r6  fromkeys)r.  rM   r'   r'   r(   rP    s    zCommentedKeyMap.fromkeysr   c                 C   s"   |t ur| || n|| j_d S r.   r   r   r'   r'   r(   r   	  s    z!CommentedKeyMap._yaml_add_commentc                 C   s   | j ||d d S r   r   r   r'   r'   r(   r     s    z%CommentedKeyMap._yaml_add_eol_commentr   c                 C   s   | j j| d jjS r"   r   r   r'   r'   r(   r     s    z!CommentedKeyMap._yaml_get_columnXc                 C   s   d }d }|d |d  }}|| j jv r,|}nB|| j jv r>|}n0t| D ]&\}}||krZ qn|| j jvrhqF|}qF|d ur| |}|S r*   r   r   r'   r'   r(   r     s     
z CommentedKeyMap._yaml_get_columnc                 C   s.   g }| j jd u rd |g| j _n|| j jd< |S r*   r  r  r'   r'   r(   r   )  s
    z%CommentedKeyMap._yaml_get_pre_comment)N) r1   r2   r3   r4   rm   rl   r   r)   rI  r   r   r   r   popitemr   r,  r   r   r  r  r   rO  r]   r  rP  rp   r   r   r   r   r   r   r'   r'   r'   r(   rJ    s   
rJ  c                   @   s   e Zd ZejfZdS )r   N)r1   r2   r3   r4   rm   rl   r'   r'   r'   r(   r   2  s   r   c                   @   s   e Zd ZejdfZdeddddZeefee	e e	e ddddZ
eedd	d
dZeddddZeddddZeedddZedddZedddZedddZdS )r   odictN)ri   r!   c                 C   s&   t  | _t|  |d ur"| |O } d S r.   )r   rR  r   r)   )r&   ri   r'   r'   r(   r)   9  s    
zCommentedSet.__init__r$  c                 C   s:   |t ur| || dS |t ur.| || n|| j_dS r%  r&  r'  r'   r'   r(   r   ?  s    zCommentedSet._yaml_add_commentr   c                 C   s   | j ||d dS r(  r   r   r'   r'   r(   r   K  s    z"CommentedSet._yaml_add_eol_commentr_   c                 C   s   d| j |< dS )zAdd an element.NrR  ra   r'   r'   r(   r/  O  s    zCommentedSet.addc                 C   s   | j |= dS )z8Remove an element.  Do not raise an exception if absent.NrS  ra   r'   r'   r(   r@  S  s    zCommentedSet.discardrh   c                 C   s
   || j v S r.   rS  r+   r'   r'   r(   rk   W  s    zCommentedSet.__contains__r    c                 c   s   | j D ]
}|V  qd S r.   rS  r+   r'   r'   r(   r  Z  s    
zCommentedSet.__iter__c                 C   s
   t | jS r.   )r@   rR  r%   r'   r'   r(   r   ^  s    zCommentedSet.__len__c                 C   s   d| j  dS )Nzset(r<   )rR  r.  r%   r'   r'   r(   r]   a  s    zCommentedSet.__repr__)N)r1   r2   r3   r4   rm   rl   r   r)   rp   r   r   r   r/  r@  rk   r  r  r   r/   r]   r'   r'   r'   r(   r   6  s   
r   c                   @   s^   e Zd ZdeeeddddZedddZdeee ee edd	d
Z	eedddZ
dS )TaggedScalarN)r`   styler   r!   c                 C   s"   || _ || _|d ur| | d S r.   )r`   rU  r   )r&   r`   rU  r   r'   r'   r(   r)   g  s    zTaggedScalar.__init__r    c                 C   s   | j S r.   r   r%   r'   r'   r(   r0   m  s    zTaggedScalar.__str__)r   startr>   r!   c                 C   s   | j |||S r.   )r`   r  )r&   r   rV  r>   r'   r'   r(   r  p  s    zTaggedScalar.count)rd   r!   c                 C   s
   | j | S r.   r   )r&   rd   r'   r'   r(   r   s  s    zTaggedScalar.__getitem__)NNN)NN)r1   r2   r3   r   r)   r0   r/   r   r  r  r   r'   r'   r'   r(   rT  e  s   rT  r;   .)r5  namer>  outr!   c                 C   s   t | trxt| drx|r2|| dt|  d || jd | D ],}t| | |rh|| t| n|||d qHn~t | trt| dr|r|| dt|  d || jd t	| D ]0\}}t||r|| t| nt|||d qdS )zg
    recursively dump comments, all but the toplevel preceded by the path
    in dotted form x.0.a
    r   rI   rJ   )rX  r>  rY  N)
r   r6  r   writer   r   dump_commentsr/   r   r   )r5  rX  r>  rY  rC   r   r'   r'   r(   r[  w  s    , r[  )Jr   sysr   Zruamel.yaml.compatr   r   r   Zruamel.yaml.scalarstringr   Zruamel.yaml.anchorr   collections.abcr   r   r	   r
   typingr   r   r   r   r   r   __all__r   r   r   r   r   ZcidxZC_VALUE_EOLZ
C_ELEM_EOLZ	C_KEY_EOLZ	C_KEY_PREZ
C_ELEM_PREZC_VALUE_POSTZC_ELEM_POSTZC_VALUE_PREZ
C_KEY_POSTZ	C_TAG_EOLZ
C_TAG_POSTZ	C_TAG_PREZC_ANCHOR_EOLZC_ANCHOR_POSTZC_ANCHOR_PREr   ry   r   r   r   r4   rp   rq   rz   r   r   r   r   rN  r   r  r  r  r!  r   r  rI  rJ  r   r   rT  stdoutr/   r[  r'   r'   r'   r(   <module>   sn   $


p+ >|4  N/