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='')