def parse_ini(self, ini): """Parse source ini and return attributes.""" source_attributes = { 'url': None, 'url_template': None, 'citation': None } config = cp.ConfigParser(dict_type=CaseInsensitiveDict) config.read(ini) for section in config.sections(): for option in config.options(section): source_attributes[option] = unicode_replace(config.get(section, option)) required_attributes = ('name', 'last_update') if not all(att in source_attributes for att in required_attributes): sys.exit('Source INI missing required attributes: %s.' % ' and/or '.join(required_attributes)) return source_attributes
def __call__(self, *args, **kwargs): """Call decorated (i.e. converted to unicode) function. Args: *args: Arguments of func which will be converted to bytes. **kwargs: Keyword arguments of func, which will be converted to bytes. Returns: The output of func, converted to unicode if possible. """ encoded_args = [] encoded_kwargs = {} for arg in args: if isinstance(arg, unicode): encoded_args.append(arg.encode()) else: encoded_args.append(arg) for k, v in kwargs.items(): if isinstance(k, unicode): encoded_k = k.encode() else: encoded_k = k if isinstance(v, unicode): encoded_kwargs[encoded_k] = v.encode() else: encoded_kwargs[encoded_k] = v result = self.func(*encoded_args, **encoded_kwargs) if isinstance(result, (list, set)): result = type(result)(map(unicode_replace, result)) elif isinstance(result, collections.Mapping): result = dict(map(unicode_replace, result.iteritems())) elif isinstance(result, str): result = unicode_replace(result) return result
def test_unicode_replace(self): self.assertTrue(isinstance(utils.unicode_replace(b'test'), unicode)) self.assertTrue(isinstance(utils.unicode_replace(u'test'), unicode))