def main(self, args): if args.meta: ini_file = args.app.get_cache_file('meta') else: ini_file = args.app.get_ini_file() parser = read_ini_file(ini_file, CaseSensitiveConfigParser) for section, attr, value in args.attrs: attribute = args.app.get_attr(underscore(attr)) self.process(args.app, attribute, section, camelcase(attr), value, parser) self.log('Rewriting %s' % ini_file) with NamedTemporaryFile('w+b') as tmp_ini_file: parser.write(tmp_ini_file) tmp_ini_file.flush() if not args.meta: for locale in ['en', 'de']: new_app = App.from_ini(tmp_ini_file.name, locale=locale, cache=args.app.get_app_cache_obj()) if new_app is None: raise Abort( 'ini file would be malformed. Not saving attributes!' ) shutil.copy2(tmp_ini_file.name, ini_file) os.chmod(ini_file, 0o644) args.app.get_app_cache_obj().clear_cache()
def generate_index_json(cls, meta_inf_dir, repo_dir, ucs_version, appcenter_host): archive_name = os.path.join(meta_inf_dir, 'all.tar') with tarfile.open(archive_name, 'w') as archive: with gzip.open(os.path.join(meta_inf_dir, 'index.json.gz'), 'wb') as index_json: apps = {} for root, dirs, files in os.walk(meta_inf_dir): for filename in files: path = os.path.join(root, filename) appname = check_ini_file(filename) if not appname: continue parser = read_ini_file(path) try: appid = parser.get('Application', 'ID') except (NoSectionError, NoOptionError): continue if not appid: continue app = AppcenterApp(appname, appid, ucs_version, meta_inf_dir, repo_dir, appcenter_host) apps[app.name] = app.to_index() for filename_in_directory, filename_in_archive in app.tar_files(): archive.add(filename_in_directory, filename_in_archive) index_json.write(dumps(apps, sort_keys=True, indent=4)) if appcenter_host.startswith('https'): appcenter_host = 'http://%s' % appcenter_host[8:] if not appcenter_host.startswith('http://'): appcenter_host = 'http://%s' % appcenter_host call_process(['zsyncmake', '-u', '%s/meta-inf/%s/all.tar.gz' % (appcenter_host, ucs_version), '-q', '-z', '-o', archive_name + '.zsync', archive_name])
def generate_index_json(cls, meta_inf_dir, repo_dir, ucs_version, appcenter_host): with tarfile.open(os.path.join(meta_inf_dir, 'all.tar.gz'), 'w:gz') as archive: with gzip.open(os.path.join(meta_inf_dir, 'index.json.gz'), 'wb') as index_json: apps = {} for root, dirs, files in os.walk(meta_inf_dir): for filename in files: path = os.path.join(root, filename) appname = check_ini_file(filename) if not appname: continue parser = read_ini_file(path) try: appid = parser.get('Application', 'ID') except (NoSectionError, NoOptionError): continue if not appid: continue app = AppcenterApp(appname, appid, ucs_version, meta_inf_dir, repo_dir, appcenter_host) apps[app.name] = app.to_index() for filename_in_directory, filename_in_archive in app.tar_files( ): archive.add(filename_in_directory, filename_in_archive) index_json.write(dumps(apps, sort_keys=True, indent=4))
def get_app_categories(self): if self._app_categories_cache is None: cache_file = self.get_cache_file('.app-categories.ini') parser = read_ini_file(cache_file) locale = self.get_locale() if not parser.has_section(locale): locale = 'en' try: categories = dict(parser.items(locale)) except NoSectionError: categories = {} self._app_categories_cache = categories return self._app_categories_cache
def test_parse_error(valid_ini_file): parser = read_ini_file(valid_ini_file) with pytest.raises(ParseError) as exc: IniSectionObjectTest.from_parser(parser, 'A fourth section', 'en') assert str( exc.value) == 'Cannot parse abool in A fourth section: Not a Boolean'
def test_no_value_error(valid_ini_file): parser = read_ini_file(valid_ini_file) with pytest.raises(NoValueError) as exc: AdvancedIniSectionObjectTest.from_parser(parser, 'A third section', 'en') assert str(exc.value) == 'Missing a_key in A third section'
def test_invalid_ini_file(invalid_ini_file): parser = read_ini_file(invalid_ini_file) assert len(parser.sections()) == 0 parser = read_ini_file(None) assert len(parser.sections()) == 0
def test_missing_ini_file(missing_ini_file): parser = read_ini_file(missing_ini_file) assert len(parser.sections()) == 0
def test_valid_ini_file(valid_ini_file): parser = read_ini_file(valid_ini_file) assert parser.get('A section', 'AKey') == 'A Value' assert parser.get('Another section', 'AKey') == 'Another Value'