mattrguerra/meridian-outreach-vaultmainPrivate on GitHub, published here in full

cli.py

Language Python4.1 KB80 lines

07-Automation/partner_pipeline/cli.py

  1. """Command-line entry point: one subcommand per pipeline stage."""
  2. from __future__ import annotations
  3. import argparse
  4. from .audit import cmd_outreach_audit, cmd_outreach_pull_list
  5. from .baseline import cmd_seed_baseline
  6. from .census import cmd_reconcile_deals, cmd_refresh_xml
  7. from .classify import cmd_classify, cmd_verify
  8. from .history import cmd_ingest
  9. from .roster_workbook import cmd_refresh_workbook
  10. from .route import cmd_route
  11. from .stubs import cmd_write_stubs
  12. def main():
  13. p = argparse.ArgumentParser(description="Weekly Partner Client Pipeline: one subcommand per stage.")
  14. sub = p.add_subparsers(dest="cmd", required=True)
  15. s = sub.add_parser("seed-baseline", help="one-time baseline load from the roster workbook")
  16. s.add_argument("--sheet", required=True, help="xlsx or csv")
  17. s.add_argument("--tab", help="tab name inside an xlsx workbook (default: active tab)")
  18. s.add_argument("--as-of", help="date the sheet's totals run through (YYYY-MM-DD): required to write")
  19. s.add_argument("--map", action="append", help='override a column: --map "ltv=Total Spend"')
  20. s.add_argument("--dry-run", action="store_true", help="show mapping + sample rows, write nothing")
  21. s.add_argument("--force", action="store_true", help="replace existing baselines")
  22. s.set_defaults(func=cmd_seed_baseline)
  23. i = sub.add_parser("ingest", help="merge raw orders.fetch page dump(s) into the history")
  24. i.add_argument("--orders", required=True, nargs="+", help="one or more raw JSON page files")
  25. i.set_defaults(func=cmd_ingest)
  26. c = sub.add_parser("classify", help="compute lifetime metrics from history, classify, export")
  27. c.set_defaults(func=cmd_classify)
  28. v = sub.add_parser("verify", help="no-shrink guardrail vs previous run (exit 2 on flags)")
  29. v.set_defaults(func=cmd_verify)
  30. w = sub.add_parser("write-stubs", help="Stage E: create/upgrade stubs (guarded)")
  31. w.add_argument("--plan", required=True, help="the .plan.json produced by classify")
  32. w.set_defaults(func=cmd_write_stubs)
  33. x = sub.add_parser("refresh-xml", help="Stage F: stamp last_modified in XML map (guarded)")
  34. x.add_argument("--plan", required=True, help="the .plan.json produced by classify")
  35. x.set_defaults(func=cmd_refresh_xml)
  36. rd = sub.add_parser("reconcile-deals",
  37. help="absorb a Bitrix deals-pull JSON into census blocks + stubs (guarded)")
  38. rd.add_argument("--deals", required=True, nargs="+",
  39. help="deals JSON file(s): {\"deals\":[{deal_id,cat,stage,title,created}]}")
  40. rd.set_defaults(func=cmd_reconcile_deals)
  41. rt = sub.add_parser("route",
  42. help="compute weekly outreach candidate lists (read-only; artifacts to 05-Outputs)")
  43. rt.set_defaults(func=cmd_route)
  44. wbk = sub.add_parser("refresh-workbook",
  45. help="Stage F2: regenerate the Drive-swap workbook from the latest updated copy (guarded)")
  46. wbk.add_argument("--plan", required=True, help="the .plan.json produced by classify")
  47. wbk.add_argument("--base", help="base workbook to carry human columns from "
  48. "(default: latest 05-Outputs/partner-runs/Complete-Partner-Clients-List_updated-*.xlsx)")
  49. wbk.set_defaults(func=cmd_refresh_workbook)
  50. opl = sub.add_parser("outreach-pull-list",
  51. help="Stage F5a: list the deals whose stage history must be re-pulled this week")
  52. opl.add_argument("--deals", required=True, nargs="+",
  53. help="weekly enumeration JSON for cats 24/26/36/16")
  54. opl.set_defaults(func=cmd_outreach_pull_list)
  55. oa = sub.add_parser("outreach-audit",
  56. help="Stage F5b: build the per-pipeline outreach audit workbook (read-only)")
  57. oa.add_argument("--deals", required=True, nargs="+",
  58. help="enumeration JSON where re-pulled deals also carry a \"history\" array")
  59. oa.add_argument("--workbook", help="Drive-swap workbook to resolve Plinth identity from "
  60. "(default: latest Complete-Partner-Clients-List_updated-*.xlsx)")
  61. oa.set_defaults(func=cmd_outreach_audit)
  62. args = p.parse_args()
  63. args.func(args)