#!/usr/bin/env python3 import argparse import sys from common import ( ClinicLoginRequiredError, DEFAULT_BASE_URL, DEFAULT_CHROME_PROFILE, clinic_data_status, clinic_login_state, clinic_session, parse_clinic_link, write_json, ) def main() -> int: parser = argparse.ArgumentParser( description="Check whether Clinic data for one window is ready before querying metrics or downloading bundles" ) parser.add_argument("link", help="Clinic portal link with from/to") parser.add_argument( "--base-url", default="", help="Optional Clinic base URL override. Defaults to the host in the Clinic link, then env CLINIC_BASE_URL.", ) parser.add_argument( "--profile", default=DEFAULT_CHROME_PROFILE, help="Chrome profile name. Use 'auto' to scan profiles for clinic.session_id " "(default: env CLINIC_CHROME_PROFILE or auto).", ) parser.add_argument( "--data-type", type=int, default=1, help="Clinic data_type for the data_status API (default: 1)", ) args = parser.parse_args() clinic_context = parse_clinic_link(args.link) effective_base_url = str(args.base_url or clinic_context.get("base_url") or DEFAULT_BASE_URL).rstrip("/") try: login_state = clinic_login_state(base_url=effective_base_url, profile_name=args.profile) session = clinic_session(base_url=effective_base_url, profile_name=args.profile) data_status = clinic_data_status(session, clinic_context, data_type=args.data_type, use_cache=False) except (ClinicLoginRequiredError, ValueError) as exc: print(str(exc), file=sys.stderr) return 1 write_json( { "login_state": { "base_url": login_state["base_url"], "profile_name": login_state["profile_name"], "expires_at": login_state["expires_at"], }, "clinic_context": clinic_context, "data_status": data_status, } ) return 0 if __name__ == "__main__": raise SystemExit(main())