Skip to content

Commit

Permalink
fix inline remove + mixins
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelpoi committed Nov 6, 2024
1 parent cfc1bab commit b958953
Show file tree
Hide file tree
Showing 11 changed files with 44 additions and 43 deletions.
6 changes: 2 additions & 4 deletions demoapp/custom_user/models.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
from sendmail.models.base import AbstractEmailAddress
from django.db import models
from sendmail.mixins import SwappableMetaMixin


class CustomEmailAddress(AbstractEmailAddress):
class CustomEmailAddress(AbstractEmailAddress, SwappableMetaMixin):
phone_number = models.CharField(max_length=20, blank=True, null=True)

class Meta:
swappable = 'EMAIL_ADDRESS_MODEL'
4 changes: 2 additions & 2 deletions demoapp/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,8 +191,8 @@
],
}
WSGI_APPLICATION = "demoapp.wsgi.application"
EMAIL_ADDRESS_MODEL = 'sendmail.EmailAddress'
#EMAIL_ADDRESS_MODEL = 'custom_user.CustomEmailAddress'
#EMAIL_ADDRESS_MODEL = 'sendmail.EmailAddress'
EMAIL_ADDRESS_MODEL = 'custom_user.CustomEmailAddress'

# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases
Expand Down
2 changes: 1 addition & 1 deletion demoapp/test_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@

]
POST_OFFICE_PLACEHOLDERS_CACHE = False
EMAIL_ADDRESS_MODEL = 'sendmail.EmailAddress'
#EMAIL_ADDRESS_MODEL = 'sendmail.EmailAddress'
SENDMAIL = {
'BACKENDS': {
'default': 'django.core.mail.backends.dummy.EmailBackend',
Expand Down
8 changes: 8 additions & 0 deletions sendmail/admin/emailmerge.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,3 +169,11 @@ def save_model(self, request, obj, form, change):
emailmerge=obj,
language=default_language,
)

def save_related(self, request, form, formsets, change):
super().save_related(request, form, formsets, change)

obj = form.instance

if obj and change:
obj.remove_extra_placeholders()
5 changes: 5 additions & 0 deletions sendmail/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,10 @@ def SENDMAIL(self):
config.setdefault('MESSAGE_ID_FQDN', DNS_NAME)
return config

@property
def EMAIL_ADDRESS_MODEL(self):
return 'pisun'
return getattr(django_settings, 'EMAIL_ADDRESS_MODEL', 'sendmail.model.EmailAddress')


settings = Settings()
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,30 @@
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
from sendmail.settings import get_email_address_setting


class Migration(migrations.Migration):

dependencies = [
('sendmail', '0008_alter_emailmergemodel_options'),
migrations.swappable_dependency(settings.EMAIL_ADDRESS_MODEL),
migrations.swappable_dependency(get_email_address_setting()),
]

operations = [
migrations.AlterField(
model_name='emailmergemodel',
name='extra_recipients',
field=models.ManyToManyField(blank=True, help_text='extra bcc recipients', to=settings.EMAIL_ADDRESS_MODEL),
field=models.ManyToManyField(blank=True, help_text='extra bcc recipients', to=get_email_address_setting()),
),
migrations.AlterField(
model_name='emailmodel',
name='recipients',
field=models.ManyToManyField(related_name='to_emails', through='sendmail.Recipient', to=settings.EMAIL_ADDRESS_MODEL),
field=models.ManyToManyField(related_name='to_emails', through='sendmail.Recipient', to=get_email_address_setting()),
),
migrations.AlterField(
model_name='recipient',
name='address',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.EMAIL_ADDRESS_MODEL),
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=get_email_address_setting()),
),
]
6 changes: 6 additions & 0 deletions sendmail/mixins.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from .settings import get_email_address_setting


class SwappableMetaMixin:
class Meta:
swappable = get_email_address_setting()
5 changes: 2 additions & 3 deletions sendmail/models/emailaddress.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
from django.db import models
from django.utils.translation import gettext_lazy as _
from django.conf import settings

from sendmail.logutils import setup_loghandlers
from sendmail.validators import validate_email_with_name
from .base import AbstractEmailAddress
from ..settings import get_email_address_model
from ..settings import get_email_address_setting

logger = setup_loghandlers('INFO')

Expand Down Expand Up @@ -52,7 +51,7 @@ class Recipient(models.Model):
('bcc', _('Bcc')),
]
email = models.ForeignKey('sendmail.EmailModel', on_delete=models.CASCADE)
address = models.ForeignKey(settings.EMAIL_ADDRESS_MODEL, on_delete=models.CASCADE)
address = models.ForeignKey(get_email_address_setting(), on_delete=models.CASCADE)
send_type = models.CharField(max_length=12, choices=SEND_TYPES, default='to')

def __str__(self):
Expand Down
32 changes: 6 additions & 26 deletions sendmail/models/emailmerge.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from sendmail.logutils import setup_loghandlers
from sendmail.parser import process_template
from sendmail.sanitizer import clean_html
from sendmail.settings import get_template_engine, get_email_address_model
from sendmail.settings import get_template_engine, get_email_address_setting
from sendmail.validators import validate_template_syntax

logger = setup_loghandlers('INFO')
Expand All @@ -30,7 +30,7 @@ class EmailMergeModel(models.Model):
created = models.DateTimeField(auto_now_add=True)
last_updated = models.DateTimeField(auto_now=True)
extra_recipients = models.ManyToManyField(
settings.EMAIL_ADDRESS_MODEL,
get_email_address_setting(),
blank=True,
help_text='extra bcc recipients',
)
Expand Down Expand Up @@ -77,29 +77,14 @@ def render_email_template(self, language='', recipient=None, context_dict=None):
def get_available_languages(self):
return list(self.translated_contents.values_list('language', flat=True))

def remove_extra_placeholders(self):
available_languages = self.get_available_languages()
self.contents.exclude(language__in=available_languages).delete()

def save(self, *args, **kwargs):
template = super().save(*args, **kwargs)
cache.delete(self.name)

# placeholder_names = process_template(self.base_file)
#
# existing_placeholders = set(
# self.contents.filter(base_file=self.base_file).values_list('placeholder_name',
# 'language'))
#
# placeholder_objs = []
# for placeholder_name in placeholder_names:
# for lang in get_languages_list():
# if (placeholder_name, lang) not in existing_placeholders:
# placeholder_objs.append(PlaceholderContent(placeholder_name=placeholder_name,
# language=lang,
# base_file=self.base_file,
# emailmerge=self,
# content=f"Placeholder: {placeholder_name}, "
# f"Language: {lang}", ), )
#
# PlaceholderContent.objects.bulk_create(placeholder_objs)

return template


Expand All @@ -126,7 +111,6 @@ def __str__(self):
return f"{self.emailmerge.name}: {self.language}"

def save(self, *args, **kwargs):
print("SAVE CALLED")
# cache.delete('placeholders %s:%s:%s' % (self.emailmerge.name, self.language, self.base_file))
self.full_clean()
super().save(*args, **kwargs)
Expand Down Expand Up @@ -154,10 +138,6 @@ def save(self, *args, **kwargs):

return self

def delete(self, *args, **kwargs):
# print('DELETE CALLED')
super().delete(*args, **kwargs)

class Meta:
constraints = [
models.UniqueConstraint(fields=['emailmerge', 'language'],
Expand Down
4 changes: 2 additions & 2 deletions sendmail/models/emailmodel.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from sendmail.logutils import setup_loghandlers
from sendmail.models.emailaddress import Recipient
from sendmail.sanitizer import clean_html
from sendmail.settings import get_log_level, get_template_engine
from sendmail.settings import get_log_level, get_template_engine, get_email_address_setting
from sendmail.validators import validate_email_with_name
from ..settings import get_email_address_model

Expand Down Expand Up @@ -42,7 +42,7 @@ class EmailModel(models.Model):
]

from_email = models.CharField(_('Email From'), max_length=254, validators=[validate_email_with_name])
recipients = models.ManyToManyField(settings.EMAIL_ADDRESS_MODEL, related_name='to_emails', through=Recipient)
recipients = models.ManyToManyField(get_email_address_setting(), related_name='to_emails', through=Recipient)
subject = models.CharField(_('Subject'), max_length=989, blank=True)
message = models.TextField(_('Message'), blank=True)
html_message = models.TextField(_('HTML Message'), blank=True)
Expand Down
6 changes: 5 additions & 1 deletion sendmail/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,10 +120,14 @@ def get_template_engine():


def get_email_address_model():
model_name = getattr(settings, 'EMAIL_ADDRESS_MODEL') or 'sendmail.model.EmailAddress'
model_name = get_email_address_setting()
return apps.get_model(model_name)


def get_email_address_setting():
return getattr(settings, 'EMAIL_ADDRESS_MODEL', 'sendmail.EmailAddress')


# def get_override_recipients():
# return get_config().get('OVERRIDE_RECIPIENTS', None)

Expand Down

0 comments on commit b958953

Please sign in to comment.