feat: MySchedule创建时自动获取汉语描述

This commit is contained in:
caoqianming 2023-04-18 18:10:50 +08:00
parent 0303184ceb
commit 3410f5d968
3 changed files with 23 additions and 4 deletions

View File

@ -420,7 +420,7 @@ class MyScheduleCreateSerializer(CustomModelSerializer):
class Meta:
model = MySchedule
fields = ['name', 'type', 'interval_', 'crontab_']
fields = ['type', 'interval_', 'crontab_']
def validate(self, attrs):
if attrs['type'] == 10 and attrs.get('interval_', None):

View File

@ -38,7 +38,8 @@ from .serializers import (ApkSerializer, DeptCreateUpdateSerializer, DeptSeriali
UserCreateSerializer, UserListSerializer, UserPostCreateSerializer,
UserPostSerializer, UserUpdateSerializer, MyScheduleCreateSerializer, MyScheduleSerializer)
from rest_framework.viewsets import GenericViewSet
from cron_descriptor import get_description
import locale
# logger.info('请求成功! response_code:{}response_headers:{}
# response_body:{}'.format(response_code, response_headers, response_body[:251]))
@ -684,7 +685,23 @@ class MyScheduleViewSet(ListModelMixin, CreateModelMixin, DestroyModelMixin, Cus
create_serializer_class = MyScheduleCreateSerializer
queryset = MySchedule.objects.all()
select_related_fields = ['interval', 'crontab']
period_dict = {
"days": "",
"hours": "小时",
"minutes": "分钟",
"seconds": "",
"microseconds": "毫秒"
}
def get_chinese_description(self, type:str = 'interval', data: dict = {}):
"""转换为汉语描述
"""
if type == 'interval':
return f"每隔{data['every']}{data['period']}"
elif type == 'crontab':
locale.setlocale(locale.LC_ALL, 'zh_CN.UTF-8')
return get_description(f"{data['minute']} {data['hour']} {data['day_of_month']} {data['month_of_year']} {data['day_of_week']}")
return ''
@transaction.atomic
def perform_create(self, serializer):
vdata = serializer.validated_data
@ -694,11 +711,13 @@ class MyScheduleViewSet(ListModelMixin, CreateModelMixin, DestroyModelMixin, Cus
if vdata['type'] == 10:
interval, _ = IntervalSchedule.objects.get_or_create(**interval_data, defaults=interval_data)
obj = MySchedule(**vdata)
obj.name = self.get_chinese_description('interval', vdata)
obj.interval = interval
obj.save()
elif vdata['type'] == 20:
crontab_data['timezone'] = 'Asia/Shanghai'
crontab, _ = CrontabSchedule.objects.get_or_create(**crontab_data, defaults=crontab_data)
obj = MySchedule(**vdata)
obj.name = self.get_chinese_description('crontab', vdata)
obj.crontab = crontab
obj.save()

View File

@ -28,4 +28,4 @@ pycryptodome==3.15.0
aliyun-python-sdk-core==2.13.36
xlwt==1.3.0
openpyxl==3.1.0
cron-descriptor==1.2.35