query-industry-policy-usage.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. """Read the reviewed local policy sidecar; default excludes clauses lacking originals."""
  2. import argparse
  3. import hashlib
  4. import json
  5. from pathlib import Path
  6. def main():
  7. p = argparse.ArgumentParser(description=__doc__)
  8. p.add_argument('--input', type=Path, required=True)
  9. p.add_argument('--keyword', default='')
  10. p.add_argument('--document-id')
  11. p.add_argument('--clause-id')
  12. p.add_argument('--include-pending', action='store_true')
  13. p.add_argument('--limit', type=int, default=20)
  14. args = p.parse_args()
  15. if not 1 <= args.limit <= 100:
  16. p.error('limit must be 1..100')
  17. raw = args.input.read_bytes()
  18. data = json.loads(raw)
  19. if data.get('schema') != 'ksf.policy-usage-review.v1':
  20. p.error('unexpected data schema')
  21. rows = []
  22. for r in data['clauses']:
  23. if not args.include_pending and r['verification'] == 'PENDING_ORIGINAL':
  24. continue
  25. if args.document_id and r['documentId'] != args.document_id:
  26. continue
  27. if args.clause_id and r['clauseId'] != args.clause_id:
  28. continue
  29. if args.keyword.casefold() not in json.dumps(r,ensure_ascii=False).casefold():
  30. continue
  31. rows.append(r)
  32. print(json.dumps({'ok':True,'generation':data['generation'],'reviewDate':data['reviewDate'],
  33. 'inputSha256':hashlib.sha256(raw).hexdigest(),'readOnly':True,'databaseWrites':0,
  34. 'paidCalls':0,'totalMatched':len(rows),'includePending':args.include_pending,
  35. 'rows':rows[:args.limit],'interpretationIsRegulation':False},ensure_ascii=False,indent=2))
  36. if __name__ == '__main__':
  37. main()