| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- """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()
|