Reads and parses the config source

        :param file/str source: Config source string, file name, or file pointer. If file name does not exist, it is
                                ignored.
        :return: True if source was successfully read, otherwise False

def _read(self, source):
        """
        Reads and parses the config source

        :param file/str source: Config source string, file name, or file pointer. If file name does not exist, it is
                                ignored.
        :return: True if source was successfully read, otherwise False
        """

        if isinstance(source, str) and is_config(source):
            source_fp = StringIO(source)
        elif isinstance(source, IOBase) or isinstance(source, StringIO):
            source_fp = source
        elif os.path.exists(source):
            source_fp = open(source)
        else:
            return False

        self._parser.read_file(source_fp)
        self._parse_extra(source_fp)

        return True