2021-04-26 09:41:14 -04:00
|
|
|
from flask import g
|
|
|
|
|
|
|
|
from crc.api.common import ApiError
|
2021-06-02 10:00:55 -04:00
|
|
|
from crc.services.data_store_service import DataStoreBase
|
2021-04-26 09:41:14 -04:00
|
|
|
from crc.scripts.script import Script
|
2021-07-06 13:10:20 -04:00
|
|
|
from crc.services.document_service import DocumentService
|
2022-02-02 12:59:56 -05:00
|
|
|
from crc.services.user_file_service import UserFileService
|
2021-04-26 09:41:14 -04:00
|
|
|
|
|
|
|
|
|
|
|
class FileDataSet(Script, DataStoreBase):
|
|
|
|
def get_description(self):
|
|
|
|
return """Sets data the data store - takes three keyword arguments arguments: 'file_id' and 'key' and 'value'"""
|
|
|
|
|
|
|
|
def do_task_validate_only(self, task, study_id, workflow_id, *args, **kwargs):
|
2021-04-28 10:03:52 -04:00
|
|
|
if self.validate_kw_args(**kwargs):
|
|
|
|
myargs = [kwargs['key'],kwargs['value']]
|
|
|
|
fileid = kwargs['file_id']
|
|
|
|
del(kwargs['file_id'])
|
|
|
|
return True
|
2021-04-26 09:41:14 -04:00
|
|
|
|
2021-07-06 13:10:20 -04:00
|
|
|
def validate_kw_args(self, **kwargs):
|
|
|
|
if kwargs.get('key', None) is None:
|
2021-04-26 09:41:14 -04:00
|
|
|
raise ApiError(code="missing_argument",
|
2021-07-06 13:10:20 -04:00
|
|
|
message=f"The 'file_data_get' script requires a keyword argument of 'key'")
|
|
|
|
if kwargs.get('file_id', None) is None:
|
2021-04-26 09:41:14 -04:00
|
|
|
raise ApiError(code="missing_argument",
|
2021-07-06 13:10:20 -04:00
|
|
|
message=f"The 'file_data_get' script requires a keyword argument of 'file_id'")
|
|
|
|
if kwargs.get('value', None) is None:
|
2021-04-26 09:41:14 -04:00
|
|
|
raise ApiError(code="missing_argument",
|
2021-07-06 13:10:20 -04:00
|
|
|
message=f"The 'file_data_get' script requires a keyword argument of 'value'")
|
|
|
|
|
|
|
|
if kwargs['key'] == 'irb_code' and not DocumentService.is_allowed_document(kwargs.get('value')):
|
|
|
|
raise ApiError("invalid_form_field_key",
|
|
|
|
"When setting an irb_code, the form field id must match a known document in the "
|
|
|
|
"irb_docunents.xslx reference file. This code is not found in that file '%s'" %
|
|
|
|
kwargs.get('value'))
|
2021-04-26 09:41:14 -04:00
|
|
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
def do_task(self, task, study_id, workflow_id, *args, **kwargs):
|
|
|
|
if self.validate_kw_args(**kwargs):
|
|
|
|
myargs = [kwargs['key'],kwargs['value']]
|
2021-05-27 12:24:30 -04:00
|
|
|
|
|
|
|
try:
|
|
|
|
fileid = int(kwargs['file_id'])
|
|
|
|
except:
|
|
|
|
raise ApiError("invalid_file_id",
|
|
|
|
"Attempting to update DataStore for an invalid fileid '%s'" % kwargs['file_id'])
|
|
|
|
|
2021-04-26 09:41:14 -04:00
|
|
|
del(kwargs['file_id'])
|
2021-05-27 12:24:30 -04:00
|
|
|
if kwargs['key'] == 'irb_code':
|
|
|
|
irb_doc_code = kwargs['value']
|
2022-02-02 12:59:56 -05:00
|
|
|
UserFileService.update_irb_code(fileid, irb_doc_code)
|
2021-05-27 12:24:30 -04:00
|
|
|
|
|
|
|
|
2021-04-26 09:41:14 -04:00
|
|
|
return self.set_data_common(task.id,
|
|
|
|
None,
|
|
|
|
None,
|
|
|
|
workflow_id,
|
|
|
|
None,
|
|
|
|
'file_data_set',
|
|
|
|
fileid,
|
|
|
|
*myargs,
|
|
|
|
**kwargs)
|
|
|
|
|