Merge branch 'dev' into email-name-parameter-726

This commit is contained in:
Dan 2022-04-27 16:13:32 -04:00
commit cd3e74a3f2
5 changed files with 18 additions and 6 deletions

View File

@ -83,6 +83,11 @@ paths:
required : false
schema :
type : integer
- name : include_archived
in : query
required : false
schema :
type : boolean
get:
operationId: crc.api.document.get_document_directory
summary: Returns a directory of all files for study in a nested structure

View File

@ -5,12 +5,12 @@ from crc.services.lookup_service import LookupService
from crc.services.user_file_service import UserFileService
def get_document_directory(study_id, workflow_id=None):
def get_document_directory(study_id, workflow_id=None, include_archived=False):
"""
return a nested list of files arranged according to the category hierarchy
defined in the doc dictionary
"""
file_models = UserFileService.get_files_for_study(study_id=study_id)
file_models = UserFileService.get_files_for_study(study_id=study_id, irb_doc_code=None, include_archived=include_archived)
doc_dict = DocumentService.get_dictionary()
files = (File.from_file_model(model, doc_dict) for model in file_models)
directory = DocumentService.get_directory(doc_dict, files, workflow_id)

View File

@ -67,7 +67,7 @@ def update_file_data(file_id):
file = connexion.request.files['file']
if file_model is None:
raise ApiError('no_such_file', f'The file id you provided ({file_id}) does not exist')
file_model = UserFileService.update_file(file_model, file.stream.read(), file.content_type)
file_model = UserFileService().update_file(file_model, file.stream.read(), file.content_type)
return FileSchema().dump(to_file_api(file_model))

View File

@ -123,6 +123,8 @@ class File(object):
self.last_modified = None
self.size = None
self.data_store = {}
self.user_uid = None
self.archived = None
@classmethod
def from_file_model(cls, file_model: FileModel, doc_dictionary):
@ -140,6 +142,8 @@ class File(object):
instance.document = document
instance.last_modified = file_model.date_modified
instance.size = None
instance.user_uid = file_model.user_uid
instance.archived = file_model.archived
instance.data_store = {}
for ds in file_model.data_stores:
instance.data_store[ds.key] = ds.value
@ -184,7 +188,7 @@ class FileSchema(Schema):
class Meta:
model = File
fields = ["id", "name", "content_type", "workflow_id",
"irb_doc_code", "last_modified", "type",
"irb_doc_code", "last_modified", "type", "archived",
"size", "data_store", "document", "user_uid", "url"]
unknown = INCLUDE
url = Method("get_url")

View File

@ -116,13 +116,16 @@ class UserFileService(object):
return file_model
@staticmethod
def get_files_for_study(study_id, irb_doc_code=None):
def get_files_for_study(study_id, irb_doc_code=None, include_archived=False):
query = session.query(FileModel).\
join(WorkflowModel).\
filter(WorkflowModel.study_id == study_id)
if not include_archived:
# Current documents have an archived value of False
query = query.filter(FileModel.archived == False)
if irb_doc_code is not None:
query = query.filter(FileModel.irb_doc_code == irb_doc_code)
return query.all()
return query.order_by(desc(FileModel.date_modified)).all()
@staticmethod
def get_files(workflow_id=None, name=None, irb_doc_code=None):