U
    Æ½„b!  ã                   @   s¦   d dl mZ d dlmZmZmZmZ d dl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mZmZmZ ddgZG dd„ deƒZG d	d„ dƒZ d
d„ Z!dS )é    )Ú	YAMLError)ÚnprintÚDBG_NODEÚdbgÚnprintf)ÚRegExp)
ÚStreamStartEventÚStreamEndEventÚMappingStartEventÚMappingEndEventÚSequenceStartEventÚSequenceEndEventÚ
AliasEventÚScalarEventÚDocumentStartEventÚDocumentEndEvent)ÚMappingNodeÚ
ScalarNodeÚSequenceNodeÚ
SerializerÚSerializerErrorc                   @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© r   r   ú:/tmp/pip-unpacked-wheel-ctuyz3qg/ruamel/yaml/serializer.pyr      s   c                   @   sj   e Zd ZdZedƒ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„ Zdd„ ZdS )r   zid%03dzid(?!000$)\d{3,}Nc                 C   sz   || _ | j d k	r| | j _|| _|| _|| _t|tƒrLttt	| 
d¡ƒƒ| _n|| _|| _i | _i | _d| _d | _d | _d S )NÚ.r   )ÚdumperZ_serializerÚuse_encodingÚuse_explicit_startÚuse_explicit_endÚ
isinstanceÚstrÚtupleÚmapÚintÚsplitÚuse_versionÚuse_tagsÚserialized_nodesÚanchorsÚlast_anchor_idÚclosedZ_templated_id)ÚselfÚencodingZexplicit_startZexplicit_endÚversionÚtagsr   r   r   r   Ú__init__&   s    


zSerializer.__init__c                 C   s   t | jdƒr| jjS | jjS ©NÚtyp)Úhasattrr   ÚemitterZ_emitter©r-   r   r   r   r5   A   s    zSerializer.emitterc                 C   s   t | jdƒr| jj | jjS r2   )r4   r   ÚresolverZ	_resolverr6   r   r   r   r7   H   s    zSerializer.resolverc                 C   sB   | j d kr&| j t| jd�¡ d| _ n| j r6tdƒ‚ntdƒ‚d S )N)r.   Fúserializer is closedzserializer is already opened)r,   r5   Úemitr   r   r   r6   r   r   r   ÚopenO   s    

zSerializer.openc                 C   s2   | j d krtdƒ‚n| j s.| j tƒ ¡ d| _ d S )Núserializer is not openedT)r,   r   r5   r9   r	   r6   r   r   r   ÚcloseY   s
    

zSerializer.closec                 C   s˜   t tƒrtdƒ | ¡  | jd kr,tdƒ‚n| jr:tdƒ‚| j t| j	| j
| jd�¡ |  |¡ |  |d d ¡ | j t| jd�¡ i | _i | _d| _d S )NzSerializing nodesr;   r8   )Úexplicitr/   r0   )r=   r   )r   r   r   Údumpr,   r   r5   r9   r   r   r'   r(   Úanchor_nodeÚserialize_noder   r    r)   r*   r+   )r-   Únoder   r   r   Ú	serialized   s(    

  ÿÿ
zSerializer.serializec                 C   s®   || j kr*| j | d krª|  |¡| j |< n€d }z|jjr@|jj}W n   Y nX || j |< t|tƒr||jD ]}|  |¡ qjn.t|tƒrª|jD ]\}}|  |¡ |  |¡ qŒd S ©N)	r*   Úgenerate_anchorÚanchorZalways_dumpÚvaluer!   r   r?   r   )r-   rA   rE   ÚitemÚkeyrF   r   r   r   r?   y   s"    





zSerializer.anchor_nodec                 C   sD   z|j j}W n   d }Y nX |d kr@|  jd7  _| j| j S |S )Né   )rE   rF   r+   ÚANCHOR_TEMPLATE)r-   rA   rE   r   r   r   rD   Ž   s    
zSerializer.generate_anchorc              
   C   s€  | j | }|| jkrDt|dd ƒ}|dkr,d }| j t||d�¡ �n8d| j|< | j ||¡ t|t	ƒrÐ| j 
t	|jd¡}| j 
t	|jd¡}|j|k|j|k|j d¡f}| j t||j||j|j|jd�¡ �n¢t|tƒ�rž|j| j 
t|jd¡k}|j}	d }
d }|jdk�r|	�r|	d	 }|	�r:t|	ƒd
k�r:|	d
 }
nd }
| j t||j||j|jd�¡ d	}|jD ]}|  |||¡ |d7 }�qh| j t||
gd�¡ nÔt|tƒ�rr|j| j 
t|jd¡k}|j}	d }
d }|jdk�rê|	�rê|	d	 }|	�rt|	ƒd
k�r|	d
 }
| j t||j||j|jt|jƒd�¡ |jD ]&\}}|  ||d ¡ |  |||¡ �q4| j t||
gd�¡ | j ¡  d S )NÚstyleú?)rK   T)TF)FTztag:yaml.org,2002:)rK   Úcommentr   é   )Ú
flow_stylerM   rI   )rM   )rO   rM   Znr_items)r*   r)   Úgetattrr5   r9   r   r7   Zdescend_resolverr!   r   ÚresolverF   ÚtagÚ
startswithr   rK   rM   r   rO   Úlenr   r@   r   r   r
   r   Zascend_resolver)r-   rA   ÚparentÚindexÚaliasZ
node_styleZdetected_tagÚdefault_tagZimplicitrM   Zend_commentZseq_commentrG   Zmap_commentrH   rF   r   r   r   r@   ™   s–    




ýúÿ

ûÿ	
úÿ
zSerializer.serialize_node)NNNNNN)r   r   r   rJ   r   Ú	ANCHOR_REr1   Úpropertyr5   r7   r:   r<   rB   r?   rD   r@   r   r   r   r   r       s&         ù



c                 C   s   t j | ¡S rC   )r   rY   Úmatch)Úsr   r   r   Útemplated_idï   s    r]   N)"Zruamel.yaml.errorr   Zruamel.yaml.compatr   r   r   r   Zruamel.yaml.utilr   Zruamel.yaml.eventsr   r	   r
   r   r   r   r   r   r   r   Zruamel.yaml.nodesr   r   r   ÚAnyÚDictÚUnionÚTextÚOptionalZVersionTypeÚ__all__r   r   r]   r   r   r   r   Ú<module>   s   0 P