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: 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.
docstr_tok: ["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","."]
code: def __call__(self, get_val_func: Callable[[], Any]) -> "ConfigOption":
      """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.
  
      """
      assert (
          get_val_func.__doc__
      ), "Complex config options require doc strings for their description."
      self.description = get_val_func.__doc__
      self._get_val_func = get_val_func
      return self
  
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 3 for calling the ConfigOption obj's underlying member method code with example usage: obj.__call__(get_val_func) and returns: self