cinap_lenrekadd hg and python4bb9e2215 years agoHistory
640 lines · 22.6 KB · Python
RawDownload
        `vars' argument, which must be a dictionary whose contents overrides        any pre-existing defaults.         The section DEFAULT is special.        """        d = self._defaults.copy()        try:            d.update(self._sections[section])        except KeyError:            if section != DEFAULTSECT:                raise NoSectionError(section)        # Update with the entry specific variables        if vars:            for key, value in vars.items():                d[self.optionxform(key)] = value        option = self.optionxform(option)        try:            value = d[option]        except KeyError:            raise NoOptionError(option, section)         if raw:            return value        else:            return self._interpolate(section, option, value, d)     def items(self, section, raw=False, vars=None):        """Return a list of tuples with (name, value) for each option        in the section.         All % interpolations are expanded in the return values, based on the        defaults passed into the constructor, unless the optional argument        `raw' is true.  Additional substitutions may be provided using the        `vars' argument, which must be a dictionary whose contents overrides        any pre-existing defaults.         The section DEFAULT is special.        """        d = self._defaults.copy()        try:            d.update(self._sections[section])        except KeyError:            if section != DEFAULTSECT:                raise NoSectionError(section)        # Update with the entry specific variables        if vars:            for key, value in vars.items():                d[self.optionxform(key)] = value        options = d.keys()        if "__name__" in options:            options.remove("__name__")        if raw:            return [(option, d[option])                    for option in options]        else:            return [(option, self._interpolate(section, option, d[option], d))                    for option in options]     def _interpolate(self, section, option, rawval, vars):        # do the string interpolation        value = rawval        depth = MAX_INTERPOLATION_DEPTH        while depth:                    # Loop through this until it's done            depth -= 1            if "%(" in value:                value = self._KEYCRE.sub(self._interpolation_replace, value)                try:                    value = value % vars                except KeyError, e:                    raise InterpolationMissingOptionError(                        option, section, rawval, e[0])            else:                break        if "%(" in value:            raise InterpolationDepthError(option, section, rawval)        return value     _KEYCRE = re.compile(r"%\(([^)]*)\)s|.")     def _interpolation_replace(self, match):        s = match.group(1)        if s is None:            return match.group()        else:            return "%%(%s)s" % self.optionxform(s)  class SafeConfigParser(ConfigParser):     def _interpolate(self, section, option, rawval, vars):        # do the string interpolation        L = []        self._interpolate_some(option, L, rawval, section, vars, 1)        return ''.join(L)     _interpvar_match = re.compile(r"%\(([^)]+)\)s").match     def _interpolate_some(self, option, accum, rest, section, map, depth):        if depth > MAX_INTERPOLATION_DEPTH:            raise InterpolationDepthError(option, section, rest)        while rest:            p = rest.find("%")            if p < 0:                accum.append(rest)                return            if p > 0:                accum.append(rest[:p])                rest = rest[p:]            # p is no longer used            c = rest[1:2]            if c == "%":                accum.append("%")                rest = rest[2:]            elif c == "(":                m = self._interpvar_match(rest)                if m is None:                    raise InterpolationSyntaxError(option, section,                        "bad interpolation variable reference %r" % rest)                var = self.optionxform(m.group(1))                rest = rest[m.end():]                try:                    v = map[var]                except KeyError:                    raise InterpolationMissingOptionError(                        option, section, rest, var)                if "%" in v:                    self._interpolate_some(option, accum, v,                                           section, map, depth + 1)                else:                    accum.append(v)            else:                raise InterpolationSyntaxError(                    option, section,                    "'%%' must be followed by '%%' or '(', found: %r" % (rest,))     def set(self, section, option, value):        """Set an option.  Extend ConfigParser.set: check for string values."""        if not isinstance(value, basestring):            raise TypeError("option values must be strings")        ConfigParser.set(self, section, option, value)

Lines 501–640 of 640. Previous lines