docs: def from_envvars(prefix=None, environ=None, envvars=None, as_json=True):
      """Load environment variables in a dictionary
  
      Values are parsed as JSON. If parsing fails with a ValueError,
      values are instead used as verbatim strings.
  
      :param prefix: If ``None`` is passed as envvars, all variables from
                     ``environ`` starting with this prefix are imported. The
                     prefix is stripped upon import.
      :param envvars: A dictionary of mappings of environment-variable-names
                      to Flask configuration names. If a list is passed
                      instead, names are mapped 1:1. If ``None``, see prefix
                      argument.
      :param environ: use this dictionary instead of os.environ; this is here
                      mostly for mockability
      :param as_json: If False, values will not be parsed as JSON first.
      """
      conf = {}
      if environ is None:
          environ = os.environ
      if prefix is None and envvars is None:
          raise RuntimeError('Must either give prefix or envvars argument')
  
      # if it's a list, convert to dict
      if isinstance(envvars, list):
          envvars = {k: k for k in envvars}
  
      if not envvars:
          envvars = {k: k[len(prefix):] for k in environ.keys()
                     if k.startswith(prefix)}
  
      for env_name, name in envvars.items():
          if env_name not in environ:
              continue
  
          if as_json:
              try:
                  conf[name] = json.loads(environ[env_name])
              except ValueError:
                  conf[name] = environ[env_name]
          else:
              conf[name] = environ[env_name]
  
      return conf