o
    hM                     @  s   U d dl mZ d dlmZmZmZ d dlmZmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZ e
rAd d	lmZ d
Zded< dZded< eegZded< eG dd deeef ZdddZdS )    )annotations)IterableIteratorMutableMapping)	dataclassfield)TYPE_CHECKINGFinal)parse)StreamlitAPIException)
ForwardMsg)get_script_run_ctx)SupportsKeysAndGetItemembedz
Final[str]EMBED_QUERY_PARAMembed_optionsEMBED_OPTIONS_QUERY_PARAMzFinal[list[str]]EMBED_QUERY_PARAMS_KEYSc                   @  s   e Zd ZU dZeedZded< d:ddZd;ddZ	d<ddZ
d<ddZd=ddZ	d>d?ddZd@ddZdAd d!ZdBd"d#ZdCd$d%ZdCd&d'ZdDd)d*ZdEd,d-ZdFd0d1ZdGdHd5d6Zd7d8 Zd9S )IQueryParamszA lightweight wrapper of a dict that sends forwardMsgs when state changes.
    It stores str keys with str and List[str] values.
    )default_factoryzdict[str, list[str] | str]_query_paramsreturnIterator[str]c                 C  s    |    tdd | j D S )Nc                 s  s    | ]	}|t vr|V  qd S Nr   .0key r   X/var/www/vscode/kcb/lib/python3.10/site-packages/streamlit/runtime/state/query_params.py	<genexpr>1   s    z'QueryParams.__iter__.<locals>.<genexpr>)_ensure_single_query_api_usediterr   keysselfr   r   r   __iter__.   s   zQueryParams.__iter__r   strc                 C  sn   |    z%|tv rtt|| j| }t|tr't|dkr"W dS |d W S |W S  ty6   tt|w )zRetrieves a value for a given key in query parameters.
        Returns the last item in a list or an empty string if empty.
        If the key is not present, raise KeyError.
        r    )r!   r   KeyErrormissing_key_error_messager   
isinstancelistlenr%   r   valuer   r   r   __getitem__7   s   


zQueryParams.__getitem__r0   str | Iterable[str]Nonec                 C  s    |    | || |   d S r   )r!   _QueryParams__set_item_internal_send_query_param_msgr/   r   r   r   __setitem__L      zQueryParams.__setitem__c                 C  sh   t |trtd| d|tv rtdt |tr+t |ts+dd |D | j|< d S t|| j|< d S )Nz#You cannot set a query params key `z` to a dictionary.zVQuery param embed and embed_options (case-insensitive) cannot be set programmatically.c                 S  s   g | ]}t |qS r   )r'   )r   itemr   r   r   
<listcomp>^   s    z3QueryParams.__set_item_internal.<locals>.<listcomp>)r,   dictr   r   r   r'   r   r/   r   r   r   __set_item_internalQ   s   

zQueryParams.__set_item_internalc                 C  sN   |    z|tv rtt|| j|= |   W d S  ty&   tt|w r   )r!   r   r*   r+   r   r5   )r%   r   r   r   r   __delitem__b   s   zQueryParams.__delitem__r   other\Iterable[tuple[str, str | Iterable[str]]] | SupportsKeysAndGetItem[str, str | Iterable[str]]kwdsc                K  s   |    t|drt|dr| D ]
}| |||  qn|D ]
\}}| || q | D ]
\}}| || q/|   d S )Nr#   r1   )r!   hasattrr#   r4   itemsr5   )r%   r=   r?   r   r0   r   r   r   updatel   s   	zQueryParams.update	list[str]c                 C  s<   |    || jvs|tv rg S | j| }t|tr|S |gS r   )r!   r   r   r,   r-   r/   r   r   r   get_all   s
   
zQueryParams.get_allintc                 C  s   |    tdd | jD S )Nc                 S  s   h | ]}|t vr|qS r   r   r   r   r   r   	<setcomp>   s    z&QueryParams.__len__.<locals>.<setcomp>)r!   r.   r   r$   r   r   r   __len__   s   zQueryParams.__len__c                 C  s   |    t| jS r   )r!   r'   r   r$   r   r   r   __str__   s   
zQueryParams.__str__c                 C  sL   t  }|d u r	d S |   t }tj| jdd|j_|jj|_|| d S )NT)doseq)	r   r!   r   r
   	urlencoder   page_info_changedquery_stringenqueue)r%   ctxmsgr   r   r   r5      s   

z!QueryParams._send_query_param_msgc                 C  s    |    | jdd |   d S NTpreserve_embed)r!   clear_with_no_forward_msgr5   r$   r   r   r   clear   r7   zQueryParams.cleardict[str, str]c                   s        fdd jD S )Nc                   s   i | ]}|t vr| | qS r   r   r   r$   r   r   
<dictcomp>   s
    z'QueryParams.to_dict.<locals>.<dictcomp>)r!   r   r$   r   r$   r   to_dict   s   
zQueryParams.to_dict_dictc                 C  sF   |    | j }| jdd z| | W d S  ty"   || _ w rP   )r!   r   copyrS   rB   r   )r%   rX   	old_valuer   r   r   	from_dict   s   
zQueryParams.from_dictvallist[str] | strc                 C  s   || j |< d S r   )r   )r%   r   r\   r   r   r   set_with_no_forward_msg   s   z#QueryParams.set_with_no_forward_msgFrR   boolc                   s    fdd| j  D | _ d S )Nc                   s"   i | ]\}}|t v r r||qS r   r   )r   r   r0   rQ   r   r   rV      s
    z9QueryParams.clear_with_no_forward_msg.<locals>.<dictcomp>)r   rA   )r%   rR   r   rQ   r   rS      s   
z%QueryParams.clear_with_no_forward_msgc                 C  s   t  }|d u r	d S |  d S r   )r   !mark_production_query_params_used)r%   rN   r   r   r   r!      s   z)QueryParams._ensure_single_query_api_usedN)r   r   r   r'   r   r'   )r   r'   r0   r2   r   r3   )r   r'   r   r3   )r   )r=   r>   r?   r'   )r   r'   r   rC   )r   rE   )r   r'   )r   r3   )r   rU   )rX   r>   )r   r'   r\   r]   r   r3   )F)rR   r_   r   r3   )__name__
__module____qualname____doc__r   r:   r   __annotations__r&   r1   r6   r4   r<   rB   rD   rG   rH   r5   rT   rW   r[   r^   rS   r!   r   r   r   r   r   &   s(   
 

	









	
r   r   r'   r   c                 C  s   d|  dS )Nzst.query_params has no key "z".r   )r   r   r   r   r+      s   r+   Nra   )
__future__r   collections.abcr   r   r   dataclassesr   r   typingr   r	   urllibr
   streamlit.errorsr   streamlit.proto.ForwardMsg_pb2r   7streamlit.runtime.scriptrunner_utils.script_run_contextr   	_typeshedr   r   rf   r   r   r'   r   r+   r   r   r   r   <module>   s&    &