Ejemplo n.º 1
0
 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()
Ejemplo n.º 2
0
	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])
Ejemplo n.º 3
0
 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))
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
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'
Ejemplo n.º 6
0
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'
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
def test_missing_ini_file(missing_ini_file):
    parser = read_ini_file(missing_ini_file)
    assert len(parser.sections()) == 0
Ejemplo n.º 9
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'