def _load()

in pylib/configobj/configobj.py [0:0]


    def _load(self, infile, configspec):
        try:
            infile = infile.__fspath__()
        except AttributeError:
            pass

        if isinstance(infile, six.string_types):
            self.filename = infile
            if os.path.isfile(infile):
                with open(infile, 'rb') as h:
                    content = h.readlines() or []
            elif self.file_error:
                # raise an error if the file doesn't exist
                raise IOError('Config file not found: "%s".' % self.filename)
            else:
                # file doesn't already exist
                if self.create_empty:
                    # this is a good test that the filename specified
                    # isn't impossible - like on a non-existent device
                    with open(infile, 'w') as h:
                        h.write('')
                content = []

        elif isinstance(infile, (list, tuple)):
            content = list(infile)

        elif isinstance(infile, dict):
            # initialise self
            # the Section class handles creating subsections
            if isinstance(infile, ConfigObj):
                # get a copy of our ConfigObj
                def set_section(in_section, this_section):
                    for entry in in_section.scalars:
                        this_section[entry] = in_section[entry]
                    for section in in_section.sections:
                        this_section[section] = {}
                        set_section(in_section[section], this_section[section])
                set_section(infile, self)

            else:
                for entry in infile:
                    self[entry] = infile[entry]
            del self._errors

            if configspec is not None:
                self._handle_configspec(configspec)
            else:
                self.configspec = None
            return

        elif getattr(infile, 'read', MISSING) is not MISSING:
            # This supports file like objects
            content = infile.read() or []
            # needs splitting into lines - but needs doing *after* decoding
            # in case it's not an 8 bit encoding
        else:
            raise TypeError('infile must be a path-like object, file like object, or list of lines.')

        if content:
            # don't do it for the empty ConfigObj
            content = self._handle_bom(content)
            # infile is now *always* a list
            #
            # Set the newlines attribute (first line ending it finds)
            # and strip trailing '\n' or '\r' from lines
            for line in content:
                if (not line) or (line[-1] not in ('\r', '\n')):
                    continue
                for end in ('\r\n', '\n', '\r'):
                    if line.endswith(end):
                        self.newlines = end
                        break
                break

        assert all(isinstance(line, six.string_types) for line in content), repr(content)
        content = [line.rstrip('\r\n') for line in content]

        self._parse(content)
        # if we had any errors, now is the time to raise them
        if self._errors:
            if len(self._errors) > 1:
                msg = ["Parsing failed with {} errors.".format(len(self._errors))]
                for error in self._errors[:self.MAX_PARSE_ERROR_DETAILS]:
                    msg.append(str(error))
                if len(self._errors) > self.MAX_PARSE_ERROR_DETAILS:
                    msg.append("{} more error(s)!"
                               .format(len(self._errors) - self.MAX_PARSE_ERROR_DETAILS))
                error = ConfigObjError('\n    '.join(msg))
            else:
                error = self._errors[0]
            # set the errors attribute; it's a list of tuples:
            # (error_type, message, line_number)
            error.errors = self._errors
            # set the config attribute
            error.config = self
            raise error
        # delete private attributes
        del self._errors

        if configspec is None:
            self.configspec = None
        else:
            self._handle_configspec(configspec)