SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit 70211f51 authored by Jean-Sébastien Caux's avatar Jean-Sébastien Caux
Browse files

Start work on sending facilities

parent 25690b57
No related branches found
No related tags found
No related merge requests found
...@@ -6,7 +6,7 @@ from django.contrib import admin ...@@ -6,7 +6,7 @@ from django.contrib import admin
from .models import ( from .models import (
EmailAccount, EmailAccountAccess, EmailAccount, EmailAccountAccess,
ComposedMessage, ComposedMessage, ComposedMessageAPIResponse,
Event, Event,
StoredMessage, StoredMessageAttachment, StoredMessage, StoredMessageAttachment,
UserTag) UserTag)
...@@ -24,8 +24,13 @@ class EmailAccountAdmin(admin.ModelAdmin): ...@@ -24,8 +24,13 @@ class EmailAccountAdmin(admin.ModelAdmin):
admin.site.register(EmailAccount, EmailAccountAdmin) admin.site.register(EmailAccount, EmailAccountAdmin)
class ComposedMessageAPIResponseInline(admin.StackedInline):
model = ComposedMessageAPIResponse
extra = 0
min_num = 0
class ComposedMessageAdmin(admin.ModelAdmin): class ComposedMessageAdmin(admin.ModelAdmin):
pass inlines = [ComposedMessageAPIResponseInline,]
admin.site.register(ComposedMessage, ComposedMessageAdmin) admin.site.register(ComposedMessage, ComposedMessageAdmin)
......
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
import requests
from django.conf import settings
from django.core.management import BaseCommand
from ...models import ComposedMessage, ComposedMessageAPIResponse
class Command(BaseCommand):
def handle(self, *args, **options):
emails_ready_to_send = ComposedMessage.objects.ready()
for msg in emails_ready_to_send:
data = {
'from': msg.from_account.email,
'to': msg.to_recipient,
'subject': msg.subject,
'text': msg.body_text,
'html': msg.body_html,
}
if msg.cc_recipients:
data['cc'] = msg.cc_recipients
if msg.bcc_recipients:
data['bcc'] = msg.bcc_recipients
response = requests.post(
"https://api.eu.mailgun.net/v3/%s/messages" % settings.MAILGUN_DOMAIN_NAME,
auth=("api", settings.MAILGUN_API_KEY),
data=data)
msgr = ComposedMessageAPIResponse(
message=msg,
status_code=response.status_code,
json=response.json())
msgr.save()
if response.status_code == 200:
ComposedMessage.objects.filter(uuid=msg.uuid
).update(status=ComposedMessage.STATUS_SENT)
...@@ -22,6 +22,9 @@ class ComposedMessageQuerySet(models.QuerySet): ...@@ -22,6 +22,9 @@ class ComposedMessageQuerySet(models.QuerySet):
def filter_for_user(self, user): def filter_for_user(self, user):
return self.filter(author=user) return self.filter(author=user)
def ready(self):
return self.filter(status='ready')
class StoredMessageQuerySet(models.QuerySet): class StoredMessageQuerySet(models.QuerySet):
""" """
......
# Generated by Django 2.1.8 on 2020-01-31 08:01
import django.contrib.postgres.fields.jsonb
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('apimail', '0012_composedmessage'),
]
operations = [
migrations.CreateModel(
name='ComposedMessageAPIResponse',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('datetime', models.DateTimeField(default=django.utils.timezone.now)),
('response', django.contrib.postgres.fields.jsonb.JSONField(default=dict)),
('message', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='api_responses', to='apimail.ComposedMessage')),
],
options={
'ordering': ['-datetime'],
},
),
]
# Generated by Django 2.1.8 on 2020-01-31 08:56
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('apimail', '0013_composedmessageapiresponse'),
]
operations = [
migrations.RenameField(
model_name='composedmessageapiresponse',
old_name='response',
new_name='json',
),
migrations.AddField(
model_name='composedmessageapiresponse',
name='status_code',
field=models.PositiveSmallIntegerField(default=200),
preserve_default=False,
),
]
...@@ -4,7 +4,7 @@ __license__ = "AGPL v3" ...@@ -4,7 +4,7 @@ __license__ = "AGPL v3"
from .account import EmailAccount, EmailAccountAccess from .account import EmailAccount, EmailAccountAccess
from .composed_message import ComposedMessage from .composed_message import ComposedMessage, ComposedMessageAPIResponse
from .event import Event from .event import Event
......
...@@ -5,7 +5,7 @@ __license__ = "AGPL v3" ...@@ -5,7 +5,7 @@ __license__ = "AGPL v3"
import uuid as uuid_lib import uuid as uuid_lib
from django.conf import settings from django.conf import settings
from django.contrib.postgres.fields import ArrayField from django.contrib.postgres.fields import ArrayField, JSONField
from django.db import models from django.db import models
from django.utils import timezone from django.utils import timezone
...@@ -72,3 +72,19 @@ class ComposedMessage(models.Model): ...@@ -72,3 +72,19 @@ class ComposedMessage(models.Model):
self.from_account.email, self.from_account.email,
self.to_recipient, self.to_recipient,
self.get_status_display()) self.get_status_display())
class ComposedMessageAPIResponse(models.Model):
"""
Mailgun API response upon action on ComposedMessage.
"""
message = models.ForeignKey(
'apimail.ComposedMessage',
on_delete=models.CASCADE,
related_name='api_responses')
datetime = models.DateTimeField(default=timezone.now)
status_code = models.PositiveSmallIntegerField()
json = JSONField(default=dict)
class Meta:
ordering = ['-datetime']
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment