34 lines
884 B
Python
34 lines
884 B
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from django import forms
|
||
|
|
|
||
|
|
from .models import ScheduleConfig
|
||
|
|
from .scheduler import parse_cron_expr
|
||
|
|
|
||
|
|
|
||
|
|
class ScheduleConfigForm(forms.ModelForm):
|
||
|
|
cron_expr = forms.CharField(
|
||
|
|
label="Cron expression",
|
||
|
|
help_text='Five-field cron expression, for example "15 2 * * *".',
|
||
|
|
)
|
||
|
|
prune_max_delete = forms.IntegerField(min_value=0)
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = ScheduleConfig
|
||
|
|
fields = (
|
||
|
|
"cron_expr",
|
||
|
|
"user",
|
||
|
|
"enabled",
|
||
|
|
"prune",
|
||
|
|
"prune_max_delete",
|
||
|
|
"prune_protect_bases",
|
||
|
|
)
|
||
|
|
|
||
|
|
def clean_cron_expr(self) -> str:
|
||
|
|
cron_expr = self.cleaned_data["cron_expr"].strip()
|
||
|
|
try:
|
||
|
|
parse_cron_expr(cron_expr)
|
||
|
|
except ValueError as exc:
|
||
|
|
raise forms.ValidationError(str(exc)) from exc
|
||
|
|
return cron_expr
|