o
    Yh-                     @  sl   d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	m
Z
 ddlmZ G dd dZdddZdS )z6Class to store a key-value pair for the config system.    )annotationsN)AnyCallable)to_snake_caserepr_c                   @  s   e Zd ZdZdZdZddddddddeddfd-ddZd.ddZd/d d!Z	e
d0d#d$Zd1d2d'd(Zd3d)d*Ze
d.d+d,ZdS )4ConfigOptiona:  Stores a Streamlit configuration option.

    A configuration option, like 'browser.serverPort', which indicates which port
    to use when connecting to the proxy. There are two ways to create a
    ConfigOption:

    Simple ConfigOptions are created as follows:

        ConfigOption('browser.serverPort',
            description = 'Connect to the proxy at this port.',
            default_val = 8501)

    More complex config options resolve their values at runtime as follows:

        @ConfigOption('browser.serverPort')
        def _proxy_port():
            """Connect to the proxy at this port.

            Defaults to 8501.
            """
            return 8501

    NOTE: For complex config options, the function is called each time the
    option.value is evaluated!

    Attributes
    ----------
    key : str
        The fully qualified section.name
    value : any
        The value for this option. If this is a complex config option then
        the callback is called EACH TIME value is evaluated.
    section : str
        The section of this option. Example: 'global'.
    name : str
        See __init__.
    description : str
        See __init__.
    where_defined : str
        Indicates which file set this config option.
        ConfigOption.DEFAULT_DEFINITION means this file.
    is_default: bool
        True if the config value is equal to its default value.
    visibility : {"visible", "hidden"}
        See __init__.
    scriptable : bool
        See __init__.
    deprecated: bool
        See __init__.
    deprecation_text : str or None
        See __init__.
    expiration_date : str or None
        See __init__.
    replaced_by : str or None
        See __init__.
    sensitive : bool
        See __init__.
    env_var: str
        The name of the environment variable that can be used to set the option.
    z	<default>z<streamlit>NvisibleFkeystrdescription
str | Nonedefault_val
Any | None
visibility
scriptablebool
deprecateddeprecation_textexpiration_datereplaced_bytype_type	sensitivemultiplereturnNonec                 C  s   || _ d}t|| j }|du rtd| j  d|d|d| _| _|| _|| _|| _	|| _
|| _|	| _d| _d| _tj| _|
| _|| _|| _| jr\d| _|du r\d| j d	}| jrt|setd
|sktd|| _t|| _| | dS )a  Create a ConfigOption with the given name.

        Parameters
        ----------
        key : str
            Should be of the form "section.optionName"
            Examples: server.name, deprecation.v1_0_featureName
        description : str
            Like a comment for the config option.
        default_val : any
            The value for this config option.
        visibility : {"visible", "hidden"}
            Whether this option should be shown to users.
        scriptable : bool
            Whether this config option can be set within a user script.
        deprecated: bool
            Whether this config option is deprecated.
        deprecation_text : str or None
            Required if deprecated == True. Set this to a string explaining
            what to use instead.
        expiration_date : str or None
            Required if deprecated == True. set this to the date at which it
            will no longer be accepted. Format: 'YYYY-MM-DD'.
        replaced_by : str or None
            If this is option has been deprecated in favor or another option,
            set this to the path to the new option. Example:
            'server.runOnSave'. If this is set, the 'deprecated' option
            will automatically be set to True, and deprecation_text will have a
            meaningful default (unless you override it).
        type_ : one of str, int, float or bool
            Useful to cast the config params sent by cmd option parameter.
        sensitive: bool
            Sensitive configuration options cannot be set by CLI parameter.
        multiple: bool
            Whether this config option can have multiple values.
        zU(?P<section>\_?[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)*)\.(?P<name>[a-z][a-zA-Z0-9]*)$NzKey "z" has invalid format.sectionnameTzReplaced by .z1expiration_date is required for deprecated items.z2deprecation_text is required for deprecated items.)r
   rematch
ValueErrorgroupr   r   r   r   r   r   r   r   
is_default_get_val_funcr   DEFAULT_DEFINITIONwhere_definedr   r   r   r   textwrapdedentr   	set_value)selfr
   r   r   r   r   r   r   r   r   r   r   r   
key_formatr!    r-   X/var/www/html/Persson_Maskin/env/lib/python3.10/site-packages/streamlit/config_option.py__init__b   s>   4zConfigOption.__init__c                 C  s   t | S Nr   r+   r-   r-   r.   __repr__   s   zConfigOption.__repr__get_val_funcCallable[[], Any]c                 C  s$   |j du r	td|j | _|| _| S )a  Assign a function to compute the value for this option.

        This method is called when ConfigOption is used as a decorator.

        Parameters
        ----------
        get_val_func : function
            A function which will be called to get the value of this parameter.
            We will use its docString as the description.

        Returns
        -------
        ConfigOption
            Returns self, which makes testing easier. See config_test.py.

        NzAComplex config options require doc strings for their description.)__doc__RuntimeErrorr   r%   )r+   r3   r-   r-   r.   __call__   s   
zConfigOption.__call__r   c                 C  s   | j du rdS |   S )z$Get the value of this config option.N)r%   r1   r-   r-   r.   value   s   
zConfigOption.valuer8   r'   c                   s    fdd| _ |du rtj| _n|| _ | jk| _| jrh| jtjkrj|  rEddlm	} |t
td| j d| j d| j d	 dS ddlm	} |t
td
| j d| j d| j d| j d		 dS dS dS )zSet the value of this option.

        Parameters
        ----------
        value
            The new value for this parameter.
        where_defined : str
            New value to remember where this parameter was set.

        c                     s    S r0   r-   r-   r8   r-   r.   <lambda>   s    z(ConfigOption.set_value.<locals>.<lambda>Nr   )
get_loggeru   
                    ════════════════════════════════════════════════
                    z. IS NO LONGER SUPPORTED.

                    z$

                    Please update u   .
                    ════════════════════════════════════════════════
                    u   s
                    ════════════════════════════════════════════════
                    z$ IS DEPRECATED.
                    z>

                    This option will be removed on or after z%.

                    Please update )r%   r   r&   r'   r   r$   r   
is_expiredstreamlit.loggerr;   __name__errorr(   r)   r
   r   warningr   )r+   r8   r'   r;   r-   r9   r.   r*      sD   
zConfigOption.set_valuec                 C  s&   | j sdS t| j}tj }||kS )z/Returns true if expiration_date is in the past.F)r   _parse_yyyymmdd_strr   datetimenow)r+   r   rC   r-   r-   r.   r<   *  s
   

zConfigOption.is_expiredc                 C  s    | j dd}dt|  S )zLGet the name of the environment variable that can be used to set the option.r   _
STREAMLIT_)r
   replacer   upper)r+   r   r-   r-   r.   env_var3  s   zConfigOption.env_var)r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   )r3   r4   r   r   )r   r   r0   )r8   r   r'   r   r   r   )r   r   )r>   
__module____qualname__r5   r&   STREAMLIT_DEFINITIONr   r/   r2   r7   propertyr8   r*   r<   rH   r-   r-   r-   r.   r      s0    ?
l

9	r   date_strr   r   datetime.datetimec                 C  s*   dd |  ddD \}}}t|||S )Nc                 s  s    | ]}t |V  qd S r0   )int).0tokenr-   r-   r.   	<genexpr>;  s    z&_parse_yyyymmdd_str.<locals>.<genexpr>-   )splitrB   )rM   yearmonthdayr-   r-   r.   rA   :  s   rA   )rM   r   r   rN   )r5   
__future__r   rB   r    r(   typingr   r   streamlit.string_utilr   streamlit.utilr   r   rA   r-   r-   r-   r.   <module>   s      