code: def load(self, filename=None, key=None, silent=True):
          
          filename = filename or self.obj.get(self.identifier.upper())
          if not filename:
              return
  
          if not isinstance(filename, (list, tuple)):
              split_files = ensure_a_list(filename)
              if all([f.endswith(self.extensions) for f in split_files]):  # noqa
                  files = split_files  # it is a ['file.ext', ...]
              else:  # it is a single config as string
                  files = [filename]
          else:  # it is already a list/tuple
              files = filename
  
          self.obj._loaded_files.extend(files)
  
          # add the [default] env
          env_list = [self.obj.get("DEFAULT_ENV_FOR_DYNACONF")]
  
          # compatibility with older versions that still uses [dynaconf] as
          # [default] env
          global_env = self.obj.get("ENVVAR_PREFIX_FOR_DYNACONF") or "DYNACONF"
          if global_env not in env_list:
              env_list.append(global_env)
  
          # add the current [env]
          if self.env not in env_list:
              env_list.append(self.env)
  
          # add the [global] env
          env_list.append("GLOBAL")
  
          # load all envs
          self._read(files, env_list, silent, key)
docs: Reads and loads in to `self.obj` a single key or all keys from source
  
          :param filename: Optional filename to load
          :param key: if provided load a single key
          :param silent: if load erros should be silenced