wagtail-newsletter-django-backend 0.2.1__tar.gz → 0.3.1__tar.gz

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.
Files changed (78) hide show
  1. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/PKG-INFO +1 -1
  2. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/src/wagtail_newsletter_django_backend/__init__.py +1 -1
  3. wagtail_newsletter_django_backend-0.3.1/src/wagtail_newsletter_django_backend/migrations/0002_alter_audience_name_alter_audiencesegment_name_and_more.py +35 -0
  4. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/src/wagtail_newsletter_django_backend/models.py +4 -4
  5. wagtail_newsletter_django_backend-0.3.1/src/wagtail_newsletter_django_backend/templates/wagtail_newsletter_django_backend/manage.html +13 -0
  6. wagtail_newsletter_django_backend-0.3.1/src/wagtail_newsletter_django_backend/templates/wagtail_newsletter_django_backend/manage_tag.html +5 -0
  7. wagtail_newsletter_django_backend-0.3.1/src/wagtail_newsletter_django_backend/templates/wagtail_newsletter_django_backend/unsubscribe.html +13 -0
  8. wagtail_newsletter_django_backend-0.3.1/src/wagtail_newsletter_django_backend/templates/wagtail_newsletter_django_backend/unsubscribe_tag.html +11 -0
  9. wagtail_newsletter_django_backend-0.3.1/src/wagtail_newsletter_django_backend/templatetags/__init__.py +0 -0
  10. wagtail_newsletter_django_backend-0.3.1/src/wagtail_newsletter_django_backend/templatetags/wagtail_newsletter_django_backend_tags.py +17 -0
  11. wagtail_newsletter_django_backend-0.2.1/src/wagtail_newsletter_django_backend/templates/wagtail_newsletter_django_backend/manage.html +0 -16
  12. wagtail_newsletter_django_backend-0.2.1/src/wagtail_newsletter_django_backend/templates/wagtail_newsletter_django_backend/unsubscribe.html +0 -22
  13. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/.gitignore +0 -0
  14. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/.readthedocs.yaml +0 -0
  15. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/LICENSE +0 -0
  16. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/README.md +0 -0
  17. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/manage.py +0 -0
  18. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/pyproject.toml +0 -0
  19. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/__init__.py +0 -0
  20. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/blog/__init__.py +0 -0
  21. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/blog/admin.py +0 -0
  22. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/blog/apps.py +0 -0
  23. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/blog/migrations/0001_initial.py +0 -0
  24. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/blog/migrations/0002_newslettersignup.py +0 -0
  25. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/blog/migrations/__init__.py +0 -0
  26. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/blog/models.py +0 -0
  27. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/blog/signals.py +0 -0
  28. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/blog/templates/blog/blog_index_page.html +0 -0
  29. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/blog/templates/blog/blog_page.html +0 -0
  30. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/blog/templates/blog/blog_page_newsletter.html +0 -0
  31. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/blog/templates/blog/newsletter_signup.html +0 -0
  32. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/blog/tests.py +0 -0
  33. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/blog/views.py +0 -0
  34. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/home/__init__.py +0 -0
  35. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/home/apps.py +0 -0
  36. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/home/migrations/0001_initial.py +0 -0
  37. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/home/migrations/__init__.py +0 -0
  38. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/home/models.py +0 -0
  39. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/home/static/css/welcome_page.css +0 -0
  40. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/home/templates/home/home_page.html +0 -0
  41. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/home/templates/home/welcome_page.html +0 -0
  42. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/home/tests.py +0 -0
  43. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/search/__init__.py +0 -0
  44. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/search/apps.py +0 -0
  45. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/search/templates/search/search.html +0 -0
  46. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/search/views.py +0 -0
  47. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/settings/__init__.py +0 -0
  48. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/settings/base.py +0 -0
  49. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/settings/dev.py +0 -0
  50. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/settings/production.py +0 -0
  51. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/static/css/demo.css +0 -0
  52. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/static/js/demo.js +0 -0
  53. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/templates/404.html +0 -0
  54. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/templates/500.html +0 -0
  55. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/templates/base.html +0 -0
  56. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/urls.py +0 -0
  57. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/src/demo/wsgi.py +0 -0
  58. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/demo/uv.lock +0 -0
  59. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/docs/Makefile +0 -0
  60. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/docs/conf.py +0 -0
  61. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/docs/index.rst +0 -0
  62. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/docs/make.bat +0 -0
  63. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/pyproject.toml +0 -0
  64. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/src/wagtail_newsletter_django_backend/admin.py +0 -0
  65. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/src/wagtail_newsletter_django_backend/admin_viewsets.py +0 -0
  66. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/src/wagtail_newsletter_django_backend/apps.py +0 -0
  67. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/src/wagtail_newsletter_django_backend/campaign_backend.py +0 -0
  68. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/src/wagtail_newsletter_django_backend/forms.py +0 -0
  69. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/src/wagtail_newsletter_django_backend/management/__init__.py +0 -0
  70. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/src/wagtail_newsletter_django_backend/management/commands/__init__.py +0 -0
  71. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/src/wagtail_newsletter_django_backend/management/commands/send_scheduled_campaigns.py +0 -0
  72. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/src/wagtail_newsletter_django_backend/migrations/0001_initial.py +0 -0
  73. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/src/wagtail_newsletter_django_backend/migrations/__init__.py +0 -0
  74. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/src/wagtail_newsletter_django_backend/tests.py +0 -0
  75. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/src/wagtail_newsletter_django_backend/urls.py +0 -0
  76. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/src/wagtail_newsletter_django_backend/views.py +0 -0
  77. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/src/wagtail_newsletter_django_backend/wagtail_hooks.py +0 -0
  78. {wagtail_newsletter_django_backend-0.2.1 → wagtail_newsletter_django_backend-0.3.1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wagtail-newsletter-django-backend
3
- Version: 0.2.1
3
+ Version: 0.3.1
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>
@@ -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.2.1'
6
+ __version__ = '0.3.1'
@@ -0,0 +1,35 @@
1
+ # Generated by Django 5.2.5 on 2025-09-02 15:46
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ("wagtail_newsletter_django_backend", "0001_initial"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterField(
14
+ model_name="audience",
15
+ name="name",
16
+ field=models.CharField(max_length=64),
17
+ ),
18
+ migrations.AlterField(
19
+ model_name="audiencesegment",
20
+ name="name",
21
+ field=models.CharField(max_length=64, unique=True),
22
+ ),
23
+ migrations.AlterField(
24
+ model_name="subscriber",
25
+ name="email_address",
26
+ field=models.EmailField(max_length=254, verbose_name="Email Address"),
27
+ ),
28
+ migrations.AlterField(
29
+ model_name="subscriber",
30
+ name="email_name",
31
+ field=models.CharField(
32
+ blank=True, default=None, max_length=256, null=True, verbose_name="Name"
33
+ ),
34
+ ),
35
+ ]
@@ -54,7 +54,7 @@ class Audience(models.Model):
54
54
  subscriber_set: 'RelatedManager[Subscriber]' # pyright: ignore[reportUninitializedInstanceVariable]
55
55
 
56
56
  site: 'models.ForeignKey[Site]' = models.ForeignKey(Site, blank=False, null=False, on_delete=models.CASCADE)
57
- name: 'models.SlugField[str]' = models.SlugField(blank=False, null=False)
57
+ name: 'models.CharField[str]' = models.CharField(max_length=64, blank=False, null=False)
58
58
  description: 'models.TextField[str]' = models.TextField(blank=True, null=False)
59
59
  smtp_user: 'models.CharField[str | None]' = models.CharField(
60
60
  max_length=256,
@@ -133,7 +133,7 @@ class AudienceSegment(models.Model):
133
133
  id: int # pyright: ignore[reportUninitializedInstanceVariable]
134
134
 
135
135
  audience: 'models.ForeignKey[Audience]' = models.ForeignKey(Audience, blank=False, null=False, on_delete=models.CASCADE, related_name='audience_segment_set', related_query_name='audience_segment')
136
- name: 'models.SlugField[str]' = models.SlugField(blank=False, null=False, unique=True)
136
+ name: 'models.CharField[str]' = models.CharField(max_length=64, blank=False, null=False, unique=True)
137
137
  description: 'models.TextField[str]' = models.TextField(blank=True, null=False)
138
138
  subscribers: 'models.ManyToManyField[Subscriber, Subscription]' = models.ManyToManyField(
139
139
  'Subscriber',
@@ -171,13 +171,13 @@ class Subscriber(models.Model):
171
171
  unique=True,
172
172
  )
173
173
  audience: 'models.ForeignKey[Audience]' = models.ForeignKey(Audience, blank=False, null=False, on_delete=models.CASCADE)
174
- email_address: 'models.EmailField[str]' = models.EmailField(blank=False, null=False)
174
+ email_address: 'models.EmailField[str]' = models.EmailField(verbose_name="Email Address", blank=False, null=False)
175
175
  email_name: 'models.CharField[str | None]' = models.CharField(
176
+ verbose_name="Name",
176
177
  max_length=256,
177
178
  blank=True,
178
179
  null=True,
179
180
  default=None,
180
- help_text='The display name portion of the email address.',
181
181
  )
182
182
  audience_segments: 'models.ManyToManyField[AudienceSegment, Subscription]' = models.ManyToManyField(
183
183
  AudienceSegment,
@@ -0,0 +1,13 @@
1
+ {% load wagtail_newsletter_django_backend_tags %}
2
+ <html>
3
+ <body>
4
+ {% if messages %}
5
+ {% for message in messages %}
6
+ <div class="alert alert-{{ message.tags }}">
7
+ {{ message }}
8
+ </div>
9
+ {% endfor %}
10
+ {% endif %}
11
+ {% subscriber_manage_form subscriber=form.instance %}
12
+ </body>
13
+ </html>
@@ -0,0 +1,5 @@
1
+ <p><a href="{% url 'wagtail_newsletter_django_backend:newsletter_subscriber_unsubscribe' key=form.instance.key %}">Unsubscribe from all</a></p>
2
+ <form method="post">{% csrf_token %}
3
+ {{ form.as_p }}
4
+ <input type="submit" value="Save preferences">
5
+ </form>
@@ -0,0 +1,13 @@
1
+ {% load wagtail_newsletter_django_backend_tags %}
2
+ <html>
3
+ <body>
4
+ {% if messages %}
5
+ {% for message in messages %}
6
+ <div class="alert alert-{{ message.tags }}">
7
+ {{ message }}
8
+ </div>
9
+ {% endfor %}
10
+ {% endif %}
11
+ {% subscriber_unsubscribe_form subscriber=subscriber %}
12
+ </body>
13
+ </html>
@@ -0,0 +1,11 @@
1
+ {% if subscriber %}
2
+ <p>Really unsubscribe for {{subscriber}}?</p>
3
+ <form method="post" action="{{ request.path }}">{% csrf_token %}
4
+ <input type="submit" value="Unsubscribe">
5
+ </form>
6
+ <p><a href="{% url 'wagtail_newsletter_django_backend:newsletter_subscriber_manage' key=subscriber.key %}">Manage my preferences instead</a></p>
7
+ <p><a href="/">Go back to the main site</a></p>
8
+ {% else %}
9
+ <p>This subscriber does not exist</p>
10
+ <p><a href="/">Go back to the main site</a></p>
11
+ {% endif %}
@@ -0,0 +1,17 @@
1
+ from django import template
2
+
3
+ from wagtail_newsletter_django_backend.forms import ManageForm
4
+
5
+ register = template.Library()
6
+
7
+ @register.inclusion_tag("wagtail_newsletter_django_backend/manage_tag.html")
8
+ def subscriber_manage_form(subscriber):
9
+ return {
10
+ 'form': ManageForm(instance=subscriber),
11
+ }
12
+
13
+ @register.inclusion_tag("wagtail_newsletter_django_backend/unsubscribe_tag.html")
14
+ def subscriber_unsubscribe_form(subscriber):
15
+ return {
16
+ 'subscriber': subscriber,
17
+ }
@@ -1,16 +0,0 @@
1
- <html>
2
- <body>
3
- {% if messages %}
4
- {% for message in messages %}
5
- <div class="alert alert-{{ message.tags }}">
6
- {{ message }}
7
- </div>
8
- {% endfor %}
9
- {% endif %}
10
- <p><a href="{% url 'wagtail_newsletter_django_backend:newsletter_subscriber_unsubscribe' key=form.instance.key %}">Unsubscribe from all</a></p>
11
- <form method="post">{% csrf_token %}
12
- {{ form.as_p }}
13
- <input type="submit" value="Save preferences">
14
- </form>
15
- </body>
16
- </html>
@@ -1,22 +0,0 @@
1
- <html>
2
- <body>
3
- {% if messages %}
4
- {% for message in messages %}
5
- <div class="alert alert-{{ message.tags }}">
6
- {{ message }}
7
- </div>
8
- {% endfor %}
9
- {% endif %}
10
- {% if subscriber %}
11
- <p>Really unsubscribe for {{subscriber}}?</p>
12
- <form method="post" action="{{ request.path }}">{% csrf_token %}
13
- <input type="submit" value="Unsubscribe">
14
- </form>
15
- <p><a href="{% url 'wagtail_newsletter_django_backend:newsletter_subscriber_manage' key=subscriber.key %}">Manage my preferences instead</a></p>
16
- <p><a href="/">Go back to the main site</a></p>
17
- {% else %}
18
- <p>This subscriber does not exist</p>
19
- <p><a href="/">Go back to the main site</a></p>
20
- {% endif %}
21
- </body>
22
- </html>