--- a/src/pyams_viewlet/viewlet.py Fri Jan 18 15:32:56 2019 +0100
+++ b/src/pyams_viewlet/viewlet.py Wed Nov 27 15:57:21 2019 +0100
@@ -10,7 +10,11 @@
# FOR A PARTICULAR PURPOSE.
#
-__docformat__ = 'restructuredtext'
+"""PyAMS_viewlet.viewlet module
+
+This module provides base content providers and viewlets classes, as well as a decorators
+which can be used instead of ZCML declarations to register content providers and viewlets.
+"""
import logging
@@ -23,12 +27,14 @@
from pyams_template.template import get_view_template
from pyams_viewlet.interfaces import IViewlet, IViewletManager
+__docformat__ = 'restructuredtext'
-logger = logging.getLogger('PyAMS (viewlet)')
+
+LOGGER = logging.getLogger('PyAMS (viewlet)')
@implementer(IContentProvider)
-class EmptyContentProvider(object):
+class EmptyContentProvider:
"""Empty content provider base class"""
permission = None
@@ -38,15 +44,17 @@
self.request = request
def __call__(self):
- if self.permission and not self.request.has_permission(self.permission, context=self.context):
+ if self.permission and not self.request.has_permission(self.permission,
+ context=self.context):
return ''
self.update()
return self.render()
def update(self):
- pass
+ """See `IContentProvider` interface"""
- def render(self):
+ def render(self): # pylint: disable=no-self-use
+ """See `IContentProvider` interface"""
return ''
@@ -71,7 +79,7 @@
self.view = self.__parent__ = view
-class contentprovider_config(object):
+class contentprovider_config: # pylint: disable=invalid-name
"""Class decorator used to declare a content provider
You can provide same arguments as in 'viewlet' ZCML directive:
@@ -95,22 +103,22 @@
def __call__(self, wrapped):
settings = self.__dict__.copy()
- def callback(context, name, ob):
+ def callback(context, name, obj): # pylint: disable=unused-argument
cdict = {
'__name__': settings.get('name'),
- '__module__': ob.__module__
+ '__module__': obj.__module__
}
if 'permission' in settings:
settings['permission'] = settings.get('permission')
- bases = (ob,)
- if not IContentProvider.implementedBy(ob):
+ bases = (obj,)
+ if not IContentProvider.implementedBy(obj): # pylint: disable=no-value-for-parameter
bases = bases + (ViewContentProvider,)
new_class = type('<ViewContentProvider %s>' % settings.get('name'), bases, cdict)
- logger.debug("Registering content provider {0} ({1})".format(settings.get('name'),
+ LOGGER.debug("Registering content provider {0} ({1})".format(settings.get('name'),
str(new_class)))
- config = context.config.with_package(info.module)
+ config = context.config.with_package(info.module) # pylint: disable=no-member
config.registry.registerAdapter(new_class,
(settings.get('context', Interface),
settings.get('layer', IRequest),
@@ -119,19 +127,19 @@
info = self.venusian.attach(wrapped, callback, category='pyams_viewlet')
- if info.scope == 'class':
+ if info.scope == 'class': # pylint: disable=no-member
# if the decorator was attached to a method in a class, or
# otherwise executed at class scope, we need to set an
# 'attr' into the settings if one isn't already in there
if settings.get('attr') is None:
settings['attr'] = wrapped.__name__
- settings['_info'] = info.codeinfo # fbo "action_method"
+ settings['_info'] = info.codeinfo # pylint: disable=no-member
return wrapped
@implementer(IViewlet)
-class EmptyViewlet(object):
+class EmptyViewlet:
"""Empty viewlet base class"""
permission = None
@@ -143,9 +151,10 @@
self.manager = manager
def update(self):
- pass
+ """See `IContentProvider` interface"""
- def render(self):
+ def render(self): # pylint: disable=no-self-use
+ """See `IContentProvider` interface"""
return ''
@@ -155,7 +164,7 @@
render = get_view_template()
-class viewlet_config(object):
+class viewlet_config: # pylint: disable=invalid-name
"""Class decorator used to declare a viewlet
You can provide same arguments as in 'viewlet' ZCML directive:
@@ -181,24 +190,24 @@
def __call__(self, wrapped):
settings = self.__dict__.copy()
- def callback(context, name, ob):
+ def callback(context, name, obj): # pylint: disable=unused-argument
cdict = {
'__name__': settings.get('name'),
- '__module__': ob.__module__
+ '__module__': obj.__module__
}
if 'permission' in settings:
cdict['permission'] = settings.get('permission')
if 'weight' in settings:
cdict['weight'] = settings.get('weight')
- bases = (ob,)
- if not IViewlet.implementedBy(ob):
+ bases = (obj,)
+ if not IViewlet.implementedBy(obj): # pylint: disable=no-value-for-parameter
bases = bases + (Viewlet,)
new_class = type('<Viewlet %s>' % settings.get('name'), bases, cdict)
- logger.debug("Registering viewlet {0} ({1})".format(settings.get('name'),
+ LOGGER.debug("Registering viewlet {0} ({1})".format(settings.get('name'),
str(new_class)))
- config = context.config.with_package(info.module)
+ config = context.config.with_package(info.module) # pylint: disable=no-member
config.registry.registerAdapter(new_class,
(settings.get('context', Interface),
settings.get('layer', IRequest),
@@ -208,12 +217,12 @@
info = self.venusian.attach(wrapped, callback, category='pyams_viewlet')
- if info.scope == 'class':
+ if info.scope == 'class': # pylint: disable=no-member
# if the decorator was attached to a method in a class, or
# otherwise executed at class scope, we need to set an
# 'attr' into the settings if one isn't already in there
if settings.get('attr') is None:
settings['attr'] = wrapped.__name__
- settings['_info'] = info.codeinfo # fbo "action_method"
+ settings['_info'] = info.codeinfo # pylint: disable=no-member
return wrapped