40-validation/report-quality-model.py
#!/usr/bin/env python3
import argparse
import json
from pathlib import Path
parser = argparse.ArgumentParser()
parser.add_argument('repository', type=Path)
parser.add_argument('--output', type=Path)
args = parser.parse_args()
rows = []
for manifest_path in sorted(args.repository.rglob('artifact-manifest.json')):
manifest = json.loads(manifest_path.read_text(encoding='utf-8'))
quality = manifest.get('qualityModel', {})
module = manifest['artifact']['name']
for goal in quality.get('goals', []):
rows.append((module, goal['id'], goal['attribute'], goal['statement'], 'goal'))
for gap in quality.get('gaps', []):
rows.append((module, gap['id'], gap['severity'], gap['statement'], 'gap'))
lines = [
'# Quality Model Report',
'',
'| Modul | ID | Attribut/Severity | Aussage | Typ |',
'|---|---|---|---|---|',
]
for row in rows:
escaped = [value.replace('|', '\\|') for value in row]
lines.append('| ' + ' | '.join(escaped) + ' |')
content = '\n'.join(lines) + '\n'
if args.output:
args.output.parent.mkdir(parents=True, exist_ok=True)
args.output.write_text(content, encoding='utf-8')
else:
print(content, end='')