o
    Zh                     @  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mZ d dlmZ d dlmZ d dlmZ d dlmZ e
rCd 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cast)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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_factoryz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r   .0key r    e/var/www/html/Persson_Maskin/env/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   selfr    r    r!   __iter__.   s   zQueryParams.__iter__r   strc                 C  sn   |    |tv rtt|z| 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__5   s   


zQueryParams.__getitem__r1   str | Iterable[str]Nonec                 C  s    |    | || |   d S r   )r#   _QueryParams__set_item_internal_send_query_param_msgr0   r    r    r!   __setitem__J      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   r0   r    r    r!   __set_item_internalO   s   

zQueryParams.__set_item_internalc                 C  sN   |    |tv rtt|z| j|= |   W d S  ty&   tt|w r   )r#   r   r+   r,   r   r6   )r&   r   r    r    r!   __delitem__`   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keysr2   z0SupportsKeysAndGetItem[str, str | Iterable[str]])r#   hasattrr
   rA   r5   itemsr6   )r&   r>   r@   r   r1   r    r    r!   updatej   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.   r0   r    r    r!   get_all   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#   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!   r6      s   

z!QueryParams._send_query_param_msgc                 C  s    |    | jdd |   d S NTpreserve_embed)r#   clear_with_no_forward_msgr6   r%   r    r    r!   clear   r8   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 rR   )r#   r   copyrU   rD   r   )r&   rZ   	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_msgFrT   boolc                   s    fdd| j  D | _ d S )Nc                   s"   i | ]\}}|t v r r||qS r    r   )r   r   r1   rS   r    r!   rX      s
    z9QueryParams.clear_with_no_forward_msg.<locals>.<dictcomp>)r   rC   )r&   rT   r    rS   r!   rU      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&   rP   r    r    r!   r#      s   z)QueryParams._ensure_single_query_api_usedN)r   r   r   r(   r   r(   )r   r(   r1   r3   r   r4   )r   r(   r   r4   )r    )r>   r?   r@   r(   r   r4   )r   r(   r   rE   )r   rG   )r   r(   )r   r4   )r   rW   )rZ   r?   r   r4   )r   r(   r^   r_   r   r4   )F)rT   ra   r   r4   )__name__
__module____qualname____doc__r   r;   r   __annotations__r'   r2   r7   r5   r=   rD   rF   rI   rJ   r6   rV   rY   r]   r`   rU   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,   Nrc   )
__future__r   collections.abcr   r   r   dataclassesr   r   typingr   r	   r
   urllibr   streamlit.errorsr   streamlit.proto.ForwardMsg_pb2r   7streamlit.runtime.scriptrunner_utils.script_run_contextr   	_typeshedr   r   rh   r   r   r(   r   r,   r    r    r    r!   <module>   s&    %