diff --git a/safesite/services.py b/safesite/services.py index 986843dc..7eb1ff45 100644 --- a/safesite/services.py +++ b/safesite/services.py @@ -1,7 +1,7 @@ import locale from croniter import croniter from cron_descriptor import get_description -from safesite.models import MySchedule, GridTaskSet, PeriodicTask +from safesite.models import MySchedule, GridTaskSet, PeriodicTask, CrontabSchedule, IntervalSchedule from django.core.exceptions import ObjectDoesNotExist period_dict = { "days": "天", @@ -14,7 +14,10 @@ def get_chinese_description(type:str = 'interval', data: dict = {}): """转换为汉语描述 """ if type == 'interval': - return f"每隔{data['every']}{period_dict[data['period']]}" + try: + return f"每隔{data['every']}{period_dict[data['period']]}" + except KeyError: + return '' elif type == 'crontab': exp = f"{data['minute']} {data['hour']} {data['day_of_month']} {data['month_of_year']} {data['day_of_week']}" try: @@ -26,26 +29,22 @@ def get_chinese_description(type:str = 'interval', data: dict = {}): return '' def correct_myschedule(): - qs = MySchedule.objects.all() - for ind, item in enumerate(qs): - typeset = item.typeset - if typeset == 'interval': - interval = item.interval - item.name = get_chinese_description(typeset, {'every': interval.every, 'period': interval.period}) - item.save() - elif typeset == 'crontab': - try: - crontab = item.crontab - if crontab: - item.name = get_chinese_description(typeset, + cs = CrontabSchedule.objects.all() + for crontab in cs: + name = get_chinese_description('crontab', {"minute": crontab.minute, "hour": crontab.hour, "day_of_month": crontab.day_of_month, "month_of_year": crontab.month_of_year, "day_of_week": crontab.day_of_week}) - if item.name == '': - crontab.delete() - item.delete() - else: - PeriodicTask.objects.filter(gridtaskset_periodictask__myschedule=item).delete() - item.delete() - except ObjectDoesNotExist: - GridTaskSet.objects.filter(myschedule=item).delete() - item.delete() \ No newline at end of file + if name == '': + MySchedule.objects.filter(crontab=crontab).delete() + crontab.delete() + else: + MySchedule.objects.filter(crontab=crontab).update(name=name, typeset='crontab') + + ints = IntervalSchedule.objects.all() + for interval in ints: + name = get_chinese_description('interval', {'every': interval.every, 'period': interval.period}) + if name == '': + MySchedule.objects.filter(interval=interval).delete() + interval.delete() + else: + MySchedule.objects.filter(interval=interval).update(name=name, typeset='interval') \ No newline at end of file