Export tasks: Request new database connection after completing output

This commit is contained in:
Raphael Michel
2023-07-20 11:41:37 +02:00
parent 1f80e9ef82
commit 23dcdf1fd1

View File

@@ -26,7 +26,7 @@ from typing import Any, Dict, Union
from celery.exceptions import MaxRetriesExceededError from celery.exceptions import MaxRetriesExceededError
from django.conf import settings from django.conf import settings
from django.core.files.base import ContentFile from django.core.files.base import ContentFile
from django.db import connection, transaction from django.db import close_old_connections, connection, transaction
from django.dispatch import receiver from django.dispatch import receiver
from django.utils.timezone import now, override from django.utils.timezone import now, override
from django.utils.translation import gettext from django.utils.translation import gettext
@@ -86,6 +86,9 @@ def export(self, event: Event, fileid: str, provider: str, form_data: Dict[str,
gettext('Your export did not contain any data.') gettext('Your export did not contain any data.')
) )
file.filename, file.type, data = d file.filename, file.type, data = d
close_old_connections() # This task can run very long, we might need a new DB connection
f = ContentFile(data) f = ContentFile(data)
file.file.save(cachedfile_name(file, file.filename), f) file.file.save(cachedfile_name(file, file.filename), f)
return str(file.pk) return str(file.pk)
@@ -154,6 +157,9 @@ def multiexport(self, organizer: Organizer, user: User, device: int, token: int,
gettext('Your export did not contain any data.') gettext('Your export did not contain any data.')
) )
file.filename, file.type, data = d file.filename, file.type, data = d
close_old_connections() # This task can run very long, we might need a new DB connection
f = ContentFile(data) f = ContentFile(data)
file.file.save(cachedfile_name(file, file.filename), f) file.file.save(cachedfile_name(file, file.filename), f)
return str(file.pk) return str(file.pk)
@@ -214,6 +220,9 @@ def _run_scheduled_export(schedule, context: Union[Event, Organizer], exporter,
raise ExportError( raise ExportError(
gettext('Your exported data exceeded the size limit for scheduled exports.') gettext('Your exported data exceeded the size limit for scheduled exports.')
) )
close_old_connections() # This task can run very long, we might need a new DB connection
f = ContentFile(data) f = ContentFile(data)
file.file.save(cachedfile_name(file, file.filename), f) file.file.save(cachedfile_name(file, file.filename), f)
except ExportEmptyError as e: except ExportEmptyError as e: