Code for reordering Workflow Spec Categories

Still need to work on edge cases where you try to move past top or bottom of list
Still need to work on tests
This commit is contained in:
mike cullerton 2021-08-30 11:27:07 -04:00
parent f2201a3cef
commit 070a9c9350
2 changed files with 38 additions and 2 deletions

View File

@ -343,7 +343,18 @@ def delete_workflow_spec_category(cat_id):
def reorder_workflow_spec_category(cat_id, direction):
pass
if direction not in ('up', 'down'):
raise ApiError(code='bad_direction',
message='The direction must be `up` or `down`.')
category = session.query(WorkflowSpecCategoryModel).\
filter(WorkflowSpecCategoryModel.id == cat_id).first()
if category:
ordered_categories = WorkflowService.reorder_workflow_spec_category(category, direction)
schema = WorkflowSpecCategoryModelSchema(many=True)
return schema.dump(ordered_categories)
else:
return ApiError(code='bad_category_id',
message=f'The category id {cat_id} did not return a Workflow Spec Category. Make sure it is a valid ID.')
def lookup(workflow_id, task_spec_name, field_id, query=None, value=None, limit=10):

View File

@ -30,7 +30,7 @@ from crc.models.file import LookupDataModel, FileModel, File, FileSchema
from crc.models.study import StudyModel
from crc.models.task_event import TaskEventModel
from crc.models.user import UserModel, UserModelSchema
from crc.models.workflow import WorkflowModel, WorkflowStatus, WorkflowSpecModel, WorkflowSpecModelSchema
from crc.models.workflow import WorkflowModel, WorkflowStatus, WorkflowSpecModel, WorkflowSpecCategoryModel
from crc.services.data_store_service import DataStoreBase
from crc.services.document_service import DocumentService
@ -933,6 +933,8 @@ class WorkflowService(object):
@staticmethod
def reorder_workflow_spec(spec, direction):
category_id = spec.category_id
# Direction is either `up` or `down`
# This is checked in api.workflow.reorder_workflow_spec
if direction == 'up':
neighbor = session.query(WorkflowSpecModel). \
filter(WorkflowSpecModel.category_id == category_id). \
@ -954,3 +956,26 @@ class WorkflowService(object):
filter(WorkflowSpecModel.category_id == category_id). \
order_by(WorkflowSpecModel.display_order).all()
return ordered_specs
@staticmethod
def reorder_workflow_spec_category(category, direction):
# Direction is either `up` or `down`
# This is checked in api.workflow.reorder_workflow_spec_category
if direction == 'up':
neighbor = session.query(WorkflowSpecCategoryModel).\
filter(WorkflowSpecCategoryModel.display_order == category.display_order - 1).\
first()
neighbor.display_order += 1
category.display_order -= 1
if direction == 'down':
neighbor = session.query(WorkflowSpecCategoryModel).\
filter(WorkflowSpecCategoryModel.display_order == category.display_order + 1).\
first()
neighbor.display_order -= 1
category.display_order += 1
session.add(neighbor)
session.add(category)
session.commit()
ordered_categories = session.query(WorkflowSpecCategoryModel).\
order_by(WorkflowSpecCategoryModel.display_order).all()
return ordered_categories