From b25f45de9548712788d4ab37d6ca6483ac675846 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=AD=A6=E5=B3=B0?= Date: Thu, 4 Aug 2022 17:31:56 +0800 Subject: [PATCH] feature: add batch update for task and plan --- models/__init__.py | 8 +++++++- models/case_model.py | 18 ++++-------------- services/case_service.py | 4 ++-- services/plan_service.py | 1 + 4 files changed, 14 insertions(+), 17 deletions(-) diff --git a/models/__init__.py b/models/__init__.py index 9af6e80..2a28d80 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -1,6 +1,6 @@ import datetime -from sqlalchemy import Column, Integer, DateTime, func, select, delete, insert +from sqlalchemy import Column, Integer, DateTime, func, select, delete, insert, update from app.db import Base, db from common.tools import datetime_toString, string_toDatetime @@ -111,6 +111,12 @@ class BaseModel(Base): await cls.exec_orm(data_orm) return + @classmethod + async def batch_update(cls, values, *conditions): + update_orm = update(cls).where(*conditions).values(values) + await cls.exec_orm(update_orm) + return + class CommonModel(BaseModel): __abstract__ = True diff --git a/models/case_model.py b/models/case_model.py index dbd31df..3d50820 100644 --- a/models/case_model.py +++ b/models/case_model.py @@ -20,8 +20,10 @@ class Case(CommonModel): comment='测试用例运行模式,单机、集群') is_available = Column(Boolean(), nullable=False, default=True, comment='测试用例是否可用') tone_case = Column(String(128), nullable=True, comment='T-One测试用例,当run_method为自动的时候生效') - device_type = Column(String(128), default=Device_Type_EN.UNLIMIT.value, nullable=False, comment='设备类型,可多选,默认支持所有设备') - device_arch = Column(String(256), default=Device_Arch.NOARCH.value, nullable=False, comment='设备架构类型,可多选,默认支撑所有类型') + device_type = Column(String(128), default=Device_Type_EN.UNLIMIT.value, nullable=False, + comment = '设备类型,可多选,默认支持所有设备') + device_arch = Column(String(256), default=Device_Arch.NOARCH.value, nullable=False, + comment = '设备架构类型,可多选,默认支撑所有类型') labels = Column(String(256), nullable=True, default='', comment='设备标签,多个用,隔开') desc = Column(String(512), default='', nullable=True, comment='用例描述') pre_condition = Column(String(512), default='', nullable=True, comment='前置条件') @@ -78,18 +80,6 @@ async def remove_case_tree_nodes(node_id, nodes): return err, False -async def batch_update_cases(ids, values): - batch_update_orm = update(Case).where(Case.id.in_(ids)).values(values) - await Case.exec_orm(batch_update_orm) - return - - -async def update_cases_list(node_id, nodes): - batch_update_orm = update(Case).where(Case.id.in_(nodes)).values(parent=node_id) - await Case.exec_orm(batch_update_orm) - return - - async def get_distinct_path(start=None): distinct_orm = select(CaseTree.path).distinct(CaseTree.path) if start: diff --git a/services/case_service.py b/services/case_service.py index afeafd0..ac535ef 100644 --- a/services/case_service.py +++ b/services/case_service.py @@ -101,7 +101,7 @@ async def move_cases(data): node = await CaseTree.query_obj_one(CaseTree.id == data['parent']) if not node: return ERROR_UN_EXISTED_NODE, False - await update_cases_list(data['parent'], data['cases']) + await Case.batch_update({'parent': data['parent']}, Case.id.in_(data['cases'])) return None, True @@ -189,7 +189,7 @@ async def update_cases(data, user): need_update = True if not need_update: return '没有需要更新的字段', False - await batch_update_cases(case_ids, values) + await Case.batch_update(values, Case.id.in_(case_ids)) if 'labels' in data: await __batch_update_case_labels(data['labels'], case_ids) return None, True diff --git a/services/plan_service.py b/services/plan_service.py index 17a127f..632ccb5 100644 --- a/services/plan_service.py +++ b/services/plan_service.py @@ -75,6 +75,7 @@ async def add_tasks(data, plan_id): else: plan.tasks = f'{plan.tasks},{tasks}' await plan.update() + await Task.batch_update({'plan_id': plan_id}, Task.id.in_(data['tasks'])) return plan.to_dict(), True -- Gitee