File size: 1,893 Bytes
423417f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | """Curator override for the code and data check: the flag was wrong.
code-check-override.sh ICSAC-SUB-NNNNN
Marks a submission the check held so the worker skips the check, then queues
it again so the panel reviews it. Refuses a paper that already has a decision
or that the check did not hold.
"""
from __future__ import annotations
import json
import sys
from . import submission_worker as worker
from .apply_decision import SUB_ID_RE
def main(argv: list[str]) -> int:
if len(argv) != 2 or not SUB_ID_RE.match(argv[1].strip()):
print("usage: code-check-override.sh ICSAC-SUB-NNNNN", file=sys.stderr)
return 2
sub_id = argv[1].strip()
sub_dir, tier = worker._resolve_sub_dir(sub_id)
state_path = sub_dir / "state.json"
if not state_path.exists():
print(f"no such submission: {sub_dir}", file=sys.stderr)
return 1
state = json.loads(state_path.read_text())
if state.get("decision"):
print(f"{sub_id} already has a decision on record: {state['decision']}. Nothing done.",
file=sys.stderr)
return 3
if state.get("precheck") != "code_data_link_missing":
print(f"{sub_id} is not held by the code and data check. Nothing done.", file=sys.stderr)
return 3
worker._write_state(sub_dir, state="received", precheck="overridden",
code_check_override=True, code_check_override_at=worker._now_iso())
test_mode = tier in (2, 3)
queue = worker.TEST_QUEUE_DIR if test_mode else worker.QUEUE_DIR
queue.mkdir(parents=True, exist_ok=True)
(queue / sub_id).write_text(worker._now_iso())
worker._audit({"sub_id": sub_id, "event": "code_check_override", "by": "curator"},
test_mode=test_mode)
print(f"{sub_id}: override recorded; queued for the panel")
return 0
if __name__ == "__main__":
sys.exit(main(sys.argv))
|