diff --git a/src/pretix/base/services/export.py b/src/pretix/base/services/export.py index a32c2db3ef..30722fd636 100644 --- a/src/pretix/base/services/export.py +++ b/src/pretix/base/services/export.py @@ -221,7 +221,9 @@ def _run_scheduled_export(schedule, context: Union[Event, Organizer], exporter, 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 + conn = transaction.get_connection() + if not conn.in_atomic_block: # atomic execution only happens during tests or with celery always_eager on + close_old_connections() # This task can run very long, we might need a new DB connection f = ContentFile(data) file.file.save(cachedfile_name(file, file.filename), f) diff --git a/src/tests/api/test_exporters.py b/src/tests/api/test_exporters.py index 1ae07fd6dc..c2606fe366 100644 --- a/src/tests/api/test_exporters.py +++ b/src/tests/api/test_exporters.py @@ -126,7 +126,7 @@ def test_event_validate(token_client, organizer, team, event): assert resp.data == {"_format": ["\"FOOBAR\" is not a valid choice."]} -@pytest.mark.django_db +@pytest.mark.django_db(transaction=True) def test_org_validate_events(token_client, organizer, team, event): resp = token_client.post('/api/v1/organizers/{}/exporters/orderlist/run/'.format(organizer.slug), data={ '_format': 'xlsx', @@ -164,7 +164,7 @@ def test_org_validate_events(token_client, organizer, team, event): assert resp.data == {"events": [f"Object with slug={event.slug} does not exist."]} -@pytest.mark.django_db +@pytest.mark.django_db(transaction=True) def test_org_run_limit_events(token_client, organizer, team, event, event2): resp = token_client.post('/api/v1/organizers/{}/exporters/eventdata/run/'.format(organizer.slug), data={ '_format': 'default', @@ -199,7 +199,7 @@ def test_org_run_limit_events(token_client, organizer, team, event, event2): assert resp.getvalue().strip().count(b"\n") == 1 -@pytest.mark.django_db +@pytest.mark.django_db(transaction=True) def test_run_success(token_client, organizer, team, event): resp = token_client.post('/api/v1/organizers/{}/events/{}/exporters/orderlist/run/'.format(organizer.slug, event.slug), data={ '_format': 'xlsx', @@ -212,7 +212,7 @@ def test_run_success(token_client, organizer, team, event): assert resp["Content-Type"] == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" -@pytest.mark.django_db +@pytest.mark.django_db(transaction=True) def test_run_success_old_date_frame(token_client, organizer, team, event): resp = token_client.post('/api/v1/organizers/{}/events/{}/exporters/orderlist/run/'.format(organizer.slug, event.slug), data={ '_format': 'xlsx', @@ -261,7 +261,7 @@ def test_gone_without_celery(token_client, organizer, team, event): assert resp.status_code == 410 -@pytest.mark.django_db +@pytest.mark.django_db(transaction=True) def test_org_level_export(token_client, organizer, team, event): resp = token_client.post('/api/v1/organizers/{}/exporters/giftcardlist/run/'.format(organizer.slug), data={ 'date': '2022-10-05T00:00:00Z', diff --git a/src/tests/base/test_export.py b/src/tests/base/test_export.py index 684cae0627..4355f330e2 100644 --- a/src/tests/base/test_export.py +++ b/src/tests/base/test_export.py @@ -156,7 +156,7 @@ def test_event_fail_user_no_permission(event, user, team): assert djmail.outbox[0].to == [user.email] -@pytest.mark.django_db +@pytest.mark.django_db(transaction=True) @freeze_time("2023-01-18 03:00:00+01:00") def test_event_ok(event, user, team): djmail.outbox = [] @@ -286,7 +286,7 @@ def test_organizer_fail_user_does_not_have_specific_permission(event, user, team assert djmail.outbox[0].to == [user.email] -@pytest.mark.django_db +@pytest.mark.django_db(transaction=True) @freeze_time("2023-01-18 03:00:00+01:00") def test_organizer_limited_to_events(event, user, team): djmail.outbox = [] @@ -323,7 +323,7 @@ def test_organizer_limited_to_events(event, user, team): assert len(djmail.outbox[0].attachments[0][1].splitlines()) == 2 -@pytest.mark.django_db +@pytest.mark.django_db(transaction=True) @freeze_time("2023-01-18 03:00:00+01:00") def test_organizer_ok(event, user, team): djmail.outbox = [] diff --git a/src/tests/control/test_export.py b/src/tests/control/test_export.py index 008ce6ef81..dfa7d366ca 100644 --- a/src/tests/control/test_export.py +++ b/src/tests/control/test_export.py @@ -52,7 +52,7 @@ def env(): return event, user, t -@pytest.mark.django_db +@pytest.mark.django_db(transaction=True) def test_event_export(client, env): client.login(email="dummy@dummy.dummy", password="dummy") response = client.get("/control/event/dummy/dummy/orders/export/?identifier=itemdata") @@ -69,7 +69,7 @@ def test_event_export(client, env): assert len(b"".join(response.streaming_content).split(b"\n")) == 3 -@pytest.mark.django_db +@pytest.mark.django_db(transaction=True) def test_event_export_schedule(client, env): client.login(email="dummy@dummy.dummy", password="dummy") response = client.get("/control/event/dummy/dummy/orders/export/?identifier=itemdata") @@ -161,7 +161,7 @@ def test_event_export_schedule(client, env): assert env[0].scheduled_exports.count() == 0 -@pytest.mark.django_db +@pytest.mark.django_db(transaction=True) def test_event_limited_permission(client, env): env[2].can_change_event_settings = False env[2].save() @@ -212,7 +212,7 @@ def test_event_limited_permission(client, env): assert response.status_code == 302 -@pytest.mark.django_db +@pytest.mark.django_db(transaction=True) def test_organizer_export(client, env): client.login(email="dummy@dummy.dummy", password="dummy") response = client.get("/control/organizer/dummy/export/?identifier=eventdata") @@ -230,7 +230,7 @@ def test_organizer_export(client, env): assert len(b"".join(response.streaming_content).split(b"\n")) == 3 -@pytest.mark.django_db +@pytest.mark.django_db(transaction=True) def test_organizer_export_schedule(client, env): client.login(email="dummy@dummy.dummy", password="dummy") response = client.get("/control/organizer/dummy/export/?identifier=eventdata") @@ -312,7 +312,6 @@ def test_organizer_export_schedule(client, env): "schedule-mail_subject": "Product data, my friend!", "schedule-mail_template": "Mail body" }, follow=True) - print(response.content) assert b"Your export schedule has been saved, but no next export is planned" in response.content s.refresh_from_db() assert s.schedule_next_run is None @@ -329,7 +328,7 @@ def test_organizer_export_schedule(client, env): assert env[0].organizer.scheduled_exports.count() == 0 -@pytest.mark.django_db +@pytest.mark.django_db(transaction=True) def test_organizer_limited_permission(client, env): env[2].can_change_organizer_settings = False env[2].save()