o
    Uhs                     @  s   d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ e ZG dd de	ZG dd de	ZdddZ dS )     )annotationsN)Any)Iterator)decode)_CustomDict)merge_dicts)KeyAlreadyPresent)NonExistentKey)TOMLKitError)AoT)Comment)Item)Key)Null)	SingleKey)Table)Trivia)
Whitespace)itemc                      s  e Zd ZdZd|d}ddZed~d
dZdddZedddZdddZ	ddddZ
dddZdd!d"Zddd$d%Z	&ddd)d*Zdd,d-Zdd/d0Zdd2d3Zdd6d7Zdd8d9Zdd:d;Zdd<d=Zdd?d@ZdddEdFZddGdHZdddIdJZddKdLZddMdNZddPdQZddSdTZddUdVZddWdXZd fdZd[Z dd]d^Z!dd`daZ"ddbdcZ#ddddeZ$ddhdiZ%djdk Z&dldm Z'dndo Z(dpdq Z)ddrdsZ*ddtduZ+de,ffddxdyZ-de,ffddzd{Z.  Z/S )	Containerz
    A container for items within a TOMLDocument.

    This class implements the `dict` interface with copy/deepcopy protocol.
    FparsedboolreturnNonec                 C  s   i | _ g | _|| _g | _d S N)_map_body_parsed_table_keys)selfr    r    e/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/tomlkit/container.py__init__$   s   
zContainer.__init__list[tuple[Key | None, Item]]c                 C  s   | j S r   r   r   r    r    r!   body*   s   zContainer.bodydict[str, Any]c                 C  sf   i }|   D ]*\}}|du rqt|tr|j}t|dr | }||v r,t|| | q|||< q|S )z#Returns as pure python object (ppo)Nunwrap)items
isinstancer   keyhasattrr(   r   )r   	unwrappedkvr    r    r!   r(   .   s   


zContainer.unwrapc                 C  s^   i }| j D ]'\}}|du rq|j}|j}t|tr|j}||v r(t|| | q|||< q|S )zThe wrapped dict valueN)r   r+   valuer*   r   r   )r   dr.   r/   r    r    r!   r0   B   s   

zContainer.valueparsingc                 C  sT   || _ | jD ]!\}}t|tr|j| qt|tr'|jD ]}|j| qqd S r   )r   r   r*   r   r0   r2   r   r&   )r   r2   _r/   tr    r    r!   r2   W   s   


zContainer.parsingNr+   Key | Item | strr   Item | Nonec                 C  s4   |du rt |ttfstdd|}}| ||S )z
        Adds an item to the current Container.

        :Example:

        >>> # add a key-value pair
        >>> doc.add('key', 'value')
        >>> # add a comment or whitespace or newline
        >>> doc.add(comment('# comment'))
        Nz8Non comment/whitespace items must have an associated key)r*   r   r   
ValueErrorappendr   r+   r   r    r    r!   adda   s   
zContainer.addr   r0   r   c           
      C  s   t |ttfrtd|^}}}d|_ttdt ddd }}|D ]}d|_ttdt ddd}	|||	 |	}q#|j|_||| | || d S )Nz!Can't add a table to a dotted keyTF)is_super_table)	r*   r   r   r
   _dottedr   r   r8   sep)
r   r+   r0   namemidlasttablecurrent_name	new_tabler    r    r!   _handle_dotted_keyv   s   zContainer._handle_dotted_keyintc                 C  sh   d}t | jD ](\}\}}t|trqt|tr| sqt|ttfr-| s- |d S |}q|d S N   )		enumerater   r*   r   r   is_fixedr   r   	is_dotted)r   
last_indexir.   r/   r    r    r!   _get_last_index_before_table   s   
z&Container._get_last_index_before_tableSingleKey | Nonec                 C  sb   |d u r| j D ]}|d usJ | | qd S || j vs$t| j | ts&d S t| | j |  d S r   )r   _validate_out_of_order_tabler*   tupleOutOfOrderTableProxyvalidate)r   r+   r.   r    r    r!   rQ      s   
z&Container._validate_out_of_order_tableTKey | str | NonerT   c                 C  s  t |ts|durt|}t |tst|}|dur&| r&| || | S t |ttfr6|j	du r6|j
|_	|  }t |tpBt|}t |trc| jsO|  | jrc| jsc|jjsc|sc| scd|j_t |tr| jr| js|  |rd|d jjv s|sd|d jj |d j_|dur|| v r| j| }t |tr| j|d  }n| j| }|d }t |trt |ttfst|| rt |tst||g| jd}| ||| | S || | S | r| st||| | S | r| rt| s|d  s| jd |d krH| r#| js#|  }	nt| j}	|	t| jk r8| |	|| n|  || |rF| !| | S t"#|}|j$j%D ]\}
}||
| qQ|d |f| jt |trp|d < | S |< | S |d  rt&dn,| st|n"t |trt |tst||j%D ]}|| q| S t|t |ttf}|dur| jr| js|r| r|  }|t| jk r| |||S | jd d }t |tst|sd|jj'v s|j j'd7  _'|  || | S )z<Similar to :meth:`add` but both key and value must be given.N
r   rH   rI   )r   z!Redefinition of an existing table)(r*   r   r   r   _itemis_multirE   r   r   r>   r+   _previous_itemr   ends_with_whitespacer   invalidate_display_namer   triviaindentrL   r   rR   r   is_aot_element_replacer8   is_aotr;   r   rO   len
_insert_at_raw_appendrQ   copydeepcopyr0   r&   r
   trail)r   r+   r   rT   prevprev_wscurrent_idxcurrent_body_elementrB   idxr.   r/   rA   is_tablerM   previous_itemr    r    r!   r8      s   



















	zContainer.append
Key | Nonec                 C  s   || j v r6| j | }t|ts|f}| j|d  d }|d ur(t|ts(t|g |t| jR | j |< n|d urBt| j| j |< | j||f | rT| j	| |d urct
| |j|j d S d S rG   )r   r*   rR   r   r   r   ra   r8   rl   r   dict__setitem__r+   r0   )r   r+   r   ri   rB   r    r    r!   rc   1  s    


zContainer._raw_appendrk   c                 C  s   | j | d }| j|}|d u rt|d t f| j |< t|trAt|}|| t	|dkr6|
 }nt|}|| j|< d S t| |j | j
| d S )Nr   rI   )r   r   getr	   r   r*   rR   listremovera   popro   __delitem__r+   )r   rk   r+   indexr    r    r!   
_remove_atF  s   


zContainer._remove_at	Key | strc                 C  sx   t |ts	t|}| j|d}|du rt|t |tr+|D ]
}dt f| j|< qndt f| j|< t	
| |j | S )z Remove a key from the container.N)r*   r   r   r   rt   r	   rR   r   r   ro   ru   r+   )r   r+   rk   rN   r    r    r!   rs   Y  s   

zContainer.remove	other_keyr   c           
      C  s@  |d u rt d|| vrt|t|tst|}t|ts"t|}t|}| j| }t|tr4t|}| j	| d }d|j
jvrI|j
 jd7  _| j D ]0\}}t|trsg }|D ]}	|	|kre|	d }	||	 q[t|| j|< qN||kr~|d | j|< qN|d | j|< | j	|d ||f |d urt| |j|j | S )Nz$Key cannot be null in insert_after()rI   rV   )r7   r	   r*   r   r   rW   r   rR   maxr   r\   rf   r)   r8   insertro   rp   r+   r0   )
r   r+   ry   r   rk   current_itemr.   r/   new_indicesv_r    r    r!   _insert_afterl  s>   




zContainer._insert_afterc           
      C  sh  |t | jd krtd| t|tst|}t|}|dkrH| j|d  d }t|tsHt|sHt|t	t
fsHd|jjv sH|j jd7  _| j D ]0\}}t|trrg }|D ]}||krd|d }|| qZt|| j|< qM||kr}|d | j|< qM|| jv r| j| }	t|	ts|	f}	g |	|R | j|< n|| j|< | j|||f t| |j|j | S )NrI   zUnable to insert at position r   rV   )ra   r   r7   r*   r   r   rW   r   rZ   r   r   r\   rf   r   r)   rR   r8   r{   ro   rp   r+   r0   )
r   rk   r+   r   rm   r.   r/   r}   r~   ri   r    r    r!   rb     sF   





zContainer._insert_atc                 C  sP   t |ts	t|}| j|}|du rt|t |tr!t| |S | j| d S )zGet an item for the given key.NrI   )	r*   r   r   r   rq   r	   rR   rS   r   )r   r+   rk   r    r    r!   r     s   


zContainer.itemc                 C  s   | j r
| j d d S dS )zGet the last item.rH   rI   Nr$   r%   r    r    r!   	last_item  s   zContainer.last_itemstrc                 C  sz   d}| j D ]5\}}|dur2t|tr|| ||7 }qt|tr)|| ||7 }q|| ||7 }q|| ||7 }q|S )zRender as TOML string. N)r   r*   r   _render_tabler   _render_aot_render_simple_item)r   sr.   r/   r    r    r!   	as_string  s   

zContainer.as_stringrA   r   prefix
str | Nonec              	   C  s  d}|j d ur|j }n| }|d ur|d | }| r,tdd |jjD rj| sjd\}}| r8d\}}d|jj	vrGt
|jdkrGdnd}||jj | t| | |jj t|jj |jj	 | 7 }n|jjdkrv||jj7 }|jjD ]T\}	}
t|
tr|
 r|	 r| s|| |	|
7 }qz|| j|	|
|d	7 }qz|| j|	|
|d	7 }qzt|
tr|| j|	|
|d	7 }qz|| j|	|
| r|nd d	7 }qz|S )
Nr   .c                 s  s(    | ]\}}t |ttttf V  qd S r   )r*   r   r   r   r   ).0r3   r/   r    r    r!   	<genexpr>  s
    
z*Container._render_table.<locals>.<genexpr>)[]z[[z]]rV   r   r   )display_namer   r;   anyr0   r&   rL   r^   r\   rf   ra   r]   r   
comment_wscommentr*   r   r   r   r   r   )r   r+   rA   r   cur_keyopen_closenewline_in_table_triviar.   r/   r    r    r!   r     sd   
 




zContainer._render_tablec                 C  sJ   |  }|d ur|d | }d}t|}|jD ]}|| j||d7 }q|S )Nr   r   r   )r   r   r&   _render_aot_table)r   r+   aotr   r   r   rA   r    r    r!   r   (  s   
zContainer._render_aotc           	      C  s   d}|pd}d\}}||j j | t| | |j j t|j j |j j 7 }|jjD ]H\}}t|t	r\|
 rQ| rF|| ||7 }q,|| j|||d7 }q,|| j|||d7 }q,t|trl|| j|||d7 }q,|| ||7 }q,|S )Nr   r   r   )r\   r]   r   r   r   rf   r0   r&   r*   r   r;   rL   r   r   r   r   )	r   rA   r   r   r   r   r   r.   r/   r    r    r!   r   4  s:   



zContainer._render_aot_tablec                 C  sn   |d u r|  S |  }|d ur|d | }|jj t| |j t|   |jj t|jj |jj S )Nr   )r   r\   r]   r   r=   r   r   rf   )r   r+   r   r   r   r    r    r!   r   T  s&   

zContainer._render_simple_itemc                 C  
   t | S r   ro   __len__r%   r    r    r!   r   f     
zContainer.__len__Iterator[str]c                 C     t t| S r   iterro   keysr%   r    r    r!   __iter__i     zContainer.__iter__Item | Containerc                 C  s&   |  |}t|tr| r|jS |S r   )r   r*   r   
is_booleanr0   r9   r    r    r!   __getitem__m  s   
zContainer.__getitem__c                   sJ    d ur | v rt t fdd| j}| | | d S |  | d S )Nc                   s   |  kS r   r    )r.   r+   r    r!   <lambda>v  s    z'Container.__setitem__.<locals>.<lambda>)nextfilterr   r_   r8   )r   r+   r0   old_keyr    r   r!   rp   t  s   zContainer.__setitem__c                 C  s   |  | d S r   )rs   r   r+   r    r    r!   ru   {  r   zContainer.__delitem__defaultc                      t  j||d | | S N)r   super
setdefaultr   r+   r   	__class__r    r!   r   ~     zContainer.setdefaultnew_keyc                 C  s@   t |ts	t|}| j|}|d u rt|| ||| d S r   )r*   r   r   r   rq   r	   _replace_at)r   r+   r   r0   rk   r    r    r!   r_     s   
zContainer._replaceint | tuple[int]c                 C  sX  t |}t|tr|dd  D ]
}d t f| j|< q|d }| j| \}}t|tsDt|ttft|ttfks=||jkrBt	|}n|}| j
|= || j
|< ||krWt| | t|ttft|ttfkr| | t|t| jD ]}t| j| d ttfr| ||| |} n	qrd}| || n.t|ttfs|jj|j_|jjp|jj|j_|jjp|jj|j_|jj|j_||f| j|< t|dr|  t|tr*|  \}}|dk r|n|}t|}	t|to|jjot|jjd d t}
||k ot| j|d  d t}||k s|
r|s|	s|d td t| |j|j d S d S )NrI   r   rH   r[   rV   )rW   r*   rR   r   r   r   r   r   r+   r   r   ro   ru   rs   rangera   rb   r8   r   r\   r]   r   r   rf   r,   r[   _previous_item_with_indexrZ   r0   r&   rp   )r   rk   r   r0   rN   r.   r/   r@   r3   has_wsreplace_has_wsnext_wsr    r    r!   r     s`   







"zContainer._replace_atc                 C  
   t | jS r   )r   r0   r%   r    r    r!   __str__  r   zContainer.__str__c                 C  r   r   )reprr0   r%   r    r    r!   __repr__  r   zContainer.__repr__otherro   c                 C  s   t |tstS | j|kS r   )r*   ro   NotImplementedr0   )r   r   r    r    r!   __eq__  s   

zContainer.__eq__c                 C  s   | j fS r   )r   r   protocolr    r    r!   	_getstate  s   zContainer._getstatec                 C  s
   |  dS )N   )__reduce_ex__r%   r    r    r!   
__reduce__  r   zContainer.__reduce__c                 C  s"   | j | || j| j| j| jffS r   )r   r   r   r   r   r   r   r    r    r!   r     s   zContainer.__reduce_ex__c                 C  sV   |d | _ |d | _|d | _|d | _| jD ]\}}|d ur(t| |j|j qd S )Nr   rI   r      )r   r   r   r   ro   rp   r+   r0   )r   stater+   r   r    r    r!   __setstate__  s   



zContainer.__setstate__c                 C  s
   t  | S r   )rd   r%   r    r    r!   rd     r   zContainer.copyc                 C  sP   |  | j}t| D ]\}}t||| q| j| j7  _|j| j |S r   )	r   r   ro   r)   rp   r   r&   r   update)r   cr.   r/   r    r    r!   __copy__  s   zContainer.__copy__
int | Nonetuple[int, Item] | Nonec                 C  s^   |du s|t | jkrt | j}t|d ddD ]}| j| d }t||s,||f  S qdS )z5Find the immediate previous item before index ``idx``NrI   rH   )ra   r   r   r*   )r   rk   ignorerN   r/   r    r    r!   r      s   

z#Container._previous_item_with_indexc                 C  s   |  ||}|r|d S dS )z{Find the immediate previous item before index ``idx``.
        If ``idx`` is not given, the last item is returned.
        rH   N)r   )r   rk   r   rg   r    r    r!   rY     s   zContainer._previous_item)F)r   r   r   r   )r   r#   )r   r'   )r2   r   r   r   r   )r+   r5   r   r6   r   r   )r+   r   r0   r   r   r   r   rF   )r+   rP   r   r   )T)r+   rU   r   r   rT   r   r   r   )r+   rn   r   r   r   r   )rk   rF   r   r   )r+   rx   r   r   )r+   rx   ry   rx   r   r   r   r   )rk   rF   r+   rx   r   r   r   r   )r+   rx   r   r   )r   r6   r   r   )r+   r   rA   r   r   r   r   r   )rA   r   r   r   r   r   r   r   )r+   rx   r   r   )r+   rx   r0   r   r   r   r+   rx   r   r   r+   rx   r   r   r   r   )r+   rx   r   rx   r0   r   r   r   )rk   r   r   rx   r0   r   r   r   )r   ro   r   r   )r   r   )rk   r   r   r   )rk   r   r   r6   )0__name__
__module____qualname____doc__r"   propertyr&   r(   r0   r2   r:   rE   rO   rQ   r8   rc   rw   rs   r   rb   r   r   r   r   r   r   r   r   r   r   rp   ru   r   r_   r   r   r   r   r   r   r   r   rd   r   r   r   rY   __classcell__r    r    r   r!   r      s`    




 




/
.


9
 








D




r   c                      s   e Zd Zed'ddZd'd	d
Zd(ddZedd Zd)ddZ	d*ddZ
d+ddZd,ddZd-dd Zd.d"d#Zd/ fd%d&Z  ZS )0rS   	containerr   indicestuple[int, ...]r   r   c                 C  sX   t d}|D ]}| j| \}}t|tr%|jjD ]\}}|j||dd qq|  dS )z3Validate out of order tables in the given containerTF)rT   N)r   r   r*   r   r0   r&   r8   rQ   )r   r   temp_containerrN   r3   r   r.   r/   r    r    r!   rT     s   
zOutOfOrderTableProxy.validatec           	      C  s   || _ td| _g | _i | _|D ]B}| j j| \}}t|trR| j| t	| jd }|j
jD ]!\}}| j|| | j|g | |d urQt| |j| q0q| j  d S )NTrI   )
_containerr   _internal_container_tables_tables_mapr   r*   r   r8   ra   r0   r&   rc   r   ro   rp   r+   rQ   )	r   r   r   rN   r3   r   	table_idxr.   r/   r    r    r!   r"   #  s    

zOutOfOrderTableProxy.__init__r   c                 C  s
   | j  S r   )r   r(   r%   r    r    r!   r(   7  r   zOutOfOrderTableProxy.unwrapc                 C  s   | j jS r   )r   r0   r%   r    r    r!   r0   :  s   zOutOfOrderTableProxy.valuer+   rx   r   c                 C  s   || j vr	t|| j | S r   )r   r	   r   r    r    r!   r   >  s   

z OutOfOrderTableProxy.__getitem__r   c                 C  s   || j v r,| j | }t|dkr"| j|  }| | t|dks|| j|d  |< n| jr9| jd }|||< n|| j|< || j|< |d urPt| || d S d S )NrI   r   )	r   ra   r   rt   _remove_tabler   r   ro   rp   )r   r+   r   r   rA   r    r    r!   rp   D  s   






z OutOfOrderTableProxy.__setitem__rA   r   c                 C  sD   | j | t| jjD ]\}}|d |u r| j|  dS qdS )z&Remove table from the parent containerrI   N)r   rs   rJ   r   r   rw   )r   rA   rk   r   r    r    r!   r   V  s   z"OutOfOrderTableProxy._remove_tablec                 C  s~   || j vr	t|t| j | D ]}| j| }||= |s(t| jdkr(| | q| j |= | j|= |d ur=t| | d S d S )NrI   )	r   r	   reversedr   ra   r   r   ro   ru   )r   r+   rN   rA   r    r    r!   ru   ^  s   


z OutOfOrderTableProxy.__delitem__r   c                 C  r   r   r   r%   r    r    r!   r   m  r   zOutOfOrderTableProxy.__iter__rF   c                 C  r   r   r   r%   r    r    r!   r   p  r   zOutOfOrderTableProxy.__len__r   c                   r   r   r   r   r   r    r!   r   s  r   zOutOfOrderTableProxy.setdefault)r   r   r   r   r   r   r   )r+   rx   r   r   )r+   rx   r   r   r   r   )rA   r   r   r   r   r   r   r   )r   r   r   staticmethodrT   r"   r(   r   r0   r   rp   r   ru   r   r   r   r   r    r    r   r!   rS     s    








rS   itr   r   r   c                 C  s>   t | tot | j tpt | tot| dkot | d tS )zqReturns ``True`` if the given item ``it`` is a ``Table`` or ``AoT`` object
    ending with a ``Whitespace``.
    r   rH   )r*   r   r0   rY   r   r   ra   )r   r    r    r!   rZ   x  s   "rZ   )r   r   r   r   )!
__future__r   rd   typingr   r   tomlkit._compatr   tomlkit._typesr   tomlkit._utilsr   tomlkit.exceptionsr   r	   r
   tomlkit.itemsr   r   r   r   r   r   r   r   r   r   rW   object_NOT_SETr   rS   rZ   r    r    r    r!   <module>   s:         |d