wagtail-newsletter-django-backend 0.5.4__py3-none-any.whl → 0.5.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,4 +3,4 @@
3
3
  This is a simple, basic internal backend for wagtail-newsletter, allowing you to manage your mailing lists internally and send them out through Django's standard email capabilities.
4
4
  '''
5
5
 
6
- __version__ = '0.5.4'
6
+ __version__ = '0.5.6'
@@ -25,7 +25,7 @@ class CampaignBackend(wncb.CampaignBackend):
25
25
  id=str(audience.id),
26
26
  pk=str(audience.pk),
27
27
  name=audience.name,
28
- member_count=audience.subscriber_set.count(),
28
+ member_count=audience.subscriber_set.filter(verified=True).count(),
29
29
  )
30
30
  for audience in models.Audience.objects.all()
31
31
  ]
@@ -41,7 +41,7 @@ class CampaignBackend(wncb.CampaignBackend):
41
41
  id=f'{audience_id}/{audience_segment.id}',
42
42
  pk=f'{audience_id}/{audience_segment.id}',
43
43
  name=audience_segment.name,
44
- member_count=audience_segment.subscribers.count(),
44
+ member_count=audience_segment.subscribers.filter(verified=True).count(),
45
45
  )
46
46
  for audience_segment in audience.audience_segment_set.all()
47
47
  ]
@@ -55,11 +55,11 @@ class CampaignBackend(wncb.CampaignBackend):
55
55
  subject: str,
56
56
  html: str,
57
57
  ) -> str:
58
- audience_segment: models.AudienceSegment | None = None
59
- if recipients is not None and recipients.segment:
60
- audience_segment = models.AudienceSegment.objects.get(id=int(recipients.segment.split('/')[-1]))
61
-
62
58
  with transaction.atomic():
59
+ audience_segment: models.AudienceSegment | None = None
60
+ if recipients is not None and recipients.segment:
61
+ audience_segment = models.AudienceSegment.objects.get(id=int(recipients.segment.split('/')[-1]))
62
+
63
63
  campaign: models.Campaign | None
64
64
  if campaign_id:
65
65
  int_campaign_id = int(campaign_id)
@@ -94,7 +94,13 @@ class CampaignBackend(wncb.CampaignBackend):
94
94
  @override
95
95
  def send_test_email(self, *, campaign_id: str, email: str) -> None:
96
96
  campaign = models.Campaign.objects.get(id=int(campaign_id))
97
- audience = campaign.audience_segment.audience
97
+ audience: models.Audience
98
+ if campaign.audience_segment is not None:
99
+ audience = campaign.audience_segment.audience
100
+ else:
101
+ # Build empty audience. Will have no subscribers, and no smtp data.
102
+ # This will not work without default data in the config.
103
+ audience = models.Audience()
98
104
 
99
105
  from_address = audience.from_address()
100
106
  user, password = audience.smtp_auth()
@@ -113,6 +119,9 @@ class CampaignBackend(wncb.CampaignBackend):
113
119
  def send_campaign(self, campaign_id: str) -> None:
114
120
  with transaction.atomic():
115
121
  campaign = models.Campaign.objects.get(id=int(campaign_id))
122
+ if campaign.audience_segment is None:
123
+ raise RuntimeError("Campaign can't be sent without an audience segment")
124
+
116
125
  audience = campaign.audience_segment.audience
117
126
 
118
127
  site = audience.site
@@ -0,0 +1,26 @@
1
+ # Generated by Django 5.2.5 on 2025-09-02 21:10
2
+
3
+ import django.db.models.deletion
4
+ from django.db import migrations, models
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ (
11
+ "wagtail_newsletter_django_backend",
12
+ "0002_alter_audience_name_alter_audiencesegment_name_and_more",
13
+ ),
14
+ ]
15
+
16
+ operations = [
17
+ migrations.AlterField(
18
+ model_name="campaign",
19
+ name="audience_segment",
20
+ field=models.ForeignKey(
21
+ null=True,
22
+ on_delete=django.db.models.deletion.SET_NULL,
23
+ to="wagtail_newsletter_django_backend.audiencesegment",
24
+ ),
25
+ ),
26
+ ]
@@ -252,7 +252,7 @@ class Campaign(models.Model):
252
252
  sent_at: 'models.DateTimeField[datetime | None]' = models.DateTimeField(blank=True, null=True, default=None)
253
253
  subject: 'models.TextField[str]' = models.TextField(blank=False, null=False)
254
254
  html: 'models.TextField[str]' = models.TextField(blank=False, null=False)
255
- audience_segment: models.ForeignKey[AudienceSegment] = models.ForeignKey(AudienceSegment, blank=False, null=False, on_delete=models.CASCADE)
255
+ audience_segment: 'models.ForeignKey[AudienceSegment | None]' = models.ForeignKey(AudienceSegment, blank=False, null=True, on_delete=models.SET_NULL)
256
256
 
257
257
  created_at: 'models.DateTimeField[datetime]' = models.DateTimeField(auto_now_add=True)
258
258
  updated_at: 'models.DateTimeField[datetime]' = models.DateTimeField(auto_now=True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wagtail-newsletter-django-backend
3
- Version: 0.5.4
3
+ Version: 0.5.6
4
4
  Summary: An internal Django backend to wagtail-newsletter.
5
5
  Author-email: "Taylor C. Richberger" <taylor@axfive.net>
6
6
  Maintainer-email: "Taylor C. Richberger" <taylor@axfive.net>
@@ -1,10 +1,10 @@
1
- wagtail_newsletter_django_backend/__init__.py,sha256=NF7ieder5YFxPvW6_O-XLC52ZjkETkySqeQZ_ppax-E,263
1
+ wagtail_newsletter_django_backend/__init__.py,sha256=alZ9bbDpn1GrZyHtl_A2urxQ2jc6oOc3iX6QqRBmeyM,263
2
2
  wagtail_newsletter_django_backend/admin.py,sha256=suMo4x8I3JBxAFBVIdE-5qnqZ6JAZV0FESABHOSc-vg,63
3
3
  wagtail_newsletter_django_backend/admin_viewsets.py,sha256=FBiRwMT0vwvxSrNgEVy6UYeqKZDn8LJczSSnjedHDz0,2035
4
4
  wagtail_newsletter_django_backend/apps.py,sha256=fFm2QZzxZlpYBQTNRKzBXpzOUzjK5xbW2xCQdv5fNOA,281
5
- wagtail_newsletter_django_backend/campaign_backend.py,sha256=YikyzG5C8wg1WE92ZZlMAKw_wuD8X5LIB6b61C9qtR4,7539
5
+ wagtail_newsletter_django_backend/campaign_backend.py,sha256=n2dk2RF-3MoHZlasTj7xOfwKDqtoVc0Mqyzhn-RhQ0k,8028
6
6
  wagtail_newsletter_django_backend/forms.py,sha256=5UK_-Fd7KuOtRkPZW_uyHM9D6BU5_JANKcM3WhAnew0,4009
7
- wagtail_newsletter_django_backend/models.py,sha256=a6pP9NSBXFl7Xcga2XbVRT0z9JUbM7eB0jYvSbQTx0w,12908
7
+ wagtail_newsletter_django_backend/models.py,sha256=XQvde_2C_TC0FkDpX2ILuBjoC0PZ9ydAJ9-yz6x0nMo,12917
8
8
  wagtail_newsletter_django_backend/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
9
9
  wagtail_newsletter_django_backend/urls.py,sha256=650q2IQKPOj6OSjVIB3QzxPl4n67M2MJwtFFEvJ3vOk,620
10
10
  wagtail_newsletter_django_backend/views.py,sha256=88UNdcJQzeTjLXJFI9chRgVHcowOZ_yvwe2v4_-FhVE,3200
@@ -14,6 +14,7 @@ wagtail_newsletter_django_backend/management/commands/__init__.py,sha256=47DEQpj
14
14
  wagtail_newsletter_django_backend/management/commands/send_scheduled_campaigns.py,sha256=YA6KLCUyHrHJqxc_qHP-JEBFh_U-0T2BPKiUeue8czA,320
15
15
  wagtail_newsletter_django_backend/migrations/0001_initial.py,sha256=DYuyU3MxhnhzKBPKlxZn2erP-lB9rGRUR4KngXRrBXw,11129
16
16
  wagtail_newsletter_django_backend/migrations/0002_alter_audience_name_alter_audiencesegment_name_and_more.py,sha256=-cvEvycnG5Q1bUyQOSyebfTDSrLND9TKTR7f2bEcbQU,1020
17
+ wagtail_newsletter_django_backend/migrations/0003_alter_campaign_audience_segment.py,sha256=Z1A1VrcxqI7yHMcZgTU-Pv5SBBcAhIkMUeVQy-M9Hus,691
17
18
  wagtail_newsletter_django_backend/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
19
  wagtail_newsletter_django_backend/templates/wagtail_newsletter_django_backend/manage.html,sha256=wrEOZgmu7YrE4J716e51FewJ-1WC4EXaJJyaIEbPucM,381
19
20
  wagtail_newsletter_django_backend/templates/wagtail_newsletter_django_backend/manage_tag.html,sha256=JfQIINFFA_aemgfzoOBY6LHdMgVBVoXOPbwiwsKRuDg,260
@@ -21,7 +22,7 @@ wagtail_newsletter_django_backend/templates/wagtail_newsletter_django_backend/un
21
22
  wagtail_newsletter_django_backend/templates/wagtail_newsletter_django_backend/unsubscribe_tag.html,sha256=DmM5O5ge-o7Q6y2rtiwOFyhzM9NaAtoq3AqCTi0cNvg,487
22
23
  wagtail_newsletter_django_backend/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
24
  wagtail_newsletter_django_backend/templatetags/wagtail_newsletter_django_backend_tags.py,sha256=-NF9xEhCjojtMgQFBJRWrelB13dYYZFtuiL-a3zSKx8,490
24
- wagtail_newsletter_django_backend-0.5.4.dist-info/licenses/LICENSE,sha256=mLNEGyMZ9q73ep-adKoMoTX06QDYEd949WxgTKhl93A,33970
25
- wagtail_newsletter_django_backend-0.5.4.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
26
- wagtail_newsletter_django_backend-0.5.4.dist-info/METADATA,sha256=J8TIUtd0Eceyrcd6p7XZ8gyPJ-dqekTCWk0rpV7fu4o,836
27
- wagtail_newsletter_django_backend-0.5.4.dist-info/RECORD,,
25
+ wagtail_newsletter_django_backend-0.5.6.dist-info/licenses/LICENSE,sha256=mLNEGyMZ9q73ep-adKoMoTX06QDYEd949WxgTKhl93A,33970
26
+ wagtail_newsletter_django_backend-0.5.6.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
27
+ wagtail_newsletter_django_backend-0.5.6.dist-info/METADATA,sha256=poWVmRXYmtHKnCyETO45BKVwgyCbAhze-mIuGD1gqrc,836
28
+ wagtail_newsletter_django_backend-0.5.6.dist-info/RECORD,,