mirror of
https://github.com/sartography/cr-connect-workflow.git
synced 2025-02-22 20:58:28 +00:00
meta field for categories
This commit is contained in:
parent
829c810807
commit
5b7e71d42d
@ -5,7 +5,7 @@ from sqlalchemy.exc import IntegrityError
|
||||
from crc import session
|
||||
from crc.api.common import ApiError, ApiErrorSchema
|
||||
from crc.models.study import Study, StudyEventType, StudyModel, StudySchema, StudyForUpdateSchema, \
|
||||
StudyStatus, StudyAssociatedSchema
|
||||
StudyStatus, StudyAssociatedSchema, Category
|
||||
from crc.models.task_log import TaskLogQuery, TaskLogQuerySchema
|
||||
from crc.services.spreadsheet_service import SpreadsheetService
|
||||
from crc.services.study_service import StudyService
|
||||
|
@ -115,10 +115,10 @@ class StudyEvent(db.Model):
|
||||
|
||||
|
||||
class CategoryMetadata(object):
|
||||
def __init__(self, id, state: WorkflowState = None, state_message=None):
|
||||
def __init__(self, id=None, state: WorkflowState = None, message=None):
|
||||
self.id = id
|
||||
self.state = state
|
||||
self.state_message = state_message
|
||||
self.message = message
|
||||
|
||||
|
||||
class CategoryMetadataSchema(ma.Schema):
|
||||
@ -126,7 +126,7 @@ class CategoryMetadataSchema(ma.Schema):
|
||||
|
||||
class Meta:
|
||||
model = CategoryMetadata
|
||||
additional = ["id", "state_message"]
|
||||
additional = ["id", "message"]
|
||||
unknown = INCLUDE
|
||||
|
||||
|
||||
@ -191,6 +191,7 @@ class Category(object):
|
||||
|
||||
class CategorySchema(ma.Schema):
|
||||
workflows = fields.List(fields.Nested(WorkflowMetadataSchema), dump_only=True)
|
||||
meta = fields.Nested(CategoryMetadataSchema)
|
||||
|
||||
class Meta:
|
||||
model = Category
|
||||
|
@ -16,7 +16,7 @@ class WorkflowSpecCategory(object):
|
||||
self.admin = admin
|
||||
self.workflows = [] # For storing Workflow Metadata
|
||||
self.specs = [] # For the list of specifications associated with a category
|
||||
self.meta = []
|
||||
self.meta = None # For storing category metadata
|
||||
|
||||
def __eq__(self, other):
|
||||
if not isinstance(other, WorkflowSpecCategory):
|
||||
@ -29,7 +29,7 @@ class WorkflowSpecCategory(object):
|
||||
class WorkflowSpecCategorySchema(ma.Schema):
|
||||
class Meta:
|
||||
model = WorkflowSpecCategory
|
||||
fields = ["id", "display_name", "display_order", "admin", "meta"]
|
||||
fields = ["id", "display_name", "display_order", "admin"]
|
||||
|
||||
@post_load
|
||||
def make_cat(self, data, **kwargs):
|
||||
|
@ -19,7 +19,7 @@ from crc.models.ldap import LdapSchema
|
||||
|
||||
from crc.models.protocol_builder import ProtocolBuilderCreatorStudy
|
||||
from crc.models.study import StudyModel, Study, StudyStatus, Category, WorkflowMetadata, StudyEventType, StudyEvent, \
|
||||
StudyAssociated, ProgressStatus
|
||||
StudyAssociated, ProgressStatus, CategoryMetadata
|
||||
from crc.models.task_event import TaskEventModel
|
||||
from crc.models.task_log import TaskLogModel
|
||||
from crc.models.workflow import WorkflowSpecCategory, WorkflowModel, WorkflowSpecInfo, WorkflowState, \
|
||||
@ -101,12 +101,13 @@ class StudyService(object):
|
||||
if study.status != StudyStatus.abandoned:
|
||||
for category in study.categories:
|
||||
workflow_metas = StudyService._get_workflow_metas(study_id, category)
|
||||
category_metas = StudyService._get_category_metas(categories)
|
||||
category_meta = []
|
||||
if master_workflow_results:
|
||||
study.warnings = StudyService._update_status_of_workflow_meta(workflow_metas,
|
||||
master_workflow_results)
|
||||
StudyService._update_status_of_category_meta(category_metas, master_workflow_results)
|
||||
category_meta = StudyService._update_status_of_category_meta(master_workflow_results, category)
|
||||
category.workflows = workflow_metas
|
||||
category.meta = category_meta
|
||||
return study
|
||||
|
||||
@staticmethod
|
||||
@ -122,13 +123,6 @@ class StudyService(object):
|
||||
workflow_metas.append(WorkflowMetadata.from_workflow(workflow, spec))
|
||||
return workflow_metas
|
||||
|
||||
@staticmethod
|
||||
def _get_category_metas(categories):
|
||||
category_metas = []
|
||||
for cat in categories:
|
||||
category_metas.append(cat.meta)
|
||||
return category_metas
|
||||
|
||||
|
||||
@staticmethod
|
||||
def get_study_associate(study_id=None, uid=None):
|
||||
@ -458,9 +452,15 @@ class StudyService(object):
|
||||
db.session.commit()
|
||||
|
||||
@staticmethod
|
||||
def _update_status_of_category_meta(cat_metas, status):
|
||||
warnings = []
|
||||
def _update_status_of_category_meta(status, cat):
|
||||
cat_meta = CategoryMetadata()
|
||||
unused_statuses = status.copy()
|
||||
if unused_statuses.get(cat.id):
|
||||
cat_meta.id = cat.id
|
||||
cat_meta.state = WorkflowState[unused_statuses.get(cat.id)['status']]
|
||||
cat_meta.message = unused_statuses.get(cat.id)['message']
|
||||
return cat_meta
|
||||
|
||||
|
||||
@staticmethod
|
||||
def _update_status_of_workflow_meta(workflow_metas, status):
|
||||
|
@ -5,9 +5,10 @@ from unittest.mock import patch
|
||||
from tests.base_test import BaseTest
|
||||
|
||||
from crc import db, app
|
||||
from crc.models.study import StudyModel, StudyStatus, StudyAssociatedSchema
|
||||
from crc.models.study import StudyModel, StudyStatus, StudyAssociatedSchema, CategoryMetadata, StudySchema, \
|
||||
CategorySchema, Category
|
||||
from crc.models.user import UserModel
|
||||
from crc.models.workflow import WorkflowModel, WorkflowStatus, WorkflowSpecCategory
|
||||
from crc.models.workflow import WorkflowModel, WorkflowStatus, WorkflowSpecCategory, WorkflowSpecCategorySchema
|
||||
from crc.services.ldap_service import LdapService
|
||||
from crc.services.study_service import StudyService
|
||||
from crc.services.workflow_processor import WorkflowProcessor
|
||||
@ -257,3 +258,23 @@ class TestStudyService(BaseTest):
|
||||
assoc_json = StudyAssociatedSchema(many=True).dump(associates)
|
||||
print(assoc_json)
|
||||
self.assertEquals("Dan", assoc_json[0]['ldap_info']['given_name'])
|
||||
|
||||
def test_set_category_metadata(self):
|
||||
user = self.create_user_with_study_and_workflow()
|
||||
study = db.session.query(StudyModel).filter_by(user_uid=user.uid).first()
|
||||
|
||||
####
|
||||
wfscat = WorkflowSpecCategory(id='test_cat', display_name='test cat', display_order=0, admin=False)
|
||||
wfs = self.create_workflow('empty_workflow')
|
||||
|
||||
wfscat.workflows = wfs
|
||||
x = WorkflowSpecCategorySchema().dump(wfscat)
|
||||
####
|
||||
|
||||
s = StudyService.get_study(study.id, [wfscat], None, {'test_cat':{'status':'hidden', 'message': 'msg'}})
|
||||
d = StudySchema().dump(s)
|
||||
self.assertEqual({'id': 'test_cat', 'message': 'msg', 'state': 'hidden'}, d['categories'][0]['meta'])
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user