"""Read the reviewed local policy sidecar; default excludes clauses lacking originals.""" import argparse import hashlib import json from pathlib import Path def main(): p = argparse.ArgumentParser(description=__doc__) p.add_argument('--input', type=Path, required=True) p.add_argument('--keyword', default='') p.add_argument('--document-id') p.add_argument('--clause-id') p.add_argument('--include-pending', action='store_true') p.add_argument('--limit', type=int, default=20) args = p.parse_args() if not 1 <= args.limit <= 100: p.error('limit must be 1..100') raw = args.input.read_bytes() data = json.loads(raw) if data.get('schema') != 'ksf.policy-usage-review.v1': p.error('unexpected data schema') rows = [] for r in data['clauses']: if not args.include_pending and r['verification'] == 'PENDING_ORIGINAL': continue if args.document_id and r['documentId'] != args.document_id: continue if args.clause_id and r['clauseId'] != args.clause_id: continue if args.keyword.casefold() not in json.dumps(r,ensure_ascii=False).casefold(): continue rows.append(r) print(json.dumps({'ok':True,'generation':data['generation'],'reviewDate':data['reviewDate'], 'inputSha256':hashlib.sha256(raw).hexdigest(),'readOnly':True,'databaseWrites':0, 'paidCalls':0,'totalMatched':len(rows),'includePending':args.include_pending, 'rows':rows[:args.limit],'interpretationIsRegulation':False},ensure_ascii=False,indent=2)) if __name__ == '__main__': main()