3 from pathlib
import Path
9 parser
= argparse
.ArgumentParser()
10 parser
.add_argument("input_path", nargs
='?', help="Input folder that is traversed for OpenWrt JSON device files.")
11 parser
.add_argument('--url',
12 action
="store", dest
="url", default
="",
13 help="Link to get the image from. May contain {target}, {release} and {commit}")
14 parser
.add_argument('--formatted',
15 action
="store_true", dest
="formatted", help="Output formatted JSON data.")
17 args
= parser
.parse_args()
19 SUPPORTED_METADATA_VERSION
= 1
22 # OpenWrt JSON device files
26 if not os
.path
.isdir(args
.input_path
):
27 sys
.stderr
.write("Folder does not exists: {}\n".format(args
.input_path
))
30 for path
in Path(args
.input_path
).rglob('*.json'):
33 def get_title_name(title
):
37 return "{} {} {}".format(title
.get('vendor', ''), title
['model'], title
.get('variant', '')).strip()
42 with
open(path
, "r") as file:
46 if obj
['metadata_version'] != SUPPORTED_METADATA_VERSION
:
47 sys
.stderr
.write('{} has unsupported metadata version: {} => skip\n'.format(path
, obj
['metadata_version']))
50 version
= obj
['version_number']
51 commit
= obj
['version_commit']
53 if not 'version_commit' in output
:
55 'version_commit': commit
,
60 # only support a version_number with images of a single version_commit
61 if output
['version_commit'] != commit
:
62 sys
.stderr
.write('mixed revisions for a release ({} and {}) => abort\n'.format(output
['version_commit'], commit
))
66 for image
in obj
['images']:
67 images
.append({'name': image
['name'], 'type': image
['type']})
69 target
= obj
['target']
71 for title
in obj
['titles']:
72 name
= get_title_name(title
)
75 sys
.stderr
.write("Empty title. Skip title in {}\n".format(path
))
78 output
['models'][name
] = {'id': id, 'target': target
, 'images': images
}
80 except json
.decoder
.JSONDecodeError
as e
:
81 sys
.stderr
.write("Skip {}\n {}\n".format(path
, e
))
84 sys
.stderr
.write("Abort on {}\n Missing key {}\n".format(path
, e
))
88 json
.dump(output
, sys
.stdout
, indent
=" ", sort_keys
= True)
90 json
.dump(output
, sys
.stdout
, sort_keys
= True)