verify-industry-existing-data.py 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. """Read-only acceptance of the installed existing-data industry release."""
  2. import argparse
  3. import hashlib
  4. import json
  5. from pathlib import Path
  6. import platform
  7. import sys
  8. ROOT = Path(__file__).resolve().parents[1]
  9. def main():
  10. parser = argparse.ArgumentParser(description=__doc__)
  11. sources = parser.add_mutually_exclusive_group(required=True)
  12. sources.add_argument('--snapshot')
  13. sources.add_argument('--registry')
  14. sources.add_argument('--db')
  15. parser.add_argument('--voc-runtime')
  16. parser.add_argument('--monitoring-store', required=True)
  17. args = parser.parse_args()
  18. sys.path.insert(0, str(ROOT / 'server/voc-library'))
  19. if not args.snapshot:
  20. assert args.voc_runtime and (Path(args.voc_runtime) / 'board_library.py').is_file(), 'EXISTING_VOC_RUNTIME_REQUIRED'
  21. # Monitor and the existing core resolve separately. Core modules are never installed by this release.
  22. sys.path.append(str(Path(args.voc_runtime).resolve()))
  23. from industry_monitor import run
  24. release = json.loads((ROOT / 'RELEASE.json').read_bytes())
  25. config = {key: getattr(args, key) for key in ('snapshot', 'registry', 'db') if getattr(args, key)}
  26. config.update(monitoringStore=args.monitoring_store,
  27. policyUsageReview=str(ROOT / 'data/policy-review/policy-usage.json'),
  28. policyUsageSha256=release['policyReviewSha256'])
  29. generation = release['generation']
  30. def query(op, **kwargs):
  31. result = run(config, dict(op=op, generation=generation, **kwargs))
  32. assert result['ok'] and result['readOnly'] and result['databaseWrites'] == 0, op
  33. return result
  34. contract = query('contract')
  35. query('overview')
  36. primary = query('reviews', filters={'platform': 'jd', 'shopId': '1000084104'})
  37. assert primary['products'] == 165 and primary['reviewRows'] == 746 and primary['uniqueReadableTexts'] == 701
  38. listings = query('listings', filters={'platform': 'jd', 'shopId': '1000084104'})
  39. policies = query('policies', policyQuery={'application': 'sodium-claims'})
  40. review = policies['applications']['reviewedEvidence']
  41. assert (review['verifiedClauses'], review['pendingClauses'], review['originalDocuments']) == (12, 19, 13)
  42. assert len(policies['applications']['selectedWorkflow']['reviewedClauses']) == 3
  43. workshop = query('workshop', filters={'category': 'banmian'})
  44. query('rankings')
  45. query('plan')
  46. query('contract') # Recheck the library generation after all reads.
  47. print(json.dumps(dict(ok=True, readOnly=True, databaseWrites=0, paidCalls=0,
  48. runtime=platform.python_version(), nativePython39Verified=sys.version_info[:2] == (3, 9),
  49. generation=contract['generation'], primaryStore={k: primary[k] for k in ('products', 'reviewRows', 'uniqueReadableTexts')},
  50. verifiedPolicyClauses=review['verifiedClauses'], pendingPolicyClauses=review['pendingClauses'],
  51. policyOriginals=review['originalDocuments'], commands=contract['commands'],
  52. completedProbes=['contract', 'overview', 'reviews', 'listings', 'policies', 'workshop', 'rankings', 'plan'],
  53. productionDeployed=False, overallMainlineComplete=False), ensure_ascii=False, indent=2))
  54. if __name__ == '__main__':
  55. try:
  56. main()
  57. except Exception as error:
  58. print(json.dumps(dict(ok=False, error=str(error) if isinstance(error, (AssertionError, ValueError)) else type(error).__name__,
  59. databaseWrites=0, paidCalls=0)))
  60. sys.exit(1)