
    &ed                         d dl mZmZ d dlmZmZmZmZ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 G d deeef                               Zd	ed
efdZdS )    )	dataclassfield)DictIterableIteratorListMutableMappingUnion)parseEMBED_QUERY_PARAMS_KEYS)StreamlitAPIException)
ForwardMsgc                   \   e Zd ZU dZ ee          Zeee	e
e         ef         f         ed<   dee         fdZdedefdZdede	eee         f         dd	fd
Zdedd	fdZdede
e         fdZdefdZddZddZdeeef         fdZdede	e
e         ef         dd	fdZddZd Zd	S )QueryParamszA lightweight wrapper of a dict that sends forwardMsgs when state changes.
    It stores str keys with str and List[str] values.
    )default_factory_query_paramsreturnc                     |                                   t          d | j                                        D                       S )Nc              3   ,   K   | ]}|t           v|V  d S Nr   .0keys     Dlib/python3.11/site-packages/streamlit/runtime/state/query_params.py	<genexpr>z'QueryParams.__iter__.<locals>.<genexpr>#   s:       
 
111 1111
 
    )_ensure_single_query_api_usediterr   keysselfs    r   __iter__zQueryParams.__iter__    sQ    **,,, 
 
)..00
 
 
 
 
 	
r   r   c                 L   |                                   	 |t          v rt          t          |                    | j        |         }t          |t                    rt          |          dk    rdS |d         S |S # t          $ r t          t          |                    w xY 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   values      r   __getitem__zQueryParams.__getitem__)   s    
 	**,,,	;---8==>>>&s+E%&& %u::??2 !9$L 	; 	; 	;4S99:::	;s   AA< 2A< :A< <'B#r-   Nc                 Z   t          |t                    rt          d| d          |t          v rt          d          t          |t                    r*t          |t
                    sd |D             | j        |<   n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                 ,    g | ]}t          |          S  )str)r   items     r   
<listcomp>z+QueryParams.__setitem__.<locals>.<listcomp>K   s    &C&C&CTs4yy&C&C&Cr   )r)   dictr   r   r   r2   r   _send_query_param_msgr,   s      r   __setitem__zQueryParams.__setitem__>   s    eT"" 	'McMMM   )))'h  
 eX&& 	1z%/E/E 	1&C&CU&C&C&CDs##&)%jjDs#""$$$$$r   c                     	 |t           v rt          t          |                    | j        |= |                                  d S # t          $ r t          t          |                    w xY wr   )r   r'   r(   r   r6   )r"   r   s     r   __delitem__zQueryParams.__delitem__P   s    	;---8==>>>"3'&&((((( 	; 	; 	;4S99:::	;s   AA 'A,c                     |                                   || j        vs	|t          v rg S | j        |         }t          |t                    r|n|gS r   )r   r   r   r)   r*   r,   s      r   get_allzQueryParams.get_allY   sZ    **,,,d(((C3J,J,JI"3'"5$//<uueW<r   c                 f    |                                   t          d | j        D                       S )Nc                 $    h | ]}|t           v|S r1   r   r   s     r   	<setcomp>z&QueryParams.__len__.<locals>.<setcomp>c   s#    UUUS#=T2T2TS2T2T2Tr   )r   r+   r   r!   s    r   __len__zQueryParams.__len__`   s:    **,,,UUD.UUU
 
 	
r   c                    ddl m}  |            }|d S |                                  t                      }t	          j        | j        d          |j        _        |j        j        |_        |	                    |           d S )Nr   get_script_run_ctxT)doseq)
streamlit.runtime.scriptrunnerrB   r   r   r   	urlencoder   page_info_changedquery_stringenqueue)r"   rB   ctxmsgs       r   r6   z!QueryParams._send_query_param_msgf   s    EEEEEE  "";F**,,,ll-2_d.
 .
 .
* 0=Cr   c                     i }| j                                         D ]\  }}|t          v r|||<   || _         |                                  d S r   )r   itemsr   r6   )r"   new_query_paramsr   r-   s       r   clearzQueryParams.clearv   sb    ,2244 	. 	.JC---(- %-""$$$$$r   c                 R                                         fd j        D             S )Nc                 4    i | ]}|t           v||         S r1   r   )r   r   r"   s     r   
<dictcomp>z'QueryParams.to_dict.<locals>.<dictcomp>   s5     
 
 
111 c111r   )r   r   r!   s   `r   to_dictzQueryParams.to_dict   sC    **,,,
 
 
 
)
 
 
 	
r   valc                     || j         |<   d S r   )r   )r"   r   rS   s      r   set_with_no_forward_msgz#QueryParams.set_with_no_forward_msg   s    "%3r   c                 8    | j                                          d S r   )r   rN   r!   s    r   clear_with_no_forward_msgz%QueryParams.clear_with_no_forward_msg   s      """""r   c                 V    ddl m}  |            }|d S |                                 d S )Nr   rA   )rD   rB   !mark_production_query_params_used)r"   rB   rI   s      r   r   z)QueryParams._ensure_single_query_api_used   sD    EEEEEE  "";F--/////r   )r   N)__name__
__module____qualname____doc__r   r5   r   r   r2   r
   r   __annotations__r   r#   r.   r   r7   r9   r;   intr?   r6   rN   rR   rU   rW   r   r1   r   r   r   r      s          7<eD6Q6Q6QM4U49c>223QQQ
(3- 
 
 
 
;s ;s ; ; ; ;*%s %5hsm1C+D % % % % %$;s ;t ; ; ; ;=3 =49 = = = =
 
 
 
 
    % % % %
c3h 
 
 
 
&3 &U49c>5J &t & & & &# # # #0 0 0 0 0r   r   r   r   c                     d|  dS )Nzst.query_params has no key "z#". Did you forget to initialize it?r1   )r   s    r   r(   r(      s    R#RRRRr   N)dataclassesr   r   typingr   r   r   r   r	   r
   urllibr   streamlit.constantsr   streamlit.errorsr   streamlit.proto.ForwardMsg_pb2r   r2   r   r(   r1   r   r   <module>rg      s   ) ( ( ( ( ( ( ( H H H H H H H H H H H H H H H H       7 7 7 7 7 7 2 2 2 2 2 2 5 5 5 5 5 5 |0 |0 |0 |0 |0.c* |0 |0 |0~S3 S3 S S S S S Sr   