- git 初始化 + .gitignore 补全(根 .env / logs / instance / __pycache__ 等) - 修复 utils/.gitignore 误将整个 utils/ 源码层忽略的问题,补入全部工具源码(含 ip2region.xdb) - 含后端全部代码:application / extensions / utils / config / migrations - 含前端 ui/(后续整体迁走) - 不含根 .env(含密钥,本地保留) Co-Authored-By: Claude <noreply@anthropic.com>
175 lines
4.9 KiB
Python
175 lines
4.9 KiB
Python
"""
|
|
定时任务表单验证模块
|
|
=============================================================
|
|
|
|
提供定时任务相关的表单验证功能。
|
|
"""
|
|
|
|
from wtforms import ValidationError, IntegerField, StringField
|
|
from wtforms.validators import NumberRange, DataRequired, Length, Optional
|
|
|
|
from application.forms.base_form import BaseForm
|
|
from application.models.job import Job
|
|
|
|
|
|
# ============================================================
|
|
# 定时任务表单验证
|
|
# ============================================================
|
|
|
|
class JobForm(BaseForm):
|
|
"""
|
|
定时任务表单验证类
|
|
|
|
用于添加和更新定时任务时的数据验证。
|
|
"""
|
|
|
|
# 任务ID
|
|
id = IntegerField(
|
|
label='任务ID',
|
|
validators=[
|
|
Optional(),
|
|
NumberRange(min=1, message='任务ID必须大于0')
|
|
],
|
|
description='任务唯一标识,更新时必填'
|
|
)
|
|
|
|
# 任务名称
|
|
jobName = StringField(
|
|
label='任务名称',
|
|
validators=[
|
|
DataRequired(message='任务名称不能为空'),
|
|
Length(max=255, message='任务名称长度不得超过255个字符')
|
|
],
|
|
description='任务名称'
|
|
)
|
|
|
|
# 任务别名
|
|
jobAlias = StringField(
|
|
label='任务别名',
|
|
validators=[
|
|
Optional(),
|
|
Length(max=255, message='任务别名长度不得超过255个字符')
|
|
],
|
|
description='任务别名'
|
|
)
|
|
|
|
# 任务分组
|
|
jobGroup = StringField(
|
|
label='任务分组',
|
|
validators=[
|
|
Optional(),
|
|
Length(max=255, message='任务分组长度不得超过255个字符')
|
|
],
|
|
description='任务分组,默认DEFAULT'
|
|
)
|
|
|
|
# 任务触发器
|
|
jobTrigger = StringField(
|
|
label='任务触发器',
|
|
validators=[
|
|
Optional(),
|
|
Length(max=255, message='任务触发器长度不得超过255个字符')
|
|
],
|
|
description='任务触发器标识'
|
|
)
|
|
|
|
# 任务状态
|
|
status = IntegerField(
|
|
label='任务状态',
|
|
validators=[
|
|
DataRequired(message='任务状态不能为空'),
|
|
NumberRange(min=0, max=3, message='任务状态值在0~3之间')
|
|
],
|
|
description='任务状态:0-未发布 1-运行中 2-暂停 3-删除'
|
|
)
|
|
|
|
# Cron表达式
|
|
cronExpression = StringField(
|
|
label='Cron表达式',
|
|
validators=[
|
|
Optional(),
|
|
Length(max=255, message='Cron表达式长度不得超过255个字符')
|
|
],
|
|
description='Cron表达式,如:0 2 * * *'
|
|
)
|
|
|
|
# 执行策略
|
|
executePolicy = IntegerField(
|
|
label='执行策略',
|
|
validators=[
|
|
DataRequired(message='执行策略不能为空'),
|
|
NumberRange(min=1, max=3, message='执行策略值在1~3之间')
|
|
],
|
|
description='执行策略:1-立即执行 2-执行一次 3-放弃执行'
|
|
)
|
|
|
|
# 是否同步任务
|
|
isSync = IntegerField(
|
|
label='是否同步任务',
|
|
validators=[
|
|
DataRequired(message='是否同步任务不能为空'),
|
|
NumberRange(min=0, max=1, message='是否同步任务值在0~1之间')
|
|
],
|
|
description='是否同步任务:0-异步 1-同步'
|
|
)
|
|
|
|
# 任务URL
|
|
url = StringField(
|
|
label='任务URL',
|
|
validators=[
|
|
Optional(),
|
|
Length(max=255, message='任务URL长度不得超过255个字符')
|
|
],
|
|
description='任务请求URL'
|
|
)
|
|
|
|
# 任务备注
|
|
note = StringField(
|
|
label='任务备注',
|
|
validators=[
|
|
Optional(),
|
|
Length(max=255, message='任务备注长度不得超过255个字符')
|
|
],
|
|
description='任务备注说明'
|
|
)
|
|
|
|
def validate_job_name(self, field):
|
|
"""验证任务名称不能重复"""
|
|
if not field.data:
|
|
return
|
|
|
|
current_id = self.id.data if self.id.data else None
|
|
query = Job.query.filter(Job.job_name == field.data, Job.is_delete == 0)
|
|
|
|
if current_id:
|
|
query = query.filter(Job.id != current_id)
|
|
|
|
if query.first():
|
|
raise ValidationError("任务名称已存在")
|
|
|
|
|
|
# ============================================================
|
|
# 任务状态设置表单
|
|
# ============================================================
|
|
|
|
class JobStatusForm(BaseForm):
|
|
"""任务状态设置表单验证类"""
|
|
|
|
id = IntegerField(
|
|
label='任务ID',
|
|
validators=[
|
|
DataRequired(message='任务ID不能为空'),
|
|
NumberRange(min=1, message='任务ID必须大于0')
|
|
],
|
|
description='要修改状态的任务ID'
|
|
)
|
|
|
|
status = IntegerField(
|
|
label='任务状态',
|
|
validators=[
|
|
Optional(),
|
|
NumberRange(min=0, max=3, message='任务状态值在0~3之间')
|
|
],
|
|
description='目标状态:0-未发布 1-运行中 2-暂停 3-删除'
|
|
)
|