Factorize addresses computation

This allows to extend the addresses of a notification.

issue10521
review358281009
This commit is contained in:
Cédric Krier committed 2021-07-12 23:12:23 +02:00
1 parent 204bd3fdd0
commit 452d37f23f
1 file changed
+49 -37
+49 -37
View File
@@ -229,43 +229,10 @@ class Email(ModelSQL, ModelView):
or config.get('email', 'from'))
logs = []
for record in records:
languagues = set()
to = []
if self.recipients:
recipients = getattr(record, self.recipients.name, None)
if recipients:
languagues.update(self._get_languages(recipients))
to = self._get_addresses(recipients)
if not to and self.fallback_recipients:
languagues.update(
self._get_languages(self.fallback_recipients))
to = self._get_addresses(self.fallback_recipients)
cc = []
if self.recipients_secondary:
recipients_secondary = getattr(
record, self.recipients_secondary.name, None)
if recipients_secondary:
languagues.update(
self._get_languages(recipients_secondary))
cc = self._get_addresses(recipients_secondary)
if not cc and self.fallback_recipients_secondary:
languagues.update(
self._get_languages(self.fallback_recipients_secondary))
cc = self._get_addresses(self.fallback_recipients_secondary)
bcc = []
if self.recipients_hidden:
recipients_hidden = getattr(
record, self.recipients_hidden.name, None)
if recipients_hidden:
languagues.update(self._get_languages(recipients_hidden))
bcc = self._get_addresses(recipients_hidden)
if not bcc and self.fallback_recipients_hidden:
languagues.update(
self._get_languages(self.fallback_recipients_hidden))
bcc = self._get_addresses(self.fallback_recipients_hidden)
to, to_languages = self._get_to(record)
cc, cc_languages = self._get_cc(record)
bcc, bcc_languages = self._get_bcc(record)
languagues = to_languages | cc_languages | bcc_languages
to_addrs = [e for _, e in getaddresses(to + cc + bcc)]
if to_addrs:
msg = self.get_email(record, from_, to, cc, bcc, languagues)
@@ -276,6 +243,51 @@ class Email(ModelSQL, ModelView):
if logs:
Log.create(logs)
def _get_to(self, record):
to = []
languagues = set()
if self.recipients:
recipients = getattr(record, self.recipients.name, None)
if recipients:
languagues.update(self._get_languages(recipients))
to = self._get_addresses(recipients)
if not to and self.fallback_recipients:
languagues.update(
self._get_languages(self.fallback_recipients))
to = self._get_addresses(self.fallback_recipients)
return to, languagues
def _get_cc(self, record):
cc = []
languagues = set()
if self.recipients_secondary:
recipients_secondary = getattr(
record, self.recipients_secondary.name, None)
if recipients_secondary:
languagues.update(
self._get_languages(recipients_secondary))
cc = self._get_addresses(recipients_secondary)
if not cc and self.fallback_recipients_secondary:
languagues.update(
self._get_languages(self.fallback_recipients_secondary))
cc = self._get_addresses(self.fallback_recipients_secondary)
return cc, languagues
def _get_bcc(self, record):
bcc = []
languagues = set()
if self.recipients_hidden:
recipients_hidden = getattr(
record, self.recipients_hidden.name, None)
if recipients_hidden:
languagues.update(self._get_languages(recipients_hidden))
bcc = self._get_addresses(recipients_hidden)
if not bcc and self.fallback_recipients_hidden:
languagues.update(
self._get_languages(self.fallback_recipients_hidden))
bcc = self._get_addresses(self.fallback_recipients_hidden)
return bcc, languagues
@classmethod
def validate(cls, notifications):
super().validate(notifications)