o
    ,&]i$                     @  s  U d dl mZ d dlmZmZmZmZ d dlmZm	Z	 d dl
mZmZmZ d dlmZ d dlmZmZ d dlmZ d dlmZ erGd d	lmZ eee B Zeeef eeeef  B 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%ddZ#d&d!d"Z$d#S )'    )annotations)IterableIteratorMappingMutableMapping)	dataclassfield)TYPE_CHECKINGFinalcast)parse)StreamlitAPIException!StreamlitQueryParamDictValueError)
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dCd7d8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_factorydict[str, list[str] | str]_query_paramsreturnIterator[str]c                 C     |    tdd | jD S )Nc                 s  s     | ]}|  tvr|V  qd S Nlowerr   .0key r$   b/var/www/html/IGF-ODF-V3/venv/lib/python3.10/site-packages/streamlit/runtime/state/query_params.py	<genexpr>4   s    z'QueryParams.__iter__.<locals>.<genexpr>)_ensure_single_query_api_usediterr   selfr$   r$   r%   __iter__1   s   zQueryParams.__iter__r#   strc                 C  sr   |    | tv rtt|z| j| }t|tr)t|dkr$W dS |d W S |W S  ty8   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    r   KeyErrormissing_key_error_messager   
isinstancelistlenr*   r#   valuer$   r$   r%   __getitem__:   s   


zQueryParams.__getitem__r5   str | Iterable[str]Nonec                 C  s    |    | || |   d S r   )r'   _set_item_internal_send_query_param_msgr4   r$   r$   r%   __setitem__O      zQueryParams.__setitem__c                 C  s   t | j|| d S r   )_set_item_in_dictr   r4   r$   r$   r%   r9   T   s   zQueryParams._set_item_internalc                 C  sR   |    | tv rtt|z| j|= |   W d S  ty(   tt|w r   )r'   r    r   r/   r0   r   r:   )r*   r#   r$   r$   r%   __delitem__W   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#td|}| D ]
}| |||  qn|D ]
\}}| || q%| D ]
\}}| || q4|   d S )Nkeysr6   0SupportsKeysAndGetItem[str, str | Iterable[str]])r'   hasattrr   rB   r9   itemsr:   )r*   r?   rA   r#   r5   r$   r$   r%   updatea   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   r1   r2   r4   r$   r$   r%   get_allv   s
   
zQueryParams.get_allintc                 C  r   )Nc                 S  s   h | ]
}|  tvr|qS r$   r   r!   r$   r$   r%   	<setcomp>   s
    z&QueryParams.__len__.<locals>.<setcomp>)r'   r3   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%   r:      s   

z!QueryParams._send_query_param_msgc                 C  s    |    | jdd |   d S NTpreserve_embed)r'   clear_with_no_forward_msgr:   r)   r$   r$   r%   clear   r<   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 rU   )r'   r   copyrX   rF   r   )r*   r]   	old_valuer$   r$   r%   	from_dict   s   
zQueryParams.from_dictvallist[str] | strc                 C  s   || j |< d S r   )r   )r*   r#   ra   r$   r$   r%   set_with_no_forward_msg   s   z#QueryParams.set_with_no_forward_msgFrW   boolc                   s    fdd| j  D | _ d S )Nc                   s&   i | ]\}}|  tv r r||qS r$   r   )r"   r#   r5   rV   r$   r%   r[      s
    z9QueryParams.clear_with_no_forward_msg.<locals>.<dictcomp>)r   rE   )r*   rW   r$   rV   r%   rX      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*   rS   r$   r$   r%   r'      s   z)QueryParams._ensure_single_query_api_usedN)r   r   r#   r,   r   r,   )r#   r,   r5   r7   r   r8   )r#   r,   r   r8   )r$   )r?   r@   rA   r,   r   r8   )r#   r,   r   rG   )r   rI   )r   r,   )r   r8   )r   rZ   )r]   r@   r   r8   )r#   r,   ra   rb   r   r8   )F)rW   rd   r   r8   )__name__
__module____qualname____doc__r   dictr   __annotations__r+   r6   r;   r9   r>   rF   rH   rK   rL   r:   rY   r\   r`   rc   rX   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%   r0      s   r0   target_dictr   r5   r7   r8   c                 C  s`   t |tr	t|| tv rtdt |tr(t |ts(dd |D | |< dS t|| |< dS )zSet an item in a dictionary.zVQuery param embed and embed_options (case-insensitive) cannot be set programmatically.c                 S     g | ]}t |qS r$   r,   r"   itemr$   r$   r%   
<listcomp>       z%_set_item_in_dict.<locals>.<listcomp>N)r1   rk   r   r    r   r   r   r,   )rm   r#   r5   r$   r$   r%   r=      s   
r=   query_paramsr@   c                 C  s   i }t | dr#t | dr#td| } |  D ]}| | }t||| qnG| D ]D\}}||v rct|tr6t||| }t|tsB|g}t|trWt|t	sW|
dd |D  n|t	| |||< q%t||| q%tj|ddS )z5Convert query params into a URL-encoded query string.rB   r6   rC   c                 S  rn   r$   ro   rp   r$   r$   r%   rr      rs   z(process_query_params.<locals>.<listcomp>TrM   )rD   r   rB   r=   r1   rk   r   r2   r   r,   extendappendr   rO   )rt   processed_paramsr#   r5   current_valr$   r$   r%   process_query_params   s,   


ry   Nrf   )rm   r   r#   r,   r5   r7   r   r8   )rt   r@   r   r,   )%
__future__r   collections.abcr   r   r   r   dataclassesr   r   typingr	   r
   r   urllibr   streamlit.errorsr   r   streamlit.proto.ForwardMsg_pb2r   7streamlit.runtime.scriptrunner_utils.script_run_contextr   	_typeshedr   r,   QueryParamValuetupleQueryParamsInputr   rl   r   r   r   r0   r=   ry   r$   r$   r$   r%   <module>   s.    

