o
    8Di{                     @  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!   J/var/www/Datamplify/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/   r0   r!   r!   r"   r1   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   r1   r3   r   r'   )r    r3   _r0   tr!   r!   r"   r3   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   r1   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   r9   sep)
r    r,   r1   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/   r0   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"   rR      s   
z&Container._validate_out_of_order_tableTKey | str | NonerU   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| j| d }t |tsd|jjv sd|jj |j_| |||S | jd d }t |tst|sd|jj'v s|j j'd7  _'|  || | S )z<Similar to :meth:`add` but both key and value must be given.N
r   rI   rJ   )r   z!Redefinition of an existing table)(r+   r   r   r   _itemis_multirF   r   r   r?   r,   _previous_itemr   ends_with_whitespacer   invalidate_display_namer   triviaindentrM   r   rS   r   is_aot_element_replacer9   is_aotr<   r   rP   len
_insert_at_raw_appendrR   copydeepcopyr1   r'   r
   trail)r    r,   r   rU   prevprev_wscurrent_idxcurrent_body_elementrC   idxr/   r0   rB   is_tablerN   
after_itemprevious_itemr!   r!   r"   r9      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 rH   )r   r+   rS   r   r   r   rb   r9   rm   r   dict__setitem__r,   r1   )r    r,   r   rj   rC   r!   r!   r"   rd   7  s    


zContainer._raw_appendrl   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   rJ   )r   r   getr	   r   r+   rS   listremoverb   poprq   __delitem__r,   )r    rl   r,   indexr!   r!   r"   
_remove_atL  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   rv   r	   rS   r   r   rq   rw   r,   )r    r,   rl   rO   r!   r!   r"   ru   _  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()rJ   rW   )r8   r	   r+   r   r   rX   r   rS   maxr   r]   rg   r*   r9   insertrq   rr   r,   r1   )
r    r,   r{   r   rl   current_itemr/   r0   new_indicesv_r!   r!   r"   _insert_afterr  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 )NrJ   zUnable to insert at position r   rW   )rb   r   r8   r+   r   r   rX   r   r[   r   r   r]   rg   r   r*   rS   r9   r}   rq   rr   r,   r1   )
r    rl   r,   r   ro   r/   r0   r   r   rj   r!   r!   r"   rc     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.NrJ   )	r+   r   r   r   rs   r	   rS   rT   r   )r    r,   rl   r!   r!   r"   r     s   


zContainer.itemc                 C  s   | j r
| j d d S dS )zGet the last item.rI   rJ   Nr%   r&   r!   r!   r"   	last_item  s   zContainer.last_itemstrc                 C  s   d}| j D ]c\}}|dur`t|tr2|dr)|dds)d|jjvr)|d7 }|| ||7 }qt|trW|drN|ddsNd|jjvrN|d7 }|| 	||7 }q|| 
||7 }q|| 
||7 }q|S )zRender as TOML string. N rW   )r   r+   r   stripendswithr]   r^   _render_tabler   _render_aot_render_simple_item)r    sr/   r0   r!   r!   r"   	as_string  s,   

zContainer.as_stringrB   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r|d	r|d	dsd|
jjvr|d7 }|
 r|	 r| s|| |	|
7 }qz|| j|	|
|d
7 }qz|| j|	|
|d
7 }qzt|
tr|d	r|d	dsd|
jjvr|d7 }|| 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   .0r4   r0   r!   r!   r"   	<genexpr>  s
    
z*Container._render_table.<locals>.<genexpr>)[]z[[z]]rW   r   r   r   )display_namer   r<   anyr1   r'   rM   r_   r]   rg   rb   r^   r   
comment_wscommentr+   r   r   r   r   r   r   r   )r    r,   rB   r   cur_keyopen_closenewline_in_table_triviar/   r0   r!   r!   r"   r     s|   
 




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   rB   r!   r!   r"   r   F  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   rg   r1   r'   r+   r   r<   rM   r   r   r   r   )	r    rB   r   r   r   r   r   r/   r0   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   r]   r^   r   r>   r   r   rg   )r    r,   r   r   r   r!   r!   r"   r   r  s&   

zContainer._render_simple_itemc                 C  
   t | S r   rq   __len__r&   r!   r!   r"   r        
zContainer.__len__Iterator[str]c                 C     t t| S r   iterrq   keysr&   r!   r!   r"   __iter__     zContainer.__iter__Item | Containerc                 C  s&   |  |}t|tr| r|jS |S r   )r   r+   r   
is_booleanr1   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>  s    z'Container.__setitem__.<locals>.<lambda>)nextfilterr   r`   r9   )r    r,   r1   old_keyr!   r   r"   rr     s   zContainer.__setitem__c                 C  s   |  | d S r   )ru   r    r,   r!   r!   r"   rw     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   rs   r	   _replace_at)r    r,   r   r1   rl   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 )NrJ   r   rI   r\   rW   )rX   r+   rS   r   r   r   r   r   r,   r   r   rq   rw   ru   rangerb   rc   r9   r   r]   r^   r   r   rg   r-   r\   _previous_item_with_indexr[   r1   r'   rr   )r    rl   r   r1   rO   r/   r0   rA   r4   has_wsreplace_has_wsnext_wsr!   r!   r"   r     s`   







"zContainer._replace_atc                 C  
   t | jS r   )r   r1   r&   r!   r!   r"   __str__  r   zContainer.__str__c                 C  r   r   )reprr1   r&   r!   r!   r"   __repr__  r   zContainer.__repr__otherrq   c                 C  s   t |tstS | j|kS r   )r+   rq   NotImplementedr1   )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   rJ   r      )r   r   r   r   rq   rr   r,   r1   )r    stater,   r   r!   r!   r"   __setstate__  s   



zContainer.__setstate__c                 C  s
   t  | S r   )re   r&   r!   r!   r"   re     r   zContainer.copyc                 C  sP   |  | j}t| D ]\}}t||| q| j| j7  _|j| j |S r   )	r   r   rq   r*   rr   r   r'   r   update)r    cr/   r0   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``NrJ   rI   )rb   r   r   r+   )r    rl   ignorerO   r0   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.
        rI   N)r   )r    rl   r   rh   r!   r!   r"   rZ   *  s   zContainer._previous_item)F)r   r   r   r   )r   r$   )r   r(   )r3   r   r   r   r   )r,   r6   r   r7   r   r   )r,   r   r1   r   r   r   r   rG   )r,   rQ   r   r   )T)r,   rV   r   r   rU   r   r   r   )r,   rp   r   r   r   r   )rl   rG   r   r   )r,   rz   r   r   )r,   rz   r{   rz   r   r   r   r   )rl   rG   r,   rz   r   r   r   r   )r,   rz   r   r   )r   r7   r   r   )r,   r   rB   r   r   r   r   r   )rB   r   r   r   r   r   r   r   )r,   rz   r   r   r,   rz   r1   r   r   r   r,   rz   r   r   r,   rz   r   r   r   r   )r,   rz   r   rz   r1   r   r   r   )rl   r   r   rz   r1   r   r   r   )r   rq   r   r   )r   r   )rl   r   r   r   )rl   r   r   r7   )0__name__
__module____qualname____doc__r#   propertyr'   r)   r1   r3   r;   rF   rP   rR   r9   rd   ry   ru   r   rc   r   r   r   r   r   r   r   r   r   r   rr   rw   r   r`   r   r   r   r   r   r   r   r   re   r   r   r   rZ   __classcell__r!   r!   r   r"   r      s`    




 




/
.


E
 








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 )0rT   	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)rU   N)r   r   r+   r   r1   r'   r9   rR   )r   r   temp_containerrO   r4   r   r/   r0   r!   r!   r"   rU   3  s   
zOutOfOrderTableProxy.validatec           	      C  s   || _ td| _g | _i | _|D ]H}| j j| \}}t|trX| j| t	| jd }|j
jD ]'\}}| j|| | j|g }||vrK|| |d urWt| |j| q0q| j  d S )NTrJ   )
_containerr   _internal_container_tables_tables_mapr   r+   r   r9   rb   r1   r'   rd   r   rq   rr   r,   rR   )	r    r   r   rO   r4   r   	table_idxr/   r0   r!   r!   r"   r#   A  s$   


zOutOfOrderTableProxy.__init__r   c                 C  s
   | j  S r   )r   r)   r&   r!   r!   r"   r)   W  r   zOutOfOrderTableProxy.unwrapc                 C  s   | j jS r   )r   r1   r&   r!   r!   r"   r1   Z  s   zOutOfOrderTableProxy.valuer,   rz   r   c                 C  s   || j vr	t|| j | S r   )r   r	   r   r!   r!   r"   r   ^  s   

z OutOfOrderTableProxy.__getitem__r1   c                   sJ  ddl m dfdd || jv r\| j| }t|dkr/| j|  }| | t|dks| j|d	  | } |rR |sR| j|d	  |= | j|= || |< d S || j|d	  |< n5| jr |s| jD ]}t fd
d|  D r{|||<  nqf|| jd	 |< n|| jd	 |< n|| j|< || j	|< |d urt
| || d S d S )NrJ   r   itr   r   r   c                   s   t  | ttfS r   )r+   r   r   r   r   r!   r"   _is_table_or_aotg  s   z:OutOfOrderTableProxy.__setitem__.<locals>._is_table_or_aotr   c                 3  s    | ]
\}} | V  qd S r   r!   r   )r   r!   r"   r   |  s    z3OutOfOrderTableProxy.__setitem__.<locals>.<genexpr>r   r   r   r   )r*   r   r   rb   r   rv   _remove_tabler   r   r   rq   rr   )r    r,   r1   r   rB   	old_valuer!   )r   r   r"   rr   d  s<   





z OutOfOrderTableProxy.__setitem__rB   r   c                 C  sD   | j | t| jjD ]\}}|d |u r| j|  dS qdS )z&Remove table from the parent containerrJ   N)r   ru   rK   r   r   ry   )r    rB   rl   r   r!   r!   r"   r     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 )NrJ   )	r   r	   reversedr   rb   r   r   rq   rw   )r    r,   rO   rB   r!   r!   r"   rw     s   


z OutOfOrderTableProxy.__delitem__r   c                 C  r   r   r   r&   r!   r!   r"   r     r   zOutOfOrderTableProxy.__iter__rG   c                 C  r   r   r   r&   r!   r!   r"   r     r   zOutOfOrderTableProxy.__len__r   c                   r   r   r   r   r   r!   r"   r     r   zOutOfOrderTableProxy.setdefault)r   r   r   r   r   r   r   )r,   rz   r   r   r   )rB   r   r   r   r   r   r   r   )r   r   r   staticmethodrU   r#   r)   r   r1   r   rr   r   rw   r   r   r   r   r!   r!   r   r"   rT   2  s    





&


rT   r   r   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   rI   )r+   r   r1   rZ   r   r   rb   r   r!   r!   r"   r[     s   "r[   r   )!
__future__r   re   typingr   r   tomlkit._compatr   tomlkit._typesr   tomlkit._utilsr   tomlkit.exceptionsr   r	   r
   tomlkit.itemsr   r   r   r   r   r   r   r   r   r   rX   object_NOT_SETr   rT   r[   r!   r!   r!   r"   <module>   s<          z