From f39e6889fed2385215b2fed3bd11068fa5713834 Mon Sep 17 00:00:00 2001 From: Johannes Raggam Date: Fri, 27 Feb 2026 12:07:09 +0100 Subject: [PATCH 1/4] Configuring with plone.meta --- .github/workflows/test-matrix.yml | 2 +- .meta.toml | 2 +- .pre-commit-config.yaml | 4 ++-- news/+meta.internal | 1 + tox.ini | 1 + 5 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 news/+meta.internal diff --git a/.github/workflows/test-matrix.yml b/.github/workflows/test-matrix.yml index 0f185ef68c..9b50d75189 100644 --- a/.github/workflows/test-matrix.yml +++ b/.github/workflows/test-matrix.yml @@ -19,7 +19,7 @@ jobs: - ["ubuntu", "ubuntu-latest"] config: # [Python version, visual name, tox env] - - ["3.13", "6.2 on py3.13", "py313-plone62"] + - ["3.14", "6.2 on py3.14", "py314-plone62"] - ["3.10", "6.2 on py3.10", "py310-plone62"] runs-on: ${{ matrix.os[1] }} diff --git a/.meta.toml b/.meta.toml index 9fedc17b28..189fa3ca86 100644 --- a/.meta.toml +++ b/.meta.toml @@ -3,7 +3,7 @@ # See the inline comments on how to expand/tweak this configuration file [meta] template = "default" -commit-id = "2.3.2.dev0" +commit-id = "2.3.3.dev0" [flake8] extra_lines = """ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 57a682b4ce..377ab54d8d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,11 +12,11 @@ repos: - id: pyupgrade args: [--py38-plus] - repo: https://github.com/pycqa/isort - rev: 7.0.0 + rev: 8.0.0 hooks: - id: isort - repo: https://github.com/psf/black-pre-commit-mirror - rev: 25.12.0 + rev: 26.1.0 hooks: - id: black - repo: https://github.com/collective/zpretty diff --git a/news/+meta.internal b/news/+meta.internal new file mode 100644 index 0000000000..1526bc29b0 --- /dev/null +++ b/news/+meta.internal @@ -0,0 +1 @@ +Update configuration files @plone \ No newline at end of file diff --git a/tox.ini b/tox.ini index 42b65498c7..b22f7c3386 100644 --- a/tox.ini +++ b/tox.ini @@ -7,6 +7,7 @@ min_version = 4.4.0 envlist = lint test + py314-plone62 py313-plone62 py312-plone62 py311-plone62 From 7463eb56d7b1356509765b5e02827c80df164b8b Mon Sep 17 00:00:00 2001 From: Johannes Raggam Date: Fri, 27 Feb 2026 12:09:27 +0100 Subject: [PATCH 2/4] =?UTF-8?q?Trove=20Classifiers:=E2=80=8C=20Announce=20?= =?UTF-8?q?support=20for=20Python=203.14.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- news/+meta.internal | 2 +- setup.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/news/+meta.internal b/news/+meta.internal index 1526bc29b0..9bb1a33bdc 100644 --- a/news/+meta.internal +++ b/news/+meta.internal @@ -1 +1 @@ -Update configuration files @plone \ No newline at end of file +Update configuration files, add Python 3.14 to testing matrix and announce Python 3.14 in Trove classifiers. @plone diff --git a/setup.py b/setup.py index 5e36b4ce0b..97797f233f 100644 --- a/setup.py +++ b/setup.py @@ -28,6 +28,7 @@ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", ], python_requires=">=3.10", keywords="Plone CMF Python Zope CMS Webapplication", From e1d3489e52ece77463321a036913b7410aa70cb8 Mon Sep 17 00:00:00 2001 From: Johannes Raggam Date: Mon, 9 Mar 2026 21:00:41 +0100 Subject: [PATCH 3/4] Run pre-commit on all files. --- .pre-commit-config.yaml | 6 +- setup.py | 1 - src/Products/CMFPlone/CatalogTool.py | 8 +- src/Products/CMFPlone/MigrationTool.py | 5 +- src/Products/CMFPlone/PasswordResetTool.py | 1 - src/Products/CMFPlone/PloneBaseTool.py | 1 - src/Products/CMFPlone/PloneBatch.py | 1 - src/Products/CMFPlone/PloneTool.py | 3 +- src/Products/CMFPlone/Portal.py | 1 - src/Products/CMFPlone/RegistrationTool.py | 7 +- .../CMFPlone/UnicodeSplitter/config.py | 1 - .../CMFPlone/UnicodeSplitter/splitter.py | 1 + src/Products/CMFPlone/WorkflowTool.py | 1 - src/Products/CMFPlone/__init__.py | 1 - src/Products/CMFPlone/bbb.py | 1 - src/Products/CMFPlone/browser/admin.py | 3 +- src/Products/CMFPlone/browser/author.py | 1 - src/Products/CMFPlone/browser/contact_info.py | 1 - src/Products/CMFPlone/browser/icons.py | 1 - src/Products/CMFPlone/browser/login/login.py | 1 - .../CMFPlone/browser/login/login_help.py | 1 - .../CMFPlone/browser/login/password_reset.py | 2 +- src/Products/CMFPlone/browser/login/utils.py | 1 - src/Products/CMFPlone/browser/navtree.py | 1 - src/Products/CMFPlone/browser/ploneview.py | 1 - src/Products/CMFPlone/browser/search.py | 1 - src/Products/CMFPlone/browser/sendto.py | 1 - .../CMFPlone/browser/syndication/adapters.py | 2 - .../CMFPlone/browser/syndication/settings.py | 1 - .../CMFPlone/controlpanel/browser/filter.py | 2 +- .../CMFPlone/controlpanel/browser/imaging.py | 1 - .../CMFPlone/controlpanel/browser/language.py | 2 +- .../CMFPlone/controlpanel/browser/mail.py | 1 - .../controlpanel/browser/maintenance.py | 4 +- .../CMFPlone/controlpanel/browser/overview.py | 1 - .../controlpanel/browser/quickinstaller.py | 3 +- .../controlpanel/browser/redirects.py | 1 - .../controlpanel/browser/relations.py | 1 - .../CMFPlone/controlpanel/browser/security.py | 3 +- .../controlpanel/browser/syndication.py | 1 - .../controlpanel/browser/usergroups.py | 15 ++-- .../browser/usergroups_usersoverview.py | 13 +-- .../tests/test_controlpanel_browser_site.py | 1 - .../tests/test_controlpanel_doctest.py | 1 - .../controlpanel/tests/test_doctests.py | 1 - src/Products/CMFPlone/controlpanel/utils.py | 1 - src/Products/CMFPlone/defaultpage.py | 1 - .../CMFPlone/earlypatches/security.py | 6 -- .../CMFPlone/exportimport/controlpanel.py | 1 + .../exportimport/memberdata_properties.py | 1 - .../exportimport/tests/testControlPanel.py | 1 - src/Products/CMFPlone/factory.py | 1 - src/Products/CMFPlone/i18nl10n.py | 1 - src/Products/CMFPlone/interfaces/__init__.py | 1 - src/Products/CMFPlone/interfaces/atd.py | 1 - src/Products/CMFPlone/interfaces/basetool.py | 1 - .../CMFPlone/interfaces/breadcrumbs.py | 1 - .../CMFPlone/interfaces/constrains.py | 1 - .../CMFPlone/interfaces/controlpanel.py | 1 - .../CMFPlone/interfaces/defaultpage.py | 1 - src/Products/CMFPlone/interfaces/events.py | 1 - .../CMFPlone/interfaces/installable.py | 1 - src/Products/CMFPlone/interfaces/interface.py | 1 - src/Products/CMFPlone/interfaces/language.py | 1 - src/Products/CMFPlone/interfaces/login.py | 1 - src/Products/CMFPlone/interfaces/migration.py | 1 - .../CMFPlone/interfaces/password_reset.py | 1 - src/Products/CMFPlone/interfaces/patterns.py | 1 - .../CMFPlone/interfaces/properties.py | 1 - src/Products/CMFPlone/interfaces/resources.py | 1 - src/Products/CMFPlone/interfaces/siteroot.py | 1 - src/Products/CMFPlone/interfaces/structure.py | 1 - .../CMFPlone/interfaces/syndication.py | 1 - .../CMFPlone/interfaces/translationservice.py | 1 - src/Products/CMFPlone/log.py | 1 - src/Products/CMFPlone/patches/__init__.py | 4 - .../CMFPlone/patches/addzmisecuritywarning.py | 1 - src/Products/CMFPlone/patches/csrf.py | 1 - .../CMFPlone/patches/dateIndexPatch.py | 1 - src/Products/CMFPlone/patches/sendmail.py | 1 - src/Products/CMFPlone/patches/speed.py | 3 - .../CMFPlone/patches/unicodeFallbackPatch.py | 1 - src/Products/CMFPlone/patches/z3c_form.py | 1 - src/Products/CMFPlone/patterns/__init__.py | 1 - src/Products/CMFPlone/patterns/tinymce.py | 2 +- src/Products/CMFPlone/permissions.py | 1 - src/Products/CMFPlone/relationhelper.py | 1 - src/Products/CMFPlone/resources/__init__.py | 1 - .../CMFPlone/resources/browser/combine.py | 1 - .../CMFPlone/resources/browser/resource.py | 1 - src/Products/CMFPlone/resources/utils.py | 3 +- .../plone_scripts/externalEditorEnabled.py | 1 - .../skins/plone_scripts/external_edit.py | 1 - .../CMFPlone/skins/plone_scripts/translate.py | 2 - .../skins/plone_scripts/utranslate.py | 2 - src/Products/CMFPlone/testing.py | 2 - src/Products/CMFPlone/tests/PloneTestCase.py | 1 - src/Products/CMFPlone/tests/dummy.py | 1 - .../CMFPlone/tests/robot/variables.py | 1 - .../CMFPlone/tests/testActionsTool.py | 4 +- .../CMFPlone/tests/testBrowserDefault.py | 1 - .../CMFPlone/tests/testCatalogTool.py | 1 - src/Products/CMFPlone/tests/testCheckId.py | 2 +- .../CMFPlone/tests/testContentTypeScripts.py | 3 +- src/Products/CMFPlone/tests/testCookieAuth.py | 1 - .../tests/testExternalEditorEnabled.py | 1 - src/Products/CMFPlone/tests/testInterfaces.py | 1 - .../CMFPlone/tests/testMigrationTool.py | 1 - src/Products/CMFPlone/tests/testNavTree.py | 1 - .../CMFPlone/tests/testNavigationView.py | 1 - src/Products/CMFPlone/tests/testPloneTool.py | 1 - .../CMFPlone/tests/testRegistrationTool.py | 1 - src/Products/CMFPlone/tests/testSearch.py | 2 +- .../tests/testSecurityDeclarations.py | 79 +++++++------------ .../CMFPlone/tests/testUnicodeSplitter.py | 1 - .../CMFPlone/tests/testUserFolderBasics.py | 1 - src/Products/CMFPlone/tests/testWebDAV.py | 1 - .../CMFPlone/tests/testWorkflowTool.py | 1 - .../CMFPlone/tests/test_expressions.py | 1 - src/Products/CMFPlone/tests/test_factory.py | 1 - .../CMFPlone/tests/test_functional.py | 1 - .../CMFPlone/tests/test_login_form.py | 1 - src/Products/CMFPlone/tests/test_mails.py | 1 - .../CMFPlone/tests/test_passwordreset.py | 1 - .../tests/test_redirect_after_login.py | 4 +- .../CMFPlone/tests/test_safe_formatter.py | 3 +- src/Products/CMFPlone/tests/test_sitelogo.py | 1 - src/Products/CMFPlone/tests/test_utils.py | 1 - .../CMFPlone/tests/test_z3c_form_widgets.py | 1 - src/Products/CMFPlone/tests/utils.py | 1 - src/Products/CMFPlone/utils.py | 1 - 131 files changed, 74 insertions(+), 226 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 377ab54d8d..3557af5c4d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,11 +12,11 @@ repos: - id: pyupgrade args: [--py38-plus] - repo: https://github.com/pycqa/isort - rev: 8.0.0 + rev: 8.0.1 hooks: - id: isort - repo: https://github.com/psf/black-pre-commit-mirror - rev: 26.1.0 + rev: 26.3.0 hooks: - id: black - repo: https://github.com/collective/zpretty @@ -45,7 +45,7 @@ repos: # """ ## - repo: https://github.com/codespell-project/codespell - rev: v2.4.1 + rev: v2.4.2 hooks: - id: codespell additional_dependencies: diff --git a/setup.py b/setup.py index 97797f233f..4cb2e644c9 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,6 @@ from pathlib import Path from setuptools import setup - version = "6.2.0a2.dev0" long_description = ( diff --git a/src/Products/CMFPlone/CatalogTool.py b/src/Products/CMFPlone/CatalogTool.py index 97469b3cda..053e820334 100644 --- a/src/Products/CMFPlone/CatalogTool.py +++ b/src/Products/CMFPlone/CatalogTool.py @@ -44,7 +44,6 @@ import time import urllib - logger = logging.getLogger("Plone") try: from plone.app.discussion.interfaces import DISCUSSION_ANNOTATION_KEY @@ -510,10 +509,9 @@ def manage_catalogRebuild(self, RESPONSE=None, URL1=None): elapse = time.time() - elapse c_elapse = process_time() - c_elapse - msg = ( - "Catalog Rebuilt\n" - "Total time: %s\n" - "Total CPU time: %s" % (repr(elapse), repr(c_elapse)) + msg = "Catalog Rebuilt\nTotal time: {}\nTotal CPU time: {}".format( + repr(elapse), + repr(c_elapse), ) logger.info(msg) diff --git a/src/Products/CMFPlone/MigrationTool.py b/src/Products/CMFPlone/MigrationTool.py index 081b94690a..5474d35255 100644 --- a/src/Products/CMFPlone/MigrationTool.py +++ b/src/Products/CMFPlone/MigrationTool.py @@ -20,7 +20,6 @@ import sys import transaction - logger = logging.getLogger("plone.app.upgrade") _upgradePaths = {} @@ -332,7 +331,7 @@ def upgrade(self, REQUEST=None, dry_run=None, swallow_errors=True): raise except Exception: logger.error( - "Exception was thrown while cataloging:" "\n", exc_info=True + "Exception was thrown while cataloging:\n", exc_info=True ) if not swallow_errors: raise @@ -346,7 +345,7 @@ def upgrade(self, REQUEST=None, dry_run=None, swallow_errors=True): raise except Exception: logger.error( - "Exception was thrown while updating " "role mappings", + "Exception was thrown while updating role mappings", exc_info=True, ) if not swallow_errors: diff --git a/src/Products/CMFPlone/PasswordResetTool.py b/src/Products/CMFPlone/PasswordResetTool.py index 2a64b42c8c..a178c80cde 100644 --- a/src/Products/CMFPlone/PasswordResetTool.py +++ b/src/Products/CMFPlone/PasswordResetTool.py @@ -22,7 +22,6 @@ import datetime - module_security = ModuleSecurityInfo("Products.CMFPlone.PasswordResetTool") diff --git a/src/Products/CMFPlone/PloneBaseTool.py b/src/Products/CMFPlone/PloneBaseTool.py index e3ce889ede..1cccf8eff2 100644 --- a/src/Products/CMFPlone/PloneBaseTool.py +++ b/src/Products/CMFPlone/PloneBaseTool.py @@ -10,7 +10,6 @@ from zope.component import getMultiAdapter from zope.interface import implementer - # getOAI() and getExprContext copied from CMF 1.5.1+cvs # Copyright (c) 2002 Zope Corporation and Contributors. All Rights Reserved. # ZPL 2.1 diff --git a/src/Products/CMFPlone/PloneBatch.py b/src/Products/CMFPlone/PloneBatch.py index f1a974e1a9..fc3ea50f9b 100644 --- a/src/Products/CMFPlone/PloneBatch.py +++ b/src/Products/CMFPlone/PloneBatch.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.batch", "Version 7.0") diff --git a/src/Products/CMFPlone/PloneTool.py b/src/Products/CMFPlone/PloneTool.py index 50032f99ce..5289efb36b 100644 --- a/src/Products/CMFPlone/PloneTool.py +++ b/src/Products/CMFPlone/PloneTool.py @@ -60,7 +60,6 @@ import transaction import warnings - _icons = {} CEILING_DATE = DateTime(2500, 0) # never expires @@ -572,7 +571,7 @@ def addPortalMessage(self, message, type="info", request=None): # The arguments are: # message: a string, with the text message you want to show, # or a HTML fragment (see type='structure' below) - # type: optional, defaults to 'info'. The type determines how + # type: optional, defaults to 'info'. The type determines how # the message will be rendered, as it is used to select # the CSS class for the message. Predefined types are: # 'info' - for informational messages diff --git a/src/Products/CMFPlone/Portal.py b/src/Products/CMFPlone/Portal.py index 2b91c2952f..1d2a58586b 100644 --- a/src/Products/CMFPlone/Portal.py +++ b/src/Products/CMFPlone/Portal.py @@ -35,7 +35,6 @@ from zope.interface.interfaces import ComponentLookupError from zope.traversing.interfaces import BeforeTraverseEvent - if bbb.HAS_ZSERVER: from webdav.NullResource import NullResource diff --git a/src/Products/CMFPlone/RegistrationTool.py b/src/Products/CMFPlone/RegistrationTool.py index e58405a469..51d84b1f05 100644 --- a/src/Products/CMFPlone/RegistrationTool.py +++ b/src/Products/CMFPlone/RegistrationTool.py @@ -31,7 +31,6 @@ import random import re - try: # Products.MailHost has a patch to fix quoted-printable soft line breaks. # See https://github.com/zopefoundation/Products.MailHost/issues/35 @@ -132,7 +131,7 @@ def _getValidEmailAddress(self, member): # the template will be made with a blank To:, this is bad if email is None: msg = _( - "No email address is registered for member: " "${member_id}", + "No email address is registered for member: ${member_id}", mapping={"member_id": member.getId()}, ) raise ValueError(msg) @@ -195,9 +194,7 @@ def testPasswordValidity(self, password, confirm=None): return err if confirm is not None and confirm != password: - return _( - "Your password and confirmation did not match. " "Please try again." - ) + return _("Your password and confirmation did not match. Please try again.") return None def pasValidation(self, property, password): diff --git a/src/Products/CMFPlone/UnicodeSplitter/config.py b/src/Products/CMFPlone/UnicodeSplitter/config.py index aba2241a61..b2bd6f29f9 100644 --- a/src/Products/CMFPlone/UnicodeSplitter/config.py +++ b/src/Products/CMFPlone/UnicodeSplitter/config.py @@ -6,7 +6,6 @@ import re - STOP_WORD = [] # Setting, adding langs. diff --git a/src/Products/CMFPlone/UnicodeSplitter/splitter.py b/src/Products/CMFPlone/UnicodeSplitter/splitter.py index 142f9e4bd9..e707757e70 100644 --- a/src/Products/CMFPlone/UnicodeSplitter/splitter.py +++ b/src/Products/CMFPlone/UnicodeSplitter/splitter.py @@ -4,6 +4,7 @@ Created by Mikio Hokari, CMScom and Manabu Terada, CMScom on 2009-09-30. """ + from plone.i18n.normalizer.base import baseNormalize from Products.CMFPlone.UnicodeSplitter.config import pattern from Products.CMFPlone.UnicodeSplitter.config import pattern_g diff --git a/src/Products/CMFPlone/WorkflowTool.py b/src/Products/CMFPlone/WorkflowTool.py index b0a602bedd..eb8a02e378 100644 --- a/src/Products/CMFPlone/WorkflowTool.py +++ b/src/Products/CMFPlone/WorkflowTool.py @@ -13,7 +13,6 @@ from ZODB.POSException import ConflictError from zope.component import getMultiAdapter - try: multilingual_version = distribution("plone.app.multilingual").version except PackageNotFoundError: diff --git a/src/Products/CMFPlone/__init__.py b/src/Products/CMFPlone/__init__.py index 4b731d8022..7c618dc456 100644 --- a/src/Products/CMFPlone/__init__.py +++ b/src/Products/CMFPlone/__init__.py @@ -6,7 +6,6 @@ import warnings import zope.deferredimport - __version__ = metadata("Products.CMFPlone")["version"] if __version__ < "7": diff --git a/src/Products/CMFPlone/bbb.py b/src/Products/CMFPlone/bbb.py index 035ba544a1..e75003ebb1 100644 --- a/src/Products/CMFPlone/bbb.py +++ b/src/Products/CMFPlone/bbb.py @@ -1,7 +1,6 @@ from importlib.metadata import distribution from importlib.metadata import PackageNotFoundError - HAS_ZSERVER = True try: dist = distribution("ZServer") diff --git a/src/Products/CMFPlone/browser/admin.py b/src/Products/CMFPlone/browser/admin.py index 5cbce1a77c..bb2be22479 100644 --- a/src/Products/CMFPlone/browser/admin.py +++ b/src/Products/CMFPlone/browser/admin.py @@ -36,7 +36,6 @@ import logging - try: distribution("plone.volto") HAS_VOLTO = True @@ -246,7 +245,7 @@ def __call__(self): # if it is because it is not installed until a plone site # is created if queryUtility(IKeyManager) is None: - LOGGER.info("CSRF protection disabled on initial site " "creation") + LOGGER.info("CSRF protection disabled on initial site creation") else: # we have a keymanager, check csrf protection manually now checkCSRF(self.request) diff --git a/src/Products/CMFPlone/browser/author.py b/src/Products/CMFPlone/browser/author.py index 2b0fef236c..d3e9bf73d6 100644 --- a/src/Products/CMFPlone/browser/author.py +++ b/src/Products/CMFPlone/browser/author.py @@ -23,7 +23,6 @@ import logging - logger = logging.getLogger("Plone") diff --git a/src/Products/CMFPlone/browser/contact_info.py b/src/Products/CMFPlone/browser/contact_info.py index 3e9e5ac6aa..438e4f9e76 100644 --- a/src/Products/CMFPlone/browser/contact_info.py +++ b/src/Products/CMFPlone/browser/contact_info.py @@ -15,7 +15,6 @@ import logging import warnings - try: # Products.MailHost has a patch to fix quoted-printable soft line breaks. # See https://github.com/zopefoundation/Products.MailHost/issues/35 diff --git a/src/Products/CMFPlone/browser/icons.py b/src/Products/CMFPlone/browser/icons.py index 30b39890b2..702329242e 100644 --- a/src/Products/CMFPlone/browser/icons.py +++ b/src/Products/CMFPlone/browser/icons.py @@ -10,7 +10,6 @@ import logging - logger = logging.getLogger(__name__) diff --git a/src/Products/CMFPlone/browser/login/login.py b/src/Products/CMFPlone/browser/login/login.py index 7b272bf9fe..488a2c823b 100644 --- a/src/Products/CMFPlone/browser/login/login.py +++ b/src/Products/CMFPlone/browser/login/login.py @@ -25,7 +25,6 @@ import logging - logger = logging.getLogger(__name__) # TODO: Scale down this list now that we've removed a lot of # templates. diff --git a/src/Products/CMFPlone/browser/login/login_help.py b/src/Products/CMFPlone/browser/login/login_help.py index 9ecd5a0981..664ec3fb22 100644 --- a/src/Products/CMFPlone/browser/login/login_help.py +++ b/src/Products/CMFPlone/browser/login/login_help.py @@ -21,7 +21,6 @@ import logging - try: # Products.MailHost has a patch to fix quoted-printable soft line breaks. # See https://github.com/zopefoundation/Products.MailHost/issues/35 diff --git a/src/Products/CMFPlone/browser/login/password_reset.py b/src/Products/CMFPlone/browser/login/password_reset.py index df65e3d200..d9046035b2 100644 --- a/src/Products/CMFPlone/browser/login/password_reset.py +++ b/src/Products/CMFPlone/browser/login/password_reset.py @@ -120,7 +120,7 @@ def _auto_login(self, userid, password): IStatusMessage(self.request).addStatusMessage( _( "password_reset_successful", - default="Password reset successful, " "you are logged in now!", + default="Password reset successful, you are logged in now!", ), "info", ) diff --git a/src/Products/CMFPlone/browser/login/utils.py b/src/Products/CMFPlone/browser/login/utils.py index 83a68a1e42..744d9ff7ca 100644 --- a/src/Products/CMFPlone/browser/login/utils.py +++ b/src/Products/CMFPlone/browser/login/utils.py @@ -3,7 +3,6 @@ import logging - logger = logging.getLogger(__name__) diff --git a/src/Products/CMFPlone/browser/navtree.py b/src/Products/CMFPlone/browser/navtree.py index 2a4f0f3bf1..8876ba14ca 100644 --- a/src/Products/CMFPlone/browser/navtree.py +++ b/src/Products/CMFPlone/browser/navtree.py @@ -17,7 +17,6 @@ from zope.component import getUtility from zope.interface import implementer - # Strategy objects for the navtree creation code. You can subclass these # to expand the default navtree behaviour, and pass instances of your # subclasses to buildFolderTree(). diff --git a/src/Products/CMFPlone/browser/ploneview.py b/src/Products/CMFPlone/browser/ploneview.py index 52b7b4425f..50992d8af7 100644 --- a/src/Products/CMFPlone/browser/ploneview.py +++ b/src/Products/CMFPlone/browser/ploneview.py @@ -12,7 +12,6 @@ from zope.interface import implementer from zope.size import byteDisplay - _marker = [] diff --git a/src/Products/CMFPlone/browser/search.py b/src/Products/CMFPlone/browser/search.py index 7d68611a40..0e31ff285e 100644 --- a/src/Products/CMFPlone/browser/search.py +++ b/src/Products/CMFPlone/browser/search.py @@ -20,7 +20,6 @@ import json import re - _ = MessageFactory("plone") # We should accept both a simple space, unicode u'\u0020 but also a diff --git a/src/Products/CMFPlone/browser/sendto.py b/src/Products/CMFPlone/browser/sendto.py index d3a6116036..52f183e07f 100644 --- a/src/Products/CMFPlone/browser/sendto.py +++ b/src/Products/CMFPlone/browser/sendto.py @@ -15,7 +15,6 @@ import logging - logger = logging.getLogger("Plone") diff --git a/src/Products/CMFPlone/browser/syndication/adapters.py b/src/Products/CMFPlone/browser/syndication/adapters.py index 2a97b9d69d..da97aafbd5 100644 --- a/src/Products/CMFPlone/browser/syndication/adapters.py +++ b/src/Products/CMFPlone/browser/syndication/adapters.py @@ -183,7 +183,6 @@ def _brains(self): @adapter(IItem, IFeed) @implementer(IFeedItem) class BaseItem(BaseFeedData): - def __init__(self, context, feed): self.context = context self.feed = feed @@ -273,7 +272,6 @@ def file_type(self): @adapter(IDexterityContent, IFeed) class DexterityItem(BaseItem): - file = None field_name = "" diff --git a/src/Products/CMFPlone/browser/syndication/settings.py b/src/Products/CMFPlone/browser/syndication/settings.py index 93b13fe9dd..88c3d36b38 100644 --- a/src/Products/CMFPlone/browser/syndication/settings.py +++ b/src/Products/CMFPlone/browser/syndication/settings.py @@ -8,7 +8,6 @@ from zope.component import getUtility from zope.interface import implementer - FEED_SETTINGS_KEY = "syndication_settings" diff --git a/src/Products/CMFPlone/controlpanel/browser/filter.py b/src/Products/CMFPlone/controlpanel/browser/filter.py index dcda8d829f..5c4667fed3 100644 --- a/src/Products/CMFPlone/controlpanel/browser/filter.py +++ b/src/Products/CMFPlone/controlpanel/browser/filter.py @@ -11,7 +11,7 @@ class FilterControlPanel(controlpanel.RegistryEditForm): id = "FilterControlPanel" label = _("HTML Filtering Settings") description = _( - "Keep in mind that editors like TinyMCE might have " "additional filters." + "Keep in mind that editors like TinyMCE might have additional filters." ) schema = IFilterSchema schema_prefix = "plone" diff --git a/src/Products/CMFPlone/controlpanel/browser/imaging.py b/src/Products/CMFPlone/controlpanel/browser/imaging.py index be12bb0345..97e8992173 100644 --- a/src/Products/CMFPlone/controlpanel/browser/imaging.py +++ b/src/Products/CMFPlone/controlpanel/browser/imaging.py @@ -3,7 +3,6 @@ from plone.base import PloneMessageFactory as _ from plone.base.interfaces.controlpanel import IImagingSchema - log = getLogger("Plone") diff --git a/src/Products/CMFPlone/controlpanel/browser/language.py b/src/Products/CMFPlone/controlpanel/browser/language.py index 679b471206..f726257762 100644 --- a/src/Products/CMFPlone/controlpanel/browser/language.py +++ b/src/Products/CMFPlone/controlpanel/browser/language.py @@ -10,7 +10,7 @@ class LanguageControlPanelForm(controlpanel.RegistryEditForm): label = _("heading_language_settings", default="Language Settings") description = _( "description_language_settings", - default="Settings related to interface languages and " "content translations.", + default="Settings related to interface languages and content translations.", ) schema = ILanguageSchema diff --git a/src/Products/CMFPlone/controlpanel/browser/mail.py b/src/Products/CMFPlone/controlpanel/browser/mail.py index caf29a899a..fd2d56236f 100644 --- a/src/Products/CMFPlone/controlpanel/browser/mail.py +++ b/src/Products/CMFPlone/controlpanel/browser/mail.py @@ -13,7 +13,6 @@ import socket import sys - log = getLogger("Plone") diff --git a/src/Products/CMFPlone/controlpanel/browser/maintenance.py b/src/Products/CMFPlone/controlpanel/browser/maintenance.py index f62f174b15..38d67ed294 100644 --- a/src/Products/CMFPlone/controlpanel/browser/maintenance.py +++ b/src/Products/CMFPlone/controlpanel/browser/maintenance.py @@ -18,7 +18,6 @@ import os import time - LIFETIME = True try: from Lifetime import shutdown @@ -117,8 +116,7 @@ def handle_restart_action(self, action): escape(url, 1), _( "plone_restarting", - default="Zope is restarting. This page will refresh in 30" - " seconds...", + default="Zope is restarting. This page will refresh in 30 seconds...", ), ) diff --git a/src/Products/CMFPlone/controlpanel/browser/overview.py b/src/Products/CMFPlone/controlpanel/browser/overview.py index b75f24e671..10e97543a1 100644 --- a/src/Products/CMFPlone/controlpanel/browser/overview.py +++ b/src/Products/CMFPlone/controlpanel/browser/overview.py @@ -14,7 +14,6 @@ import warnings - try: import plone.app.event diff --git a/src/Products/CMFPlone/controlpanel/browser/quickinstaller.py b/src/Products/CMFPlone/controlpanel/browser/quickinstaller.py index 2f5d8f7c71..68b80c7849 100644 --- a/src/Products/CMFPlone/controlpanel/browser/quickinstaller.py +++ b/src/Products/CMFPlone/controlpanel/browser/quickinstaller.py @@ -15,7 +15,6 @@ import logging import transaction - logger = logging.getLogger("Plone") @@ -332,7 +331,7 @@ def uninstall_product(self, product_id): profile = self.get_uninstall_profile(product_id) if not profile: logger.error( - "Could not uninstall %s: no uninstall profile " "found.", product_id + "Could not uninstall %s: no uninstall profile found.", product_id ) return False diff --git a/src/Products/CMFPlone/controlpanel/browser/redirects.py b/src/Products/CMFPlone/controlpanel/browser/redirects.py index 8a531b3a45..17cf907d26 100644 --- a/src/Products/CMFPlone/controlpanel/browser/redirects.py +++ b/src/Products/CMFPlone/controlpanel/browser/redirects.py @@ -21,7 +21,6 @@ import tempfile import warnings - try: # use this to stream csv data if we can from ZPublisher.Iterators import filestream_iterator diff --git a/src/Products/CMFPlone/controlpanel/browser/relations.py b/src/Products/CMFPlone/controlpanel/browser/relations.py index 9c0efdac8f..e26951b7c4 100644 --- a/src/Products/CMFPlone/controlpanel/browser/relations.py +++ b/src/Products/CMFPlone/controlpanel/browser/relations.py @@ -13,7 +13,6 @@ import logging - logger = logging.getLogger(__name__) diff --git a/src/Products/CMFPlone/controlpanel/browser/security.py b/src/Products/CMFPlone/controlpanel/browser/security.py index 5a2241346e..5a86b3d7f8 100644 --- a/src/Products/CMFPlone/controlpanel/browser/security.py +++ b/src/Products/CMFPlone/controlpanel/browser/security.py @@ -10,7 +10,6 @@ import logging - logger = logging.getLogger("Products.CMFPlone") @@ -107,7 +106,7 @@ def check_userid(self): for login_name, userids in self._userid_list.items(): if len(userids) > 1: logger.warning( - "Duplicate accounts for lower case user id " "%s: %r", + "Duplicate accounts for lower case user id %s: %r", login_name, userids, ) diff --git a/src/Products/CMFPlone/controlpanel/browser/syndication.py b/src/Products/CMFPlone/controlpanel/browser/syndication.py index 7a048f5950..379f3a1a0e 100644 --- a/src/Products/CMFPlone/controlpanel/browser/syndication.py +++ b/src/Products/CMFPlone/controlpanel/browser/syndication.py @@ -6,7 +6,6 @@ from z3c.form import button from zope.i18nmessageid import MessageFactory - _ = MessageFactory("plone") diff --git a/src/Products/CMFPlone/controlpanel/browser/usergroups.py b/src/Products/CMFPlone/controlpanel/browser/usergroups.py index 52221ccaae..cca53098ce 100644 --- a/src/Products/CMFPlone/controlpanel/browser/usergroups.py +++ b/src/Products/CMFPlone/controlpanel/browser/usergroups.py @@ -103,8 +103,9 @@ def membershipSearch( if g["id"] not in ignore ] groupResults.sort( - key=lambda x: x is not None - and normalizeString(x.getGroupTitleOrName()) + key=lambda x: ( + x is not None and normalizeString(x.getGroupTitleOrName()) + ) ) if searchUsers: @@ -125,10 +126,12 @@ def membershipSearch( if u["id"] not in ignore ] userResults.sort( - key=lambda x: x is not None - and x.getProperty("fullname") is not None - and normalizeString(x.getProperty("fullname")) - or "" + key=lambda x: ( + x is not None + and x.getProperty("fullname") is not None + and normalizeString(x.getProperty("fullname")) + or "" + ) ) return groupResults + userResults diff --git a/src/Products/CMFPlone/controlpanel/browser/usergroups_usersoverview.py b/src/Products/CMFPlone/controlpanel/browser/usergroups_usersoverview.py index 184ad9a84d..a1c5a06237 100644 --- a/src/Products/CMFPlone/controlpanel/browser/usergroups_usersoverview.py +++ b/src/Products/CMFPlone/controlpanel/browser/usergroups_usersoverview.py @@ -15,7 +15,6 @@ import logging - logger = logging.getLogger("Products.CMFPlone") @@ -140,10 +139,12 @@ def doSearch(self, searchString): # Sort the users by fullname results.sort( - key=lambda x: x is not None - and x["fullname"] is not None - and normalizeString(x["fullname"]) - or "" + key=lambda x: ( + x is not None + and x["fullname"] is not None + and normalizeString(x["fullname"]) + or "" + ) ) # Reset the request variable, just in case. @@ -255,7 +256,7 @@ def deleteMembers(self, member_ids): acl_users.userFolderDelUsers(member_ids) except (AttributeError, NotImplementedError): raise NotImplementedError( - "The underlying User Folder " "doesn't support deleting members." + "The underlying User Folder doesn't support deleting members." ) # Delete member data in portal_memberdata. diff --git a/src/Products/CMFPlone/controlpanel/tests/test_controlpanel_browser_site.py b/src/Products/CMFPlone/controlpanel/tests/test_controlpanel_browser_site.py index b215d80d8d..050208ff28 100644 --- a/src/Products/CMFPlone/controlpanel/tests/test_controlpanel_browser_site.py +++ b/src/Products/CMFPlone/controlpanel/tests/test_controlpanel_browser_site.py @@ -10,7 +10,6 @@ import unittest - # Red pixel with filename pixel.png SITE_LOGO_BASE64 = ( b"filenameb64:cGl4ZWwucG5n;datab64:iVBORw0KGgoAAAANSUhEUgA" diff --git a/src/Products/CMFPlone/controlpanel/tests/test_controlpanel_doctest.py b/src/Products/CMFPlone/controlpanel/tests/test_controlpanel_doctest.py index e35e872fd1..60ec92fe43 100644 --- a/src/Products/CMFPlone/controlpanel/tests/test_controlpanel_doctest.py +++ b/src/Products/CMFPlone/controlpanel/tests/test_controlpanel_doctest.py @@ -7,7 +7,6 @@ import pprint import unittest - optionflags = ( doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE | doctest.REPORT_ONLY_FIRST_FAILURE ) diff --git a/src/Products/CMFPlone/controlpanel/tests/test_doctests.py b/src/Products/CMFPlone/controlpanel/tests/test_doctests.py index a1b6ebadcc..0fbdfb8c1e 100644 --- a/src/Products/CMFPlone/controlpanel/tests/test_doctests.py +++ b/src/Products/CMFPlone/controlpanel/tests/test_doctests.py @@ -5,7 +5,6 @@ import re import unittest - tests = ("../README.rst",) diff --git a/src/Products/CMFPlone/controlpanel/utils.py b/src/Products/CMFPlone/controlpanel/utils.py index 278ed0a48d..b396177746 100644 --- a/src/Products/CMFPlone/controlpanel/utils.py +++ b/src/Products/CMFPlone/controlpanel/utils.py @@ -2,7 +2,6 @@ import logging - logger = logging.getLogger("Products.CMFPlone.controlpanel") diff --git a/src/Products/CMFPlone/defaultpage.py b/src/Products/CMFPlone/defaultpage.py index bda6822239..d870839868 100644 --- a/src/Products/CMFPlone/defaultpage.py +++ b/src/Products/CMFPlone/defaultpage.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.defaultpage", "Version 7.0") diff --git a/src/Products/CMFPlone/earlypatches/security.py b/src/Products/CMFPlone/earlypatches/security.py index c4e1d717ee..da72100d05 100644 --- a/src/Products/CMFPlone/earlypatches/security.py +++ b/src/Products/CMFPlone/earlypatches/security.py @@ -1,14 +1,12 @@ # 1. make sure allow_module can't be called from restricted code import AccessControl - AccessControl.allow_module.__roles__ = () # 2. make sure /@@ doesn't traverse to annotations from zope.traversing import namespace from zope.traversing.interfaces import TraversalError - old_traverse = namespace.view.traverse @@ -23,7 +21,6 @@ def traverse(self, name, ignored): # 3. be sure to check Access contents information permission for FTP users from Products.CMFPlone import bbb - if bbb.HAS_ZSERVER: from AccessControl import getSecurityManager from OFS.ObjectManager import ObjectManager @@ -52,7 +49,6 @@ def manage_FTPlist(self, REQUEST): # 4. Make sure z3c.form widgets don't get declared as public from AccessControl.metaconfigure import ClassDirective - old_require = ClassDirective.require @@ -70,7 +66,6 @@ def require(self, *args, **kw): # 6. Protect some methods in ZCatalog from Products.ZCatalog.ZCatalog import ZCatalog - ZCatalog.resolve_path__roles__ = () ZCatalog.resolve_url__roles__ = () @@ -82,7 +77,6 @@ def require(self, *args, **kw): from ZPublisher.BaseRequest import BaseRequest from ZPublisher.HTTPRequest import HTTPRequest - for c in [BaseRequest, HTTPRequest, ZPBaseRequest, FTPRequest, ZPHTTPRequest]: try: del c.__doc__ diff --git a/src/Products/CMFPlone/exportimport/controlpanel.py b/src/Products/CMFPlone/exportimport/controlpanel.py index af8fb3fd2d..be8096afc9 100644 --- a/src/Products/CMFPlone/exportimport/controlpanel.py +++ b/src/Products/CMFPlone/exportimport/controlpanel.py @@ -14,6 +14,7 @@ $Id$ """ + from plone.base.interfaces import IControlPanel from Products.CMFCore.interfaces import IActionProvider from Products.CMFCore.utils import getToolByName diff --git a/src/Products/CMFPlone/exportimport/memberdata_properties.py b/src/Products/CMFPlone/exportimport/memberdata_properties.py index 4c8fd85843..5ce21bfb00 100644 --- a/src/Products/CMFPlone/exportimport/memberdata_properties.py +++ b/src/Products/CMFPlone/exportimport/memberdata_properties.py @@ -7,7 +7,6 @@ from Products.GenericSetup.interfaces import IBody from zope.component import queryMultiAdapter - _FILENAME = "memberdata_properties.xml" diff --git a/src/Products/CMFPlone/exportimport/tests/testControlPanel.py b/src/Products/CMFPlone/exportimport/tests/testControlPanel.py index ba4538d142..e2bf43ae07 100644 --- a/src/Products/CMFPlone/exportimport/tests/testControlPanel.py +++ b/src/Products/CMFPlone/exportimport/tests/testControlPanel.py @@ -5,7 +5,6 @@ from zope.component import provideAdapter from zope.component import provideUtility - _CONTROLPANEL_XML = b"""\ diff --git a/src/Products/CMFPlone/factory.py b/src/Products/CMFPlone/factory.py index a00e653c2c..f9cc5cd4d7 100644 --- a/src/Products/CMFPlone/factory.py +++ b/src/Products/CMFPlone/factory.py @@ -12,7 +12,6 @@ import warnings - _TOOL_ID = "portal_setup" _DEFAULT_PROFILE = "Products.CMFPlone:plone" _TYPES_PROFILE = "plone.app.contenttypes:default" diff --git a/src/Products/CMFPlone/i18nl10n.py b/src/Products/CMFPlone/i18nl10n.py index 877f59745c..e190d8cd84 100644 --- a/src/Products/CMFPlone/i18nl10n.py +++ b/src/Products/CMFPlone/i18nl10n.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.i18nl10n", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/__init__.py b/src/Products/CMFPlone/interfaces/__init__.py index b275ed2efd..6604341db9 100644 --- a/src/Products/CMFPlone/interfaces/__init__.py +++ b/src/Products/CMFPlone/interfaces/__init__.py @@ -1,6 +1,5 @@ from zope.deferredimport import deprecated - deprecated( "Moved to plone.base.interfaces, import from there instead (will be removed in Plone 7).", IPloneBaseTool="plone.base.interfaces.basetool:IPloneBaseTool", diff --git a/src/Products/CMFPlone/interfaces/atd.py b/src/Products/CMFPlone/interfaces/atd.py index 95c7b44aa8..51401e2d27 100644 --- a/src/Products/CMFPlone/interfaces/atd.py +++ b/src/Products/CMFPlone/interfaces/atd.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.atd", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/basetool.py b/src/Products/CMFPlone/interfaces/basetool.py index f712501957..d304661ed8 100644 --- a/src/Products/CMFPlone/interfaces/basetool.py +++ b/src/Products/CMFPlone/interfaces/basetool.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.basetool", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/breadcrumbs.py b/src/Products/CMFPlone/interfaces/breadcrumbs.py index 68f67eb77d..e345c9ec33 100644 --- a/src/Products/CMFPlone/interfaces/breadcrumbs.py +++ b/src/Products/CMFPlone/interfaces/breadcrumbs.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.breadcrumbs", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/constrains.py b/src/Products/CMFPlone/interfaces/constrains.py index 983d30dac6..6519187c72 100644 --- a/src/Products/CMFPlone/interfaces/constrains.py +++ b/src/Products/CMFPlone/interfaces/constrains.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.constrains", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/controlpanel.py b/src/Products/CMFPlone/interfaces/controlpanel.py index 69143b6f2b..3e2fa1c5b0 100644 --- a/src/Products/CMFPlone/interfaces/controlpanel.py +++ b/src/Products/CMFPlone/interfaces/controlpanel.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.controlpanel", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/defaultpage.py b/src/Products/CMFPlone/interfaces/defaultpage.py index c6738b3788..d8d0069cdf 100644 --- a/src/Products/CMFPlone/interfaces/defaultpage.py +++ b/src/Products/CMFPlone/interfaces/defaultpage.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.defaultpage", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/events.py b/src/Products/CMFPlone/interfaces/events.py index 7e13b86484..7ca3b8c586 100644 --- a/src/Products/CMFPlone/interfaces/events.py +++ b/src/Products/CMFPlone/interfaces/events.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.events", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/installable.py b/src/Products/CMFPlone/interfaces/installable.py index 986709479b..7eb6a95add 100644 --- a/src/Products/CMFPlone/interfaces/installable.py +++ b/src/Products/CMFPlone/interfaces/installable.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.installable", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/interface.py b/src/Products/CMFPlone/interfaces/interface.py index 7b44f2d141..fd755daee4 100644 --- a/src/Products/CMFPlone/interfaces/interface.py +++ b/src/Products/CMFPlone/interfaces/interface.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.interface", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/language.py b/src/Products/CMFPlone/interfaces/language.py index e89b39ce34..5f6336b972 100644 --- a/src/Products/CMFPlone/interfaces/language.py +++ b/src/Products/CMFPlone/interfaces/language.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.language", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/login.py b/src/Products/CMFPlone/interfaces/login.py index 4e2b0c66f5..b049afcfdb 100644 --- a/src/Products/CMFPlone/interfaces/login.py +++ b/src/Products/CMFPlone/interfaces/login.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.login", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/migration.py b/src/Products/CMFPlone/interfaces/migration.py index f599d29da2..157df7331a 100644 --- a/src/Products/CMFPlone/interfaces/migration.py +++ b/src/Products/CMFPlone/interfaces/migration.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.migration", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/password_reset.py b/src/Products/CMFPlone/interfaces/password_reset.py index 77b2b25ef7..50172e9699 100644 --- a/src/Products/CMFPlone/interfaces/password_reset.py +++ b/src/Products/CMFPlone/interfaces/password_reset.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.password_reset", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/patterns.py b/src/Products/CMFPlone/interfaces/patterns.py index 2162882ae1..40751f2f30 100644 --- a/src/Products/CMFPlone/interfaces/patterns.py +++ b/src/Products/CMFPlone/interfaces/patterns.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.patterns", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/properties.py b/src/Products/CMFPlone/interfaces/properties.py index 48a9a0d026..69223643ca 100644 --- a/src/Products/CMFPlone/interfaces/properties.py +++ b/src/Products/CMFPlone/interfaces/properties.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.properties", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/resources.py b/src/Products/CMFPlone/interfaces/resources.py index d6d3959b38..21c55497e4 100644 --- a/src/Products/CMFPlone/interfaces/resources.py +++ b/src/Products/CMFPlone/interfaces/resources.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.resources", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/siteroot.py b/src/Products/CMFPlone/interfaces/siteroot.py index 925ab9ae3a..3af8e63a81 100644 --- a/src/Products/CMFPlone/interfaces/siteroot.py +++ b/src/Products/CMFPlone/interfaces/siteroot.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.siteroot", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/structure.py b/src/Products/CMFPlone/interfaces/structure.py index 214f9655fc..0d574bdcaa 100644 --- a/src/Products/CMFPlone/interfaces/structure.py +++ b/src/Products/CMFPlone/interfaces/structure.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.structure", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/syndication.py b/src/Products/CMFPlone/interfaces/syndication.py index a194492a8b..ee8c47b3a5 100644 --- a/src/Products/CMFPlone/interfaces/syndication.py +++ b/src/Products/CMFPlone/interfaces/syndication.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.syndication", "Version 7.0") diff --git a/src/Products/CMFPlone/interfaces/translationservice.py b/src/Products/CMFPlone/interfaces/translationservice.py index 1abd587a4f..6970c0140c 100644 --- a/src/Products/CMFPlone/interfaces/translationservice.py +++ b/src/Products/CMFPlone/interfaces/translationservice.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.interfaces.translationservice", "Version 7.0") diff --git a/src/Products/CMFPlone/log.py b/src/Products/CMFPlone/log.py index 281b705bc4..16094d9e3e 100644 --- a/src/Products/CMFPlone/log.py +++ b/src/Products/CMFPlone/log.py @@ -7,7 +7,6 @@ import logging - logger = logging.getLogger("Plone") diff --git a/src/Products/CMFPlone/patches/__init__.py b/src/Products/CMFPlone/patches/__init__.py index a931d15b38..7c43e9c8b7 100644 --- a/src/Products/CMFPlone/patches/__init__.py +++ b/src/Products/CMFPlone/patches/__init__.py @@ -3,7 +3,6 @@ from . import dateIndexPatch # Avoid OverflowErrors in Date*Indexes from . import unicodeFallbackPatch # Makes the TAL engine in Zope 2.10+ accept - # that you shouldn't use it @@ -14,12 +13,10 @@ from . import iso8601 # use `DateTime.ISO8601` for `DateTime.ISO` from . import speed # Various caching patches to improve speed - iso8601.applyPatches() from . import sendmail - sendmail.applyPatches() from . import gtbn @@ -27,5 +24,4 @@ from . import templatecookcheck # Make sure templates aren't re-read in from . import z3c_form - # production sites diff --git a/src/Products/CMFPlone/patches/addzmisecuritywarning.py b/src/Products/CMFPlone/patches/addzmisecuritywarning.py index fc7abe0ab9..4010a2349a 100644 --- a/src/Products/CMFPlone/patches/addzmisecuritywarning.py +++ b/src/Products/CMFPlone/patches/addzmisecuritywarning.py @@ -1,6 +1,5 @@ from OFS.role import RoleManager - ADD_SECURITY_WARNING = """ diff --git a/src/Products/CMFPlone/patches/csrf.py b/src/Products/CMFPlone/patches/csrf.py index 881936c2f9..6e5ef0d266 100644 --- a/src/Products/CMFPlone/patches/csrf.py +++ b/src/Products/CMFPlone/patches/csrf.py @@ -1,7 +1,6 @@ from plone.protect import CheckAuthenticator from plone.protect import protect - # apply csrf-protection decorator to the given callable patch = protect(CheckAuthenticator) diff --git a/src/Products/CMFPlone/patches/dateIndexPatch.py b/src/Products/CMFPlone/patches/dateIndexPatch.py index 31aad65433..aede24afd9 100644 --- a/src/Products/CMFPlone/patches/dateIndexPatch.py +++ b/src/Products/CMFPlone/patches/dateIndexPatch.py @@ -4,7 +4,6 @@ from Products.PluginIndexes.DateIndex.DateIndex import DateIndex from Products.PluginIndexes.DateRangeIndex.DateRangeIndex import DateRangeIndex - maxDate = DateTime(4008, 0) diff --git a/src/Products/CMFPlone/patches/sendmail.py b/src/Products/CMFPlone/patches/sendmail.py index 3a83193bbc..8abaedee67 100644 --- a/src/Products/CMFPlone/patches/sendmail.py +++ b/src/Products/CMFPlone/patches/sendmail.py @@ -7,7 +7,6 @@ import logging import transaction - log = logging.getLogger("MailDataManager") diff --git a/src/Products/CMFPlone/patches/speed.py b/src/Products/CMFPlone/patches/speed.py index db908a6c64..38e9b9df4b 100644 --- a/src/Products/CMFPlone/patches/speed.py +++ b/src/Products/CMFPlone/patches/speed.py @@ -1,7 +1,6 @@ from os import environ from plone.memoize import forever - # Remember the installed products and packages (unless running tests) if "ZOPETESTCASE" not in environ: from App import FactoryDispatcher @@ -23,7 +22,6 @@ def new_init(*args, **kwargs): from zope.tal.talinterpreter import TALInterpreter - TALInterpreter.__init__ = wrap_init(TALInterpreter.__init__) @@ -39,5 +37,4 @@ def opaqueItems(self): from Products.CMFCore.CMFCatalogAware import OpaqueItemManager - OpaqueItemManager.opaqueItems = opaqueItems diff --git a/src/Products/CMFPlone/patches/unicodeFallbackPatch.py b/src/Products/CMFPlone/patches/unicodeFallbackPatch.py index e3a025b88c..f7186af8ee 100644 --- a/src/Products/CMFPlone/patches/unicodeFallbackPatch.py +++ b/src/Products/CMFPlone/patches/unicodeFallbackPatch.py @@ -20,7 +20,6 @@ from zope.tal import talinterpreter from zope.tales import expressions - # Enable use of utf-8 text in tales inserts, until all code is changed to use # pure Unicode only. This will only work for sites with a portal encoding of # utf-8 but it will give us some time to change Archetypes and Plone diff --git a/src/Products/CMFPlone/patches/z3c_form.py b/src/Products/CMFPlone/patches/z3c_form.py index 2f859071c2..7b59da2b66 100644 --- a/src/Products/CMFPlone/patches/z3c_form.py +++ b/src/Products/CMFPlone/patches/z3c_form.py @@ -2,7 +2,6 @@ from urllib.parse import urlparse from z3c.form import widget - # Attribute name to allow prefilling a widget with a value from a GET request. # Usually all forms are only for POST, and we disallow filling it with GET # data. This works the way around too: allow prefilling from a POST request diff --git a/src/Products/CMFPlone/patterns/__init__.py b/src/Products/CMFPlone/patterns/__init__.py index a33c0c4bbd..feaa162423 100644 --- a/src/Products/CMFPlone/patterns/__init__.py +++ b/src/Products/CMFPlone/patterns/__init__.py @@ -1,6 +1,5 @@ from zope.deferredimport import deprecated - deprecated( "Import from Products.CMFPlone.patterns.tinymce instead", TinyMCESettingsGenerator="Products.CMFPlone.patterns.tinymce.TinyMCESettingsGenerator", diff --git a/src/Products/CMFPlone/patterns/tinymce.py b/src/Products/CMFPlone/patterns/tinymce.py index ef9f385376..4aacd25d20 100644 --- a/src/Products/CMFPlone/patterns/tinymce.py +++ b/src/Products/CMFPlone/patterns/tinymce.py @@ -142,7 +142,7 @@ def get_tiny_config(self): # specific plugin options if "contextmenu" in settings.plugins: tiny_config["contextmenu"] = ( - "plonelink ploneimage inserttable |" " cell row column deletetable" + "plonelink ploneimage inserttable | cell row column deletetable" ) if toolbar_additions: diff --git a/src/Products/CMFPlone/permissions.py b/src/Products/CMFPlone/permissions.py index 9cae28c787..7b6cd77992 100644 --- a/src/Products/CMFPlone/permissions.py +++ b/src/Products/CMFPlone/permissions.py @@ -1,4 +1,3 @@ from zope.deprecation import moved - moved("plone.base.permissions", "Version 7.0") diff --git a/src/Products/CMFPlone/relationhelper.py b/src/Products/CMFPlone/relationhelper.py index be736d43b8..50c02ef534 100644 --- a/src/Products/CMFPlone/relationhelper.py +++ b/src/Products/CMFPlone/relationhelper.py @@ -27,7 +27,6 @@ import logging - try: # "iterate" is not a dependency of CMFPlone, but a consumer of it distribution("plone.app.iterate") diff --git a/src/Products/CMFPlone/resources/__init__.py b/src/Products/CMFPlone/resources/__init__.py index 092fcafe89..0095210af8 100644 --- a/src/Products/CMFPlone/resources/__init__.py +++ b/src/Products/CMFPlone/resources/__init__.py @@ -2,7 +2,6 @@ import os - RESOURCE_DEVELOPMENT_MODE = os.getenv("FEDEV", "").lower() == "true" diff --git a/src/Products/CMFPlone/resources/browser/combine.py b/src/Products/CMFPlone/resources/browser/combine.py index 58585b14f7..e2be703e4b 100644 --- a/src/Products/CMFPlone/resources/browser/combine.py +++ b/src/Products/CMFPlone/resources/browser/combine.py @@ -1,6 +1,5 @@ import zope.deferredimport - zope.deferredimport.initialize() zope.deferredimport.deprecated( diff --git a/src/Products/CMFPlone/resources/browser/resource.py b/src/Products/CMFPlone/resources/browser/resource.py index f9e3bf4b06..8fdbe9d753 100644 --- a/src/Products/CMFPlone/resources/browser/resource.py +++ b/src/Products/CMFPlone/resources/browser/resource.py @@ -15,7 +15,6 @@ import logging import webresource - logger = logging.getLogger(__name__) REQUEST_CACHE_KEY = "_WEBRESOURCE_CACHE_" diff --git a/src/Products/CMFPlone/resources/utils.py b/src/Products/CMFPlone/resources/utils.py index 14b88c2f1b..ee22abc3fd 100644 --- a/src/Products/CMFPlone/resources/utils.py +++ b/src/Products/CMFPlone/resources/utils.py @@ -13,7 +13,6 @@ import logging - PRODUCTION_RESOURCE_DIRECTORY = "production" logger = logging.getLogger(__name__) @@ -66,7 +65,7 @@ def get_resource(context, path): return if isinstance(resource, FilesystemFile): - (directory, sep, filename) = path.rpartition("/") + directory, sep, filename = path.rpartition("/") return context.unrestrictedTraverse(directory).readFile(filename) # calling the resource may modify the header, i.e. the content-type. diff --git a/src/Products/CMFPlone/skins/plone_scripts/externalEditorEnabled.py b/src/Products/CMFPlone/skins/plone_scripts/externalEditorEnabled.py index 130499f7de..6205ae92f9 100644 --- a/src/Products/CMFPlone/skins/plone_scripts/externalEditorEnabled.py +++ b/src/Products/CMFPlone/skins/plone_scripts/externalEditorEnabled.py @@ -10,7 +10,6 @@ from Products.CMFCore.utils import getToolByName from Products.CMFPlone.utils import webdav_enabled - portal = getToolByName(context, "portal_url").getPortalObject() mtool = getToolByName(portal, "portal_membership") diff --git a/src/Products/CMFPlone/skins/plone_scripts/external_edit.py b/src/Products/CMFPlone/skins/plone_scripts/external_edit.py index 859ce01b61..92889e211b 100644 --- a/src/Products/CMFPlone/skins/plone_scripts/external_edit.py +++ b/src/Products/CMFPlone/skins/plone_scripts/external_edit.py @@ -9,7 +9,6 @@ from Products.PythonScripts.standard import url_quote - request = context.REQUEST if "Mac OS X" in request.get("HTTP_USER_AGENT", ""): diff --git a/src/Products/CMFPlone/skins/plone_scripts/translate.py b/src/Products/CMFPlone/skins/plone_scripts/translate.py index 5578d7d4d1..73c90c27ea 100644 --- a/src/Products/CMFPlone/skins/plone_scripts/translate.py +++ b/src/Products/CMFPlone/skins/plone_scripts/translate.py @@ -8,7 +8,6 @@ from zExceptions import Forbidden - if container.REQUEST.get("PUBLISHED") is script: raise Forbidden("Script may not be published.") @@ -19,7 +18,6 @@ from Products.CMFCore.utils import getToolByName - # get tool tool = getToolByName(context, "translation_service") diff --git a/src/Products/CMFPlone/skins/plone_scripts/utranslate.py b/src/Products/CMFPlone/skins/plone_scripts/utranslate.py index 31729181d0..f56466983d 100644 --- a/src/Products/CMFPlone/skins/plone_scripts/utranslate.py +++ b/src/Products/CMFPlone/skins/plone_scripts/utranslate.py @@ -8,7 +8,6 @@ from zExceptions import Forbidden - if container.REQUEST.get("PUBLISHED") is script: raise Forbidden("Script may not be published.") @@ -19,7 +18,6 @@ from Products.CMFCore.utils import getToolByName - # get tool tool = getToolByName(context, "translation_service") diff --git a/src/Products/CMFPlone/testing.py b/src/Products/CMFPlone/testing.py index 9dc7442c20..b64cce44ea 100644 --- a/src/Products/CMFPlone/testing.py +++ b/src/Products/CMFPlone/testing.py @@ -125,7 +125,6 @@ def setUpPloneSite(self, portal): class ITestSelectWidgetSchema(Interface): - directives.widget("select_field", Select2Widget) select_field = Choice( title="Select Widget", @@ -150,6 +149,5 @@ class ITestSelectWidgetSchema(Interface): class TestSelectWidgetForm(AutoExtensibleForm, form.EditForm): - schema = ITestSelectWidgetSchema ignoreContext = True diff --git a/src/Products/CMFPlone/tests/PloneTestCase.py b/src/Products/CMFPlone/tests/PloneTestCase.py index 219f54c79a..127d5f9f20 100644 --- a/src/Products/CMFPlone/tests/PloneTestCase.py +++ b/src/Products/CMFPlone/tests/PloneTestCase.py @@ -9,7 +9,6 @@ import transaction - # We do not use these, but someone might import them. portal_name, default_user # pyflakes diff --git a/src/Products/CMFPlone/tests/dummy.py b/src/Products/CMFPlone/tests/dummy.py index e9cb750cc3..446b0de169 100644 --- a/src/Products/CMFPlone/tests/dummy.py +++ b/src/Products/CMFPlone/tests/dummy.py @@ -13,7 +13,6 @@ import os - TEXT = b"file data" UTEXT = "file data" GIF_FILE = os.path.join(os.path.dirname(__file__), os.pardir, "tool.gif") diff --git a/src/Products/CMFPlone/tests/robot/variables.py b/src/Products/CMFPlone/tests/robot/variables.py index 4ad55a6018..9439e39d9c 100644 --- a/src/Products/CMFPlone/tests/robot/variables.py +++ b/src/Products/CMFPlone/tests/robot/variables.py @@ -1,4 +1,3 @@ import os - PATH_TO_TEST_FILES = os.path.join(os.path.dirname(__file__)) diff --git a/src/Products/CMFPlone/tests/testActionsTool.py b/src/Products/CMFPlone/tests/testActionsTool.py index 5f4417b44e..60d07e4a5d 100644 --- a/src/Products/CMFPlone/tests/testActionsTool.py +++ b/src/Products/CMFPlone/tests/testActionsTool.py @@ -130,6 +130,4 @@ def testListActionsSkipsItemsWithOldInterface(self): try: self.actions.listActions() except Exception: - self.fail_tb( - "Should not fail if item exists w/o IActionCategory " "interface" - ) + self.fail_tb("Should not fail if item exists w/o IActionCategory interface") diff --git a/src/Products/CMFPlone/tests/testBrowserDefault.py b/src/Products/CMFPlone/tests/testBrowserDefault.py index c7cac5e592..982308c122 100644 --- a/src/Products/CMFPlone/tests/testBrowserDefault.py +++ b/src/Products/CMFPlone/tests/testBrowserDefault.py @@ -17,7 +17,6 @@ import transaction import unittest - RE_REMOVE_DOCCONT = re.compile(r'\s*href="http://.*?#content"') RE_REMOVE_SKIPNAV = re.compile(r'\s*href="http://.*?#portal-globalnav-wrapper"') RE_REMOVE_TABS = re.compile(r'
', re.S) diff --git a/src/Products/CMFPlone/tests/testCatalogTool.py b/src/Products/CMFPlone/tests/testCatalogTool.py index d847de1692..d3665d1e92 100644 --- a/src/Products/CMFPlone/tests/testCatalogTool.py +++ b/src/Products/CMFPlone/tests/testCatalogTool.py @@ -27,7 +27,6 @@ import unittest import zope.interface - user2 = "u2" group2 = "g2" diff --git a/src/Products/CMFPlone/tests/testCheckId.py b/src/Products/CMFPlone/tests/testCheckId.py index 21a6c9fb0d..4e740a2c4c 100644 --- a/src/Products/CMFPlone/tests/testCheckId.py +++ b/src/Products/CMFPlone/tests/testCheckId.py @@ -57,7 +57,7 @@ def testCollision(self): self.folder.invokeFactory("Document", id="foo") self.folder.invokeFactory("Document", id="bar") r = check_id(self.folder.foo, "bar") - self.assertEqual(r, "There is already an item named bar in this " "folder.") + self.assertEqual(r, "There is already an item named bar in this folder.") def testReservedId(self): self.folder._setObject("foo", dummy.Item("foo")) diff --git a/src/Products/CMFPlone/tests/testContentTypeScripts.py b/src/Products/CMFPlone/tests/testContentTypeScripts.py index 68fe6e16d0..eb9e762b93 100644 --- a/src/Products/CMFPlone/tests/testContentTypeScripts.py +++ b/src/Products/CMFPlone/tests/testContentTypeScripts.py @@ -5,7 +5,6 @@ from Products.CMFPlone.tests import dummy from Products.CMFPlone.tests import PloneTestCase - AddPortalTopics = "Add portal topics" @@ -123,5 +122,5 @@ def testImageComputedProps(self): # Wrap object so that ComputedAttribute gets executed. self.ob = dummy.ImageComputedProps(**kw).__of__(self.folder) - endswith = 'alt="alt tag" title="some title" ' 'height="100" width="100" />' + endswith = 'alt="alt tag" title="some title" height="100" width="100" />' self.assertEqual(tag(self.ob)[-len(endswith) :], endswith) diff --git a/src/Products/CMFPlone/tests/testCookieAuth.py b/src/Products/CMFPlone/tests/testCookieAuth.py index 415fc904c4..1e1f2e3781 100644 --- a/src/Products/CMFPlone/tests/testCookieAuth.py +++ b/src/Products/CMFPlone/tests/testCookieAuth.py @@ -6,7 +6,6 @@ import unittest - try: from base64 import encodebytes except ImportError: diff --git a/src/Products/CMFPlone/tests/testExternalEditorEnabled.py b/src/Products/CMFPlone/tests/testExternalEditorEnabled.py index 46152c085c..04dc55623f 100644 --- a/src/Products/CMFPlone/tests/testExternalEditorEnabled.py +++ b/src/Products/CMFPlone/tests/testExternalEditorEnabled.py @@ -3,7 +3,6 @@ import unittest - try: import Products.ExternalEditor # noqa: F401 except ImportError: diff --git a/src/Products/CMFPlone/tests/testInterfaces.py b/src/Products/CMFPlone/tests/testInterfaces.py index 1766742b07..7ef4277ccb 100644 --- a/src/Products/CMFPlone/tests/testInterfaces.py +++ b/src/Products/CMFPlone/tests/testInterfaces.py @@ -18,7 +18,6 @@ import unittest - # for Python 2 try: from types import ClassType diff --git a/src/Products/CMFPlone/tests/testMigrationTool.py b/src/Products/CMFPlone/tests/testMigrationTool.py index fd9cfb2250..4a4ad72886 100644 --- a/src/Products/CMFPlone/tests/testMigrationTool.py +++ b/src/Products/CMFPlone/tests/testMigrationTool.py @@ -6,7 +6,6 @@ import unittest - try: HAS_PLONE_APP_UPGRADE_DEV = "dev" in version("plone.app.upgrade") HAS_PLONE_APP_UPGRADE = True diff --git a/src/Products/CMFPlone/tests/testNavTree.py b/src/Products/CMFPlone/tests/testNavTree.py index 0876d8be55..da72b193d0 100644 --- a/src/Products/CMFPlone/tests/testNavTree.py +++ b/src/Products/CMFPlone/tests/testNavTree.py @@ -10,7 +10,6 @@ from zope.interface import directlyProvides from zope.interface import implementer - default_user = PloneTestCase.default_user diff --git a/src/Products/CMFPlone/tests/testNavigationView.py b/src/Products/CMFPlone/tests/testNavigationView.py index f9c5aaf0f6..cf377724cf 100644 --- a/src/Products/CMFPlone/tests/testNavigationView.py +++ b/src/Products/CMFPlone/tests/testNavigationView.py @@ -12,7 +12,6 @@ from zope.component import getUtility from zope.interface import directlyProvides - portal_name = PloneTestCase.portal_name diff --git a/src/Products/CMFPlone/tests/testPloneTool.py b/src/Products/CMFPlone/tests/testPloneTool.py index 23a9120794..8f22f9be55 100644 --- a/src/Products/CMFPlone/tests/testPloneTool.py +++ b/src/Products/CMFPlone/tests/testPloneTool.py @@ -10,7 +10,6 @@ from zope.component import getUtility from zope.interface import Interface - default_user = PloneTestCase.default_user portal_name = PloneTestCase.portal_name diff --git a/src/Products/CMFPlone/tests/testRegistrationTool.py b/src/Products/CMFPlone/tests/testRegistrationTool.py index 8402d107a2..e79b37e2df 100644 --- a/src/Products/CMFPlone/tests/testRegistrationTool.py +++ b/src/Products/CMFPlone/tests/testRegistrationTool.py @@ -17,7 +17,6 @@ import unittest - member_id = "new_member" diff --git a/src/Products/CMFPlone/tests/testSearch.py b/src/Products/CMFPlone/tests/testSearch.py index 7c8eb6b483..27bf7f4dc8 100644 --- a/src/Products/CMFPlone/tests/testSearch.py +++ b/src/Products/CMFPlone/tests/testSearch.py @@ -387,7 +387,7 @@ def test_munge_search_term(self): ( # mix quoting and unquoted 'let\'s eat some "ham and eggs " without spam ', - '"ham and eggs" AND let\'s AND eat AND some ' "AND without AND spam*", + '"ham and eggs" AND let\'s AND eat AND some AND without AND spam*', ), ( 'test "Welcome" to "Plone" retest', diff --git a/src/Products/CMFPlone/tests/testSecurityDeclarations.py b/src/Products/CMFPlone/tests/testSecurityDeclarations.py index 5025c6260d..555dfcb029 100644 --- a/src/Products/CMFPlone/tests/testSecurityDeclarations.py +++ b/src/Products/CMFPlone/tests/testSecurityDeclarations.py @@ -54,28 +54,26 @@ def testImport_log(self): self.check("from Products.CMFPlone.utils import log") def testAccess_log(self): - self.check("from Products.CMFPlone import utils;" "print(utils.log)") + self.check("from Products.CMFPlone import utils;print(utils.log)") def testImport_log_deprecated(self): self.check("from Products.CMFPlone.utils import log_deprecated") def testAccess_log_deprecated(self): - self.check("from Products.CMFPlone import utils;" "print(utils.log_deprecated)") + self.check("from Products.CMFPlone import utils;print(utils.log_deprecated)") def testImport_log_exc(self): self.check("from Products.CMFPlone.utils import log_exc") def testAccess_log_exc(self): - self.check("from Products.CMFPlone import utils;" "print(utils.log_exc)") + self.check("from Products.CMFPlone import utils;print(utils.log_exc)") def testImport_getLogger(self): self.check("from logging import getLogger") def testAccess_getLogger(self): self.check( - "from logging import getLogger;" - 'log = getLogger("testlog");' - 'log.debug("test")' + 'from logging import getLogger;log = getLogger("testlog");log.debug("test")' ) def testImport_ObjectMoved(self): @@ -83,8 +81,7 @@ def testImport_ObjectMoved(self): def testAccess_ObjectMoved(self): self.check( - "from Products.CMFCore import WorkflowCore;" - "print(WorkflowCore.ObjectMoved)" + "from Products.CMFCore import WorkflowCore;print(WorkflowCore.ObjectMoved)" ) def testUse_ObjectMoved(self): @@ -127,12 +124,10 @@ def testImport_Batch(self): self.check("from Products.CMFPlone import Batch") def testAccess_Batch(self): - self.check("from Products import CMFPlone;" "print(CMFPlone.Batch)") + self.check("from Products import CMFPlone;print(CMFPlone.Batch)") def testUse_Batch(self): - self.check( - "from Products.CMFPlone import Batch;" "print(Batch([], 10).nexturls)" - ) + self.check("from Products.CMFPlone import Batch;print(Batch([], 10).nexturls)") # utils @@ -150,8 +145,7 @@ def testImport_base_hasattr(self): def testAccess_base_hasattr(self): self.check( - "import Products.CMFPlone.utils;" - "print(Products.CMFPlone.utils.base_hasattr)" + "import Products.CMFPlone.utils;print(Products.CMFPlone.utils.base_hasattr)" ) def testImport_safe_hasattr(self): @@ -159,8 +153,7 @@ def testImport_safe_hasattr(self): def testAccess_safe_hasattr(self): self.check( - "import Products.CMFPlone.utils;" - "print(Products.CMFPlone.utils.safe_hasattr)" + "import Products.CMFPlone.utils;print(Products.CMFPlone.utils.safe_hasattr)" ) def testImport_safe_callable(self): @@ -178,7 +171,7 @@ def testImport_Unauthorized(self): self.check("from AccessControl import Unauthorized") def testAccess_Unauthorized(self): - self.check("import AccessControl;" "print(AccessControl.Unauthorized)") + self.check("import AccessControl;print(AccessControl.Unauthorized)") def testImport_zExceptionsUnauthorized(self): # TODO: Note that this is not allowed @@ -188,24 +181,22 @@ def testImport_ConflictError(self): self.check("from ZODB.POSException import ConflictError") def testAccess_ConflictError(self): - self.check("import ZODB.POSException;" "print(ZODB.POSException.ConflictError)") + self.check("import ZODB.POSException;print(ZODB.POSException.ConflictError)") def testRaise_ConflictError(self): self.assertRaises( ConflictError, self.check, - "from ZODB.POSException import ConflictError;" "raise ConflictError", + "from ZODB.POSException import ConflictError;raise ConflictError", ) def testCatch_ConflictErrorRaisedByRestrictedCode(self): try: - self.check( - """ + self.check(""" from ZODB.POSException import ConflictError try: raise ConflictError except ConflictError: pass -""" - ) +""") except Exception as e: self.fail( "Failed to catch: %s %s (module %s)" @@ -215,13 +206,11 @@ def testCatch_ConflictErrorRaisedByRestrictedCode(self): def testCatch_ConflictErrorRaisedByPythonModule(self): self.app._setObject("raiseConflictError", dummy.Raiser(ConflictError)) try: - self.check( - """ + self.check(""" from ZODB.POSException import ConflictError try: context.raiseConflictError() except ConflictError: pass -""" - ) +""") except Exception as e: self.fail( "Failed to catch: %s %s (module %s)" @@ -240,13 +229,11 @@ def testAccess_ParseError(self): def testCatch_ParseErrorRaisedByPythonModule(self): self.folder._setObject("raiseParseError", dummy.Raiser(ParseError)) try: - self.check( - """ + self.check(""" from Products.ZCTextIndex.ParseTree import ParseError try: context.raiseParseError() except ParseError: pass -""" - ) +""") except Exception as e: self.fail( "Failed to catch: %s %s (module %s)" @@ -262,19 +249,17 @@ def testImport_DateTimeError(self): def testAccess_DateTimeError(self): self.check( - "import DateTime.interfaces;" "print(DateTime.interfaces.DateTimeError)" + "import DateTime.interfaces;print(DateTime.interfaces.DateTimeError)" ) def testCatch_DateTimeErrorRaisedByPythonModule(self): self.folder._setObject("raiseDateTimeError", dummy.Raiser(self.DateTimeError)) try: - self.check( - """ + self.check(""" from DateTime.interfaces import DateTimeError try: context.raiseDateTimeError() except DateTimeError: pass -""" - ) +""") except Exception as e: self.fail( "Failed to catch: %s %s (module %s)" @@ -289,20 +274,16 @@ def testImport_SyntaxError(self): self.check("from DateTime.interfaces import SyntaxError") def testAccess_SyntaxError(self): - self.check( - "import DateTime.interfaces;" "print(DateTime.interfaces.SyntaxError)" - ) + self.check("import DateTime.interfaces;print(DateTime.interfaces.SyntaxError)") def testCatch_SyntaxErrorRaisedByPythonModule(self): self.folder._setObject("raiseSyntaxError", dummy.Raiser(self.SyntaxError)) try: - self.check( - """ + self.check(""" from DateTime.interfaces import SyntaxError try: context.raiseSyntaxError() except SyntaxError: pass -""" - ) +""") except Exception as e: self.fail( "Failed to catch: %s %s (module %s)" @@ -313,18 +294,16 @@ def testImport_CopyError(self): self.check("from OFS.CopySupport import CopyError") def testAccess_CopyError(self): - self.check("import OFS.CopySupport;" "print(OFS.CopySupport.CopyError)") + self.check("import OFS.CopySupport;print(OFS.CopySupport.CopyError)") def testCatch_CopyErrorRaisedByPythonModule(self): self.folder._setObject("raiseCopyError", dummy.Raiser(CopyError)) try: - self.check( - """ + self.check(""" from OFS.CopySupport import CopyError try: context.raiseCopyError() except CopyError: pass -""" - ) +""") except Exception as e: self.fail( "Failed to catch: %s %s (module %s)" @@ -339,7 +318,7 @@ def testImport_getToolByName(self): def testAccess_getToolByName(self): # TODO: Note that this is NOT allowed! self.checkUnauthorized( - "from Products.CMFCore import utils;" "print(utils.getToolByName)" + "from Products.CMFCore import utils;print(utils.getToolByName)" ) def testUse_getToolByName(self): @@ -355,7 +334,7 @@ def testImport_transaction(self): self.checkUnauthorized("import transaction") def testUse_transaction(self): - self.checkUnauthorized("import transaction;" "transaction.get()") + self.checkUnauthorized("import transaction;transaction.get()") # ZCatalog diff --git a/src/Products/CMFPlone/tests/testUnicodeSplitter.py b/src/Products/CMFPlone/tests/testUnicodeSplitter.py index 70368b1cf8..b8970d4201 100644 --- a/src/Products/CMFPlone/tests/testUnicodeSplitter.py +++ b/src/Products/CMFPlone/tests/testUnicodeSplitter.py @@ -18,7 +18,6 @@ import locale import unittest - LATIN1 = ( "en_US.ISO-8859-1", "en_US.ISO8859-15", diff --git a/src/Products/CMFPlone/tests/testUserFolderBasics.py b/src/Products/CMFPlone/tests/testUserFolderBasics.py index 6d5ced7439..aa1d044239 100644 --- a/src/Products/CMFPlone/tests/testUserFolderBasics.py +++ b/src/Products/CMFPlone/tests/testUserFolderBasics.py @@ -14,7 +14,6 @@ import unittest - user_role = "Member" diff --git a/src/Products/CMFPlone/tests/testWebDAV.py b/src/Products/CMFPlone/tests/testWebDAV.py index 46e05f4f7a..f5e01563b5 100644 --- a/src/Products/CMFPlone/tests/testWebDAV.py +++ b/src/Products/CMFPlone/tests/testWebDAV.py @@ -8,7 +8,6 @@ import io - html = """\ Foo diff --git a/src/Products/CMFPlone/tests/testWorkflowTool.py b/src/Products/CMFPlone/tests/testWorkflowTool.py index 884c355338..e454d1e000 100644 --- a/src/Products/CMFPlone/tests/testWorkflowTool.py +++ b/src/Products/CMFPlone/tests/testWorkflowTool.py @@ -8,7 +8,6 @@ from zope.interface import directlyProvides from zope.interface import Interface - default_user = PloneTestCase.default_user diff --git a/src/Products/CMFPlone/tests/test_expressions.py b/src/Products/CMFPlone/tests/test_expressions.py index 4507caf1aa..863ad75206 100644 --- a/src/Products/CMFPlone/tests/test_expressions.py +++ b/src/Products/CMFPlone/tests/test_expressions.py @@ -30,7 +30,6 @@ import sys import unittest - # Path of this directory: path = os.path.dirname(__file__) diff --git a/src/Products/CMFPlone/tests/test_factory.py b/src/Products/CMFPlone/tests/test_factory.py index d1b6a397a1..0cf7d98b91 100644 --- a/src/Products/CMFPlone/tests/test_factory.py +++ b/src/Products/CMFPlone/tests/test_factory.py @@ -13,7 +13,6 @@ import unittest - try: distribution("plone.distribution") HAS_DISTRIBUTION = True diff --git a/src/Products/CMFPlone/tests/test_functional.py b/src/Products/CMFPlone/tests/test_functional.py index 4600e538fd..1d5c33e165 100644 --- a/src/Products/CMFPlone/tests/test_functional.py +++ b/src/Products/CMFPlone/tests/test_functional.py @@ -8,7 +8,6 @@ import re import unittest - UNITTESTS = ["messages.txt", "mails.txt", "emaillogin.rst", "translate.txt"] CONTENT_TESTS = [ "AddMoveAndDeleteDocument.txt", diff --git a/src/Products/CMFPlone/tests/test_login_form.py b/src/Products/CMFPlone/tests/test_login_form.py index 4cabaeb805..3c1b66e4a9 100644 --- a/src/Products/CMFPlone/tests/test_login_form.py +++ b/src/Products/CMFPlone/tests/test_login_form.py @@ -11,7 +11,6 @@ import time import unittest - FORM_ID = "login" diff --git a/src/Products/CMFPlone/tests/test_mails.py b/src/Products/CMFPlone/tests/test_mails.py index 44826a3c1a..d5e36de7f5 100644 --- a/src/Products/CMFPlone/tests/test_mails.py +++ b/src/Products/CMFPlone/tests/test_mails.py @@ -11,7 +11,6 @@ import re import unittest - OPTIONFLAGS = doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE diff --git a/src/Products/CMFPlone/tests/test_passwordreset.py b/src/Products/CMFPlone/tests/test_passwordreset.py index 5ca5c312e1..89ba166237 100644 --- a/src/Products/CMFPlone/tests/test_passwordreset.py +++ b/src/Products/CMFPlone/tests/test_passwordreset.py @@ -9,7 +9,6 @@ import re import unittest - OPTIONFLAGS = ( doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE # | diff --git a/src/Products/CMFPlone/tests/test_redirect_after_login.py b/src/Products/CMFPlone/tests/test_redirect_after_login.py index 528c399282..5e268fb5f4 100644 --- a/src/Products/CMFPlone/tests/test_redirect_after_login.py +++ b/src/Products/CMFPlone/tests/test_redirect_after_login.py @@ -161,7 +161,7 @@ def test_redirect_to_adapter_result(self): self.assertEqual( self.browser.url, "http://nohost/plone/sitemap", - "Successful login did not use the adapter for " "redirect.", + "Successful login did not use the adapter for redirect.", ) # Now log out. @@ -345,7 +345,7 @@ def test_password_reset_uses_all_adapters(self): self.assertEqual( self.browser.url, "http://nohost/plone/sitemap", - "Successful login did not use the adapter for " "redirect.", + "Successful login did not use the adapter for redirect.", ) self.assertEqual(self.portal.foo, "foo") diff --git a/src/Products/CMFPlone/tests/test_safe_formatter.py b/src/Products/CMFPlone/tests/test_safe_formatter.py index cd5086129a..f0bcd6c2a6 100644 --- a/src/Products/CMFPlone/tests/test_safe_formatter.py +++ b/src/Products/CMFPlone/tests/test_safe_formatter.py @@ -7,7 +7,6 @@ from Products.CMFPlone.tests.PloneTestCase import PloneTestCase from zExceptions import Unauthorized - BAD_ATTR_STR = """

""" @@ -256,7 +255,7 @@ def test_cook_zope3_page_templates_normal(self): namespace = {"context": self.portal} self.assertEqual( pt.pt_render(namespace).strip(), - "

<plonesite at plone>

\n" "

<PLONESITE AT PLONE>

", + "

<plonesite at plone>

\n

<PLONESITE AT PLONE>

", ) def test_cook_zope3_page_templates_using_format(self): diff --git a/src/Products/CMFPlone/tests/test_sitelogo.py b/src/Products/CMFPlone/tests/test_sitelogo.py index 1e15bbb21e..4ab42d1866 100644 --- a/src/Products/CMFPlone/tests/test_sitelogo.py +++ b/src/Products/CMFPlone/tests/test_sitelogo.py @@ -5,7 +5,6 @@ import unittest - # Red pixel with filename pixel.png SITE_LOGO_BASE64 = ( b"filenameb64:cGl4ZWwucG5n;datab64:iVBORw0KGgoAAAANSUhEUgA" diff --git a/src/Products/CMFPlone/tests/test_utils.py b/src/Products/CMFPlone/tests/test_utils.py index aa9e57bda5..919559ed8e 100644 --- a/src/Products/CMFPlone/tests/test_utils.py +++ b/src/Products/CMFPlone/tests/test_utils.py @@ -12,7 +12,6 @@ import unittest - SITE_LOGO_BASE64 = ( b"filenameb64:cGl4ZWwucG5n;datab64:iVBORw0KGgoAAAANSUhEUgA" b"AAAEAAAABCAIAAACQd1PeAAAADElEQVQI12P4z8AAAAMBAQAY3Y2wAAA" diff --git a/src/Products/CMFPlone/tests/test_z3c_form_widgets.py b/src/Products/CMFPlone/tests/test_z3c_form_widgets.py index ff9ef66b4d..fb44792c62 100644 --- a/src/Products/CMFPlone/tests/test_z3c_form_widgets.py +++ b/src/Products/CMFPlone/tests/test_z3c_form_widgets.py @@ -4,7 +4,6 @@ import unittest - WIDGETS_TO_TEST = [ TextWidget, widget.Widget, diff --git a/src/Products/CMFPlone/tests/utils.py b/src/Products/CMFPlone/tests/utils.py index 8957cab6ba..db00565637 100644 --- a/src/Products/CMFPlone/tests/utils.py +++ b/src/Products/CMFPlone/tests/utils.py @@ -4,7 +4,6 @@ import re - # regexp for a valid CSS identifier without the leading # VALID_CSS_ID = re.compile("[A-Za-z_@][A-Za-z0-9_@-]*") diff --git a/src/Products/CMFPlone/utils.py b/src/Products/CMFPlone/utils.py index 4600913928..b7168663b6 100644 --- a/src/Products/CMFPlone/utils.py +++ b/src/Products/CMFPlone/utils.py @@ -42,7 +42,6 @@ import sys import zope.interface - # todo: check below if this is still needed ClassType = type From 06f2895ecdb93e36a1fb00626b9a2654cd1ac768 Mon Sep 17 00:00:00 2001 From: Johannes Raggam Date: Mon, 9 Mar 2026 21:01:26 +0100 Subject: [PATCH 4/4] Fix codespell warning. --- src/Products/CMFPlone/PloneTool.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Products/CMFPlone/PloneTool.py b/src/Products/CMFPlone/PloneTool.py index 5289efb36b..b9eb459728 100644 --- a/src/Products/CMFPlone/PloneTool.py +++ b/src/Products/CMFPlone/PloneTool.py @@ -466,7 +466,7 @@ def typesToList(self): @security.public def createBreadCrumbs(self, context, request=None): - # Returns a structure for the portal breadcumbs. + # Returns a structure for the portal breadcrumbs. if request is None: request = self.REQUEST return utils.createBreadCrumbs(context, request)