Skip to content

Commit

Permalink
✨ Regenerate HTML export on data change
Browse files Browse the repository at this point in the history
Limited to once every hour, and only if the HTML export is also enabled
on release. The limit gives the organisers a way to disable the export,
and also protects against a server overload when all speakers edit their
talks or profiles.

Closes #277.
  • Loading branch information
rixx committed Nov 9, 2019
1 parent 6db036b commit 20c647a
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 9 deletions.
5 changes: 5 additions & 0 deletions src/pretalx/cfp/views/user.py
Expand Up @@ -79,8 +79,12 @@ def post(self, request, *args, **kwargs):
event=self.request.event
)[0]
profile.log_action('pretalx.user.profile.update', person=request.user)
if self.profile_form.has_changed():
self.request.event.cache.set('rebuild_schedule_export', True, None)
elif self.questions_form.is_bound and self.questions_form.is_valid():
self.questions_form.save()
if self.questions_form.has_changed():
self.request.event.cache.set('rebuild_schedule_export', True, None)
else:
messages.error(self.request, phrases.base.error_saving_changes)
return super().get(request, *args, **kwargs)
Expand Down Expand Up @@ -321,6 +325,7 @@ def form_valid(self, form):
form.instance.log_action(
'pretalx.submission.update', person=self.request.user
)
self.request.event.cache.set('rebuild_schedule_export', True, None)
messages.success(self.request, phrases.base.saved)
else:
messages.error(self.request, phrases.cfp.submission_uneditable)
Expand Down
12 changes: 5 additions & 7 deletions src/pretalx/event/services.py
Expand Up @@ -65,13 +65,11 @@ def task_periodic_schedule_export(event_slug):
zip_path = get_export_zip_path(event)
last_time = event.cache.get('last_schedule_rebuild')
_now = now()
should_rebuild_schedule = (
event.cache.get('rebuild_schedule_export') or (
event.settings.export_html_on_schedule_release and not zip_path.exists() and (
not last_time or now() - last_time > timedelta(days=1)
)
)
)
if not event.settings.export_html_on_schedule_release:
return
if last_time and _now - last_time < timedelta(hours=1):
return
should_rebuild_schedule = event.cache.get('rebuild_schedule_export') or not zip_path.exists()
if should_rebuild_schedule:
event.cache.delete('rebuild_schedule_export')
event.cache.set('last_schedule_rebuild', _now, None)
Expand Down
2 changes: 2 additions & 0 deletions src/pretalx/orga/views/speaker.py
Expand Up @@ -129,6 +129,8 @@ def form_valid(self, form):
self.get_object().event_profile(self.request.event).log_action(
'pretalx.user.profile.update', person=self.request.user, orga=True
)
if form.has_changed() or self.questions_form.has_changed():
self.request.event.cache.set('rebuild_schedule_export', True, None)
messages.success(self.request, 'The speaker profile has been updated.')
return result

Expand Down
5 changes: 3 additions & 2 deletions src/pretalx/orga/views/submission.py
Expand Up @@ -354,12 +354,12 @@ def get_success_url(self) -> str:
@transaction.atomic()
def form_valid(self, form):
created = not self.object
form.instance.event = self.request.event
form.save()
self.object = form.instance
self._questions_form.submission = self.object
if not self._questions_form.is_valid():
return self.get(self.request, *self.args, **self.kwargs)
form.instance.event = self.request.event
form.save()
self._questions_form.save()

if created:
Expand Down Expand Up @@ -394,6 +394,7 @@ def form_valid(self, form):
if form.has_changed():
action = 'pretalx.submission.' + ('create' if created else 'update')
form.instance.log_action(action, person=self.request.user, orga=True)
self.request.event.cache.set('rebuild_schedule_export', True, None)
return redirect(self.get_success_url())

def get_form_kwargs(self):
Expand Down

0 comments on commit 20c647a

Please sign in to comment.