Updates recursively the value in the the config from some file.

        :param loader: (function) a function that receives a file object
            and returns a dictionary to be merged into settings
        :param filename: (str) a filename to be opened
        :param encoding: (str) an encoding of the filename
        :param silent: (bool) fails silently if something wrong with json file

        .. versionadded:: 0.4.0

def from_file(self, loader, filename, encoding='utf-8', silent=False):
        """
        Updates recursively the value in the the config from some file.

        :param loader: (function) a function that receives a file object
            and returns a dictionary to be merged into settings
        :param filename: (str) a filename to be opened
        :param encoding: (str) an encoding of the filename
        :param silent: (bool) fails silently if something wrong with json file

        .. versionadded:: 0.4.0
        """
        conf = {}
        try:
            with open(filename, encoding=encoding) as f:
                conf = loader(f)
        except Exception:
            if not silent:
                raise
        self.update(conf)