コード例 #1
0
	def __init__(self, defaults=None):
		self.__sections = SortedDict()
		if defaults is None:
			self.__defaults = SortedDict()
		else:
			self.__defaults = SortedDict()
			for key, value in defaults.items():
				self.__defaults[key] = value
コード例 #2
0
 def __init__(self, defaults=None):
     self.__sections = SortedDict()
     if defaults is None:
         self.__defaults = SortedDict()
     else:
         self.__defaults = SortedDict()
         for key, value in defaults.items():
             self.__defaults[key] = value
コード例 #3
0
class ConfigParser:
    def __init__(self, defaults=None):
        self.__sections = SortedDict()
        if defaults is None:
            self.__defaults = SortedDict()
        else:
            self.__defaults = SortedDict()
            for key, value in defaults.items():
                self.__defaults[key] = value

    def defaults(self):
        return self.__defaults

    def sections(self):
        """Return a list of section names, excluding [DEFAULT]"""
        # self.__sections will never have [DEFAULT] in it
        return self.__sections.keys()

    def add_section(self, section):
        """Create a new section in the configuration.

		Raise DuplicateSectionError if a section by the specified name
		already exists.
		"""
        if section in self.__sections:
            raise DuplicateSectionError(section)
        self.__sections[section] = {}

    def has_section(self, section):
        """Indicate whether the named section is present in the configuration.

		The DEFAULT section is not acknowledged.
		"""
        return (section in self.__sections)

    def options(self, section):
        """Return a list of option names for the given section name."""
        try:
            opts = self.__sections[section].copy()
        except KeyError:
            raise NoSectionError(section)
        opts.update(self.__defaults)
        if '__name__' in opts:
            del opts['__name__']
        return opts.keys()

    def read(self, filenames):
        """Read and parse a filename or a list of filenames.

		Files that cannot be opened are silently ignored; this is
		designed so that you can specify a list of potential
		configuration file locations (e.g. current directory, user's
		home directory, systemwide directory), and all existing
		configuration files in the list will be read.  A single
		filename may also be given.
		"""
        if isinstance(filenames, types.StringTypes):
            filenames = [filenames]
        for filename in filenames:
            try:
                fp = open(filename)
            except IOError:
                continue
            self.__read(fp, filename)
            fp.close()

    def readfp(self, fp, filename=None):
        """Like read() but the argument must be a file-like object.

		The `fp' argument must have a `readline' method.  Optional
		second argument is the `filename', which if not given, is
		taken from fp.name.  If fp has no `name' attribute, `<???>' is
		used.

		"""
        if filename is None:
            try:
                filename = fp.name
            except AttributeError:
                filename = '<???>'
        self.__read(fp, filename)

    def get(self, section, option, raw=0, vars=None):
        """Get an option value for a given 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 is not None:
            d.update(vars)
        option = self.optionxform(option)
        try:
            value = d[option]
        except KeyError:
            raise NoOptionError(option, section)

        if raw:
            return value
        return self._interpolate(section, option, value, d)

    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 value.find("%(") != -1:
                try:
                    value = value % vars
                except KeyError, key:
                    raise InterpolationError(key, option, section, rawval)
            else:
                break
        if value.find("%(") != -1:
            raise InterpolationDepthError(option, section, rawval)
        return value
コード例 #4
0
class ConfigParser:
	def __init__(self, defaults=None):
		self.__sections = SortedDict()
		if defaults is None:
			self.__defaults = SortedDict()
		else:
			self.__defaults = SortedDict()
			for key, value in defaults.items():
				self.__defaults[key] = value

	def defaults(self):
		return self.__defaults

	def sections(self):
		"""Return a list of section names, excluding [DEFAULT]"""
		# self.__sections will never have [DEFAULT] in it
		return self.__sections.keys()

	def add_section(self, section):
		"""Create a new section in the configuration.

		Raise DuplicateSectionError if a section by the specified name
		already exists.
		"""
		if section in self.__sections:
			raise DuplicateSectionError(section)
		self.__sections[section] = {}

	def has_section(self, section):
		"""Indicate whether the named section is present in the configuration.

		The DEFAULT section is not acknowledged.
		"""
		return (section in self.__sections)

	def options(self, section):
		"""Return a list of option names for the given section name."""
		try:
			opts = self.__sections[section].copy()
		except KeyError:
			raise NoSectionError(section)
		opts.update(self.__defaults)
		if '__name__' in opts:
			del opts['__name__']
		return opts.keys()

	def read(self, filenames):
		"""Read and parse a filename or a list of filenames.

		Files that cannot be opened are silently ignored; this is
		designed so that you can specify a list of potential
		configuration file locations (e.g. current directory, user's
		home directory, systemwide directory), and all existing
		configuration files in the list will be read.  A single
		filename may also be given.
		"""
		if isinstance(filenames, types.StringTypes):
			filenames = [filenames]
		for filename in filenames:
			try:
				fp = open(filename)
			except IOError:
				continue
			self.__read(fp, filename)
			fp.close()

	def readfp(self, fp, filename=None):
		"""Like read() but the argument must be a file-like object.

		The `fp' argument must have a `readline' method.  Optional
		second argument is the `filename', which if not given, is
		taken from fp.name.  If fp has no `name' attribute, `<???>' is
		used.

		"""
		if filename is None:
			try:
				filename = fp.name
			except AttributeError:
				filename = '<???>'
		self.__read(fp, filename)

	def get(self, section, option, raw=0, vars=None):
		"""Get an option value for a given 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 is not None:
			d.update(vars)
		option = self.optionxform(option)
		try:
			value = d[option]
		except KeyError:
			raise NoOptionError(option, section)

		if raw:
			return value
		return self._interpolate(section, option, value, d)

	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 value.find("%(") != -1:
				try:
					value = value % vars
				except KeyError, key:
					raise InterpolationError(key, option, section, rawval)
			else:
				break
		if value.find("%(") != -1:
			raise InterpolationDepthError(option, section, rawval)
		return value