docs: def get(self, key):
          """Vyper is essentially repository for configurations.
          `get` can retrieve any value given the key to use.
          `get` has the behavior of returning the value associated with the first
          place from where it is set. Viper will check in the following order:
          override, arg, env, config file, key/value store, default.
          """
          path = key.split(self._key_delimiter)
  
          lowercase_key = key.lower()
          val = self._find(lowercase_key)
  
          if val is None:
              source = self._find(path[0].lower())
              if source is not None and isinstance(source, dict):
                  val = self._search_dict(source, path[1::])
  
          if val is None:
              return None
  
          return val