Honor the configured email collection module(s), even w/ entry points

entry points make for an obvious default collection, but if config
declares a particular list of modules, that should win
This commit is contained in:
Lance Edgar 2022-08-06 22:50:37 -05:00
parent 890ec80b73
commit 54c3d0eae3

View file

@ -89,13 +89,43 @@ class EmailHandler(object):
self.config = config
self.enum = self.config.get_enum()
def use_entry_points(self):
"""
Returns a boolean indicating if the app should get its list of
available emails from the setuptools entry points, instead of
the (legacy) ``[rattail.mail] emails`` config setting.
"""
return self.config.getbool('rattail.mail', 'emails.use_entry_points',
default=False)
def get_all_emails(self, **kwargs):
"""
Retrieve the complete set of all Email profiles exposed by the
app and installed packages.
"""
# TODO: maybe deprecate this at some point?
if not self.use_entry_points():
# nb. this is the legacy behavior
return dict([(email.key or email.__name__, email)
for email in self.iter_emails(warn=False)])
# this is the future..
emails = {}
modules = load_entry_points('rattail.emails').values()
# first get *all* email modules, per entry points
all_modules = load_entry_points('rattail.emails').values()
# but maybe the app config says only to use certain modules
app_modules = self.config.getlist('rattail.mail', 'emails')
# figure out which modules we should actually use
if app_modules:
modules = [import_module_path(m)
for m in app_modules]
else:
modules = all_modules
# and collect all email profiles from those modules
for module in modules:
mod_emails = self.get_emails_from_module(module)
emails.update(dict([(email.key or email.__name__, email)
@ -114,15 +144,6 @@ class EmailHandler(object):
emails.append(obj)
return emails
def use_entry_points(self):
"""
Returns a boolean indicating if the app should get its list of
available emails from the setuptools entry points, instead of
the (legacy) ``[rattail.mail] emails`` config setting.
"""
return self.config.getbool('rattail.mail', 'emails.use_entry_points',
default=False)
def get_available_emails(self, **kwargs):
"""
Retrieve the set of "available" Email profiles, i.e. those