o
    Y~#g!n                     @  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dvdwddZedxd
dZdyddZedyddZdzddZ	d{d|ddZ
d}ddZd~d!d"Zdd$d%Zdd&d'Zdd)d*Zdd,d-Zdd0d1Zdd2d3Zdd4d5Zdd6d7Zdd9d:Zd{dd?d@Zd{dAdBZd{ddCdDZd{dEdFZd~dGdHZddJdKZddMdNZddOdPZddQdRZd fdTdUZddWdXZ ddZd[Z!dd\d]Z"dd^d_Z#ddbdcZ$ddde Z%dfdg Z&dhdi Z'djdk Z(ddldmZ)ddndoZ*de+ffddrdsZ,de+ffddtdu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    v/var/www/static.ux5.de/https/Moving-Object-Detection-with-OpenCV/env/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 )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 r   )r   r+   valuer*   r   r   )r   dr.   r/   r    r    r!   r0   A   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   U   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!   add_   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_keyt   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Key | str | Nonec                 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| jd |d ks| s|d  rH| r#| js#|  }nt| j}|t| jk r8| ||| n|  || t!| | j|  | 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   rG   rH   )r   z!Redefinition of an existing table)(r*   r   r   r   _itemis_multirD   r   r   r=   r+   _previous_itemr   ends_with_whitespacer   invalidate_display_namer   triviaindentrK   r   tupler   is_aot_element_replacer8   is_aotr:   r   rN   len
_insert_at_raw_appendOutOfOrderTableProxycopydeepcopyr0   r&   r
   trail)r   r+   r   prevprev_wscurrent_idxcurrent_body_elementrA   idxr.   r/   r@   is_tablerL   previous_itemr    r    r!   r8      s   


















	zContainer.appendc                 C  s   || j v r4| j | }t|ts|f}| j|d  d }|d ur(t|ts(t||t| jf | j |< nt| j| j |< | j||f | rN| j	| |d ur[t
| |j|j | S rF   )r   r*   rX   r   r   r   r\   r8   rh   r   dict__setitem__r+   r0   )r   r+   r   re   rA   r    r    r!   r^   !  s   


zContainer._raw_appendrg   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   rH   )r   r   getr	   r   r*   rX   listremover\   poprj   __delitem__r+   )r   rg   r+   indexr    r    r!   
_remove_at8  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   ro   r	   rX   r   r   rj   rp   r+   )r   r+   rg   rM   r    r    r!   rn   K  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()rH   rP   )r7   r	   r*   r   r   rQ   r   rX   maxr   rV   rb   r)   r8   insertrj   rk   r+   r0   )
r   r+   rt   r   rg   current_itemr.   r/   new_indicesv_r    r    r!   _insert_after^  s>   




zContainer._insert_afterc           
      C  sd  |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}	|	|f | j|< n|| j|< | j|||f t| |j|j | S )NrH   zUnable to insert at position r   rP   )r\   r   r7   r*   r   r   rQ   r   rT   r   r   rV   rb   r   r)   rX   r8   rv   rj   rk   r+   r0   )
r   rg   r+   r   ri   r.   r/   rx   ry   re   r    r    r!   r]     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.NrH   )	r*   r   r   r   rl   r	   rX   r_   r   )r   r+   rg   r    r    r!   r     s   


zContainer.itemc                 C  s   | j r
| j d d S dS )zGet the last item.rG   rH   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_stringr@   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]]rP   r   r   )display_namer   r:   anyr0   r&   rK   rY   rV   rb   r\   rW   r   
comment_wscommentr*   r   r~   r   r   r   )r   r+   r@   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   r@   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   )rV   rW   r   r   r   rb   r0   r&   r*   r   r:   rK   r~   r   r   r   )	r   r@   r   r   r   r   r   r.   r/   r    r    r!   r   &  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   rV   rW   r   r<   r   r   rb   )r   r+   r   r   r   r    r    r!   r   F  s&   

zContainer._render_simple_itemc                 C  
   t | S r   rj   __len__r%   r    r    r!   r   X     
zContainer.__len__Iterator[str]c                 C     t t| S r   iterrj   keysr%   r    r    r!   __iter__[     zContainer.__iter__Item | Containerc                 C  sb   t |ts	t|}| j|}|d u rt|t |tr!t| |S | j| d }|	 r/|j
S |S NrH   )r*   r   r   r   rl   r	   rX   r_   r   
is_booleanr0   )r   r+   rg   r   r    r    r!   __getitem___  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>u  s    z'Container.__setitem__.<locals>.<lambda>)nextfilterr   rZ   r8   )r   r+   r0   old_keyr    r   r!   rk   s  s   zContainer.__setitem__c                 C  s   |  | d S r   )rn   r   r+   r    r    r!   rp   z  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   rl   r	   _replace_at)r   r+   r   r0   rg   r    r    r!   rZ     s   
zContainer._replaceint | tuple[int]c                 C  s(  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|}	||k ot| j|d  d t}
||k r|
s|	s|d td t| |j|j d S d S )NrH   r   rG   rU   rP   )rQ   r*   rX   r   r   r   r   r   r+   r   r   rj   rp   rn   ranger\   r]   r8   r   rV   rW   r   r   rb   r,   rU   _previous_item_with_indexrT   rk   r0   )r   rg   r   r0   rM   r.   r/   r?   r3   has_wsnext_wsr    r    r!   r     sV   






 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__otherrj   c                 C  s   t |tstS | j|kS r   )r*   rj   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   rH   r      )r   r   r   r   rj   rk   r+   r0   )r   stater+   r   r    r    r!   __setstate__  s   



zContainer.__setstate__c                 C  s
   t  | S r   )r`   r%   r    r    r!   r`     r   zContainer.copyc                 C  sP   |  | j}t| D ]\}}t||| q| j| j7  _|j| j |S r   )	r   r   rj   r)   rk   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``NrH   rG   )r\   r   r   r*   )r   rg   ignorerM   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.
        rG   N)r   )r   rg   r   rc   r    r    r!   rS     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   rE   )r+   rO   r   r   r   r   )r+   r   r   r   r   r   )rg   rE   r   r   )r+   rs   r   r   )r+   rs   rt   rs   r   r   r   r   )rg   rE   r+   rs   r   r   r   r   )r+   rs   r   r   )r   r6   r   r|   )r+   r   r@   r   r   r   r   r|   )r@   r   r   r   r   r|   r   r   )r+   rs   r   r   )r+   rs   r0   r   r   r   r+   rs   r   r   r+   rs   r   r   r   r   )r+   rs   r   rs   r0   r   r   r   )rg   r   r   rs   r0   r   r   r   )r   rj   r   r   )r   r   )rg   r   r   r   )rg   r   r   r6   )/__name__
__module____qualname____doc__r"   propertyr&   r(   r0   r2   r9   rD   rN   r8   r^   rr   rn   rz   r]   r   r{   r   r~   r   r   r   r   r   r   rk   rp   r   rZ   r   r   r   r   r   r   r   r   r`   r   r   r   rS   __classcell__r    r    r   r!   r      s\    



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


>




r   c                      sz   e Z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 ).r_   	containerr   indices
tuple[int]r   r   c           	      C  s   || _ td| _g | _i | _|D ]=}| j j| \}}t|trM| j| t	| jd }|j
jD ]\}}| j|| || j|< |d urLt| |j| q0qd S )NTrH   )
_containerr   _internal_container_tables_tables_mapr   r*   r   r8   r\   r0   r&   rj   rk   r+   )	r   r   r   rM   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(      r   zOutOfOrderTableProxy.unwrapc                 C  s   | j jS r   )r   r0   r%   r    r    r!   r0   #  s   zOutOfOrderTableProxy.valuer+   rs   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  sp   || j v r| j| j |  }|||< n| jr| jd }|||< n|| j|< || j|< |d ur6t| || d S d S )Nr   )r   r   r   r   rj   rk   )r   r+   r   r@   r    r    r!   rk   -  s   





z OutOfOrderTableProxy.__setitem__r@   r   c                 C  sD   | j | t| jjD ]\}}|d |u r| j|  dS qdS )z&Remove table from the parent containerrH   N)r   rn   rI   r   r   rr   )r   r@   rg   r   r    r    r!   _remove_table;  s   z"OutOfOrderTableProxy._remove_tablec                 C  sr   || j v r#| j| j |  }||= |st| jdkr| | | j |= nt|| j|= |d ur7t| | d S d S r   )r   r   r\   r   r	   r   rj   rp   )r   r+   r@   r    r    r!   rp   C  s   


z OutOfOrderTableProxy.__delitem__r   c                 C  r   r   r   r%   r    r    r!   r   Q  r   zOutOfOrderTableProxy.__iter__rE   c                 C  r   r   r   r%   r    r    r!   r   T  r   zOutOfOrderTableProxy.__len__r   c                   r   r   r   r   r   r    r!   r   W  r   zOutOfOrderTableProxy.setdefault)r   r   r   r   r   r   r   )r+   rs   r   r   )r+   rs   r   r   r   r   )r@   r   r   r   r   r   r   r   )r   r   r   r"   r(   r   r0   r   rk   r   rp   r   r   r   r   r    r    r   r!   r_     s    








r_   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   rG   )r*   r   r0   rS   r   r   r\   )r   r    r    r!   rT   \  s   "rT   )r   r   r   r   )!
__future__r   r`   typingr   r   tomlkit._compatr   tomlkit._typesr   tomlkit._utilsr   tomlkit.exceptionsr   r	   r
   tomlkit.itemsr   r   r   r   r   r   r   r   r   r   rQ   object_NOT_SETr   r_   rT   r    r    r    r!   <module>   s:         uO