mirror of
https://github.com/meeb/tubesync.git
synced 2025-06-23 21:46:44 +00:00
Do not allow run_at
to be in the past
This commit is contained in:
parent
5bf4eeac48
commit
eace2bf45b
@ -1016,15 +1016,18 @@ class TaskScheduleView(FormView, SingleObjectMixin):
|
|||||||
model = Task
|
model = Task
|
||||||
errors = dict(
|
errors = dict(
|
||||||
invalid_when=_('The type ({}) was incorrect.'),
|
invalid_when=_('The type ({}) was incorrect.'),
|
||||||
|
when_before_now=_('The date and time must be in the future.'),
|
||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
|
self.now = timezone.now()
|
||||||
self.object = None
|
self.object = None
|
||||||
self.timestamp = None
|
self.timestamp = None
|
||||||
self.when = None
|
self.when = None
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
self.now = timezone.now()
|
||||||
self.object = self.get_object()
|
self.object = self.get_object()
|
||||||
self.timestamp = kwargs.get('timestamp')
|
self.timestamp = kwargs.get('timestamp')
|
||||||
try:
|
try:
|
||||||
@ -1032,7 +1035,7 @@ class TaskScheduleView(FormView, SingleObjectMixin):
|
|||||||
except AssertionError:
|
except AssertionError:
|
||||||
self.when = None
|
self.when = None
|
||||||
if self.when is None:
|
if self.when is None:
|
||||||
self.when = timezone.now()
|
self.when = self.now
|
||||||
# Use the next minute and zero seconds
|
# Use the next minute and zero seconds
|
||||||
# The web browser does not select seconds by default
|
# The web browser does not select seconds by default
|
||||||
self.when = self.when.replace(second=0) + timezone.timedelta(minutes=1)
|
self.when = self.when.replace(second=0) + timezone.timedelta(minutes=1)
|
||||||
@ -1040,11 +1043,13 @@ class TaskScheduleView(FormView, SingleObjectMixin):
|
|||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
initial = super().get_initial()
|
initial = super().get_initial()
|
||||||
|
initial['now'] = self.now
|
||||||
initial['when'] = self.when
|
initial['when'] = self.when
|
||||||
return initial
|
return initial
|
||||||
|
|
||||||
def get_context_data(self, *args, **kwargs):
|
def get_context_data(self, *args, **kwargs):
|
||||||
data = super().get_context_data(*args, **kwargs)
|
data = super().get_context_data(*args, **kwargs)
|
||||||
|
data['now'] = self.now
|
||||||
data['when'] = self.when
|
data['when'] = self.when
|
||||||
return data
|
return data
|
||||||
|
|
||||||
@ -1059,24 +1064,28 @@ class TaskScheduleView(FormView, SingleObjectMixin):
|
|||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
max_attempts = getattr(settings, 'MAX_ATTEMPTS', 15)
|
max_attempts = getattr(settings, 'MAX_ATTEMPTS', 15)
|
||||||
now = timezone.now()
|
|
||||||
when = form.cleaned_data.get('when')
|
when = form.cleaned_data.get('when')
|
||||||
|
|
||||||
if not isinstance(when, now.__class__):
|
if not isinstance(when, self.now.__class__):
|
||||||
form.add_error(
|
form.add_error(
|
||||||
'when',
|
'when',
|
||||||
ValidationError(
|
ValidationError(
|
||||||
errors['invalid_when'].format(
|
self.errors['invalid_when'].format(
|
||||||
type(when),
|
type(when),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
if when < self.now:
|
||||||
|
form.add_error(
|
||||||
|
'when',
|
||||||
|
ValidationError(self.errors['when_before_now']),
|
||||||
|
)
|
||||||
|
|
||||||
if form.errors:
|
if form.errors:
|
||||||
return super().form_invalid(form)
|
return super().form_invalid(form)
|
||||||
|
|
||||||
self.object.attempts = max_attempts // 2
|
self.object.attempts = max_attempts // 2
|
||||||
self.object.run_at = when
|
self.object.run_at = max(self.now, when)
|
||||||
self.object.save()
|
self.object.save()
|
||||||
|
|
||||||
return super().form_valid(form)
|
return super().form_valid(form)
|
||||||
|
Loading…
Reference in New Issue
Block a user