mirror of
https://github.com/sartography/cr-connect-workflow.git
synced 2025-02-23 05:08:32 +00:00
Because this changes the endpoint for all existing document details, I've modified all the test and static bpmn files to use the new format. Shorting up the SponsorsList.xls file makes for slightly faster tests. seems senseless to load 5000 everytime we reset the data. Tried to test all of this carefully in the test_study_details_documents.py test.
70 lines
3.0 KiB
Python
70 lines
3.0 KiB
Python
import json
|
|
from typing import List, Optional
|
|
|
|
import requests
|
|
|
|
from crc import app
|
|
from crc.api.common import ApiError
|
|
from crc.models.protocol_builder import ProtocolBuilderStudy, ProtocolBuilderStudySchema, ProtocolBuilderInvestigator, \
|
|
ProtocolBuilderRequiredDocument, ProtocolBuilderRequiredDocumentSchema
|
|
|
|
|
|
class ProtocolBuilderService(object):
|
|
STUDY_URL = app.config['PB_USER_STUDIES_URL']
|
|
INVESTIGATOR_URL = app.config['PB_INVESTIGATORS_URL']
|
|
REQUIRED_DOCS_URL = app.config['PB_REQUIRED_DOCS_URL']
|
|
STUDY_DETAILS_URL = app.config['PB_STUDY_DETAILS_URL']
|
|
|
|
@staticmethod
|
|
def get_studies(user_id) -> {}:
|
|
if not isinstance(user_id, str):
|
|
raise ApiError("invalid_user_id", "This user id is invalid: " + str(user_id))
|
|
response = requests.get(ProtocolBuilderService.STUDY_URL % user_id)
|
|
if response.ok and response.text:
|
|
pb_studies = ProtocolBuilderStudySchema(many=True).loads(response.text)
|
|
return pb_studies
|
|
else:
|
|
raise ApiError("protocol_builder_error",
|
|
"Received an invalid response from the protocol builder (status %s): %s" %
|
|
(response.status_code, response.text))
|
|
|
|
@staticmethod
|
|
def get_investigators(study_id) -> {}:
|
|
ProtocolBuilderService.check_args(study_id)
|
|
response = requests.get(ProtocolBuilderService.INVESTIGATOR_URL % study_id)
|
|
if response.ok and response.text:
|
|
pb_studies = json.loads(response.text)
|
|
return pb_studies
|
|
else:
|
|
raise ApiError("protocol_builder_error",
|
|
"Received an invalid response from the protocol builder (status %s): %s" %
|
|
(response.status_code, response.text))
|
|
|
|
@staticmethod
|
|
def get_required_docs(study_id) -> Optional[List[ProtocolBuilderRequiredDocument]]:
|
|
ProtocolBuilderService.check_args(study_id)
|
|
response = requests.get(ProtocolBuilderService.REQUIRED_DOCS_URL % study_id)
|
|
if response.ok and response.text:
|
|
return json.loads(response.text)
|
|
else:
|
|
raise ApiError("protocol_builder_error",
|
|
"Received an invalid response from the protocol builder (status %s): %s" %
|
|
(response.status_code, response.text))
|
|
|
|
@staticmethod
|
|
def get_study_details(study_id) -> {}:
|
|
ProtocolBuilderService.check_args(study_id)
|
|
response = requests.get(ProtocolBuilderService.STUDY_DETAILS_URL % study_id)
|
|
if response.ok and response.text:
|
|
pb_study_details = json.loads(response.text)
|
|
return pb_study_details
|
|
else:
|
|
raise ApiError("protocol_builder_error",
|
|
"Received an invalid response from the protocol builder (status %s): %s" %
|
|
(response.status_code, response.text))
|
|
|
|
@staticmethod
|
|
def check_args(study_id):
|
|
if not isinstance(study_id, int):
|
|
raise ApiError("invalid_study_id", "This study id is invalid: " + str(study_id))
|