mirror of
https://github.com/sartography/cr-connect-workflow.git
synced 2025-02-23 05:08:32 +00:00
PB_ENABLED can be set to false in the configuration (either in a file called instance/config.py, or as an environment variable) Added a check in the base_test, to assure that we are always running tests with the test configuration, and bail out otherwise. Setting TESTING=true as an environment variable will get this, but so well the correct ordering of imports. Just be dead certain the first file every test file imports is base_test.py. Aaron was right, and we call the Protocol Builder in all kinds of awful places. But we don't do this now. So Carlos, you should have the ability to reuse a lot of the logic in the study_service now. I dropped the poorly named "study-update" endpoint completely. We weren't using it. POST and PUT to Study still work just fine for doing exactly that. All the tests now run and pass with the Protocol builder disabled. Tests that specifically check PB behavior turn it back on for the test, or mock it out.
64 lines
2.7 KiB
Python
64 lines
2.7 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):
|
|
ENABLED = app.config['PB_ENABLED']
|
|
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) -> {}:
|
|
ProtocolBuilderService.__enabled_or_raise()
|
|
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) -> {}:
|
|
return ProtocolBuilderService.__make_request(study_id, ProtocolBuilderService.INVESTIGATOR_URL)
|
|
|
|
@staticmethod
|
|
def get_required_docs(study_id) -> Optional[List[ProtocolBuilderRequiredDocument]]:
|
|
return ProtocolBuilderService.__make_request(study_id, ProtocolBuilderService.REQUIRED_DOCS_URL)
|
|
|
|
@staticmethod
|
|
def get_study_details(study_id) -> {}:
|
|
return ProtocolBuilderService.__make_request(study_id, ProtocolBuilderService.STUDY_DETAILS_URL)
|
|
|
|
@staticmethod
|
|
def __enabled_or_raise():
|
|
if not ProtocolBuilderService.ENABLED:
|
|
raise ApiError("protocol_builder_disabled", "The Protocol Builder Service is currently disabled.")
|
|
|
|
@staticmethod
|
|
def __make_request(study_id, url):
|
|
ProtocolBuilderService.__enabled_or_raise()
|
|
if not isinstance(study_id, int):
|
|
raise ApiError("invalid_study_id", "This study id is invalid: " + str(study_id))
|
|
response = requests.get(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 when calling "
|
|
"url '%s'." %
|
|
(response.status_code, response.text, url))
|
|
|