Source code for imednet.cli.records

"""CLI commands for managing study records."""

from __future__ import annotations

import argparse
import sys

from ...sdk import ImednetSDK
from ..decorators import with_sdk
from ..utils import STUDY_KEY_ARG, display_list, fetching_status
from ..utils.export import export_list_to_file


[docs]def setup_parser(subparsers: argparse._SubParsersAction) -> None: # type: ignore[type-arg] """Setup the parser for this module.""" parser = subparsers.add_parser("records", help="Manage records within a study.") sub = parser.add_subparsers(dest="command") list_parser = sub.add_parser("list", help="List records for a study.") list_parser.add_argument("study_key", help=STUDY_KEY_ARG) list_parser.add_argument( "-o", "--output", help="Save records to the given format (json or csv)" ) @with_sdk def list_records(sdk: ImednetSDK, study_key: str, output: str | None = None) -> None: if output and output.lower() not in {"json", "csv"}: print("Invalid output format. Use 'json' or 'csv'.") sys.exit(1) with fetching_status("records", study_key): records = list(sdk.records.list(study_key)) if output: export_list_to_file(records, "records", output.lower()) else: view_models = [] for r in records: view_models.append( { "ID": r.record_id, "Subject": r.subject_key, "Form": r.form_key, "Status": r.record_status, "Created": r.date_created, } ) display_list(view_models, "records", "No records found.") list_parser.set_defaults( func=lambda args: list_records(study_key=args.study_key, output=args.output) )