feat: add gene family result reports
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env python3
|
||||
"""CLI for the plan-scoped formal gene-family result report."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
from pathlib import Path
|
||||
import sys
|
||||
from typing import Sequence
|
||||
|
||||
PROJECT_ROOT = Path(__file__).resolve().parents[2]
|
||||
if str(PROJECT_ROOT) not in sys.path:
|
||||
sys.path.insert(0, str(PROJECT_ROOT))
|
||||
|
||||
from gfa_core.gene_family_report import GeneFamilyReportResult, generate_gene_family_report
|
||||
|
||||
|
||||
def _parser() -> argparse.ArgumentParser:
|
||||
parser = argparse.ArgumentParser(description="Generate or open a gene-family result report")
|
||||
parser.add_argument("--workspace", type=Path, required=True)
|
||||
parser.add_argument("--prefix", required=True)
|
||||
parser.add_argument("--job-id", default="")
|
||||
parser.add_argument("--expected-stages", default="")
|
||||
parser.add_argument("--stage-statuses-json", default="{}")
|
||||
parser.add_argument("--scope-id", default="")
|
||||
parser.add_argument("--analysis-route", default="")
|
||||
parser.add_argument("--member-set-id", default="")
|
||||
parser.add_argument("--rnaseq-scope-id", default="")
|
||||
parser.add_argument("--action", choices=("generate", "open"), default="generate")
|
||||
parser.add_argument("--no-model", action="store_true")
|
||||
return parser
|
||||
|
||||
|
||||
def main(argv: Sequence[str] | None = None) -> GeneFamilyReportResult:
|
||||
args = _parser().parse_args(argv)
|
||||
statuses = json.loads(args.stage_statuses_json)
|
||||
if not isinstance(statuses, dict):
|
||||
raise ValueError("--stage-statuses-json must contain a JSON object")
|
||||
result = generate_gene_family_report(
|
||||
args.workspace,
|
||||
args.prefix,
|
||||
expected_stages=[value.strip() for value in args.expected_stages.split(",") if value.strip()],
|
||||
stage_statuses={str(key): str(value) for key, value in statuses.items()},
|
||||
scope_id=args.scope_id,
|
||||
analysis_route=args.analysis_route,
|
||||
member_set_id=args.member_set_id,
|
||||
rnaseq_scope_id=args.rnaseq_scope_id,
|
||||
use_model=not args.no_model,
|
||||
action=args.action,
|
||||
job_id=args.job_id,
|
||||
)
|
||||
print(
|
||||
json.dumps(
|
||||
{
|
||||
"status": "success",
|
||||
"report_path": str(result.report_path),
|
||||
"manifest_path": str(result.manifest_path),
|
||||
"report_status": result.report_status,
|
||||
"generation_mode": result.generation_mode,
|
||||
"reused": result.reused,
|
||||
},
|
||||
ensure_ascii=False,
|
||||
)
|
||||
)
|
||||
return result
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user