diff --git a/bt5/erp5_web/DocumentTemplateItem/portal_components/document.erp5.WebSection.py b/bt5/erp5_web/DocumentTemplateItem/portal_components/document.erp5.WebSection.py
index ac07fb7837b88586470c48eba25b6b6687688731..285addf60d85e86b9a67dde4827eab1d1757c31b 100644
--- a/bt5/erp5_web/DocumentTemplateItem/portal_components/document.erp5.WebSection.py
+++ b/bt5/erp5_web/DocumentTemplateItem/portal_components/document.erp5.WebSection.py
@@ -442,7 +442,7 @@ class WebSection(Domain, DocumentExtensibleTraversableMixin):
 
     return result
 
-  def _edit(self, **kw):
+  def _edit(self, *args, **kw):
     # XXX it is unclear if we should keep this behavior in other potential subclasses.
     # Probably yes.
     if self.getPortalType() in WEB_SECTION_PORTAL_TYPE_TUPLE:
@@ -453,4 +453,4 @@ class WebSection(Domain, DocumentExtensibleTraversableMixin):
       else:
         # cleanup beforeTraverse hooks that may exist after this document was cloned.
         self._cleanupBeforeTraverseHooks()
-    super(WebSection, self)._edit(**kw)
+    super(WebSection, self)._edit(*args, **kw)
diff --git a/bt5/erp5_web/ExtensionTemplateItem/portal_components/extension.erp5.WebUtility.py b/bt5/erp5_web/ExtensionTemplateItem/portal_components/extension.erp5.WebUtility.py
index 2943210bdf703fab122bf5c650c0ebef2ff8ab5e..bf046810f61af1e0b3d56c1feae5e5042fb98941 100644
--- a/bt5/erp5_web/ExtensionTemplateItem/portal_components/extension.erp5.WebUtility.py
+++ b/bt5/erp5_web/ExtensionTemplateItem/portal_components/extension.erp5.WebUtility.py
@@ -60,6 +60,9 @@ class HtmlParseHelper(HTMLParser):
     self.result.append(("pi", data))
   def unknown_decl(self, data):
     self.result.append(("unknown_decl", data))
+  def error(self, message):
+    raise ValueError(message)
+
 
 def parseHtml(text):
   """
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 d319996f9c4eb2386872f402c83cfb731e5e3222..c10e35cec87c19d6b32fa414a86dd2114dbf7c42 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
@@ -194,7 +194,7 @@ def handleHrefObject(obj, src, default_mimetype="text/html", default_data=b"<p>L
         data = bytes(obj.data or b"")
       else:
         data = getattr(obj, "getData", lambda: bytes(obj))() or b""
-      if six.PY2 and isinstance(data, unicode):
+      if six.PY2 and isinstance(data, unicode):  # pylint:disable=undefined-variable
         data = data.encode("utf-8")
       assert isinstance(data, bytes)
       return handleLinkedData(mime, data, src)
@@ -205,7 +205,7 @@ def handleHrefObject(obj, src, default_mimetype="text/html", default_data=b"<p>L
   # use the same behavior as when we call a script from browser URL bar.
   if not hasattr(obj, "getPortalType") and callable(obj):
     mime, data = "text/html", obj()
-    if six.PY2 and isinstance(data, unicode):
+    if six.PY2 and isinstance(data, unicode):  # pylint:disable=undefined-variable
       data = data.encode("utf-8")
     return handleLinkedData(mime, data, src)
 
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/Base_formatAttachmentListToMIMEMultipartString.py b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/Base_formatAttachmentListToMIMEMultipartString.py
index 30dc428a31a4d9099015a40f7082eabb531435d6..439378fad9b06841506541182428ac81c3548b5f 100644
--- a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/Base_formatAttachmentListToMIMEMultipartString.py
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/Base_formatAttachmentListToMIMEMultipartString.py
@@ -148,7 +148,9 @@ for attachment in attachment_list:
   for key, value in attachment.get("add_header_list", []):
     part.add_header(key, value)
   if attachment.get("filename", None) is not None:
-    part.add_header("Content-Disposition", "attachment", attachment["filename"])
+    # XXX disable too-many-function-args because there is no error with this code,
+    # but it might just be not tested.
+    part.add_header("Content-Disposition", "attachment", attachment["filename"])  # pylint:disable=too-many-function-args
   outer.attach(part)
 
 #return outer.as_string()