Backups: Make Manifest a dict instead of a list

So it's possible to add more information like metadata etc.

Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
Michael Pimmer 2018-11-13 00:22:03 +00:00 committed by James Valleroy
parent 7aed74a9bd
commit e2584be45d
No known key found for this signature in database
GPG Key ID: 77C0C75E7B650808
2 changed files with 24 additions and 7 deletions

View File

@ -27,6 +27,7 @@ import subprocess
import sys
import tarfile
from plinth.errors import ActionError
from plinth.modules.backups import MANIFESTS_FOLDER, REPOSITORY
@ -174,10 +175,24 @@ def subcommand_get_archive_apps(arguments):
manifest_path)
manifest = json.loads(manifest_data)
if manifest:
for app in manifest:
for app in _get_apps_of_manifest(manifest):
print(app['name'])
def _get_apps_of_manifest(manifest):
"""
Get apps of a manifest.
Supports both dict format as well as list format of plinth <=0.42
"""
if type(manifest) is list:
apps = manifest
elif type(manifest) is dict and 'apps' in manifest:
apps = manifest['apps']
else:
raise ActionError('Unknown manifest format')
return apps
def subcommand_get_exported_archive_apps(arguments):
"""Get list of apps included in an exported archive file."""
manifest = None
@ -191,7 +206,7 @@ def subcommand_get_exported_archive_apps(arguments):
break
if manifest:
for app in manifest:
for app in _get_apps_of_manifest(manifest):
print(app['name'])

View File

@ -84,11 +84,13 @@ def _backup_handler(packet):
manifest_path = os.path.join(MANIFESTS_FOLDER,
get_valid_filename(packet.label) + '.json')
manifests = [{
'name': app.name,
'version': app.app.version,
'backup': app.manifest
} for app in packet.apps]
manifests = {
'apps': [{
'name': app.name,
'version': app.app.version,
'backup': app.manifest
} for app in packet.apps]
}
with open(manifest_path, 'w') as manifest_file:
json.dump(manifests, manifest_file)