def test_workflow_submission_auto_review(indico, force_complete, org_annotate_dataset, org_annotate_model_group): client = IndicoClient() wfs = client.call(ListWorkflows(dataset_ids=[org_annotate_dataset.id])) wf = max(wfs, key=lambda w: w.id) wf = client.call( UpdateWorkflowSettings(wf, enable_review=True, enable_auto_review=True)) assert wf.review_enabled and wf.auto_review_enabled _file = str(Path(__file__).parents[1]) + "/data/org-sample.pdf" sub_ids = client.call(WorkflowSubmission(workflow_id=wf.id, files=[_file])) subs = client.call(WaitForSubmissions(sub_ids, timeout=120)) sub = subs[0] assert sub.status == "PENDING_AUTO_REVIEW" raw_result = client.call(RetrieveStorageObject(sub.result_file)) changes = raw_result["results"]["document"]["results"] for model, preds in changes.items(): if isinstance(preds, dict): preds["accepted"] = True elif isinstance(preds, list): for pred in preds: pred["accepted"] = True job = client.call( SubmitReview(sub.id, changes=changes, force_complete=force_complete)) job = client.call(JobStatus(job.id)) submission = client.call(GetSubmission(sub.id)) assert submission.status == "COMPLETE" if force_complete else "PENDING_REVIEW"
def test_workflow_submission(indico, airlines_dataset, airlines_model_group: ModelGroup, _input): client = IndicoClient() wfs = client.call(ListWorkflows(dataset_ids=[airlines_dataset.id])) wf = max(wfs, key=lambda w: w.id) submission_ids = client.call( WorkflowSubmission(workflow_id=wf.id, **_input)) submission_id = submission_ids[0] assert submission_id is not None with pytest.raises(IndicoInputError): client.call(SubmissionResult(submission_id, "FAILED")) with pytest.raises(IndicoInputError): client.call(SubmissionResult(submission_id, "INVALID_STATUS")) result_url = client.call( SubmissionResult(submission_id, "COMPLETE", wait=True)) result = client.call(RetrieveStorageObject(result_url.result)) assert isinstance(result, dict) assert result["submission_id"] == submission_id assert result["file_version"] == 1 client.call(UpdateSubmission(submission_id, retrieved=True)) sub = client.call(GetSubmission(submission_id)) assert isinstance(sub, Submission) assert sub.retrieved is True
def test_workflow_submission_missing_workflow(indico): client = IndicoClient() dataset_filepath = str(Path(__file__).parents[1]) + "/data/mock.pdf" with pytest.raises(IndicoError): client.call(WorkflowSubmission(workflow_id=0, files=[dataset_filepath]))
def test_list_workflow_submission_retrieved(indico, airlines_dataset, airlines_model_group: ModelGroup): client = IndicoClient() wfs = client.call(ListWorkflows(dataset_ids=[airlines_dataset.id])) wf = max(wfs, key=lambda w: w.id) dataset_filepath = str(Path(__file__).parents[1]) + "/data/mock.pdf" submission_ids = client.call( WorkflowSubmission(workflow_id=wf.id, files=[dataset_filepath])) submission_id = submission_ids[0] assert submission_id is not None client.call(SubmissionResult(submission_id, "COMPLETE", wait=True)) client.call(UpdateSubmission(submission_id, retrieved=True)) submissions = client.call( ListSubmissions( filters=SubmissionFilter(retrieved=True, status="COMPLETE"))) assert all([s.retrieved for s in submissions]) assert submission_id in [s.id for s in submissions] submissions = client.call( ListSubmissions(filters=SubmissionFilter(retrieved=False))) assert all([not s.retrieved for s in submissions]) assert submission_id not in [s.id for s in submissions]
def test_workflow_submission_mixed_args(indico, airlines_dataset): client = IndicoClient() wfs = client.call(ListWorkflows(dataset_ids=[airlines_dataset.id])) wf = max(wfs, key=lambda w: w.id) _file = str(Path(__file__).parents[1]) + "/data/mock.pdf" url = PUBLIC_URL + "mock.pdf" with pytest.raises(IndicoInputError): client.call( WorkflowSubmission(workflow_id=wf.id, files=[_file], urls=[url]))
def test_workflow_job(indico, airlines_dataset, airlines_model_group: ModelGroup): client = IndicoClient() wfs = client.call(ListWorkflows(dataset_ids=[airlines_dataset.id])) wf = max(wfs, key=lambda w: w.id) dataset_filepath = str(Path(__file__).parents[1]) + "/data/mock.pdf" jobs = client.call( WorkflowSubmission(workflow_id=wf.id, files=[dataset_filepath], submission=False)) job = jobs[0] assert job.id is not None job = client.call(JobStatus(id=job.id, wait=True)) assert job.status == "SUCCESS" assert job.ready is True assert isinstance(job.result["url"], str) result = client.call(RetrieveStorageObject(job.result)) assert isinstance(result, dict)
def test_workflow_submission_versioned(indico, airlines_dataset, airlines_model_group: ModelGroup, _input): client = IndicoClient() wfs = client.call(ListWorkflows(dataset_ids=[airlines_dataset.id])) wf = max(wfs, key=lambda w: w.id) submission_ids = client.call( WorkflowSubmission(workflow_id=wf.id, result_version="LATEST", **_input)) assert len(submission_ids) == len(next(iter(_input.values()))) submission_id = submission_ids[0] assert submission_id is not None submissions = client.call(WaitForSubmissions(submission_id)) result = client.call(RetrieveStorageObject(submissions[0].result_file)) assert isinstance(result, dict) assert result["file_version"] == 2 assert len(result["submission_results"]) == 1 assert result["submission_results"][0]["input_filename"] == "mock.pdf"
# Use your dataset's id to call it's associated workflow dataset_id = 6826 my_config = IndicoConfig( host="app.indico.io", api_token_path="./path/to/indico_api_token.txt" ) client = IndicoClient(config=my_config) # Return a list of workflows for this dataset id or an empty list if there are none workflows = client.call(ListWorkflows(dataset_ids=[dataset_id])) if workflows: # Send a document through the workflow # Get back one Job per file jobs = client.call( WorkflowSubmission( workflow_id=workflows[0].id, files=["./path/to/sample.pdf"], submission=False, ) ) job = jobs[0] # Retrieve and print your result status = client.call(JobStatus(id=job.id, wait=True)) wf_result = client.call(RetrieveStorageObject(status.result)) print(wf_result) else: print("You don't have any workflows for this dataset")
# Create an Indico API client my_config = IndicoConfig(host="app.indico.io", api_token_path="./path/to/indico_api_token.txt") client = IndicoClient(config=my_config) workflow_id = 5 """ Example 1 Create a new submission Generate a submission result as soon as the submission is done processing Then mark the submission has having been retrieved """ submission_ids = client.call( WorkflowSubmission(workflow_id=workflow_id, files=["./path_to_doc.pdf"])) submission_id = submission_ids[0] result_url = client.call(SubmissionResult(submission_id, wait=True)) result = client.call(RetrieveStorageObject(result_url.result)) print(result) client.call(UpdateSubmission(submission_id, retrieved=True)) """ Example 2 List all submissions that are COMPLETE or FAILED Generate submission results for these Delay gathering the results until required """ sub_filter = or_(SubmissionFilter(status="COMPLETE"), SubmissionFilter(status="FAILED"))