fix: fix 'duplicate-code' for pylint
This commit is contained in:
parent
da395e1880
commit
f86aeff788
5 changed files with 74 additions and 29 deletions
|
@ -13,6 +13,7 @@ enable=anomalous-backslash-in-string,
|
||||||
cyclic-import,
|
cyclic-import,
|
||||||
dangerous-default-value,
|
dangerous-default-value,
|
||||||
disallowed-name,
|
disallowed-name,
|
||||||
|
duplicate-code,
|
||||||
empty-docstring,
|
empty-docstring,
|
||||||
inconsistent-return-statements,
|
inconsistent-return-statements,
|
||||||
invalid-name,
|
invalid-name,
|
||||||
|
|
|
@ -1123,6 +1123,7 @@ class GenericHandler:
|
||||||
def __init__(self, config):
|
def __init__(self, config):
|
||||||
self.config = config
|
self.config = config
|
||||||
self.app = self.config.get_app()
|
self.app = self.config.get_app()
|
||||||
|
self.modules = {}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def appname(self):
|
def appname(self):
|
||||||
|
@ -1139,3 +1140,35 @@ class GenericHandler:
|
||||||
Returns the class :term:`spec` string for the handler.
|
Returns the class :term:`spec` string for the handler.
|
||||||
"""
|
"""
|
||||||
return f'{cls.__module__}:{cls.__name__}'
|
return f'{cls.__module__}:{cls.__name__}'
|
||||||
|
|
||||||
|
def get_provider_modules(self, module_type):
|
||||||
|
"""
|
||||||
|
Returns a list of all available modules of the given type.
|
||||||
|
|
||||||
|
Not all handlers would need such a thing, but notable ones
|
||||||
|
which do are the :term:`email handler` and :term:`report
|
||||||
|
handler`. Both can obtain classes (emails or reports) from
|
||||||
|
arbitrary modules, and this method is used to locate them.
|
||||||
|
|
||||||
|
This will discover all modules exposed by the app
|
||||||
|
:term:`providers <provider>`, which expose an attribute with
|
||||||
|
name like ``f"{module_type}_modules"``.
|
||||||
|
|
||||||
|
:param module_type: Unique name referring to a particular
|
||||||
|
"type" of modules to locate, e.g. ``'email'``.
|
||||||
|
|
||||||
|
:returns: List of module objects.
|
||||||
|
"""
|
||||||
|
if module_type not in self.modules:
|
||||||
|
self.modules[module_type] = []
|
||||||
|
for provider in self.app.providers.values():
|
||||||
|
name = f'{module_type}_modules'
|
||||||
|
if hasattr(provider, name):
|
||||||
|
modules = getattr(provider, name)
|
||||||
|
if modules:
|
||||||
|
if isinstance(modules, str):
|
||||||
|
modules = [modules]
|
||||||
|
for modpath in modules:
|
||||||
|
module = importlib.import_module(modpath)
|
||||||
|
self.modules[module_type].append(module)
|
||||||
|
return self.modules[module_type]
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
Email Handler
|
Email Handler
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import importlib
|
|
||||||
import logging
|
import logging
|
||||||
import smtplib
|
import smtplib
|
||||||
from email.mime.multipart import MIMEMultipart
|
from email.mime.multipart import MIMEMultipart
|
||||||
|
@ -305,20 +304,12 @@ class EmailHandler(GenericHandler):
|
||||||
|
|
||||||
This will discover all email modules exposed by the
|
This will discover all email modules exposed by the
|
||||||
:term:`app`, and/or its :term:`providers <provider>`.
|
:term:`app`, and/or its :term:`providers <provider>`.
|
||||||
"""
|
|
||||||
if not hasattr(self, '_email_modules'):
|
|
||||||
self._email_modules = []
|
|
||||||
for provider in self.app.providers.values():
|
|
||||||
if hasattr(provider, 'email_modules'):
|
|
||||||
modules = provider.email_modules
|
|
||||||
if modules:
|
|
||||||
if isinstance(modules, str):
|
|
||||||
modules = [modules]
|
|
||||||
for module in modules:
|
|
||||||
module = importlib.import_module(module)
|
|
||||||
self._email_modules.append(module)
|
|
||||||
|
|
||||||
return self._email_modules
|
Calls
|
||||||
|
:meth:`~wuttjamaican.app.GenericHandler.get_provider_modules()`
|
||||||
|
under the hood, for ``email`` module type.
|
||||||
|
"""
|
||||||
|
return self.get_provider_modules('email')
|
||||||
|
|
||||||
def get_email_settings(self):
|
def get_email_settings(self):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -24,8 +24,6 @@
|
||||||
Report Utilities
|
Report Utilities
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import importlib
|
|
||||||
|
|
||||||
from wuttjamaican.app import GenericHandler
|
from wuttjamaican.app import GenericHandler
|
||||||
|
|
||||||
|
|
||||||
|
@ -143,20 +141,12 @@ class ReportHandler(GenericHandler):
|
||||||
|
|
||||||
This will discover all report modules exposed by the
|
This will discover all report modules exposed by the
|
||||||
:term:`app`, and/or its :term:`providers <provider>`.
|
:term:`app`, and/or its :term:`providers <provider>`.
|
||||||
"""
|
|
||||||
if not hasattr(self, '_report_modules'):
|
|
||||||
self._report_modules = []
|
|
||||||
for provider in self.app.providers.values():
|
|
||||||
if hasattr(provider, 'report_modules'):
|
|
||||||
modules = provider.report_modules
|
|
||||||
if modules:
|
|
||||||
if isinstance(modules, str):
|
|
||||||
modules = [modules]
|
|
||||||
for module in modules:
|
|
||||||
module = importlib.import_module(module)
|
|
||||||
self._report_modules.append(module)
|
|
||||||
|
|
||||||
return self._report_modules
|
Calls
|
||||||
|
:meth:`~wuttjamaican.app.GenericHandler.get_provider_modules()`
|
||||||
|
under the hood, for ``report`` module type.
|
||||||
|
"""
|
||||||
|
return self.get_provider_modules('report')
|
||||||
|
|
||||||
def get_reports(self):
|
def get_reports(self):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -761,6 +761,9 @@ class TestGenericHandler(ConfigTestCase):
|
||||||
kw.setdefault('appname', 'wuttatest')
|
kw.setdefault('appname', 'wuttatest')
|
||||||
return super().make_config(**kw)
|
return super().make_config(**kw)
|
||||||
|
|
||||||
|
def make_handler(self, **kwargs):
|
||||||
|
return mod.GenericHandler(self.config, **kwargs)
|
||||||
|
|
||||||
def test_constructor(self):
|
def test_constructor(self):
|
||||||
handler = mod.GenericHandler(self.config)
|
handler = mod.GenericHandler(self.config)
|
||||||
self.assertIs(handler.config, self.config)
|
self.assertIs(handler.config, self.config)
|
||||||
|
@ -769,3 +772,30 @@ class TestGenericHandler(ConfigTestCase):
|
||||||
|
|
||||||
def test_get_spec(self):
|
def test_get_spec(self):
|
||||||
self.assertEqual(mod.GenericHandler.get_spec(), 'wuttjamaican.app:GenericHandler')
|
self.assertEqual(mod.GenericHandler.get_spec(), 'wuttjamaican.app:GenericHandler')
|
||||||
|
|
||||||
|
def test_get_provider_modules(self):
|
||||||
|
|
||||||
|
# no providers, no email modules
|
||||||
|
with patch.object(self.app, 'providers', new={}):
|
||||||
|
handler = self.make_handler()
|
||||||
|
self.assertEqual(handler.get_provider_modules('email'), [])
|
||||||
|
|
||||||
|
# provider may specify modules as list
|
||||||
|
providers = {
|
||||||
|
'wuttatest': MagicMock(email_modules=['wuttjamaican.app']),
|
||||||
|
}
|
||||||
|
with patch.object(self.app, 'providers', new=providers):
|
||||||
|
handler = self.make_handler()
|
||||||
|
modules = handler.get_provider_modules('email')
|
||||||
|
self.assertEqual(len(modules), 1)
|
||||||
|
self.assertIs(modules[0], mod)
|
||||||
|
|
||||||
|
# provider may specify modules as string
|
||||||
|
providers = {
|
||||||
|
'wuttatest': MagicMock(email_modules='wuttjamaican.app'),
|
||||||
|
}
|
||||||
|
with patch.object(self.app, 'providers', new=providers):
|
||||||
|
handler = self.make_handler()
|
||||||
|
modules = handler.get_provider_modules('email')
|
||||||
|
self.assertEqual(len(modules), 1)
|
||||||
|
self.assertIs(modules[0], mod)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue