src/pyams_viewlet/viewlet.py
changeset 47 df022d00a9c4
parent 41 9bbb78a1efa9
child 54 6e63f435d731
--- 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