o
    <i                      @   sZ   d dl mZmZ d dlmZmZ d dlmZ d dlZej	d  dkr#e
ZG dd deZdS )    )CommentedSeqCommentedMap)dumpRoundTripDumper)deepcopyN   c                   @   s   e Zd ZdZdd Ze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 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d6d/d0Zd6d1d2Zd3d4 Zd5S )7YAMLPointerz
    A sequence of indexes/keys that look up a specific chunk of a YAML document.

    A YAML pointer can point to a key, value, item in a sequence or part of a string
    in a value or item.
    c                 C   s
   g | _ d S N_indicesself r   S/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/strictyaml/yamlpointer.py__init__   s   
zYAMLPointer.__init__c                 C      |   sJ | jd d S N   )is_indexr   r   r   r   r   
last_index      zYAMLPointer.last_indexc                 C   r   r   )is_valr   r   r   r   r   last_val   r   zYAMLPointer.last_valc                 C   s&   |   s
|  s
J | jd d d S r   is_keyr   r   r   r   r   r   last_strictkey       zYAMLPointer.last_strictkeyc                 C   s&   |   s
|  s
J | jd d d S )Nr   r   r   r   r   r   r   r   last_regularkey%   r   zYAMLPointer.last_regularkeyc                 C   T   t |ttfsJ t|t |ttfsJ t|t| }|jd||ff |S )Nval
isinstancestrunicodetyper   r   appendr   
regularkey	strictkeynew_locationr   r   r   r    *   
   zYAMLPointer.valc                 C      | j d d dkS )Nr   r   r    r
   r   r   r   r   r   1      zYAMLPointer.is_valc                 C   r   )Nkeyr!   r'   r   r   r   r.   4   r+   zYAMLPointer.keyc                 C   r,   )Nr   r   r.   r
   r   r   r   r   r   ;   r-   zYAMLPointer.is_keyc                 C   s   t | }|jd|f |S )Nindexr   r   r&   )r   r/   r*   r   r   r   r/   >      zYAMLPointer.indexc                 C   r,   )Nr   r   r/   r
   r   r   r   r   r   C   r-   zYAMLPointer.is_indexc                 C   s    t | }|jd||ff |S )N	textslicer0   )r   startendr*   r   r   r   r2   F   s   zYAMLPointer.textslicec                 C   r,   )Nr   r   r2   r
   r   r   r   r   is_textsliceK   r-   zYAMLPointer.is_textslicec                 C   s   t | }|jd d |_|S )Nr   )r   r   )r   r*   r   r   r   parentN   r1   zYAMLPointer.parentc                 C   s   t |j}|| j d S r	   )r   r   extend)r   pointernew_indicesr   r   r   make_child_ofS   s   
zYAMLPointer.make_child_ofc           
      C   s^  t |}t|dkr|sd }|S t|dkr|d d dv r'|d d d }n|d d }d}t|trn| D ]5}|rA|| ||krmd}t|| ttfr`| j|dd  || |d||< |smt|dkrm|| q8t|trt|D ]5\}}	|r|d= ||krd}t|| ttfr| j|dd  || |d||< |st|dkr|| qw|S )Nr   )r    r.   r   FTinclude_selectedr   )	r   lenr"   r   keyspopr   _slice_segment	enumerate)
r   indicessegmentr<   
slicedpartr/   start_poppingr.   ivaluer   r   r   r@   W   sP   -








zYAMLPointer._slice_segmentc                 C   sL   | j | j|dd}|d u s|i ks|g krdS tt|td dd S )NFr;   r   Dumper
r@   r   r=   r   r   rstripsplitr   documentrD   r   r   r   
start_line   s   zYAMLPointer.start_linec                 C   s,   | j | j|dd}tt|td dS )NTr;   rH   rJ   rK   rN   r   r   r   end_line   s   zYAMLPointer.end_linec                 C   s0   d t|tdd| |d | | S NrJ   rH   r   )joinr   r   rM   rP   rQ   )r   rO   r   r   r   lines   
   zYAMLPointer.linesc                 C   s8   d t|tdd| |d | | |d  S rR   )rS   r   r   rM   rP   r   rO   how_manyr   r   r   lines_before   s
   zYAMLPointer.lines_beforec                 C   s0   d t|tdd| || ||  S )NrJ   rH   )rS   r   r   rM   rQ   rV   r   r   r   lines_after   rU   zYAMLPointer.lines_afterc                 C   s   |dkr+|  D ]\}}||d kr|  S t|dr&|j|d kr&|  S qtd|dkr3|| S |dkrA||d |d  S |dkrO|rK|d S |d S td)	Nr    r   textInvalid stater/   r2   r   r.   )itemshasattrrZ   	Exception)r   rC   
index_typer/   	strictdocr.   rG   r   r   r   _individual_get   s    
zYAMLPointer._individual_getFc                 C   s(   |}| j D ]\}}| ||||}q|S r	   )r   ra   )r   rO   r`   rC   r_   r/   r   r   r   get   s   zYAMLPointer.getc           
      C   s   |}|}t ||}| jD ]I\}}	|}|dkr%|r|	d n|	d }|| }q|dkr0|	}|| }q|dkrAd}||	d |	d  }q|dkrRd}|rM|	d n|	d }qtd||u rbt||| dS |durxt|d	rr||j|< dS |||< dS td
)a  Since set() needs to overwrite what this pointer points to, it
        affects the parent object.  Therefore, rather than taking "document"
        as get(), it takes the object which holds the document and the name
        of the property which is the document.
        r    r   r   r/   r2   Nr.   r[   _valuezinvalid key, cannot set)getattrr   RuntimeErrorsetattrr]   rc   NotImplementedError)
r   src_objsrc_attr
new_ruamelr`   obj_lastkey_lastrr_   r/   r   r   r   set   s2   



zYAMLPointer.setc                 C   s   d | jS )Nz<YAMLPointer: {0}>)formatr   r   r   r   r   __repr__   s   zYAMLPointer.__repr__N)F)__name__
__module____qualname____doc__r   propertyr   r   r   r   r    r   r.   r   r/   r   r2   r5   r6   r:   r@   rP   rQ   rT   rX   rY   ra   rb   rn   rp   r   r   r   r   r      s>    



3

&r   )strictyaml.ruamel.commentsr   r   strictyaml.ruamelr   r   copyr   sysversion_infor#   r$   objectr   r   r   r   r   <module>   s    