Missed committing a pile of changes last night.

This commit is contained in:
Dan Funk 2020-06-02 07:08:29 -04:00
commit 4090667a5d
7 changed files with 48 additions and 35 deletions

View File

@ -808,12 +808,12 @@ paths:
$ref: "#/components/schemas/Script"
/approval:
parameters:
- name: approver_uid
- name: everything
in: query
required: false
description: Restrict results to a given approver uid, maybe we restrict the use of this at somepoint.
description: If set to true, returns all the approvals known to the system.
schema:
type: string
type: boolean
get:
operationId: crc.api.approval.get_approvals
summary: Provides a list of workflows approvals

View File

@ -1,3 +1,5 @@
from flask import g
from crc import app, db, session
from crc.api.common import ApiError, ApiErrorSchema
@ -5,11 +7,11 @@ from crc.models.approval import Approval, ApprovalModel, ApprovalSchema
from crc.services.approval_service import ApprovalService
def get_approvals(approver_uid=None):
if not approver_uid:
def get_approvals(everything=False):
if everything:
db_approvals = ApprovalService.get_all_approvals()
else:
db_approvals = ApprovalService.get_approvals_per_user(approver_uid)
db_approvals = ApprovalService.get_approvals_per_user(g.user.uid)
approvals = [Approval.from_model(approval_model) for approval_model in db_approvals]
results = ApprovalSchema(many=True).dump(approvals)

View File

@ -1,8 +1,5 @@
import json
import connexion
import flask
from flask import redirect, g, request
from flask import g, request
from crc import app, db
from crc.api.common import ApiError

View File

@ -68,31 +68,33 @@ class Approval(object):
if model.study:
instance.title = model.study.title
principal_investigator_id = model.study.primary_investigator_id
instance.approver = {'uid': model.approver_uid}
instance.primary_investigator = {'uid': principal_investigator_id}
instance.approver = {}
try:
ldap_service = LdapService()
# Primary investigator details
pi_info = ldap_service.user_info(principal_investigator_id)
instance.primary_investigator['uid'] = principal_investigator_id
instance.primary_investigator['display_name'] = pi_info.display_name
instance.primary_investigator['title'] = pi_info.title
instance.primary_investigator['department'] = pi_info.department
# Approver details
approver_info = ldap_service.user_info(model.approver_uid)
user_info = ldap_service.user_info(model.approver_uid)
instance.approver['uid'] = model.approver_uid
instance.approver['display_name'] = approver_info.display_name
instance.approver['title'] = approver_info.title
instance.approver['department'] = approver_info.department
instance.approver['display_name'] = user_info.display_name
instance.approver['title'] = user_info.title
instance.approver['department'] = user_info.department
except (ApiError, LDAPSocketOpenError) as exception:
instance.primary_investigator['display_name'] = 'Primary Investigator details'
instance.primary_investigator['department'] = 'currently not available'
instance.approver['display_name'] = 'Approver details'
user_info = None
instance.approver['display_name'] = 'Unknown'
instance.approver['department'] = 'currently not available'
# TODO: Organize it properly, move it to services
# TODO: Rely on Dan's new service for file creation
instance.primary_investigator = {}
try:
ldap_service = LdapService()
user_info = ldap_service.user_info(model.study.primary_investigator_id)
instance.primary_investigator['uid'] = model.approver_uid
instance.primary_investigator['display_name'] = user_info.display_name
instance.primary_investigator['title'] = user_info.title
instance.primary_investigator['department'] = user_info.department
except (ApiError, LDAPSocketOpenError) as exception:
user_info = None
instance.primary_investigator['display_name'] = 'Primary Investigator details'
instance.primary_investigator['department'] = 'currently not available'
doc_dictionary = FileService.get_reference_data(FileService.DOCUMENT_LIST, 'code', ['id'])
instance.associated_files = []
@ -105,12 +107,13 @@ class Approval(object):
associated_file['id'] = approval_file.file_data.file_model.id
if extra_info:
irb_doc_code = approval_file.file_data.file_model.irb_doc_code
associated_file['name'] = '_'.join((irb_doc_code, approval_file.file_data.file_model.name))
associated_file['name'] = '_'.join((extra_info['category1'],
approval_file.file_data.file_model.name))
associated_file['description'] = extra_info['description']
else:
associated_file['name'] = approval_file.file_data.file_model.name
associated_file['description'] = 'No description available'
associated_file['name'] = '(' + principal_investigator_id + ')' + associated_file['name']
associated_file['name'] = '(' + model.study.primary_investigator_id + ')' + associated_file['name']
associated_file['content_type'] = approval_file.file_data.file_model.content_type
instance.associated_files.append(associated_file)

3
package-lock.json generated Normal file
View File

@ -0,0 +1,3 @@
{
"lockfileVersion": 1
}

View File

@ -64,7 +64,7 @@ class TestApprovals(BaseTest):
def test_list_approvals_per_approver(self):
"""Only approvals associated with approver should be returned"""
approver_uid = self.approval_2.approver_uid
rv = self.app.get(f'/v1.0/approval?approver_uid={approver_uid}', headers=self.logged_in_headers())
rv = self.app.get(f'/v1.0/approval', headers=self.logged_in_headers())
self.assert_success(rv)
response = json.loads(rv.get_data(as_text=True))
@ -82,7 +82,7 @@ class TestApprovals(BaseTest):
def test_list_approvals_per_admin(self):
"""All approvals will be returned"""
rv = self.app.get('/v1.0/approval', headers=self.logged_in_headers())
rv = self.app.get('/v1.0/approval?everything=true', headers=self.logged_in_headers())
self.assert_success(rv)
response = json.loads(rv.get_data(as_text=True))
@ -90,7 +90,16 @@ class TestApprovals(BaseTest):
# Returned approvals should match what's in the db
approvals_count = ApprovalModel.query.count()
response_count = len(response)
self.assertEqual(approvals_count, response_count)
self.assertEqual(2, response_count)
rv = self.app.get('/v1.0/approval', headers=self.logged_in_headers())
self.assert_success(rv)
response = json.loads(rv.get_data(as_text=True))
response_count = len(response)
self.assertEqual(1, response_count)
def test_update_approval(self):
"""Approval status will be updated"""

View File

@ -10,7 +10,6 @@ from crc.models.api_models import WorkflowApiSchema, MultiInstanceType, TaskSche
from crc.models.file import FileModelSchema
from crc.models.stats import TaskEventModel
from crc.models.workflow import WorkflowStatus
from crc.services.protocol_builder import ProtocolBuilderService
from crc.services.workflow_service import WorkflowService