Skip to content

Commit a46ef09

Browse files
authored
Merge pull request #134 from KarimTayie/email_on_completion_setting
add configurable email on completion for export job
2 parents 6e3abd4 + f58ed82 commit a46ef09

File tree

6 files changed

+65
-6
lines changed

6 files changed

+65
-6
lines changed

README.rst

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,27 +212,29 @@ By default, there is no time limit on celery import/export tasks. This can be cu
212212
IMPORT_EXPORT_CELERY_EXPORT_SOFT_TIME_LIMIT = 300 # 5 minutes
213213
IMPORT_EXPORT_CELERY_EXPORT_HARD_TIME_LIMIT = 360 # 6 minutes
214214

215-
Customizing email template for export job completion email
215+
Customizing email settings for export job completion
216216
----------------------------------------------------------
217217

218-
By default this is the subject and template used to send the email
218+
By default the export job completion email uses the following settings
219219

220220

221221
::
222222

223223
Subject: 'Django: Export job completed'
224224
Email template: 'email/export_job_completion.html'
225+
Email on completion: True
225226

226227

227228
The default email template can be found `here <https://github.com/auto-mat/django-import-export-celery/blob/master/import_export_celery/templates/email/export_job_completion.html>`__
228229

229-
The default email subject and template can be customized by overriding these values from django settings:-
230+
The default email subject, template and sending behavior can be customized by overriding these values from django settings:-
230231

231232

232233
::
233234

234235
EXPORT_JOB_COMPLETION_MAIL_SUBJECT="Your custom subject"
235236
EXPORT_JOB_COMPLETION_MAIL_TEMPLATE="path_to_folder/your_custom_template.html"
237+
EXPORT_JOB_EMAIL_ON_COMPLETION = True # Set to False to disable email
236238

237239

238240
The email template will get some context variables that you can use to customize your template.

example/winners/tests/test_models.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import os
2-
from django.test import TestCase
2+
from django.test import TestCase, override_settings
33
from django.core.files.base import ContentFile
44

5+
from import_export_celery.models.exportjob import ExportJob
56
from import_export_celery.models.importjob import ImportJob
67

78

@@ -16,3 +17,20 @@ def test_delete_file_on_job_delete(self):
1617
job.delete()
1718
assert not os.path.exists(file_path)
1819
assert not ImportJob.objects.filter(id=job.id).exists()
20+
21+
22+
class ExportJobTestCases(TestCase):
23+
def test_create_export_job_default_email_on_completion(self):
24+
job = ExportJob.objects.create(
25+
app_label="winners", model="Winner"
26+
)
27+
job.refresh_from_db()
28+
self.assertTrue(job.email_on_completion)
29+
30+
@override_settings(EXPORT_JOB_EMAIL_ON_COMPLETION=False)
31+
def test_create_export_job_false_email_on_completion(self):
32+
job = ExportJob.objects.create(
33+
app_label="winners", model="Winner"
34+
)
35+
job.refresh_from_db()
36+
self.assertFalse(job.email_on_completion)

example/winners/tests/test_utils.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
get_export_job_mail_subject,
55
get_export_job_mail_template,
66
get_export_job_mail_context,
7+
get_export_job_email_on_completion,
78
DEFAULT_EXPORT_JOB_COMPLETION_MAIL_SUBJECT,
89
DEFAULT_EXPORT_JOB_COMPLETION_MAIL_TEMPLATE,
10+
DEFAULT_EXPORT_JOB_EMAIL_ON_COMPLETION,
911
)
1012
from import_export_celery.models import ExportJob
1113

@@ -29,6 +31,15 @@ def test_get_export_job_mail_template_default(self):
2931
def test_get_export_job_mail_template_overridden(self):
3032
self.assertEqual("mytemplate.html", get_export_job_mail_template())
3133

34+
def test_get_export_job_email_on_completion_default(self):
35+
self.assertEqual(
36+
DEFAULT_EXPORT_JOB_EMAIL_ON_COMPLETION, get_export_job_email_on_completion()
37+
)
38+
39+
@override_settings(EXPORT_JOB_EMAIL_ON_COMPLETION=False)
40+
def test_get_export_job_email_on_completion_overridden(self):
41+
self.assertEqual(False, get_export_job_email_on_completion())
42+
3243
def test_get_export_job_mail_context(self):
3344
export_job = ExportJob.objects.create(
3445
app_label="winners", model="Winner", site_of_origin="http://127.0.0.1:8000"
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 3.2.25 on 2024-11-22 12:19
2+
3+
from django.db import migrations, models
4+
import import_export_celery.utils
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('import_export_celery', '0010_auto_20231013_0904'),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name='exportjob',
16+
name='email_on_completion',
17+
field=models.BooleanField(default=import_export_celery.utils.get_export_job_email_on_completion, verbose_name='Send me an email when this export job is complete'),
18+
),
19+
]

import_export_celery/models/exportjob.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
from ..fields import ImportExportFileField
1616
from ..tasks import run_export_job
17-
from ..utils import get_formats
17+
from ..utils import get_formats, get_export_job_email_on_completion
1818

1919

2020
@with_author
@@ -74,7 +74,7 @@ def __init__(self, *args, **kwargs):
7474

7575
email_on_completion = models.BooleanField(
7676
verbose_name=_("Send me an email when this export job is complete"),
77-
default=True,
77+
default=get_export_job_email_on_completion,
7878
)
7979

8080
site_of_origin = models.TextField(

import_export_celery/utils.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from django.urls import reverse
66
from import_export.formats.base_formats import DEFAULT_FORMATS
77

8+
DEFAULT_EXPORT_JOB_EMAIL_ON_COMPLETION = True
89
DEFAULT_EXPORT_JOB_COMPLETION_MAIL_SUBJECT = "Django: Export job completed"
910
DEFAULT_EXPORT_JOB_COMPLETION_MAIL_TEMPLATE = (
1011
"email/export_job_completion.html"
@@ -53,6 +54,14 @@ def get_export_job_mail_context(export_job):
5354
return context
5455

5556

57+
def get_export_job_email_on_completion():
58+
return getattr(
59+
settings,
60+
"EXPORT_JOB_EMAIL_ON_COMPLETION",
61+
DEFAULT_EXPORT_JOB_EMAIL_ON_COMPLETION,
62+
)
63+
64+
5665
def get_export_job_mail_subject():
5766
return getattr(
5867
settings,

0 commit comments

Comments
 (0)