|
7 | 7 | from indico.errors import IndicoInputError, IndicoTimeoutError |
8 | 8 | from indico.filters import SubmissionFilter |
9 | 9 | from indico.queries import JobStatus |
10 | | -from indico.types import Job, Submission, SubmissionReviewFull |
| 10 | +from indico.types import ( |
| 11 | + Job, |
| 12 | + Submission, |
| 13 | + SubmissionCancellationResult, |
| 14 | + SubmissionReviewFull, |
| 15 | +) |
11 | 16 | from indico.types.submission import VALID_SUBMISSION_STATUSES |
12 | 17 | from indico.types.utils import Timer |
13 | 18 |
|
@@ -626,3 +631,36 @@ def process_response(self, response: "Payload") -> "List[Submission]": |
626 | 631 | return [ |
627 | 632 | Submission(**s) for s in super().parse_payload(response)["retrySubmissions"] |
628 | 633 | ] |
| 634 | + |
| 635 | + |
| 636 | +class CancelSubmissions(GraphQLRequest["SubmissionCancellationResult"]): |
| 637 | + """ |
| 638 | + Given a list of submission ids, cancel those active submissions. |
| 639 | +
|
| 640 | + Args: |
| 641 | + submission_ids (List[int]): the given submission ids to cancel. |
| 642 | + """ |
| 643 | + |
| 644 | + query = """ |
| 645 | + mutation cancelSubmissions($submissionIds:[Int]!){ |
| 646 | + cancelSubmissions(submissionIds: $submissionIds){ |
| 647 | + cancelled |
| 648 | + skipped{ |
| 649 | + submissionId |
| 650 | + reason |
| 651 | + } |
| 652 | + } |
| 653 | + } |
| 654 | + """ |
| 655 | + |
| 656 | + def __init__(self, submission_ids: "List[int]"): |
| 657 | + if submission_ids is None or len(submission_ids) < 1: |
| 658 | + raise IndicoInputError("You must specify submission ids") |
| 659 | + if len(set(submission_ids)) != len(submission_ids): |
| 660 | + raise IndicoInputError("Cannot include duplicate submission ids") |
| 661 | + |
| 662 | + super().__init__(self.query, variables={"submissionIds": submission_ids}) |
| 663 | + |
| 664 | + def process_response(self, response: "Payload") -> "SubmissionCancellationResult": |
| 665 | + payload = super().parse_payload(response)["cancelSubmissions"] |
| 666 | + return SubmissionCancellationResult(**payload) |
0 commit comments