class_docstr: 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.
docstr: Set 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.
docstr_tok: ["Set","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","."]
code: def set_value(
      self, value: Any, where_defined: Optional[str] = None
  ) -> None:
      """Set 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.
  
      """
      self._get_val_func = lambda: value
  
      if where_defined is None:
          self.where_defined = ConfigOption.DEFAULT_DEFINITION
      else:
          self.where_defined = where_defined
  
      self.is_default = value == self.default_val
  
      if (
          self.deprecated
          and self.where_defined != ConfigOption.DEFAULT_DEFINITION
      ):
          details = {
              "key": self.key,
              "file": self.where_defined,
              "explanation": self.deprecation_text,
              "date": self.expiration_date,
          }
  
          if self.is_expired():
              raise DeprecationError(
                  textwrap.dedent(
                      """
                      ════════════════════════════════════════════════
                      %(key)s IS NO LONGER SUPPORTED.
  
                      %(explanation)s
  
                      Please update %(file)s.
                      ════════════════════════════════════════════════
                      """
                  )
                  % details
              )
          else:
              # Import here to avoid circular imports
              from streamlit.logger import get_logger
  
              LOGGER = get_logger(__name__)
              LOGGER.warning(
                  textwrap.dedent(
                      """
                      ════════════════════════════════════════════════
                      %(key)s IS DEPRECATED.
                      %(explanation)s
  
                      This option will be removed on or after %(date)s.
  
                      Please update %(file)s.
                      ════════════════════════════════════════════════
                      """
                  )
                  % details
              )
  
file_path: streamlit/lib/streamlit/config_option.py
imports: import datetime
  import re
  import textwrap
  from typing import Any, Callable, Optional
  from streamlit import util
  from streamlit.case_converters import to_snake_case
  from streamlit.errors import DeprecationError
label_desc: Use image node_id 5 for calling the ConfigOption obj's underlying member method code with example usage: obj.set_value(value, where_defined) without return types