2020-03-19 21:13:30 +00:00
|
|
|
from crc import session
|
2020-03-03 18:50:22 +00:00
|
|
|
from crc.api.common import ApiError
|
|
|
|
from crc.models.study import StudyModel, StudyModelSchema
|
2020-03-19 21:13:30 +00:00
|
|
|
from crc.scripts.script import Script
|
2020-03-03 18:50:22 +00:00
|
|
|
from crc.services.protocol_builder import ProtocolBuilderService
|
2020-03-27 12:29:31 +00:00
|
|
|
from crc.services.workflow_processor import WorkflowProcessor
|
2020-03-03 18:50:22 +00:00
|
|
|
|
|
|
|
|
|
|
|
class StudyInfo(Script):
|
|
|
|
"""Just your basic class that can pull in data from a few api endpoints and do a basic task."""
|
|
|
|
pb = ProtocolBuilderService()
|
2020-03-19 21:13:30 +00:00
|
|
|
type_options = ['info', 'investigators', 'details']
|
2020-03-03 18:50:22 +00:00
|
|
|
|
|
|
|
def get_description(self):
|
2020-03-19 21:13:30 +00:00
|
|
|
return """StudyInfo [TYPE], where TYPE is one of 'info', 'investigators', or 'details'
|
2020-03-03 18:50:22 +00:00
|
|
|
Adds details about the current study to the Task Data. The type of information required should be
|
|
|
|
provided as an argument. Basic returns the basic information such as the title. Investigators provides
|
|
|
|
detailed information about each investigator in th study. Details provides a large number
|
|
|
|
of details about the study, as gathered within the protocol builder, and 'required_docs',
|
|
|
|
lists all the documents the Protocol Builder has determined will be required as a part of
|
|
|
|
this study.
|
|
|
|
"""
|
|
|
|
|
2020-03-27 12:29:31 +00:00
|
|
|
def do_task_validate_only(self, task, study_id, *args, **kwargs):
|
|
|
|
"""For validation only, pretend no results come back from pb"""
|
|
|
|
self.check_args(args)
|
|
|
|
|
|
|
|
|
2020-03-03 18:50:22 +00:00
|
|
|
def do_task(self, task, study_id, *args, **kwargs):
|
2020-03-27 12:29:31 +00:00
|
|
|
self.check_args(args)
|
|
|
|
|
2020-03-03 18:50:22 +00:00
|
|
|
cmd = args[0]
|
2020-03-09 16:41:35 +00:00
|
|
|
study_info = {}
|
|
|
|
if "study" in task.data:
|
|
|
|
study_info = task.data["study"]
|
|
|
|
|
2020-03-03 18:50:22 +00:00
|
|
|
if cmd == 'info':
|
|
|
|
study = session.query(StudyModel).filter_by(id=study_id).first()
|
|
|
|
schema = StudyModelSchema()
|
2020-03-09 16:41:35 +00:00
|
|
|
study_info["info"] = schema.dump(study)
|
2020-03-03 18:50:22 +00:00
|
|
|
if cmd == 'investigators':
|
2020-03-27 19:48:21 +00:00
|
|
|
study_info["investigators"] = self.pb.get_investigators(study_id, as_json=True)
|
2020-03-03 18:50:22 +00:00
|
|
|
if cmd == 'details':
|
2020-03-27 19:48:21 +00:00
|
|
|
study_info["details"] = self.pb.get_study_details(study_id, as_json=True)
|
2020-03-09 16:41:35 +00:00
|
|
|
task.data["study"] = study_info
|
2020-03-27 12:29:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
def check_args(self, args):
|
|
|
|
if len(args) != 1 or (args[0] not in StudyInfo.type_options):
|
|
|
|
raise ApiError(code="missing_argument",
|
|
|
|
message="The StudyInfo script requires a single argument which must be "
|
|
|
|
"one of %s" % ",".join(StudyInfo.type_options))
|