diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/Base_convertHtmlToSingleFile.py b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/Base_convertHtmlToSingleFile.py
index 1fd3abc47c15d614f2881059738504b018d74aaf..46d71fedf66c8cb8281acc090acd442722d2c92e 100644
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/Base_convertHtmlToSingleFile.py
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/Base_convertHtmlToSingleFile.py
@@ -12,6 +12,8 @@ Export the web page and its components to a single (m)html file.
 
 TODO: export same components into one mhtml attachment if possible.
 """
+# ERP5 web uses format= argument, which is also a python builtin
+# pylint: disable=redefined-builtin
 
 from zExceptions import Unauthorized
 from base64 import b64encode, b64decode
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/Form_getGroupList.xml b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/Form_getGroupList.xml
index 2e8b0b24ae9cf14e5600dea16bbe96cee969c5e0..35ebccdd5a483db08bbe77dbce3543a47433d6fe 100644
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/Form_getGroupList.xml
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/Form_getGroupList.xml
@@ -50,7 +50,7 @@
         </item>
         <item>
             <key> <string>_params</string> </key>
-            <value> <string>group_by_criterion=[\'left\', \'right\', \'center\', \'bottom\', \'hidden\']</string> </value>
+            <value> <string>group_by_criterion=(\'left\', \'right\', \'center\', \'bottom\', \'hidden\')</string> </value>
         </item>
         <item>
             <key> <string>id</string> </key>
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/StaticWebSection_getDocumentValue.py b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/StaticWebSection_getDocumentValue.py
index 3c404fd162003f15d152c528e12abbf36543d66e..fd90cf5ef9dcfbc9df2d0854d3392f10fe99c0af 100644
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/StaticWebSection_getDocumentValue.py
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/StaticWebSection_getDocumentValue.py
@@ -20,11 +20,6 @@
 """
 from Products.ZSQLCatalog.SQLCatalog import SimpleQuery, ComplexQuery
 if portal is None: portal = context.getPortalObject()
-portal_catalog = portal.portal_catalog
-# The list of portal types here should be large enough to include
-# all portal_types defined in the various sections so that
-# href tags which point to a document by reference can still work.
-valid_portal_type_list = portal.getPortalDocumentTypeList()
 
 # Find the applicable language
 if language is None:
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebPage_exportAsSingleFile.py b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebPage_exportAsSingleFile.py
index 83dec5a53ef398cc21617c347d622c0d8a187d88..6dcd72bd87c48eb85d22c0e4e7ab57747e9105e8 100644
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebPage_exportAsSingleFile.py
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebPage_exportAsSingleFile.py
@@ -3,7 +3,8 @@ Export the web page and its components to a single (m)html file.
 
 see Base_convertHtmlToSingleFile for documentation
 """
-
+# ERP5 web uses format= argument, which is also a python builtin
+# pylint: disable=redefined-builtin
 data = context.Base_convertHtmlToSingleFile(
   context.getTextContent(""),
   allow_script=allow_script,
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebPage_hashPublicationSectionItemList.py b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebPage_hashPublicationSectionItemList.py
index a60fb51ac678dd2186dc278e16510c2f706a13d2..c509feeaab3dcdca7dfca34b647edd233f138f7c 100644
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebPage_hashPublicationSectionItemList.py
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebPage_hashPublicationSectionItemList.py
@@ -5,6 +5,8 @@
 """
 # Initialise result
 sub_field_list = []
+if default_sub_field_property_dict is None:
+  default_sub_field_property_dict = {}
 
 # Maximum size of the MultiListField
 default_sub_field_property_dict.update({
@@ -17,7 +19,7 @@ default_sub_field_property_dict.update({
 })
 
 z = 0
-for i in range(1):
+for _ in range(1):
   new_dict = default_sub_field_property_dict.copy()
   new_dict['title'] = '&nbsp;'
   new_dict['key'] = str(z)
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebPage_hashPublicationSectionItemList.xml b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebPage_hashPublicationSectionItemList.xml
index 481abb28c503473aadbc73cd6a820495c2e6aff0..38f64c8cbff9858b1a8e2ddd0c1b94e6ad4d048d 100644
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebPage_hashPublicationSectionItemList.xml
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebPage_hashPublicationSectionItemList.xml
@@ -50,7 +50,7 @@
         </item>
         <item>
             <key> <string>_params</string> </key>
-            <value> <string>item_list, value_list, default_sub_field_property_dict={}, is_right_display=0</string> </value>
+            <value> <string>item_list, value_list, default_sub_field_property_dict=None, is_right_display=0</string> </value>
         </item>
         <item>
             <key> <string>id</string> </key>
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSection_createNewWebPage.py b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSection_createNewWebPage.py
index a3c8c8c6225e4be4798705e6880982a02a8c4c92..859ff99830a90257fafd926812f5230801dd098c 100644
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSection_createNewWebPage.py
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSection_createNewWebPage.py
@@ -1,5 +1,5 @@
 request = context.REQUEST
-request_form = context.REQUEST.form
+request_form = request.form
 from ZTUtils import make_query
 portal = context.getPortalObject()
 title = context.getTitle('Unknown')
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSection_generateSectionFromCategory.py b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSection_generateSectionFromCategory.py
index 58a9e3e7327cb50b8b793cb3433b659b21097d85..081331cbe90d2e4e4710552119f60bb2386f20e0 100644
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSection_generateSectionFromCategory.py
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSection_generateSectionFromCategory.py
@@ -5,6 +5,9 @@
 
   category -- the category to use
 """
+# our pylint integration does not support global variabled in zope python script.
+# pylint: disable=global-variable-undefined
+
 from ZODB.POSException import ConflictError
 portal = context.getPortalObject()
 translateString = context.Base_translateString
@@ -20,7 +23,7 @@ def getNiceID(s):
   s = s.lower()
   s = s.split()
   s = '-'.join(s)
-  s = filter(lambda c: c in valid_char, s)
+  s = [c for c in s if c in valid_char]
   s = s.replace('_', '-')
   return s
 
@@ -77,7 +80,7 @@ def createWebSectionFromCategoryValue(container, category, depth, section_id=Non
       new_section.updateLocalRolesOnSecurityGroups()
     except ConflictError:
       raise
-    except:
+    except Exception:
       failed_list.append(category.getRelativeUrl())
   else:
     new_section = container[section_id]
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSection_getDefaultDocumentValue.py b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSection_getDefaultDocumentValue.py
index e25d27d3aa83edefe01b6fc0b71bb9a650599cb2..10deeacd8e0cf0c53a490a068b40a1b290d2212b 100644
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSection_getDefaultDocumentValue.py
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSection_getDefaultDocumentValue.py
@@ -24,11 +24,6 @@
  portal skins. It is recommended to use the first approach
  to host multiple sites on a single ERP5Site instance.
 """
-portal_object = context.getPortalObject()
-
-# First find the Web Section or Web Site we belong to
-current_section = context.getWebSectionValue()
-
 # First get all the applicable references
 # There might be more than one reference due to security differences
 # (ex. a default restricted web page and a default public web page)
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSection_newDefaultWebPage.py b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSection_newDefaultWebPage.py
index 3899009ddd6fa20a3e452a1e063863145128b2f1..dcd7792bbd8546f1fcc8f791432a64e20b237a7b 100644
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSection_newDefaultWebPage.py
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSection_newDefaultWebPage.py
@@ -1,4 +1,3 @@
-request = context.REQUEST
 portal = context.getPortalObject()
 title = context.getTitle('Unknown')
 translateString = context.Base_translateString
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_createWebSiteAccount.py b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_createWebSiteAccount.py
index 91a5e46f57f1f073fe6250e15581e802d99561f4..eb3502af544b519fa8f0de30d0e6db86629f9cde 100644
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_createWebSiteAccount.py
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_createWebSiteAccount.py
@@ -10,11 +10,11 @@
     - you need to adjust group, function and site to your needs
 """
 
+# pylint: disable=unreachable
 # since the following code is just an example, we simply raise an exception so that
 # it is not executed actually.
 raise NotImplementedError
 
-from Products.Formulator.Errors import ValidationError, FormValidationError
 portal = context.getPortalObject()
 translateString = context.Base_translateString
 website = context.getWebSiteValue()
@@ -25,7 +25,7 @@ result, result_type = context.Base_edit(form_id, silent_mode=1, field_prefix='yo
 # Return if not appropriate
 if result_type != 'edit':
   return result
-kw, encapsulated_editor_list = result
+kw, _ = result
 
 # Set default values
 person_group = kw.get('group', None)
@@ -55,11 +55,11 @@ person.validate()
 #person.immediateReindexObject()
 
 # Create default career
-career = person.newContent(portal_type='Career',
-                           id='default_career',
-                           group=person_group,
-                           function=person_function,
-                           role=person_role)
+person.newContent(portal_type='Career',
+                  id='default_career',
+                  group=person_group,
+                  function=person_function,
+                  role=person_role)
 # Create assignment
 assignment = person.newContent(portal_type='Assignment',
                                group=person_group,
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_getMainSectionList.py b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_getMainSectionList.py
index fd9822e8ee9fa2e69cf5b2702f71b9d0aac70b41..2373900b318e95d8aaece4226cc29b81fef3dbdb 100644
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_getMainSectionList.py
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_getMainSectionList.py
@@ -4,4 +4,4 @@
 """
 site = context.getWebSiteValue()
 section_list = site.contentValues(portal_type='Web Section', sort_on='int_index', checked_permission='View')
-return filter(lambda x: x.isVisible(), section_list)
+return [x for x in section_list if x.isVisible()]
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_logout.py b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_logout.py
index 4ec9740aebb942c57e245ff8744f1e215b52b247..f78c3a57f3dd32ced68ce8eb3b241c8ec4b51769 100644
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_logout.py
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_logout.py
@@ -4,7 +4,7 @@
 website = context.getWebSiteValue()
 REQUEST = context.REQUEST
 if REQUEST.has_key('portal_skin'):
-   context.portal_skins.clearSkinCookie()
+  context.portal_skins.clearSkinCookie()
 REQUEST.RESPONSE.expireCookie('__ac', path='/')
 msg = context.Base_translateString('You have been logged out. Thank you for using this website.')
 return website.Base_redirect(form_id, keep_items = {'portal_status_message' : msg},  **kw)
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/Base_getWorkflowEventInfoList.py b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/Base_getWorkflowEventInfoList.py
index c4415d607d2ee8520daaa6a7aee0fd1bad16bcdd..64b2ca7b7d63f6a7c9c387a5c38bbfdcd4896dea 100644
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/Base_getWorkflowEventInfoList.py
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/Base_getWorkflowEventInfoList.py
@@ -7,16 +7,16 @@
 
 from Products.CMFCore.WorkflowCore import WorkflowException
 history = {}
-workflow_id_list = [workflow_id for workflow_id, workflow_state in context.getWorkflowStateItemList()]
+workflow_id_list = [workflow_id for workflow_id, _ in context.getWorkflowStateItemList()]
 for wf_id in workflow_id_list:
   try:
-    history[wf_id]=context.Base_getWorkflowHistoryItemList(workflow_id=wf_id)
+    history[wf_id] = context.Base_getWorkflowHistoryItemList(workflow_id=wf_id)
   except WorkflowException:
-     # some workflow don't have history
-     pass
+    # some workflow don't have history
+    pass
 
 event_list = []
-for worrkflow_id in history.keys():
-  event_list += history[worrkflow_id]
+for workflow_id in history.keys():
+  event_list += history[workflow_id]
 if sort: event_list.sort(key=lambda x:x.time, reverse=True)
 return event_list
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSection_viewInlinePageRenderer.py b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSection_viewInlinePageRenderer.py
index 04da7c12fd64d782c0cd8f596d4eabdc59b8fce1..e18f2ae85885f2613c69f05a250708be3145a089 100644
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSection_viewInlinePageRenderer.py
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSection_viewInlinePageRenderer.py
@@ -6,11 +6,11 @@
 """
 
 def getInlinePage(reference, language):
- if reference:
-   page = context.getDocumentValue(reference)
-   if page is not None:
-     return page.asStrippedHTML()
- return None
+  if reference:
+    page = context.getDocumentValue(reference)
+    if page is not None:
+      return page.asStrippedHTML()
+  return None
 
 from Products.ERP5Type.Cache import CachingMethod
 web_site_url = context.getWebSectionValue().absolute_url()
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSection_viewSubjectIndexRenderer.py b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSection_viewSubjectIndexRenderer.py
index c8a42d4d7938dee5bd915ff7f2bee5075a6e3ca8..9addc8695073b5fcf63820807349de588c7edfff 100644
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSection_viewSubjectIndexRenderer.py
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSection_viewSubjectIndexRenderer.py
@@ -9,8 +9,6 @@
   Result is cached for high performance.
 """
 
-web_site_value = context.getWebSiteValue()
-web_site_url = web_site_value.absolute_url()
 web_section_value = context.getWebSectionValue()
 web_section_url = web_section_value.absolute_url()
 context = web_section_value
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_redirectToUserPreference.py b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_redirectToUserPreference.py
index b612ddedc5dae978ce148c7979f8dd60b0e8c841..d486d9c0de701113290a5357be8c19c7dd52c801 100644
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_redirectToUserPreference.py
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web_widget_library/WebSite_redirectToUserPreference.py
@@ -7,9 +7,7 @@
 from zExceptions import Unauthorized
 
 # Initialize some useful variables
-request = context.REQUEST
 portal = context.getPortalObject()
-website = context.getWebSiteValue()
 user = portal.portal_membership.getAuthenticatedMember()
 user_preference = None
 portal_preferences = portal.portal_preferences
diff --git a/bt5/erp5_web/WorkflowTemplateItem/portal_workflow/category_publication_workflow/scripts/expireAll.py b/bt5/erp5_web/WorkflowTemplateItem/portal_workflow/category_publication_workflow/scripts/expireAll.py
index ea8fa8d042e44f8341804cc84e66a41237be85ec..c5da97f66fd6841e7f5b8a56d0b4f319b2d62967 100644
--- a/bt5/erp5_web/WorkflowTemplateItem/portal_workflow/category_publication_workflow/scripts/expireAll.py
+++ b/bt5/erp5_web/WorkflowTemplateItem/portal_workflow/category_publication_workflow/scripts/expireAll.py
@@ -1,12 +1,12 @@
-object = state_change['object']
+document = state_change['object']
 
-workflow_tool = object.getPortalObject().portal_workflow
+workflow_tool = document.getPortalObject().portal_workflow
 
-if workflow_tool.isTransitionPossible(object, 'expire'):
-  object.expire()
+if workflow_tool.isTransitionPossible(document, 'expire'):
+  document.expire()
 
-if workflow_tool.isTransitionPossible(object, 'expire_protected'):
-  object.expireProtected()
+if workflow_tool.isTransitionPossible(document, 'expire_protected'):
+  document.expireProtected()
 
-if workflow_tool.isTransitionPossible(object, 'expire_published'):
-  object.expirePublished()
+if workflow_tool.isTransitionPossible(document, 'expire_published'):
+  document.expirePublished()