def _convertValue(value, type, default=False): """ Convert a raw config string to the proper data type. @param value: the raw value @param type: the desired type @return: the converted value """ if type is bool: value = str(value).lower() if value in ("1", "true", "yes", "on"): return True elif value in ("none", ""): return default # allows None-default bools to return None else: return False elif issubclass(type, basestring): return unicodify(value) else: try: return type(value) except: return None
def _convertValue(value, type, default=False): """ Convert a raw config string to the proper data type. @param value: the raw value @param type: the desired type @return: the converted value """ if type is bool: value = str(value).lower() if value in ("1", "true", "yes", "on"): return True elif value in ("none", ""): return default #allows None-default bools to return None else: return False elif issubclass(type, basestring): return unicodify(value) else: try: return type(value) except Exception: return None
def get(self, section, option): return unicodify(RawConfigParser.get(self, section, option))
def dummyTranslator(string): return unicodify(string)
def _read(self, fp, fpname): """Parse a sectioned setup file. The sections in setup file contains a title line at the top, indicated by a name in square brackets (`[]'), plus key/value options lines, indicated by `name: value' format lines. Continuations are represented by an embedded newline then leading whitespace. Blank lines, lines beginning with a '#', and just about everything else are ignored. """ cursect = None # None, or a dictionary optname = None lineno = 0 e = None # None, or an exception while True: line = unicodify(fp.readline()) if not line: break lineno = lineno + 1 # comment or blank line? if line.strip() == '' or line[0] in '#;': continue if line.split(None, 1)[0].lower() == 'rem' and line[0] in "rR": # no leading whitespace continue # continuation line? if line[0].isspace() and cursect is not None and optname: value = line.strip() if value: cursect[optname].append(value) # a section header or option header? else: # is it a section header? mo = self.SECTCRE.match(line) if mo: sectname = mo.group('header') if sectname in self._sections: cursect = self._sections[sectname] elif sectname == DEFAULTSECT: cursect = self._defaults else: cursect = self._dict() cursect['__name__'] = sectname self._sections[sectname] = cursect # So sections can't start with a continuation line optname = None # no section header in the file? elif cursect is None: raise MissingSectionHeaderError(fpname, lineno, line) # an option line? else: mo = self._optcre.match(line) if mo: optname, vi, optval = mo.group('option', 'vi', 'value') optname = self.optionxform(optname.rstrip()) # This check is fine because the OPTCRE cannot # match if it would set optval to None if optval is not None: if vi in ('=', ':') and ';' in optval: # ';' is a comment delimiter only if it follows # a spacing character pos = optval.find(';') if pos != -1 and optval[pos-1].isspace(): optval = optval[:pos] optval = optval.strip() # allow empty values if optval == '""': optval = '' cursect[optname] = [optval] else: # valueless option handling cursect[optname] = optval self._linenos[(cursect['__name__'], optname)] = (fpname, lineno) else: # a non-fatal parsing error occurred. set up the # exception but keep going. the exception will be # raised at the end of the file and will contain a # list of all bogus lines if not e: e = ParsingError(fpname) e.append(lineno, repr(line)) # if any parsing errors occurred, raise an exception if e: raise e # join the multi-line values collected while reading all_sections = [self._defaults] all_sections.extend(self._sections.values()) for options in all_sections: for name, val in options.items(): if isinstance(val, list): options[name] = '\n'.join(val)