From ab2fc0c9abd5c12619d0d16c488e3b3d5f624820 Mon Sep 17 00:00:00 2001 From: jensens Date: Wed, 4 Oct 2023 17:37:10 +0200 Subject: [PATCH] [fc] Repository: plone.resourceeditor Branch: refs/heads/master Date: 2023-06-26T00:31:20+03:00 Author: Gil Forcada Codinachs (gforcada) Commit: https://github.com/plone/plone.resourceeditor/commit/33646a64227a0d5cd2f2fbb45b9eece262b99500 Configuring with plone/meta Files changed: A .flake8 A .github/workflows/meta.yml A news/cfffba8c.internal M .editorconfig M .gitignore M .meta.toml M .pre-commit-config.yaml M pyproject.toml M tox.ini Repository: plone.resourceeditor Branch: refs/heads/master Date: 2023-06-26T00:31:53+03:00 Author: Gil Forcada Codinachs (gforcada) Commit: https://github.com/plone/plone.resourceeditor/commit/d9b4ed63f471fe40120286c23623a1eb30f70c6a cleanup: remove unused file Files changed: D setup.cfg Repository: plone.resourceeditor Branch: refs/heads/master Date: 2023-06-26T00:32:41+03:00 Author: Gil Forcada Codinachs (gforcada) Commit: https://github.com/plone/plone.resourceeditor/commit/3caf67cb5c60d415924532ecfa690c6584918c54 fix: adjust setup.py Files changed: M setup.py Repository: plone.resourceeditor Branch: refs/heads/master Date: 2023-06-26T00:33:54+03:00 Author: Gil Forcada Codinachs (gforcada) Commit: https://github.com/plone/plone.resourceeditor/commit/116e3bc331820eccaf6434e9560423c58e5ea38d fix: mark strings for translation Files changed: M plone/resourceeditor/preview.pt Repository: plone.resourceeditor Branch: refs/heads/master Date: 2023-10-04T17:37:10+02:00 Author: Jens W. Klein (jensens) Commit: https://github.com/plone/plone.resourceeditor/commit/ba5b7562f5e68419b993a995208889d270bbe1b5 Merge pull request #34 from plone/config-with-default-template-ba9186bb Config with default template Files changed: A .flake8 A .github/workflows/meta.yml A news/cfffba8c.internal M .editorconfig M .gitignore M .meta.toml M .pre-commit-config.yaml M plone/resourceeditor/preview.pt M pyproject.toml M setup.py M tox.ini D setup.cfg --- last_commit.txt | 167 ++++++++++-------------------------------------- 1 file changed, 32 insertions(+), 135 deletions(-) diff --git a/last_commit.txt b/last_commit.txt index b07ad83ab8..36d21d6252 100644 --- a/last_commit.txt +++ b/last_commit.txt @@ -1,199 +1,96 @@ -Repository: plone.app.lockingbehavior +Repository: plone.resourceeditor Branch: refs/heads/master -Date: 2023-06-25T22:55:51+02:00 +Date: 2023-06-26T00:31:20+03:00 Author: Gil Forcada Codinachs (gforcada) -Commit: https://github.com/plone/plone.app.lockingbehavior/commit/3cd2d451c34fa2c880293694c64fdff12cc074be +Commit: https://github.com/plone/plone.resourceeditor/commit/33646a64227a0d5cd2f2fbb45b9eece262b99500 Configuring with plone/meta Files changed: -A .editorconfig A .flake8 A .github/workflows/meta.yml -A .meta.toml -A .pre-commit-config.yaml A news/cfffba8c.internal -A tox.ini +M .editorconfig M .gitignore +M .meta.toml +M .pre-commit-config.yaml M pyproject.toml -D bootstrap.py +M tox.ini -b'diff --git a/.editorconfig b/.editorconfig\nnew file mode 100644\nindex 0000000..919b411\n--- /dev/null\n+++ b/.editorconfig\n@@ -0,0 +1,53 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+#\n+# EditorConfig Configuration file, for more details see:\n+# http://EditorConfig.org\n+# EditorConfig is a convention description, that could be interpreted\n+# by multiple editors to enforce common coding conventions for specific\n+# file types\n+\n+# top-most EditorConfig file:\n+# Will ignore other EditorConfig files in Home directory or upper tree level.\n+root = true\n+\n+\n+[*] # For All Files\n+# Unix-style newlines with a newline ending every file\n+end_of_line = lf\n+insert_final_newline = true\n+trim_trailing_whitespace = true\n+# Set default charset\n+charset = utf-8\n+# Indent style default\n+indent_style = space\n+# Max Line Length - a hard line wrap, should be disabled\n+max_line_length = off\n+\n+[*.{py,cfg,ini}]\n+# 4 space indentation\n+indent_size = 4\n+\n+[*.{yml,zpt,pt,dtml,zcml}]\n+# 2 space indentation\n+indent_size = 2\n+\n+[*.{json,jsonl,js,jsx,ts,tsx,css,less,scss,html}] # Frontend development\n+# 2 space indentation\n+indent_size = 2\n+\n+[{Makefile,.gitmodules}]\n+# Tab indentation (no size specified, but view as 4 spaces)\n+indent_style = tab\n+indent_size = unset\n+tab_width = unset\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [editorconfig]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/.flake8 b/.flake8\nnew file mode 100644\nindex 0000000..7ef4f64\n--- /dev/null\n+++ b/.flake8\n@@ -0,0 +1,22 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+[flake8]\n+doctests = 1\n+ignore =\n+ # black takes care of line length\n+ E501,\n+ # black takes care of where to break lines\n+ W503,\n+ # black takes care of spaces within slicing (list[:])\n+ E203,\n+ # black takes care of spaces after commas\n+ E231,\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [flake8]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/.github/workflows/meta.yml b/.github/workflows/meta.yml\nnew file mode 100644\nindex 0000000..a7f25e0\n--- /dev/null\n+++ b/.github/workflows/meta.yml\n@@ -0,0 +1,28 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+name: Meta\n+on:\n+ push:\n+ branches:\n+ - master\n+ - main\n+ pull_request:\n+ branches:\n+ - master\n+ - main\n+ workflow_dispatch:\n+\n+jobs:\n+ qa:\n+ uses: plone/meta/.github/workflows/qa.yml@main\n+ test:\n+ uses: plone/meta/.github/workflows/test.yml@main\n+ coverage:\n+ uses: plone/meta/.github/workflows/coverage.yml@main\n+ dependencies:\n+ uses: plone/meta/.github/workflows/dependencies.yml@main\n+ release-ready:\n+ uses: plone/meta/.github/workflows/release_ready.yml@main\n+ circular:\n+ uses: plone/meta/.github/workflows/circular.yml@main\ndiff --git a/.gitignore b/.gitignore\nindex f8cfac6..81594fd 100644\n--- a/.gitignore\n+++ b/.gitignore\n@@ -1,13 +1,51 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+# python related\n *.egg-info\n-*.mo\n *.pyc\n-.installed.cfg\n-.mr.developer.cfg\n-bin/\n+*.pyo\n+\n+# tools related\n build/\n-buildout.cfg\n-develop-eggs/\n+.coverage\n+coverage.xml\n dist/\n+docs/_build\n+__pycache__/\n+.tox\n+.vscode/\n+node_modules/\n+\n+# venv / buildout related\n+bin/\n+develop-eggs/\n eggs/\n+.eggs/\n+etc/\n+.installed.cfg\n+include/\n+lib/\n+lib64\n+.mr.developer.cfg\n parts/\n-src/\n+pyvenv.cfg\n+var/\n+\n+# mxdev\n+/instance/\n+/.make-sentinels/\n+/*-mxdev.txt\n+/reports/\n+/sources/\n+/venv/\n+.installed.txt\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [gitignore]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/.meta.toml b/.meta.toml\nnew file mode 100644\nindex 0000000..e1a64a7\n--- /dev/null\n+++ b/.meta.toml\n@@ -0,0 +1,11 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+[meta]\n+template = "default"\n+commit-id = "cfffba8c"\n+\n+[tox]\n+test_extras = """\n+ tests\n+"""\ndiff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml\nnew file mode 100644\nindex 0000000..7de9fd7\n--- /dev/null\n+++ b/.pre-commit-config.yaml\n@@ -0,0 +1,84 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+ci:\n+ autofix_prs: false\n+ autoupdate_schedule: monthly\n+\n+repos:\n+- repo: https://github.com/asottile/pyupgrade\n+ rev: v3.4.0\n+ hooks:\n+ - id: pyupgrade\n+ args: [--py38-plus]\n+- repo: https://github.com/pycqa/isort\n+ rev: 5.12.0\n+ hooks:\n+ - id: isort\n+- repo: https://github.com/psf/black\n+ rev: 23.3.0\n+ hooks:\n+ - id: black\n+- repo: https://github.com/collective/zpretty\n+ rev: 3.1.0a2\n+ hooks:\n+ - id: zpretty\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# zpretty_extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n+- repo: https://github.com/PyCQA/flake8\n+ rev: 6.0.0\n+ hooks:\n+ - id: flake8\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# flake8_extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n+- repo: https://github.com/codespell-project/codespell\n+ rev: v2.2.4\n+ hooks:\n+ - id: codespell\n+ additional_dependencies:\n+ - tomli\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# codespell_extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n+- repo: https://github.com/mgedmin/check-manifest\n+ rev: "0.49"\n+ hooks:\n+ - id: check-manifest\n+- repo: https://github.com/regebro/pyroma\n+ rev: "4.2"\n+ hooks:\n+ - id: pyroma\n+- repo: https://github.com/mgedmin/check-python-versions\n+ rev: "0.21.2"\n+ hooks:\n+ - id: check-python-versions\n+ args: [\'--only\', \'setup.py,pyproject.toml\']\n+- repo: https://github.com/collective/i18ndude\n+ rev: "6.0.0"\n+ hooks:\n+ - id: i18ndude\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/bootstrap.py b/bootstrap.py\ndeleted file mode 100644\nindex 1bfffe3..0000000\n--- a/bootstrap.py\n+++ /dev/null\n@@ -1,55 +0,0 @@\n-##############################################################################\n-#\n-# Copyright (c) 2006 Zope Corporation and Contributors.\n-# All Rights Reserved.\n-#\n-# This software is subject to the provisions of the Zope Public License,\n-# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.\n-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED\n-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS\n-# FOR A PARTICULAR PURPOSE.\n-#\n-##############################################################################\n-"""Bootstrap a buildout-based project\n-\n-Simply run this script in a directory containing a buildout.cfg.\n-The script accepts buildout command-line options, so you can\n-use the -c option to specify an alternate configuration file.\n-\n-$Id$\n-"""\n-\n-import os, shutil, sys, tempfile, urllib2\n-\n-tmpeggs = tempfile.mkdtemp()\n-\n-try:\n- import pkg_resources\n-except ImportError:\n- ez = {}\n- exec urllib2.urlopen(\'http://peak.telecommunity.com/dist/ez_setup.py\'\n- ).read() in ez\n- ez[\'use_setuptools\'](to_dir=tmpeggs, download_delay=0)\n-\n- import pkg_resources\n-\n-cmd = \'from setuptools.command.easy_install import main; main()\'\n-if sys.platform == \'win32\':\n- cmd = \'"%s"\' % cmd # work around spawn lamosity on windows\n-\n-ws = pkg_resources.working_set\n-assert os.spawnle(\n- os.P_WAIT, sys.executable, sys.executable,\n- \'-c\', cmd, \'-mqNxd\', tmpeggs, \'zc.buildout\',\n- dict(os.environ,\n- PYTHONPATH=\n- ws.find(pkg_resources.Requirement.parse(\'setuptools\')).location\n- ),\n- ) == 0\n-\n-ws.add_entry(tmpeggs)\n-ws.require(\'zc.buildout\')\n-import zc.buildout.buildout\n-zc.buildout.buildout.main(sys.argv[1:] + [\'bootstrap\'])\n-shutil.rmtree(tmpeggs)\ndiff --git a/news/cfffba8c.internal b/news/cfffba8c.internal\nnew file mode 100644\nindex 0000000..c08f539\n--- /dev/null\n+++ b/news/cfffba8c.internal\n@@ -0,0 +1,2 @@\n+Update configuration files.\n+[plone devs]\ndiff --git a/pyproject.toml b/pyproject.toml\nindex 05b615d..e442bd0 100644\n--- a/pyproject.toml\n+++ b/pyproject.toml\n@@ -1,6 +1,9 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n [tool.towncrier]\n-filename = "CHANGES.rst"\n directory = "news/"\n+filename = "CHANGES.rst"\n title_format = "{version} ({project_date})"\n underlines = ["-", ""]\n \n@@ -18,3 +21,137 @@ showcontent = true\n directory = "bugfix"\n name = "Bug fixes:"\n showcontent = true\n+\n+[[tool.towncrier.type]]\n+directory = "internal"\n+name = "Internal:"\n+showcontent = true\n+\n+[[tool.towncrier.type]]\n+directory = "documentation"\n+name = "Documentation:"\n+showcontent = true\n+\n+[[tool.towncrier.type]]\n+directory = "tests"\n+name = "Tests"\n+showcontent = true\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# towncrier_extra_lines = """\n+# extra_configuration\n+# """\n+##\n+\n+[tool.isort]\n+profile = "plone"\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# isort_extra_lines = """\n+# extra_configuration\n+# """\n+##\n+\n+[tool.black]\n+target-version = ["py38"]\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# black_extra_lines = """\n+# extra_configuration\n+# """\n+##\n+\n+[tool.codespell]\n+ignore-words-list = "discreet,"\n+skip = "*.po,"\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# codespell_ignores = "foo,bar"\n+# codespell_skip = "*.po,*.map,package-lock.json"\n+##\n+\n+[tool.dependencychecker]\n+Zope = [\n+ # Zope own provided namespaces\n+ \'App\', \'OFS\', \'Products.Five\', \'Products.OFSP\', \'Products.PageTemplates\',\n+ \'Products.SiteAccess\', \'Shared\', \'Testing\', \'ZPublisher\', \'ZTUtils\',\n+ \'Zope2\', \'webdav\', \'zmi\',\n+ # ExtensionClass own provided namespaces\n+ \'ExtensionClass\', \'ComputedAttribute\', \'MethodObject\',\n+ # Zope dependencies\n+ \'AccessControl\', \'Acquisition\', \'AuthEncoding\', \'beautifulsoup4\', \'BTrees\',\n+ \'cffi\', \'Chameleon\', \'DateTime\', \'DocumentTemplate\',\n+ \'MultiMapping\', \'multipart\', \'PasteDeploy\', \'Persistence\', \'persistent\',\n+ \'pycparser\', \'python-gettext\', \'pytz\', \'RestrictedPython\', \'roman\',\n+ \'soupsieve\', \'transaction\', \'waitress\', \'WebOb\', \'WebTest\', \'WSGIProxy2\',\n+ \'z3c.pt\', \'zc.lockfile\', \'ZConfig\', \'zExceptions\', \'ZODB\', \'zodbpickle\',\n+ \'zope.annotation\', \'zope.browser\', \'zope.browsermenu\', \'zope.browserpage\',\n+ \'zope.browserresource\', \'zope.cachedescriptors\', \'zope.component\',\n+ \'zope.configuration\', \'zope.container\', \'zope.contentprovider\',\n+ \'zope.contenttype\', \'zope.datetime\', \'zope.deferredimport\',\n+ \'zope.deprecation\', \'zope.dottedname\', \'zope.event\', \'zope.exceptions\',\n+ \'zope.filerepresentation\', \'zope.globalrequest\', \'zope.hookable\',\n+ \'zope.i18n\', \'zope.i18nmessageid\', \'zope.interface\', \'zope.lifecycleevent\',\n+ \'zope.location\', \'zope.pagetemplate\', \'zope.processlifetime\', \'zope.proxy\',\n+ \'zope.ptresource\', \'zope.publisher\', \'zope.schema\', \'zope.security\',\n+ \'zope.sequencesort\', \'zope.site\', \'zope.size\', \'zope.structuredtext\',\n+ \'zope.tal\', \'zope.tales\', \'zope.testbrowser\', \'zope.testing\',\n+ \'zope.traversing\', \'zope.viewlet\'\n+]\n+\'Products.CMFCore\' = [\n+ \'docutils\', \'five.localsitemanager\', \'Missing\', \'Products.BTreeFolder2\',\n+ \'Products.GenericSetup\', \'Products.MailHost\', \'Products.PythonScripts\',\n+ \'Products.StandardCacheManagers\', \'Products.ZCatalog\', \'Record\',\n+ \'zope.sendmail\', \'Zope\'\n+]\n+\'plone.base\' = [\n+ \'plone.batching\', \'plone.registry\', \'plone.schema\',\'plone.z3cform\',\n+ \'Products.CMFCore\', \'Products.CMFDynamicViewFTI\',\n+]\n+python-dateutil = [\'dateutil\']\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# dependencies_ignores = "[\'zestreleaser.towncrier\']"\n+# dependencies_mappings = [\n+# "gitpython = [\'git\']",\n+# "pygithub = [\'github\']",\n+# ]\n+# """\n+##\n+\n+[tool.check-manifest]\n+ignore = [\n+ ".editorconfig",\n+ ".meta.toml",\n+ ".pre-commit-config.yaml",\n+ "tox.ini",\n+ ".flake8",\n+ "mx.ini",\n+\n+]\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# check_manifest_ignores = """\n+# "*.map.js",\n+# "*.pyc",\n+# """\n+##\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/tox.ini b/tox.ini\nnew file mode 100644\nindex 0000000..bc72538\n--- /dev/null\n+++ b/tox.ini\n@@ -0,0 +1,191 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+[tox]\n+# We need 4.4.0 for constrain_package_deps.\n+min_version = 4.4.0\n+envlist =\n+ lint\n+ test\n+ dependencies\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [tox]\n+# envlist_lines = """\n+# my_other_environment\n+# """\n+# config_lines = """\n+# my_extra_top_level_tox_configuration_lines\n+# """\n+##\n+\n+[testenv]\n+skip_install = true\n+allowlist_externals =\n+ echo\n+ false\n+# Make sure typos like `tox -e formaat` are caught instead of silently doing nothing.\n+# See https://github.com/tox-dev/tox/issues/2858.\n+commands =\n+ echo "Unrecognized environment name {envname}"\n+ false\n+\n+[testenv:format]\n+description = automatically reformat code\n+skip_install = true\n+deps =\n+ pre-commit\n+commands =\n+ pre-commit run -a pyupgrade\n+ pre-commit run -a isort\n+ pre-commit run -a black\n+ pre-commit run -a zpretty\n+\n+[testenv:lint]\n+description = run linters that will help improve the code style\n+skip_install = true\n+deps =\n+ pre-commit\n+commands =\n+ pre-commit run -a\n+\n+[testenv:dependencies]\n+description = check if the package defines all its dependencies\n+skip_install = true\n+deps =\n+ build\n+ z3c.dependencychecker==2.11\n+commands =\n+ python -m build --sdist --no-isolation\n+ dependencychecker\n+\n+[testenv:dependencies-graph]\n+description = generate a graph out of the dependencies of the package\n+skip_install = false\n+allowlist_externals =\n+ sh\n+deps =\n+ pipdeptree==2.5.1\n+ graphviz # optional dependency of pipdeptree\n+commands =\n+ sh -c \'pipdeptree --exclude setuptools,wheel,pipdeptree,zope.interface,zope.component --graph-output svg > dependencies.svg\'\n+\n+[testenv:test]\n+description = run the distribution tests\n+use_develop = true\n+skip_install = false\n+constrain_package_deps = true\n+set_env =\n+ ROBOT_BROWSER=headlesschrome\n+\n+##\n+# Specify extra test environment variables in .meta.toml:\n+# [tox]\n+# test_environment_variables = """\n+# PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/\n+# """\n+##\n+deps =\n+ zope.testrunner\n+ -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+##\n+# Specify a custom constraints file in .meta.toml:\n+# [tox]\n+# constraints_file = "https://my-server.com/constraints.txt"\n+##\n+commands =\n+ zope-testrunner --all --test-path={toxinidir} -s plone.app.lockingbehavior {posargs}\n+extras =\n+ test\n+ tests\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [tox]\n+# test_extras = """\n+# tests\n+# widgets\n+# """\n+##\n+\n+[testenv:coverage]\n+description = get a test coverage report\n+use_develop = true\n+skip_install = false\n+constrain_package_deps = true\n+set_env =\n+ ROBOT_BROWSER=headlesschrome\n+\n+##\n+# Specify extra test environment variables in .meta.toml:\n+# [tox]\n+# test_environment_variables = """\n+# PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/\n+# """\n+##\n+deps =\n+ coverage\n+ zope.testrunner\n+ -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+commands =\n+ coverage run --branch --source plone.app.lockingbehavior {envbindir}/zope-testrunner --quiet --all --test-path={toxinidir} -s plone.app.lockingbehavior {posargs}\n+ coverage report -m --format markdown\n+ coverage xml\n+extras =\n+ test\n+ tests\n+\n+\n+[testenv:release-check]\n+description = ensure that the distribution is ready to release\n+skip_install = true\n+deps =\n+ twine\n+ build\n+ towncrier\n+ -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+commands =\n+ # fake version to not have to install the package\n+ # we build the change log as news entries might break\n+ # the README that is displayed on PyPI\n+ towncrier build --version=100.0.0 --yes\n+ python -m build --sdist --no-isolation\n+ twine check dist/*\n+\n+[testenv:circular]\n+description = ensure there are no cyclic dependencies\n+use_develop = true\n+skip_install = false\n+set_env =\n+\n+##\n+# Specify extra test environment variables in .meta.toml:\n+# [tox]\n+# test_environment_variables = """\n+# PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/\n+# """\n+##\n+allowlist_externals =\n+ sh\n+deps =\n+ pipdeptree\n+ pipforester\n+ -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+commands =\n+ # Generate the full dependency tree\n+ sh -c \'pipdeptree -j > forest.json\'\n+ # Generate a DOT graph with the circular dependencies, if any\n+ pipforester -i forest.json -o forest.dot --cycles\n+ # Report if there are any circular dependencies, i.e. error if there are any\n+ pipforester -i forest.json --check-cycles -o /dev/null\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [tox]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n' +b'diff --git a/.editorconfig b/.editorconfig\nindex b4158b8..919b411 100644\n--- a/.editorconfig\n+++ b/.editorconfig\n@@ -1,5 +1,6 @@\n # Generated from:\n # https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n #\n # EditorConfig Configuration file, for more details see:\n # http://EditorConfig.org\n@@ -32,8 +33,21 @@ indent_size = 4\n # 2 space indentation\n indent_size = 2\n \n+[*.{json,jsonl,js,jsx,ts,tsx,css,less,scss,html}] # Frontend development\n+# 2 space indentation\n+indent_size = 2\n+\n [{Makefile,.gitmodules}]\n # Tab indentation (no size specified, but view as 4 spaces)\n indent_style = tab\n indent_size = unset\n tab_width = unset\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [editorconfig]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/.flake8 b/.flake8\nnew file mode 100644\nindex 0000000..7ef4f64\n--- /dev/null\n+++ b/.flake8\n@@ -0,0 +1,22 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+[flake8]\n+doctests = 1\n+ignore =\n+ # black takes care of line length\n+ E501,\n+ # black takes care of where to break lines\n+ W503,\n+ # black takes care of spaces within slicing (list[:])\n+ E203,\n+ # black takes care of spaces after commas\n+ E231,\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [flake8]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/.github/workflows/meta.yml b/.github/workflows/meta.yml\nnew file mode 100644\nindex 0000000..a7f25e0\n--- /dev/null\n+++ b/.github/workflows/meta.yml\n@@ -0,0 +1,28 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+name: Meta\n+on:\n+ push:\n+ branches:\n+ - master\n+ - main\n+ pull_request:\n+ branches:\n+ - master\n+ - main\n+ workflow_dispatch:\n+\n+jobs:\n+ qa:\n+ uses: plone/meta/.github/workflows/qa.yml@main\n+ test:\n+ uses: plone/meta/.github/workflows/test.yml@main\n+ coverage:\n+ uses: plone/meta/.github/workflows/coverage.yml@main\n+ dependencies:\n+ uses: plone/meta/.github/workflows/dependencies.yml@main\n+ release-ready:\n+ uses: plone/meta/.github/workflows/release_ready.yml@main\n+ circular:\n+ uses: plone/meta/.github/workflows/circular.yml@main\ndiff --git a/.gitignore b/.gitignore\nindex 7709f60..81594fd 100644\n--- a/.gitignore\n+++ b/.gitignore\n@@ -1,10 +1,51 @@\n-*.pyc\n-.DS_Store\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+# python related\n *.egg-info\n-.installed.cfg\n-.mr.developer.cfg\n+*.pyc\n+*.pyo\n+\n+# tools related\n+build/\n+.coverage\n+coverage.xml\n+dist/\n+docs/_build\n+__pycache__/\n+.tox\n+.vscode/\n+node_modules/\n+\n+# venv / buildout related\n bin/\n develop-eggs/\n-extras/\n+eggs/\n+.eggs/\n+etc/\n+.installed.cfg\n+include/\n+lib/\n+lib64\n+.mr.developer.cfg\n parts/\n+pyvenv.cfg\n var/\n+\n+# mxdev\n+/instance/\n+/.make-sentinels/\n+/*-mxdev.txt\n+/reports/\n+/sources/\n+/venv/\n+.installed.txt\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [gitignore]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/.meta.toml b/.meta.toml\nindex 99342b2..4ca2970 100644\n--- a/.meta.toml\n+++ b/.meta.toml\n@@ -1,5 +1,6 @@\n # Generated from:\n # https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n [meta]\n template = "default"\n-commit-id = "2a4ba395"\n+commit-id = "cfffba8c"\ndiff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml\nindex ea50e47..7de9fd7 100644\n--- a/.pre-commit-config.yaml\n+++ b/.pre-commit-config.yaml\n@@ -1,5 +1,6 @@\n # Generated from:\n # https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n ci:\n autofix_prs: false\n autoupdate_schedule: monthly\n@@ -22,16 +23,40 @@ repos:\n rev: 3.1.0a2\n hooks:\n - id: zpretty\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# zpretty_extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n - repo: https://github.com/PyCQA/flake8\n rev: 6.0.0\n hooks:\n - id: flake8\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# flake8_extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n - repo: https://github.com/codespell-project/codespell\n rev: v2.2.4\n hooks:\n - id: codespell\n additional_dependencies:\n - tomli\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# codespell_extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n - repo: https://github.com/mgedmin/check-manifest\n rev: "0.49"\n hooks:\n@@ -40,3 +65,20 @@ repos:\n rev: "4.2"\n hooks:\n - id: pyroma\n+- repo: https://github.com/mgedmin/check-python-versions\n+ rev: "0.21.2"\n+ hooks:\n+ - id: check-python-versions\n+ args: [\'--only\', \'setup.py,pyproject.toml\']\n+- repo: https://github.com/collective/i18ndude\n+ rev: "6.0.0"\n+ hooks:\n+ - id: i18ndude\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/news/cfffba8c.internal b/news/cfffba8c.internal\nnew file mode 100644\nindex 0000000..c08f539\n--- /dev/null\n+++ b/news/cfffba8c.internal\n@@ -0,0 +1,2 @@\n+Update configuration files.\n+[plone devs]\ndiff --git a/pyproject.toml b/pyproject.toml\nindex 860fd37..e442bd0 100644\n--- a/pyproject.toml\n+++ b/pyproject.toml\n@@ -1,8 +1,9 @@\n # Generated from:\n # https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n [tool.towncrier]\n-filename = "CHANGES.rst"\n directory = "news/"\n+filename = "CHANGES.rst"\n title_format = "{version} ({project_date})"\n underlines = ["-", ""]\n \n@@ -36,14 +37,45 @@ directory = "tests"\n name = "Tests"\n showcontent = true\n \n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# towncrier_extra_lines = """\n+# extra_configuration\n+# """\n+##\n+\n [tool.isort]\n profile = "plone"\n \n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# isort_extra_lines = """\n+# extra_configuration\n+# """\n+##\n+\n [tool.black]\n target-version = ["py38"]\n \n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# black_extra_lines = """\n+# extra_configuration\n+# """\n+##\n+\n [tool.codespell]\n-ignore-words-list = "discreet"\n+ignore-words-list = "discreet,"\n+skip = "*.po,"\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# codespell_ignores = "foo,bar"\n+# codespell_skip = "*.po,*.map,package-lock.json"\n+##\n \n [tool.dependencychecker]\n Zope = [\n@@ -84,3 +116,42 @@ Zope = [\n \'Products.CMFCore\', \'Products.CMFDynamicViewFTI\',\n ]\n python-dateutil = [\'dateutil\']\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# dependencies_ignores = "[\'zestreleaser.towncrier\']"\n+# dependencies_mappings = [\n+# "gitpython = [\'git\']",\n+# "pygithub = [\'github\']",\n+# ]\n+# """\n+##\n+\n+[tool.check-manifest]\n+ignore = [\n+ ".editorconfig",\n+ ".meta.toml",\n+ ".pre-commit-config.yaml",\n+ "tox.ini",\n+ ".flake8",\n+ "mx.ini",\n+\n+]\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# check_manifest_ignores = """\n+# "*.map.js",\n+# "*.pyc",\n+# """\n+##\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/tox.ini b/tox.ini\nindex fd8c81d..e0ba481 100644\n--- a/tox.ini\n+++ b/tox.ini\n@@ -1,16 +1,36 @@\n # Generated from:\n # https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n [tox]\n # We need 4.4.0 for constrain_package_deps.\n min_version = 4.4.0\n envlist =\n- format\n lint\n test\n+ dependencies\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [tox]\n+# envlist_lines = """\n+# my_other_environment\n+# """\n+# config_lines = """\n+# my_extra_top_level_tox_configuration_lines\n+# """\n+##\n \n [testenv]\n+skip_install = true\n allowlist_externals =\n- sh\n+ echo\n+ false\n+# Make sure typos like `tox -e formaat` are caught instead of silently doing nothing.\n+# See https://github.com/tox-dev/tox/issues/2858.\n+commands =\n+ echo "Unrecognized environment name {envname}"\n+ false\n \n [testenv:format]\n description = automatically reformat code\n@@ -42,7 +62,10 @@ commands =\n dependencychecker\n \n [testenv:dependencies-graph]\n-description = generate a graph out of the package\'s dependencies\n+description = generate a graph out of the dependencies of the package\n+skip_install = false\n+allowlist_externals =\n+ sh\n deps =\n pipdeptree==2.5.1\n graphviz # optional dependency of pipdeptree\n@@ -50,27 +73,117 @@ commands =\n sh -c \'pipdeptree --exclude setuptools,wheel,pipdeptree,zope.interface,zope.component --graph-output svg > dependencies.svg\'\n \n [testenv:test]\n+description = run the distribution tests\n use_develop = true\n+skip_install = false\n constrain_package_deps = true\n-set_env = ROBOT_BROWSER=headlesschrome\n+set_env =\n+ ROBOT_BROWSER=headlesschrome\n+\n+##\n+# Specify extra test environment variables in .meta.toml:\n+# [tox]\n+# test_environment_variables = """\n+# PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/\n+# """\n+##\n deps =\n zope.testrunner\n -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+##\n+# Specify a custom constraints file in .meta.toml:\n+# [tox]\n+# constraints_file = "https://my-server.com/constraints.txt"\n+##\n commands =\n zope-testrunner --all --test-path={toxinidir} -s plone.resourceeditor {posargs}\n extras =\n test\n \n+##\n+# Add extra configuration options in .meta.toml:\n+# [tox]\n+# test_extras = """\n+# tests\n+# widgets\n+# """\n+##\n+\n [testenv:coverage]\n+description = get a test coverage report\n use_develop = true\n+skip_install = false\n constrain_package_deps = true\n-set_env = ROBOT_BROWSER=headlesschrome\n+set_env =\n+ ROBOT_BROWSER=headlesschrome\n+\n+##\n+# Specify extra test environment variables in .meta.toml:\n+# [tox]\n+# test_environment_variables = """\n+# PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/\n+# """\n+##\n deps =\n coverage\n zope.testrunner\n -c https://dist.plone.org/release/6.0-dev/constraints.txt\n commands =\n- coverage run {envbindir}/zope-testrunner --all --test-path={toxinidir} -s plone.resourceeditor {posargs}\n+ coverage run --branch --source plone.resourceeditor {envbindir}/zope-testrunner --quiet --all --test-path={toxinidir} -s plone.resourceeditor {posargs}\n coverage report -m --format markdown\n+ coverage xml\n extras =\n test\n+\n+\n+[testenv:release-check]\n+description = ensure that the distribution is ready to release\n+skip_install = true\n+deps =\n+ twine\n+ build\n+ towncrier\n+ -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+commands =\n+ # fake version to not have to install the package\n+ # we build the change log as news entries might break\n+ # the README that is displayed on PyPI\n+ towncrier build --version=100.0.0 --yes\n+ python -m build --sdist --no-isolation\n+ twine check dist/*\n+\n+[testenv:circular]\n+description = ensure there are no cyclic dependencies\n+use_develop = true\n+skip_install = false\n+set_env =\n+\n+##\n+# Specify extra test environment variables in .meta.toml:\n+# [tox]\n+# test_environment_variables = """\n+# PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/\n+# """\n+##\n+allowlist_externals =\n+ sh\n+deps =\n+ pipdeptree\n+ pipforester\n+ -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+commands =\n+ # Generate the full dependency tree\n+ sh -c \'pipdeptree -j > forest.json\'\n+ # Generate a DOT graph with the circular dependencies, if any\n+ pipforester -i forest.json -o forest.dot --cycles\n+ # Report if there are any circular dependencies, i.e. error if there are any\n+ pipforester -i forest.json --check-cycles -o /dev/null\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [tox]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n' -Repository: plone.app.lockingbehavior +Repository: plone.resourceeditor Branch: refs/heads/master -Date: 2023-06-25T22:55:51+02:00 +Date: 2023-06-26T00:31:53+03:00 Author: Gil Forcada Codinachs (gforcada) -Commit: https://github.com/plone/plone.app.lockingbehavior/commit/2bc2b800984ccc5ac342121b7f820866dab6586f +Commit: https://github.com/plone/plone.resourceeditor/commit/d9b4ed63f471fe40120286c23623a1eb30f70c6a cleanup: remove unused file Files changed: D setup.cfg -D test-plone-4.1.x-dexterity-1.x.cfg -D test-plone-4.1.x-dexterity-2.x.cfg -b"diff --git a/setup.cfg b/setup.cfg\ndeleted file mode 100644\nindex 3e97765..0000000\n--- a/setup.cfg\n+++ /dev/null\n@@ -1,9 +0,0 @@\n-[check-manifest]\n-ignore =\n- bootstrap.py\n- *.cfg\n-\n-\n-\n-[bdist_wheel]\n-universal = 1\ndiff --git a/test-plone-4.1.x-dexterity-1.x.cfg b/test-plone-4.1.x-dexterity-1.x.cfg\ndeleted file mode 100644\nindex cdba5fe..0000000\n--- a/test-plone-4.1.x-dexterity-1.x.cfg\n+++ /dev/null\n@@ -1,13 +0,0 @@\n-[buildout]\n-extends =\n- test-plone-4.1.x-dexterity-2.x.cfg\n- http://good-py.appspot.com/release/dexterity/1.0-next\n-\n-\n-[sources]\n-plone.dexterity = git https://github.com/plone/plone.dexterity.git branch=1.x\n-\n-\n-[versions]\n-# collective.xmltestreport 1.2.3 is not working\n-collective.xmltestreport = 1.2\ndiff --git a/test-plone-4.1.x-dexterity-2.x.cfg b/test-plone-4.1.x-dexterity-2.x.cfg\ndeleted file mode 100644\nindex 10601a6..0000000\n--- a/test-plone-4.1.x-dexterity-2.x.cfg\n+++ /dev/null\n@@ -1,53 +0,0 @@\n-[buildout]\n-extends =\n- http://dist.plone.org/release/4.1-latest/versions.cfg\n- http://good-py.appspot.com/release/dexterity/2.0-next\n-find-links =\n- http://dist.plone.org/thirdparty/\n-extensions =\n- mr.developer\n-auto-checkout = *\n-\n-develop = .\n-eggs =\n-unzip = true\n-versions = versions\n-\n-parts =\n- zc-recipe-egg\n- test\n-\n-package-name = plone.app.lockingbehavior\n-\n-\n-# We include this here because collective.xmltestreport depends on zc.recipe.egg,\n-# but doesn't list it in its setup.py\n-# See http://plone.293351.n2.nabble.com/collective-xmltestreport-small-bug-td5185485.html\n-[zc-recipe-egg]\n-recipe = zc.recipe.egg\n-eggs =\n-\n-# create xml reports for Jenkins\n-[test]\n-recipe = collective.xmltestreport\n-eggs =\n- Plone\n- ${buildout:package-name} [tests]\n-\n-# Install plone.namedfile since Products.TinyMCE imports from it but does not declare a dependency.\n-# http://groups.google.com/group/dexterity-development/browse_thread/thread/d9be96e05dd0a516\n- plone.namedfile\n-\n-defaults = ['-s', '${buildout:package-name}', '--xml', '--exit-with-status', '--auto-color', '--auto-progress']\n-\n-[sources]\n-plone.dexterity = git git://github.com/plone/plone.dexterity.git\n-\n-[versions]\n-# collective.xmltestreport 1.2.3 is not working\n-collective.xmltestreport = 1.2\n-plone.app.lockingbehavior =\n-\n-# Pin Products.TinyMCE to newer version as pinned in plone 4.1-lastest. See:\n-# http://groups.google.com/group/dexterity-development/browse_thread/thread/d9be96e05dd0a516\n-Products.TinyMCE = 1.2.12\n\\ No newline at end of file\n" +b'diff --git a/setup.cfg b/setup.cfg\ndeleted file mode 100644\nindex 0da8f8f..0000000\n--- a/setup.cfg\n+++ /dev/null\n@@ -1,23 +0,0 @@\n-# Generated from:\n-# https://github.com/plone/meta/tree/master/config/default\n-[bdist_wheel]\n-universal = 0\n-\n-[flake8]\n-doctests = 1\n-ignore =\n- # black takes care of line length\n- E501,\n- # black takes care of where to break lines\n- W503,\n- # black takes care of spaces within slicing (list[:])\n- E203,\n- # black takes care of spaces after commas\n- E231,\n-\n-[check-manifest]\n-ignore =\n- .editorconfig\n- .meta.toml\n- .pre-commit-config.yaml\n- tox.ini\n' -Repository: plone.app.lockingbehavior +Repository: plone.resourceeditor Branch: refs/heads/master -Date: 2023-06-25T22:55:51+02:00 +Date: 2023-06-26T00:32:41+03:00 Author: Gil Forcada Codinachs (gforcada) -Commit: https://github.com/plone/plone.app.lockingbehavior/commit/22558c33ca44928b363351359427f0740bcad6dd - -chore: run pyupgrade - -Files changed: -M plone/__init__.py -M plone/app/__init__.py -M plone/app/lockingbehavior/behaviors.py -M plone/app/lockingbehavior/handlers.py -M plone/app/lockingbehavior/testing.py -M plone/app/lockingbehavior/tests/test_locking.py -M setup.py - -b"diff --git a/plone/__init__.py b/plone/__init__.py\nindex 85880ef..f48ad10 100644\n--- a/plone/__init__.py\n+++ b/plone/__init__.py\n@@ -1,4 +1,3 @@\n-# -*- coding: utf-8 -*-\n # See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages\n try:\n __import__('pkg_resources').declare_namespace(__name__)\ndiff --git a/plone/app/__init__.py b/plone/app/__init__.py\nindex 85880ef..f48ad10 100644\n--- a/plone/app/__init__.py\n+++ b/plone/app/__init__.py\n@@ -1,4 +1,3 @@\n-# -*- coding: utf-8 -*-\n # See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages\n try:\n __import__('pkg_resources').declare_namespace(__name__)\ndiff --git a/plone/app/lockingbehavior/behaviors.py b/plone/app/lockingbehavior/behaviors.py\nindex 17339c5..a4fe7c8 100644\n--- a/plone/app/lockingbehavior/behaviors.py\n+++ b/plone/app/lockingbehavior/behaviors.py\n@@ -1,4 +1,3 @@\n-# -*- coding: utf-8 -*-\n from plone.locking.interfaces import ITTWLockable\n \n \ndiff --git a/plone/app/lockingbehavior/handlers.py b/plone/app/lockingbehavior/handlers.py\nindex 230d070..bed48a8 100644\n--- a/plone/app/lockingbehavior/handlers.py\n+++ b/plone/app/lockingbehavior/handlers.py\n@@ -1,4 +1,3 @@\n-# -*- coding: utf-8 -*-\n import AccessControl\n from zExceptions import Redirect\n from zope.component import getMultiAdapter\ndiff --git a/plone/app/lockingbehavior/testing.py b/plone/app/lockingbehavior/testing.py\nindex f39e7bf..c486860 100644\n--- a/plone/app/lockingbehavior/testing.py\n+++ b/plone/app/lockingbehavior/testing.py\n@@ -1,4 +1,3 @@\n-# -*- coding: utf-8 -*-\n from plone.app.testing import PloneSandboxLayer\n from plone.app.testing import PLONE_FIXTURE\n from plone.app.testing import IntegrationTesting\ndiff --git a/plone/app/lockingbehavior/tests/test_locking.py b/plone/app/lockingbehavior/tests/test_locking.py\nindex f8068df..fd85e84 100644\n--- a/plone/app/lockingbehavior/tests/test_locking.py\n+++ b/plone/app/lockingbehavior/tests/test_locking.py\n@@ -1,4 +1,3 @@\n-# -*- coding: utf-8 -*-\n import unittest\n from plone.app.lockingbehavior.testing import LOCKING_FUNCTIONAL_TESTING\n from plone.app.testing import SITE_OWNER_NAME\ndiff --git a/setup.py b/setup.py\nindex ba5eabd..da5fac9 100644\n--- a/setup.py\n+++ b/setup.py\n@@ -1,4 +1,3 @@\n-# -*- coding: utf-8 -*-\n from setuptools import setup, find_packages\n \n version = '1.0.8.dev0'\n" - -Repository: plone.app.lockingbehavior - - -Branch: refs/heads/master -Date: 2023-06-25T22:55:51+02:00 -Author: Gil Forcada Codinachs (gforcada) -Commit: https://github.com/plone/plone.app.lockingbehavior/commit/8306ce0b732f66be038b65f2dc46b58e169a72d2 - -chore: run isort - -Files changed: -M plone/app/lockingbehavior/handlers.py -M plone/app/lockingbehavior/testing.py -M plone/app/lockingbehavior/tests/test_locking.py -M setup.py - -b'diff --git a/plone/app/lockingbehavior/handlers.py b/plone/app/lockingbehavior/handlers.py\nindex bed48a8..74d29c2 100644\n--- a/plone/app/lockingbehavior/handlers.py\n+++ b/plone/app/lockingbehavior/handlers.py\n@@ -1,7 +1,8 @@\n-import AccessControl\n from zExceptions import Redirect\n from zope.component import getMultiAdapter\n \n+import AccessControl\n+\n \n def protect_edit_form(obj, event):\n """If the object is locked for the current user, let\'s redirect to\ndiff --git a/plone/app/lockingbehavior/testing.py b/plone/app/lockingbehavior/testing.py\nindex c486860..6fa133b 100644\n--- a/plone/app/lockingbehavior/testing.py\n+++ b/plone/app/lockingbehavior/testing.py\n@@ -1,7 +1,7 @@\n-from plone.app.testing import PloneSandboxLayer\n-from plone.app.testing import PLONE_FIXTURE\n-from plone.app.testing import IntegrationTesting\n from plone.app.testing import FunctionalTesting\n+from plone.app.testing import IntegrationTesting\n+from plone.app.testing import PLONE_FIXTURE\n+from plone.app.testing import PloneSandboxLayer\n \n \n class LockingLayer(PloneSandboxLayer):\ndiff --git a/plone/app/lockingbehavior/tests/test_locking.py b/plone/app/lockingbehavior/tests/test_locking.py\nindex fd85e84..9be87b3 100644\n--- a/plone/app/lockingbehavior/tests/test_locking.py\n+++ b/plone/app/lockingbehavior/tests/test_locking.py\n@@ -1,14 +1,15 @@\n-import unittest\n from plone.app.lockingbehavior.testing import LOCKING_FUNCTIONAL_TESTING\n+from plone.app.testing import setRoles\n from plone.app.testing import SITE_OWNER_NAME\n from plone.app.testing import SITE_OWNER_PASSWORD\n-from plone.app.testing import TEST_USER_NAME\n from plone.app.testing import TEST_USER_ID\n+from plone.app.testing import TEST_USER_NAME\n from plone.app.testing import TEST_USER_PASSWORD\n-from plone.app.testing import setRoles\n from plone.dexterity.fti import DexterityFTI\n from plone.testing import z2\n+\n import transaction\n+import unittest\n \n \n class TestLockingBehavior(unittest.TestCase):\ndiff --git a/setup.py b/setup.py\nindex da5fac9..97648b5 100644\n--- a/setup.py\n+++ b/setup.py\n@@ -1,4 +1,6 @@\n-from setuptools import setup, find_packages\n+from setuptools import find_packages\n+from setuptools import setup\n+\n \n version = \'1.0.8.dev0\'\n tests_require = [\n' - -Repository: plone.app.lockingbehavior - - -Branch: refs/heads/master -Date: 2023-06-25T22:55:52+02:00 -Author: Gil Forcada Codinachs (gforcada) -Commit: https://github.com/plone/plone.app.lockingbehavior/commit/2eab34572a335360bc7bb4cabe5faf06cc0361de - -chore: run black - -Files changed: -M plone/__init__.py -M plone/app/__init__.py -M plone/app/lockingbehavior/behaviors.py -M plone/app/lockingbehavior/handlers.py -M plone/app/lockingbehavior/testing.py -M plone/app/lockingbehavior/tests/test_locking.py -M setup.py - -b'diff --git a/plone/__init__.py b/plone/__init__.py\nindex f48ad10..05f0beb 100644\n--- a/plone/__init__.py\n+++ b/plone/__init__.py\n@@ -1,6 +1,7 @@\n # See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages\n try:\n- __import__(\'pkg_resources\').declare_namespace(__name__)\n+ __import__("pkg_resources").declare_namespace(__name__)\n except ImportError:\n from pkgutil import extend_path\n+\n __path__ = extend_path(__path__, __name__)\ndiff --git a/plone/app/__init__.py b/plone/app/__init__.py\nindex f48ad10..05f0beb 100644\n--- a/plone/app/__init__.py\n+++ b/plone/app/__init__.py\n@@ -1,6 +1,7 @@\n # See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages\n try:\n- __import__(\'pkg_resources\').declare_namespace(__name__)\n+ __import__("pkg_resources").declare_namespace(__name__)\n except ImportError:\n from pkgutil import extend_path\n+\n __path__ = extend_path(__path__, __name__)\ndiff --git a/plone/app/lockingbehavior/behaviors.py b/plone/app/lockingbehavior/behaviors.py\nindex a4fe7c8..2d8bfaa 100644\n--- a/plone/app/lockingbehavior/behaviors.py\n+++ b/plone/app/lockingbehavior/behaviors.py\n@@ -2,5 +2,4 @@\n \n \n class ILocking(ITTWLockable):\n- """Behavior interface for marking a dexterity content as lockable.\n- """\n+ """Behavior interface for marking a dexterity content as lockable."""\ndiff --git a/plone/app/lockingbehavior/handlers.py b/plone/app/lockingbehavior/handlers.py\nindex 74d29c2..5b2333b 100644\n--- a/plone/app/lockingbehavior/handlers.py\n+++ b/plone/app/lockingbehavior/handlers.py\n@@ -16,12 +16,11 @@ def protect_edit_form(obj, event):\n if AccessControl.getSecurityManager().getUser() == nobody:\n return\n \n- info = getMultiAdapter((obj, obj.REQUEST),\n- name="plone_lock_info")\n+ info = getMultiAdapter((obj, obj.REQUEST), name="plone_lock_info")\n \n if info.is_locked_for_current_user():\n default_view = obj.defaultView()\n url = obj.absolute_url()\n if default_view:\n- url = \'/\'.join((url, "@@" + default_view))\n+ url = "/".join((url, "@@" + default_view))\n raise Redirect(url)\ndiff --git a/plone/app/lockingbehavior/testing.py b/plone/app/lockingbehavior/testing.py\nindex 6fa133b..f1a4f60 100644\n--- a/plone/app/lockingbehavior/testing.py\n+++ b/plone/app/lockingbehavior/testing.py\n@@ -5,17 +5,19 @@\n \n \n class LockingLayer(PloneSandboxLayer):\n-\n defaultBases = (PLONE_FIXTURE,)\n \n def setUpZope(self, app, configurationContext):\n # Load ZCML\n import plone.app.lockingbehavior\n+\n self.loadZCML(package=plone.app.lockingbehavior)\n \n \n LOCKING_FIXTURE = LockingLayer()\n LOCKING_INTEGRATION_TESTING = IntegrationTesting(\n- bases=(LOCKING_FIXTURE,), name="PloneAppLockingbehavior:Integration")\n+ bases=(LOCKING_FIXTURE,), name="PloneAppLockingbehavior:Integration"\n+)\n LOCKING_FUNCTIONAL_TESTING = FunctionalTesting(\n- bases=(LOCKING_FIXTURE,), name="PloneAppLockingbehavior:Functional")\n+ bases=(LOCKING_FIXTURE,), name="PloneAppLockingbehavior:Functional"\n+)\ndiff --git a/plone/app/lockingbehavior/tests/test_locking.py b/plone/app/lockingbehavior/tests/test_locking.py\nindex 9be87b3..9773067 100644\n--- a/plone/app/lockingbehavior/tests/test_locking.py\n+++ b/plone/app/lockingbehavior/tests/test_locking.py\n@@ -13,88 +13,94 @@\n \n \n class TestLockingBehavior(unittest.TestCase):\n-\n layer = LOCKING_FUNCTIONAL_TESTING\n \n def setUp(self):\n # add IShortName behavior to Page\n- self.portal = self.layer[\'portal\']\n- self.request = self.layer[\'request\']\n- setRoles(self.portal, TEST_USER_ID, [\'Manager\'])\n+ self.portal = self.layer["portal"]\n+ self.request = self.layer["request"]\n+ setRoles(self.portal, TEST_USER_ID, ["Manager"])\n \n- fti = DexterityFTI(\'LockableType\',\n- factory=\'LockableType\')\n- fti.behaviors = (\'plone.app.lockingbehavior.behaviors.ILocking\', )\n+ fti = DexterityFTI("LockableType", factory="LockableType")\n+ fti.behaviors = ("plone.app.lockingbehavior.behaviors.ILocking",)\n fti.global_allow = True\n- self.portal.portal_types._setObject(\'LockableType\', fti)\n+ self.portal.portal_types._setObject("LockableType", fti)\n transaction.commit()\n \n # prepare two browsers\n- self.foo_browser = z2.Browser(self.layer[\'app\'])\n+ self.foo_browser = z2.Browser(self.layer["app"])\n self.foo_browser.addHeader(\n- \'Authorization\', \'Basic %s:%s\'\n- % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,)\n+ "Authorization",\n+ "Basic %s:%s"\n+ % (\n+ SITE_OWNER_NAME,\n+ SITE_OWNER_PASSWORD,\n+ ),\n )\n- self.foo_browser.open(\'http://nohost/plone\')\n+ self.foo_browser.open("http://nohost/plone")\n \n- self.bar_browser = z2.Browser(self.layer[\'app\'])\n+ self.bar_browser = z2.Browser(self.layer["app"])\n self.bar_browser.addHeader(\n- \'Authorization\', \'Basic %s:%s\'\n- % (TEST_USER_NAME, TEST_USER_PASSWORD,)\n+ "Authorization",\n+ "Basic %s:%s"\n+ % (\n+ TEST_USER_NAME,\n+ TEST_USER_PASSWORD,\n+ ),\n )\n- self.bar_browser.open(\'http://nohost/plone\')\n+ self.bar_browser.open("http://nohost/plone")\n \n def test_lockablebehavior(self):\n # Add a lockable item\n self.portal.invokeFactory(\n- \'LockableType\', id=\'lockabletype\', title=\'Lockable Type\')\n- obj = self.portal[\'lockabletype\']\n+ "LockableType", id="lockabletype", title="Lockable Type"\n+ )\n+ obj = self.portal["lockabletype"]\n transaction.commit()\n \n # Edit it with User1\n self.foo_browser.open(obj.absolute_url())\n- self.assertEqual(\n- self.foo_browser.url, \'http://nohost/plone/lockabletype\')\n- self.foo_browser.getLink(\'Edit\').click()\n+ self.assertEqual(self.foo_browser.url, "http://nohost/plone/lockabletype")\n+ self.foo_browser.getLink("Edit").click()\n \n # Is locked for User2\n self.bar_browser.open(obj.absolute_url())\n- self.assertIn(\'This item was locked\', self.bar_browser.contents)\n+ self.assertIn("This item was locked", self.bar_browser.contents)\n \n # Clicking Edit will redirect to view for User2\n- self.bar_browser.getLink(\'Edit\').click()\n+ self.bar_browser.getLink("Edit").click()\n self.assertEqual(\n- self.bar_browser.url, \'http://nohost/plone/lockabletype/@@view\')\n- self.assertIn(\'This item was locked\', self.bar_browser.contents)\n+ self.bar_browser.url, "http://nohost/plone/lockabletype/@@view"\n+ )\n+ self.assertIn("This item was locked", self.bar_browser.contents)\n \n # Unlock it\n- self.foo_browser.getControl(\'Save\').click()\n+ self.foo_browser.getControl("Save").click()\n \n # Is now unlocked for User2\n self.bar_browser.open(obj.absolute_url())\n- self.assertNotIn(\'This item was locked\', self.bar_browser.contents)\n+ self.assertNotIn("This item was locked", self.bar_browser.contents)\n \n # Edit it with User2\n- self.bar_browser.getLink(\'Edit\').click()\n- self.assertIn(\n- \'http://nohost/plone/lockabletype/edit\', self.bar_browser.url)\n- self.assertNotIn(\'This item was locked\', self.bar_browser.contents)\n+ self.bar_browser.getLink("Edit").click()\n+ self.assertIn("http://nohost/plone/lockabletype/edit", self.bar_browser.url)\n+ self.assertNotIn("This item was locked", self.bar_browser.contents)\n \n # Is locked for User1\n self.foo_browser.open(obj.absolute_url())\n- self.assertIn(\'This item was locked\', self.foo_browser.contents)\n+ self.assertIn("This item was locked", self.foo_browser.contents)\n \n # Releasing the lock by closing the window by User1 does not work\n self.bar_browser.open(obj.absolute_url())\n \n # The obj is still locked\n self.foo_browser.open(obj.absolute_url())\n- self.assertIn(\'This item was locked\', self.foo_browser.contents)\n+ self.assertIn("This item was locked", self.foo_browser.contents)\n \n # Instead you need to release it by saving\n- self.bar_browser.getLink(\'Edit\').click()\n- self.bar_browser.getControl(\'Save\').click()\n+ self.bar_browser.getLink("Edit").click()\n+ self.bar_browser.getControl("Save").click()\n \n # Now it is unlocked\n self.foo_browser.open(obj.absolute_url())\n- self.assertNotIn(\'This item was locked\', self.foo_browser.contents)\n+ self.assertNotIn("This item was locked", self.foo_browser.contents)\ndiff --git a/setup.py b/setup.py\nindex 97648b5..751cc54 100644\n--- a/setup.py\n+++ b/setup.py\n@@ -2,18 +2,16 @@\n from setuptools import setup\n \n \n-version = \'1.0.8.dev0\'\n+version = "1.0.8.dev0"\n tests_require = [\n- \'plone.app.testing\',\n- ]\n+ "plone.app.testing",\n+]\n \n setup(\n- name=\'plone.app.lockingbehavior\',\n+ name="plone.app.lockingbehavior",\n version=version,\n description="Locking integration for dexterity content objects.",\n- long_description=(open("README.rst").read() + "\\n" +\n- open("CHANGES.rst").read()),\n-\n+ long_description=(open("README.rst").read() + "\\n" + open("CHANGES.rst").read()),\n # Get more strings from\n # https://pypi.org/classifiers/\n classifiers=[\n@@ -34,23 +32,23 @@\n "Programming Language :: Python :: 3.7",\n "Programming Language :: Python :: 3.8",\n "Topic :: Software Development :: Libraries :: Python Modules",\n- ],\n- keywords=\'dexterity locking behavior plone\',\n- author=\'Plone Foundation\',\n- author_email=\'mailto:dexterity-development@googlegroups.com\',\n- url=\'https://github.com/plone/plone.app.lockingbehavior/\',\n- license=\'GPL version 2\',\n+ ],\n+ keywords="dexterity locking behavior plone",\n+ author="Plone Foundation",\n+ author_email="mailto:dexterity-development@googlegroups.com",\n+ url="https://github.com/plone/plone.app.lockingbehavior/",\n+ license="GPL version 2",\n packages=find_packages(),\n- namespace_packages=[\'plone\', \'plone.app\'],\n+ namespace_packages=["plone", "plone.app"],\n include_package_data=True,\n zip_safe=False,\n install_requires=[\n- \'setuptools\',\n- \'plone.app.locales >= 4.3.9\',\n- \'plone.behavior\',\n- \'plone.dexterity>=1.1\',\n- \'plone.locking\',\n- ],\n+ "setuptools",\n+ "plone.app.locales >= 4.3.9",\n+ "plone.behavior",\n+ "plone.dexterity>=1.1",\n+ "plone.locking",\n+ ],\n tests_require=tests_require,\n extras_require=dict(tests=tests_require),\n entry_points="""\n@@ -58,4 +56,4 @@\n [z3c.autoinclude.plugin]\n target = plone\n """,\n- )\n+)\n' - -Repository: plone.app.lockingbehavior - - -Branch: refs/heads/master -Date: 2023-06-25T22:55:52+02:00 -Author: Gil Forcada Codinachs (gforcada) -Commit: https://github.com/plone/plone.app.lockingbehavior/commit/3a97de013a544ead53be311994b17fbd7e0208af - -chore: run zpretty - -Files changed: -M plone/app/lockingbehavior/configure.zcml - -b'diff --git a/plone/app/lockingbehavior/configure.zcml b/plone/app/lockingbehavior/configure.zcml\nindex c9307b7..bad950f 100644\n--- a/plone/app/lockingbehavior/configure.zcml\n+++ b/plone/app/lockingbehavior/configure.zcml\n@@ -1,43 +1,47 @@\n \n+ xmlns="http://namespaces.zope.org/zope"\n+ xmlns:grok="http://namespaces.zope.org/grok"\n+ xmlns:i18n="http://namespaces.zope.org/i18n"\n+ xmlns:plone="http://namespaces.plone.org/plone"\n+ i18n_domain="plone"\n+ >\n \n- \n- \n- \n+ \n+ \n+ \n \n- \n+ \n \n- \n+ \n \n- \n+ \n \n- \n+ \n \n- \n+ \n \n \n' - -Repository: plone.app.lockingbehavior - - -Branch: refs/heads/master -Date: 2023-06-25T22:55:52+02:00 -Author: Gil Forcada Codinachs (gforcada) -Commit: https://github.com/plone/plone.app.lockingbehavior/commit/185c6f1700d2e2c9a8ab9db4afc38416ff5bbd0f - -chore: no need for pkgutil fallback - -Files changed: -M plone/__init__.py -M plone/app/__init__.py - -b'diff --git a/plone/__init__.py b/plone/__init__.py\nindex 05f0beb..5284146 100644\n--- a/plone/__init__.py\n+++ b/plone/__init__.py\n@@ -1,7 +1 @@\n-# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages\n-try:\n- __import__("pkg_resources").declare_namespace(__name__)\n-except ImportError:\n- from pkgutil import extend_path\n-\n- __path__ = extend_path(__path__, __name__)\n+__import__("pkg_resources").declare_namespace(__name__)\ndiff --git a/plone/app/__init__.py b/plone/app/__init__.py\nindex 05f0beb..5284146 100644\n--- a/plone/app/__init__.py\n+++ b/plone/app/__init__.py\n@@ -1,7 +1 @@\n-# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages\n-try:\n- __import__("pkg_resources").declare_namespace(__name__)\n-except ImportError:\n- from pkgutil import extend_path\n-\n- __path__ = extend_path(__path__, __name__)\n+__import__("pkg_resources").declare_namespace(__name__)\n' - -Repository: plone.app.lockingbehavior - - -Branch: refs/heads/master -Date: 2023-06-25T22:55:52+02:00 -Author: Gil Forcada Codinachs (gforcada) -Commit: https://github.com/plone/plone.app.lockingbehavior/commit/c7f9a9eeb045e31c80dcfd5fcf1d7f3ad2450021 +Commit: https://github.com/plone/plone.resourceeditor/commit/3caf67cb5c60d415924532ecfa690c6584918c54 fix: adjust setup.py Files changed: M setup.py -b'diff --git a/setup.py b/setup.py\nindex 751cc54..35815c8 100644\n--- a/setup.py\n+++ b/setup.py\n@@ -1,8 +1,14 @@\n+from pathlib import Path\n from setuptools import find_packages\n from setuptools import setup\n \n \n-version = "1.0.8.dev0"\n+version = "2.0.0.dev0"\n+\n+long_description = (\n+ f"{Path(\'README.rst\').read_text()}\\n{Path(\'CHANGES.rst\').read_text()}"\n+)\n+\n tests_require = [\n "plone.app.testing",\n ]\n@@ -11,26 +17,23 @@\n name="plone.app.lockingbehavior",\n version=version,\n description="Locking integration for dexterity content objects.",\n- long_description=(open("README.rst").read() + "\\n" + open("CHANGES.rst").read()),\n+ long_description=long_description,\n+ long_description_content_type="text/x-rst",\n # Get more strings from\n # https://pypi.org/classifiers/\n classifiers=[\n "Development Status :: 5 - Production/Stable",\n "Framework :: Plone",\n- "Framework :: Plone :: 4.3",\n- "Framework :: Plone :: 5.0",\n- "Framework :: Plone :: 5.1",\n- "Framework :: Plone :: 5.2",\n+ "Framework :: Plone :: 6.0",\n "Framework :: Plone :: Core",\n "Framework :: Zope2",\n "Framework :: Zope :: 4",\n "License :: OSI Approved :: GNU General Public License v2 (GPLv2)",\n "Programming Language :: Python",\n- "Programming Language :: Python :: 2.6",\n- "Programming Language :: Python :: 2.7",\n- "Programming Language :: Python :: 3.6",\n- "Programming Language :: Python :: 3.7",\n "Programming Language :: Python :: 3.8",\n+ "Programming Language :: Python :: 3.9",\n+ "Programming Language :: Python :: 3.10",\n+ "Programming Language :: Python :: 3.11",\n "Topic :: Software Development :: Libraries :: Python Modules",\n ],\n keywords="dexterity locking behavior plone",\n@@ -42,6 +45,7 @@\n namespace_packages=["plone", "plone.app"],\n include_package_data=True,\n zip_safe=False,\n+ python_requires=">=3.8",\n install_requires=[\n "setuptools",\n "plone.app.locales >= 4.3.9",\n' +b'diff --git a/setup.py b/setup.py\nindex f05530b..f15ed05 100644\n--- a/setup.py\n+++ b/setup.py\n@@ -1,14 +1,22 @@\n+from pathlib import Path\n from setuptools import find_packages\n from setuptools import setup\n \n \n version = "4.0.1.dev0"\n \n+long_description = (\n+ f"{Path(\'README.rst\').read_text()}\\n{Path(\'CHANGES.rst\').read_text()}"\n+)\n+\n setup(\n name="plone.resourceeditor",\n version=version,\n description="Integrates ACE editor into Plone",\n- long_description=(open("README.rst").read() + "\\n" + open("CHANGES.rst").read()),\n+ long_description=long_description,\n+ long_description_content_type="text/x-rst",\n+ # Get more strings from\n+ # https://pypi.org/classifiers/\n classifiers=[\n "Development Status :: 5 - Production/Stable",\n "Framework :: Plone",\n' -Repository: plone.app.lockingbehavior +Repository: plone.resourceeditor Branch: refs/heads/master -Date: 2023-06-25T22:55:52+02:00 +Date: 2023-06-26T00:33:54+03:00 Author: Gil Forcada Codinachs (gforcada) -Commit: https://github.com/plone/plone.app.lockingbehavior/commit/b84ef1bc6bc77e5611d147ffba3894fd0a74e4e6 +Commit: https://github.com/plone/plone.resourceeditor/commit/116e3bc331820eccaf6434e9560423c58e5ea38d -fix: declare dependencies +fix: mark strings for translation Files changed: -M setup.py +M plone/resourceeditor/preview.pt -b'diff --git a/setup.py b/setup.py\nindex 35815c8..66e5cb6 100644\n--- a/setup.py\n+++ b/setup.py\n@@ -11,6 +11,7 @@\n \n tests_require = [\n "plone.app.testing",\n+ "plone.testing",\n ]\n \n setup(\n@@ -48,7 +49,6 @@\n python_requires=">=3.8",\n install_requires=[\n "setuptools",\n- "plone.app.locales >= 4.3.9",\n "plone.behavior",\n "plone.dexterity>=1.1",\n "plone.locking",\n' +b'diff --git a/plone/resourceeditor/preview.pt b/plone/resourceeditor/preview.pt\nindex e522369..f70e370 100644\n--- a/plone/resourceeditor/preview.pt\n+++ b/plone/resourceeditor/preview.pt\n@@ -19,12 +19,16 @@\n

\n Date Modified:\n \n- n/a\n+ n/a\n
\n Size:\n \n- n/a\n+ n/a\n

\n \n' -Repository: plone.app.lockingbehavior +Repository: plone.resourceeditor Branch: refs/heads/master -Date: 2023-10-04T17:34:00+02:00 +Date: 2023-10-04T17:37:10+02:00 Author: Jens W. Klein (jensens) -Commit: https://github.com/plone/plone.app.lockingbehavior/commit/1bf528c5d538bab526c5a65b2390ffa54fced1d2 +Commit: https://github.com/plone/plone.resourceeditor/commit/ba5b7562f5e68419b993a995208889d270bbe1b5 -Merge pull request #10 from plone/config-with-default-template-f1d6e973 +Merge pull request #34 from plone/config-with-default-template-ba9186bb Config with default template Files changed: -A .editorconfig A .flake8 A .github/workflows/meta.yml -A .meta.toml -A .pre-commit-config.yaml A news/cfffba8c.internal -A tox.ini +M .editorconfig M .gitignore -M plone/__init__.py -M plone/app/__init__.py -M plone/app/lockingbehavior/behaviors.py -M plone/app/lockingbehavior/configure.zcml -M plone/app/lockingbehavior/handlers.py -M plone/app/lockingbehavior/testing.py -M plone/app/lockingbehavior/tests/test_locking.py +M .meta.toml +M .pre-commit-config.yaml +M plone/resourceeditor/preview.pt M pyproject.toml M setup.py -D bootstrap.py +M tox.ini D setup.cfg -D test-plone-4.1.x-dexterity-1.x.cfg -D test-plone-4.1.x-dexterity-2.x.cfg -b'diff --git a/.editorconfig b/.editorconfig\nnew file mode 100644\nindex 0000000..919b411\n--- /dev/null\n+++ b/.editorconfig\n@@ -0,0 +1,53 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+#\n+# EditorConfig Configuration file, for more details see:\n+# http://EditorConfig.org\n+# EditorConfig is a convention description, that could be interpreted\n+# by multiple editors to enforce common coding conventions for specific\n+# file types\n+\n+# top-most EditorConfig file:\n+# Will ignore other EditorConfig files in Home directory or upper tree level.\n+root = true\n+\n+\n+[*] # For All Files\n+# Unix-style newlines with a newline ending every file\n+end_of_line = lf\n+insert_final_newline = true\n+trim_trailing_whitespace = true\n+# Set default charset\n+charset = utf-8\n+# Indent style default\n+indent_style = space\n+# Max Line Length - a hard line wrap, should be disabled\n+max_line_length = off\n+\n+[*.{py,cfg,ini}]\n+# 4 space indentation\n+indent_size = 4\n+\n+[*.{yml,zpt,pt,dtml,zcml}]\n+# 2 space indentation\n+indent_size = 2\n+\n+[*.{json,jsonl,js,jsx,ts,tsx,css,less,scss,html}] # Frontend development\n+# 2 space indentation\n+indent_size = 2\n+\n+[{Makefile,.gitmodules}]\n+# Tab indentation (no size specified, but view as 4 spaces)\n+indent_style = tab\n+indent_size = unset\n+tab_width = unset\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [editorconfig]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/.flake8 b/.flake8\nnew file mode 100644\nindex 0000000..7ef4f64\n--- /dev/null\n+++ b/.flake8\n@@ -0,0 +1,22 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+[flake8]\n+doctests = 1\n+ignore =\n+ # black takes care of line length\n+ E501,\n+ # black takes care of where to break lines\n+ W503,\n+ # black takes care of spaces within slicing (list[:])\n+ E203,\n+ # black takes care of spaces after commas\n+ E231,\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [flake8]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/.github/workflows/meta.yml b/.github/workflows/meta.yml\nnew file mode 100644\nindex 0000000..a7f25e0\n--- /dev/null\n+++ b/.github/workflows/meta.yml\n@@ -0,0 +1,28 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+name: Meta\n+on:\n+ push:\n+ branches:\n+ - master\n+ - main\n+ pull_request:\n+ branches:\n+ - master\n+ - main\n+ workflow_dispatch:\n+\n+jobs:\n+ qa:\n+ uses: plone/meta/.github/workflows/qa.yml@main\n+ test:\n+ uses: plone/meta/.github/workflows/test.yml@main\n+ coverage:\n+ uses: plone/meta/.github/workflows/coverage.yml@main\n+ dependencies:\n+ uses: plone/meta/.github/workflows/dependencies.yml@main\n+ release-ready:\n+ uses: plone/meta/.github/workflows/release_ready.yml@main\n+ circular:\n+ uses: plone/meta/.github/workflows/circular.yml@main\ndiff --git a/.gitignore b/.gitignore\nindex f8cfac6..81594fd 100644\n--- a/.gitignore\n+++ b/.gitignore\n@@ -1,13 +1,51 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+# python related\n *.egg-info\n-*.mo\n *.pyc\n-.installed.cfg\n-.mr.developer.cfg\n-bin/\n+*.pyo\n+\n+# tools related\n build/\n-buildout.cfg\n-develop-eggs/\n+.coverage\n+coverage.xml\n dist/\n+docs/_build\n+__pycache__/\n+.tox\n+.vscode/\n+node_modules/\n+\n+# venv / buildout related\n+bin/\n+develop-eggs/\n eggs/\n+.eggs/\n+etc/\n+.installed.cfg\n+include/\n+lib/\n+lib64\n+.mr.developer.cfg\n parts/\n-src/\n+pyvenv.cfg\n+var/\n+\n+# mxdev\n+/instance/\n+/.make-sentinels/\n+/*-mxdev.txt\n+/reports/\n+/sources/\n+/venv/\n+.installed.txt\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [gitignore]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/.meta.toml b/.meta.toml\nnew file mode 100644\nindex 0000000..e1a64a7\n--- /dev/null\n+++ b/.meta.toml\n@@ -0,0 +1,11 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+[meta]\n+template = "default"\n+commit-id = "cfffba8c"\n+\n+[tox]\n+test_extras = """\n+ tests\n+"""\ndiff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml\nnew file mode 100644\nindex 0000000..7de9fd7\n--- /dev/null\n+++ b/.pre-commit-config.yaml\n@@ -0,0 +1,84 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+ci:\n+ autofix_prs: false\n+ autoupdate_schedule: monthly\n+\n+repos:\n+- repo: https://github.com/asottile/pyupgrade\n+ rev: v3.4.0\n+ hooks:\n+ - id: pyupgrade\n+ args: [--py38-plus]\n+- repo: https://github.com/pycqa/isort\n+ rev: 5.12.0\n+ hooks:\n+ - id: isort\n+- repo: https://github.com/psf/black\n+ rev: 23.3.0\n+ hooks:\n+ - id: black\n+- repo: https://github.com/collective/zpretty\n+ rev: 3.1.0a2\n+ hooks:\n+ - id: zpretty\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# zpretty_extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n+- repo: https://github.com/PyCQA/flake8\n+ rev: 6.0.0\n+ hooks:\n+ - id: flake8\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# flake8_extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n+- repo: https://github.com/codespell-project/codespell\n+ rev: v2.2.4\n+ hooks:\n+ - id: codespell\n+ additional_dependencies:\n+ - tomli\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# codespell_extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n+- repo: https://github.com/mgedmin/check-manifest\n+ rev: "0.49"\n+ hooks:\n+ - id: check-manifest\n+- repo: https://github.com/regebro/pyroma\n+ rev: "4.2"\n+ hooks:\n+ - id: pyroma\n+- repo: https://github.com/mgedmin/check-python-versions\n+ rev: "0.21.2"\n+ hooks:\n+ - id: check-python-versions\n+ args: [\'--only\', \'setup.py,pyproject.toml\']\n+- repo: https://github.com/collective/i18ndude\n+ rev: "6.0.0"\n+ hooks:\n+ - id: i18ndude\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/bootstrap.py b/bootstrap.py\ndeleted file mode 100644\nindex 1bfffe3..0000000\n--- a/bootstrap.py\n+++ /dev/null\n@@ -1,55 +0,0 @@\n-##############################################################################\n-#\n-# Copyright (c) 2006 Zope Corporation and Contributors.\n-# All Rights Reserved.\n-#\n-# This software is subject to the provisions of the Zope Public License,\n-# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.\n-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED\n-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS\n-# FOR A PARTICULAR PURPOSE.\n-#\n-##############################################################################\n-"""Bootstrap a buildout-based project\n-\n-Simply run this script in a directory containing a buildout.cfg.\n-The script accepts buildout command-line options, so you can\n-use the -c option to specify an alternate configuration file.\n-\n-$Id$\n-"""\n-\n-import os, shutil, sys, tempfile, urllib2\n-\n-tmpeggs = tempfile.mkdtemp()\n-\n-try:\n- import pkg_resources\n-except ImportError:\n- ez = {}\n- exec urllib2.urlopen(\'http://peak.telecommunity.com/dist/ez_setup.py\'\n- ).read() in ez\n- ez[\'use_setuptools\'](to_dir=tmpeggs, download_delay=0)\n-\n- import pkg_resources\n-\n-cmd = \'from setuptools.command.easy_install import main; main()\'\n-if sys.platform == \'win32\':\n- cmd = \'"%s"\' % cmd # work around spawn lamosity on windows\n-\n-ws = pkg_resources.working_set\n-assert os.spawnle(\n- os.P_WAIT, sys.executable, sys.executable,\n- \'-c\', cmd, \'-mqNxd\', tmpeggs, \'zc.buildout\',\n- dict(os.environ,\n- PYTHONPATH=\n- ws.find(pkg_resources.Requirement.parse(\'setuptools\')).location\n- ),\n- ) == 0\n-\n-ws.add_entry(tmpeggs)\n-ws.require(\'zc.buildout\')\n-import zc.buildout.buildout\n-zc.buildout.buildout.main(sys.argv[1:] + [\'bootstrap\'])\n-shutil.rmtree(tmpeggs)\ndiff --git a/news/cfffba8c.internal b/news/cfffba8c.internal\nnew file mode 100644\nindex 0000000..c08f539\n--- /dev/null\n+++ b/news/cfffba8c.internal\n@@ -0,0 +1,2 @@\n+Update configuration files.\n+[plone devs]\ndiff --git a/plone/__init__.py b/plone/__init__.py\nindex 85880ef..5284146 100644\n--- a/plone/__init__.py\n+++ b/plone/__init__.py\n@@ -1,7 +1 @@\n-# -*- coding: utf-8 -*-\n-# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages\n-try:\n- __import__(\'pkg_resources\').declare_namespace(__name__)\n-except ImportError:\n- from pkgutil import extend_path\n- __path__ = extend_path(__path__, __name__)\n+__import__("pkg_resources").declare_namespace(__name__)\ndiff --git a/plone/app/__init__.py b/plone/app/__init__.py\nindex 85880ef..5284146 100644\n--- a/plone/app/__init__.py\n+++ b/plone/app/__init__.py\n@@ -1,7 +1 @@\n-# -*- coding: utf-8 -*-\n-# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages\n-try:\n- __import__(\'pkg_resources\').declare_namespace(__name__)\n-except ImportError:\n- from pkgutil import extend_path\n- __path__ = extend_path(__path__, __name__)\n+__import__("pkg_resources").declare_namespace(__name__)\ndiff --git a/plone/app/lockingbehavior/behaviors.py b/plone/app/lockingbehavior/behaviors.py\nindex 17339c5..2d8bfaa 100644\n--- a/plone/app/lockingbehavior/behaviors.py\n+++ b/plone/app/lockingbehavior/behaviors.py\n@@ -1,7 +1,5 @@\n-# -*- coding: utf-8 -*-\n from plone.locking.interfaces import ITTWLockable\n \n \n class ILocking(ITTWLockable):\n- """Behavior interface for marking a dexterity content as lockable.\n- """\n+ """Behavior interface for marking a dexterity content as lockable."""\ndiff --git a/plone/app/lockingbehavior/configure.zcml b/plone/app/lockingbehavior/configure.zcml\nindex c9307b7..bad950f 100644\n--- a/plone/app/lockingbehavior/configure.zcml\n+++ b/plone/app/lockingbehavior/configure.zcml\n@@ -1,43 +1,47 @@\n \n+ xmlns="http://namespaces.zope.org/zope"\n+ xmlns:grok="http://namespaces.zope.org/grok"\n+ xmlns:i18n="http://namespaces.zope.org/i18n"\n+ xmlns:plone="http://namespaces.plone.org/plone"\n+ i18n_domain="plone"\n+ >\n \n- \n- \n- \n+ \n+ \n+ \n \n- \n+ \n \n- \n+ \n \n- \n+ \n \n- \n+ \n \n- \n+ \n \n \ndiff --git a/plone/app/lockingbehavior/handlers.py b/plone/app/lockingbehavior/handlers.py\nindex 230d070..5b2333b 100644\n--- a/plone/app/lockingbehavior/handlers.py\n+++ b/plone/app/lockingbehavior/handlers.py\n@@ -1,8 +1,8 @@\n-# -*- coding: utf-8 -*-\n-import AccessControl\n from zExceptions import Redirect\n from zope.component import getMultiAdapter\n \n+import AccessControl\n+\n \n def protect_edit_form(obj, event):\n """If the object is locked for the current user, let\'s redirect to\n@@ -16,12 +16,11 @@ def protect_edit_form(obj, event):\n if AccessControl.getSecurityManager().getUser() == nobody:\n return\n \n- info = getMultiAdapter((obj, obj.REQUEST),\n- name="plone_lock_info")\n+ info = getMultiAdapter((obj, obj.REQUEST), name="plone_lock_info")\n \n if info.is_locked_for_current_user():\n default_view = obj.defaultView()\n url = obj.absolute_url()\n if default_view:\n- url = \'/\'.join((url, "@@" + default_view))\n+ url = "/".join((url, "@@" + default_view))\n raise Redirect(url)\ndiff --git a/plone/app/lockingbehavior/testing.py b/plone/app/lockingbehavior/testing.py\nindex f39e7bf..f1a4f60 100644\n--- a/plone/app/lockingbehavior/testing.py\n+++ b/plone/app/lockingbehavior/testing.py\n@@ -1,22 +1,23 @@\n-# -*- coding: utf-8 -*-\n-from plone.app.testing import PloneSandboxLayer\n-from plone.app.testing import PLONE_FIXTURE\n-from plone.app.testing import IntegrationTesting\n from plone.app.testing import FunctionalTesting\n+from plone.app.testing import IntegrationTesting\n+from plone.app.testing import PLONE_FIXTURE\n+from plone.app.testing import PloneSandboxLayer\n \n \n class LockingLayer(PloneSandboxLayer):\n-\n defaultBases = (PLONE_FIXTURE,)\n \n def setUpZope(self, app, configurationContext):\n # Load ZCML\n import plone.app.lockingbehavior\n+\n self.loadZCML(package=plone.app.lockingbehavior)\n \n \n LOCKING_FIXTURE = LockingLayer()\n LOCKING_INTEGRATION_TESTING = IntegrationTesting(\n- bases=(LOCKING_FIXTURE,), name="PloneAppLockingbehavior:Integration")\n+ bases=(LOCKING_FIXTURE,), name="PloneAppLockingbehavior:Integration"\n+)\n LOCKING_FUNCTIONAL_TESTING = FunctionalTesting(\n- bases=(LOCKING_FIXTURE,), name="PloneAppLockingbehavior:Functional")\n+ bases=(LOCKING_FIXTURE,), name="PloneAppLockingbehavior:Functional"\n+)\ndiff --git a/plone/app/lockingbehavior/tests/test_locking.py b/plone/app/lockingbehavior/tests/test_locking.py\nindex f8068df..9773067 100644\n--- a/plone/app/lockingbehavior/tests/test_locking.py\n+++ b/plone/app/lockingbehavior/tests/test_locking.py\n@@ -1,100 +1,106 @@\n-# -*- coding: utf-8 -*-\n-import unittest\n from plone.app.lockingbehavior.testing import LOCKING_FUNCTIONAL_TESTING\n+from plone.app.testing import setRoles\n from plone.app.testing import SITE_OWNER_NAME\n from plone.app.testing import SITE_OWNER_PASSWORD\n-from plone.app.testing import TEST_USER_NAME\n from plone.app.testing import TEST_USER_ID\n+from plone.app.testing import TEST_USER_NAME\n from plone.app.testing import TEST_USER_PASSWORD\n-from plone.app.testing import setRoles\n from plone.dexterity.fti import DexterityFTI\n from plone.testing import z2\n+\n import transaction\n+import unittest\n \n \n class TestLockingBehavior(unittest.TestCase):\n-\n layer = LOCKING_FUNCTIONAL_TESTING\n \n def setUp(self):\n # add IShortName behavior to Page\n- self.portal = self.layer[\'portal\']\n- self.request = self.layer[\'request\']\n- setRoles(self.portal, TEST_USER_ID, [\'Manager\'])\n+ self.portal = self.layer["portal"]\n+ self.request = self.layer["request"]\n+ setRoles(self.portal, TEST_USER_ID, ["Manager"])\n \n- fti = DexterityFTI(\'LockableType\',\n- factory=\'LockableType\')\n- fti.behaviors = (\'plone.app.lockingbehavior.behaviors.ILocking\', )\n+ fti = DexterityFTI("LockableType", factory="LockableType")\n+ fti.behaviors = ("plone.app.lockingbehavior.behaviors.ILocking",)\n fti.global_allow = True\n- self.portal.portal_types._setObject(\'LockableType\', fti)\n+ self.portal.portal_types._setObject("LockableType", fti)\n transaction.commit()\n \n # prepare two browsers\n- self.foo_browser = z2.Browser(self.layer[\'app\'])\n+ self.foo_browser = z2.Browser(self.layer["app"])\n self.foo_browser.addHeader(\n- \'Authorization\', \'Basic %s:%s\'\n- % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,)\n+ "Authorization",\n+ "Basic %s:%s"\n+ % (\n+ SITE_OWNER_NAME,\n+ SITE_OWNER_PASSWORD,\n+ ),\n )\n- self.foo_browser.open(\'http://nohost/plone\')\n+ self.foo_browser.open("http://nohost/plone")\n \n- self.bar_browser = z2.Browser(self.layer[\'app\'])\n+ self.bar_browser = z2.Browser(self.layer["app"])\n self.bar_browser.addHeader(\n- \'Authorization\', \'Basic %s:%s\'\n- % (TEST_USER_NAME, TEST_USER_PASSWORD,)\n+ "Authorization",\n+ "Basic %s:%s"\n+ % (\n+ TEST_USER_NAME,\n+ TEST_USER_PASSWORD,\n+ ),\n )\n- self.bar_browser.open(\'http://nohost/plone\')\n+ self.bar_browser.open("http://nohost/plone")\n \n def test_lockablebehavior(self):\n # Add a lockable item\n self.portal.invokeFactory(\n- \'LockableType\', id=\'lockabletype\', title=\'Lockable Type\')\n- obj = self.portal[\'lockabletype\']\n+ "LockableType", id="lockabletype", title="Lockable Type"\n+ )\n+ obj = self.portal["lockabletype"]\n transaction.commit()\n \n # Edit it with User1\n self.foo_browser.open(obj.absolute_url())\n- self.assertEqual(\n- self.foo_browser.url, \'http://nohost/plone/lockabletype\')\n- self.foo_browser.getLink(\'Edit\').click()\n+ self.assertEqual(self.foo_browser.url, "http://nohost/plone/lockabletype")\n+ self.foo_browser.getLink("Edit").click()\n \n # Is locked for User2\n self.bar_browser.open(obj.absolute_url())\n- self.assertIn(\'This item was locked\', self.bar_browser.contents)\n+ self.assertIn("This item was locked", self.bar_browser.contents)\n \n # Clicking Edit will redirect to view for User2\n- self.bar_browser.getLink(\'Edit\').click()\n+ self.bar_browser.getLink("Edit").click()\n self.assertEqual(\n- self.bar_browser.url, \'http://nohost/plone/lockabletype/@@view\')\n- self.assertIn(\'This item was locked\', self.bar_browser.contents)\n+ self.bar_browser.url, "http://nohost/plone/lockabletype/@@view"\n+ )\n+ self.assertIn("This item was locked", self.bar_browser.contents)\n \n # Unlock it\n- self.foo_browser.getControl(\'Save\').click()\n+ self.foo_browser.getControl("Save").click()\n \n # Is now unlocked for User2\n self.bar_browser.open(obj.absolute_url())\n- self.assertNotIn(\'This item was locked\', self.bar_browser.contents)\n+ self.assertNotIn("This item was locked", self.bar_browser.contents)\n \n # Edit it with User2\n- self.bar_browser.getLink(\'Edit\').click()\n- self.assertIn(\n- \'http://nohost/plone/lockabletype/edit\', self.bar_browser.url)\n- self.assertNotIn(\'This item was locked\', self.bar_browser.contents)\n+ self.bar_browser.getLink("Edit").click()\n+ self.assertIn("http://nohost/plone/lockabletype/edit", self.bar_browser.url)\n+ self.assertNotIn("This item was locked", self.bar_browser.contents)\n \n # Is locked for User1\n self.foo_browser.open(obj.absolute_url())\n- self.assertIn(\'This item was locked\', self.foo_browser.contents)\n+ self.assertIn("This item was locked", self.foo_browser.contents)\n \n # Releasing the lock by closing the window by User1 does not work\n self.bar_browser.open(obj.absolute_url())\n \n # The obj is still locked\n self.foo_browser.open(obj.absolute_url())\n- self.assertIn(\'This item was locked\', self.foo_browser.contents)\n+ self.assertIn("This item was locked", self.foo_browser.contents)\n \n # Instead you need to release it by saving\n- self.bar_browser.getLink(\'Edit\').click()\n- self.bar_browser.getControl(\'Save\').click()\n+ self.bar_browser.getLink("Edit").click()\n+ self.bar_browser.getControl("Save").click()\n \n # Now it is unlocked\n self.foo_browser.open(obj.absolute_url())\n- self.assertNotIn(\'This item was locked\', self.foo_browser.contents)\n+ self.assertNotIn("This item was locked", self.foo_browser.contents)\ndiff --git a/pyproject.toml b/pyproject.toml\nindex 05b615d..e442bd0 100644\n--- a/pyproject.toml\n+++ b/pyproject.toml\n@@ -1,6 +1,9 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n [tool.towncrier]\n-filename = "CHANGES.rst"\n directory = "news/"\n+filename = "CHANGES.rst"\n title_format = "{version} ({project_date})"\n underlines = ["-", ""]\n \n@@ -18,3 +21,137 @@ showcontent = true\n directory = "bugfix"\n name = "Bug fixes:"\n showcontent = true\n+\n+[[tool.towncrier.type]]\n+directory = "internal"\n+name = "Internal:"\n+showcontent = true\n+\n+[[tool.towncrier.type]]\n+directory = "documentation"\n+name = "Documentation:"\n+showcontent = true\n+\n+[[tool.towncrier.type]]\n+directory = "tests"\n+name = "Tests"\n+showcontent = true\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# towncrier_extra_lines = """\n+# extra_configuration\n+# """\n+##\n+\n+[tool.isort]\n+profile = "plone"\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# isort_extra_lines = """\n+# extra_configuration\n+# """\n+##\n+\n+[tool.black]\n+target-version = ["py38"]\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# black_extra_lines = """\n+# extra_configuration\n+# """\n+##\n+\n+[tool.codespell]\n+ignore-words-list = "discreet,"\n+skip = "*.po,"\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# codespell_ignores = "foo,bar"\n+# codespell_skip = "*.po,*.map,package-lock.json"\n+##\n+\n+[tool.dependencychecker]\n+Zope = [\n+ # Zope own provided namespaces\n+ \'App\', \'OFS\', \'Products.Five\', \'Products.OFSP\', \'Products.PageTemplates\',\n+ \'Products.SiteAccess\', \'Shared\', \'Testing\', \'ZPublisher\', \'ZTUtils\',\n+ \'Zope2\', \'webdav\', \'zmi\',\n+ # ExtensionClass own provided namespaces\n+ \'ExtensionClass\', \'ComputedAttribute\', \'MethodObject\',\n+ # Zope dependencies\n+ \'AccessControl\', \'Acquisition\', \'AuthEncoding\', \'beautifulsoup4\', \'BTrees\',\n+ \'cffi\', \'Chameleon\', \'DateTime\', \'DocumentTemplate\',\n+ \'MultiMapping\', \'multipart\', \'PasteDeploy\', \'Persistence\', \'persistent\',\n+ \'pycparser\', \'python-gettext\', \'pytz\', \'RestrictedPython\', \'roman\',\n+ \'soupsieve\', \'transaction\', \'waitress\', \'WebOb\', \'WebTest\', \'WSGIProxy2\',\n+ \'z3c.pt\', \'zc.lockfile\', \'ZConfig\', \'zExceptions\', \'ZODB\', \'zodbpickle\',\n+ \'zope.annotation\', \'zope.browser\', \'zope.browsermenu\', \'zope.browserpage\',\n+ \'zope.browserresource\', \'zope.cachedescriptors\', \'zope.component\',\n+ \'zope.configuration\', \'zope.container\', \'zope.contentprovider\',\n+ \'zope.contenttype\', \'zope.datetime\', \'zope.deferredimport\',\n+ \'zope.deprecation\', \'zope.dottedname\', \'zope.event\', \'zope.exceptions\',\n+ \'zope.filerepresentation\', \'zope.globalrequest\', \'zope.hookable\',\n+ \'zope.i18n\', \'zope.i18nmessageid\', \'zope.interface\', \'zope.lifecycleevent\',\n+ \'zope.location\', \'zope.pagetemplate\', \'zope.processlifetime\', \'zope.proxy\',\n+ \'zope.ptresource\', \'zope.publisher\', \'zope.schema\', \'zope.security\',\n+ \'zope.sequencesort\', \'zope.site\', \'zope.size\', \'zope.structuredtext\',\n+ \'zope.tal\', \'zope.tales\', \'zope.testbrowser\', \'zope.testing\',\n+ \'zope.traversing\', \'zope.viewlet\'\n+]\n+\'Products.CMFCore\' = [\n+ \'docutils\', \'five.localsitemanager\', \'Missing\', \'Products.BTreeFolder2\',\n+ \'Products.GenericSetup\', \'Products.MailHost\', \'Products.PythonScripts\',\n+ \'Products.StandardCacheManagers\', \'Products.ZCatalog\', \'Record\',\n+ \'zope.sendmail\', \'Zope\'\n+]\n+\'plone.base\' = [\n+ \'plone.batching\', \'plone.registry\', \'plone.schema\',\'plone.z3cform\',\n+ \'Products.CMFCore\', \'Products.CMFDynamicViewFTI\',\n+]\n+python-dateutil = [\'dateutil\']\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# dependencies_ignores = "[\'zestreleaser.towncrier\']"\n+# dependencies_mappings = [\n+# "gitpython = [\'git\']",\n+# "pygithub = [\'github\']",\n+# ]\n+# """\n+##\n+\n+[tool.check-manifest]\n+ignore = [\n+ ".editorconfig",\n+ ".meta.toml",\n+ ".pre-commit-config.yaml",\n+ "tox.ini",\n+ ".flake8",\n+ "mx.ini",\n+\n+]\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# check_manifest_ignores = """\n+# "*.map.js",\n+# "*.pyc",\n+# """\n+##\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/setup.cfg b/setup.cfg\ndeleted file mode 100644\nindex 3e97765..0000000\n--- a/setup.cfg\n+++ /dev/null\n@@ -1,9 +0,0 @@\n-[check-manifest]\n-ignore =\n- bootstrap.py\n- *.cfg\n-\n-\n-\n-[bdist_wheel]\n-universal = 1\ndiff --git a/setup.py b/setup.py\nindex ba5eabd..66e5cb6 100644\n--- a/setup.py\n+++ b/setup.py\n@@ -1,55 +1,58 @@\n-# -*- coding: utf-8 -*-\n-from setuptools import setup, find_packages\n+from pathlib import Path\n+from setuptools import find_packages\n+from setuptools import setup\n+\n+\n+version = "2.0.0.dev0"\n+\n+long_description = (\n+ f"{Path(\'README.rst\').read_text()}\\n{Path(\'CHANGES.rst\').read_text()}"\n+)\n \n-version = \'1.0.8.dev0\'\n tests_require = [\n- \'plone.app.testing\',\n- ]\n+ "plone.app.testing",\n+ "plone.testing",\n+]\n \n setup(\n- name=\'plone.app.lockingbehavior\',\n+ name="plone.app.lockingbehavior",\n version=version,\n description="Locking integration for dexterity content objects.",\n- long_description=(open("README.rst").read() + "\\n" +\n- open("CHANGES.rst").read()),\n-\n+ long_description=long_description,\n+ long_description_content_type="text/x-rst",\n # Get more strings from\n # https://pypi.org/classifiers/\n classifiers=[\n "Development Status :: 5 - Production/Stable",\n "Framework :: Plone",\n- "Framework :: Plone :: 4.3",\n- "Framework :: Plone :: 5.0",\n- "Framework :: Plone :: 5.1",\n- "Framework :: Plone :: 5.2",\n+ "Framework :: Plone :: 6.0",\n "Framework :: Plone :: Core",\n "Framework :: Zope2",\n "Framework :: Zope :: 4",\n "License :: OSI Approved :: GNU General Public License v2 (GPLv2)",\n "Programming Language :: Python",\n- "Programming Language :: Python :: 2.6",\n- "Programming Language :: Python :: 2.7",\n- "Programming Language :: Python :: 3.6",\n- "Programming Language :: Python :: 3.7",\n "Programming Language :: Python :: 3.8",\n+ "Programming Language :: Python :: 3.9",\n+ "Programming Language :: Python :: 3.10",\n+ "Programming Language :: Python :: 3.11",\n "Topic :: Software Development :: Libraries :: Python Modules",\n- ],\n- keywords=\'dexterity locking behavior plone\',\n- author=\'Plone Foundation\',\n- author_email=\'mailto:dexterity-development@googlegroups.com\',\n- url=\'https://github.com/plone/plone.app.lockingbehavior/\',\n- license=\'GPL version 2\',\n+ ],\n+ keywords="dexterity locking behavior plone",\n+ author="Plone Foundation",\n+ author_email="mailto:dexterity-development@googlegroups.com",\n+ url="https://github.com/plone/plone.app.lockingbehavior/",\n+ license="GPL version 2",\n packages=find_packages(),\n- namespace_packages=[\'plone\', \'plone.app\'],\n+ namespace_packages=["plone", "plone.app"],\n include_package_data=True,\n zip_safe=False,\n+ python_requires=">=3.8",\n install_requires=[\n- \'setuptools\',\n- \'plone.app.locales >= 4.3.9\',\n- \'plone.behavior\',\n- \'plone.dexterity>=1.1\',\n- \'plone.locking\',\n- ],\n+ "setuptools",\n+ "plone.behavior",\n+ "plone.dexterity>=1.1",\n+ "plone.locking",\n+ ],\n tests_require=tests_require,\n extras_require=dict(tests=tests_require),\n entry_points="""\n@@ -57,4 +60,4 @@\n [z3c.autoinclude.plugin]\n target = plone\n """,\n- )\n+)\ndiff --git a/test-plone-4.1.x-dexterity-1.x.cfg b/test-plone-4.1.x-dexterity-1.x.cfg\ndeleted file mode 100644\nindex cdba5fe..0000000\n--- a/test-plone-4.1.x-dexterity-1.x.cfg\n+++ /dev/null\n@@ -1,13 +0,0 @@\n-[buildout]\n-extends =\n- test-plone-4.1.x-dexterity-2.x.cfg\n- http://good-py.appspot.com/release/dexterity/1.0-next\n-\n-\n-[sources]\n-plone.dexterity = git https://github.com/plone/plone.dexterity.git branch=1.x\n-\n-\n-[versions]\n-# collective.xmltestreport 1.2.3 is not working\n-collective.xmltestreport = 1.2\ndiff --git a/test-plone-4.1.x-dexterity-2.x.cfg b/test-plone-4.1.x-dexterity-2.x.cfg\ndeleted file mode 100644\nindex 10601a6..0000000\n--- a/test-plone-4.1.x-dexterity-2.x.cfg\n+++ /dev/null\n@@ -1,53 +0,0 @@\n-[buildout]\n-extends =\n- http://dist.plone.org/release/4.1-latest/versions.cfg\n- http://good-py.appspot.com/release/dexterity/2.0-next\n-find-links =\n- http://dist.plone.org/thirdparty/\n-extensions =\n- mr.developer\n-auto-checkout = *\n-\n-develop = .\n-eggs =\n-unzip = true\n-versions = versions\n-\n-parts =\n- zc-recipe-egg\n- test\n-\n-package-name = plone.app.lockingbehavior\n-\n-\n-# We include this here because collective.xmltestreport depends on zc.recipe.egg,\n-# but doesn\'t list it in its setup.py\n-# See http://plone.293351.n2.nabble.com/collective-xmltestreport-small-bug-td5185485.html\n-[zc-recipe-egg]\n-recipe = zc.recipe.egg\n-eggs =\n-\n-# create xml reports for Jenkins\n-[test]\n-recipe = collective.xmltestreport\n-eggs =\n- Plone\n- ${buildout:package-name} [tests]\n-\n-# Install plone.namedfile since Products.TinyMCE imports from it but does not declare a dependency.\n-# http://groups.google.com/group/dexterity-development/browse_thread/thread/d9be96e05dd0a516\n- plone.namedfile\n-\n-defaults = [\'-s\', \'${buildout:package-name}\', \'--xml\', \'--exit-with-status\', \'--auto-color\', \'--auto-progress\']\n-\n-[sources]\n-plone.dexterity = git git://github.com/plone/plone.dexterity.git\n-\n-[versions]\n-# collective.xmltestreport 1.2.3 is not working\n-collective.xmltestreport = 1.2\n-plone.app.lockingbehavior =\n-\n-# Pin Products.TinyMCE to newer version as pinned in plone 4.1-lastest. See:\n-# http://groups.google.com/group/dexterity-development/browse_thread/thread/d9be96e05dd0a516\n-Products.TinyMCE = 1.2.12\n\\ No newline at end of file\ndiff --git a/tox.ini b/tox.ini\nnew file mode 100644\nindex 0000000..bc72538\n--- /dev/null\n+++ b/tox.ini\n@@ -0,0 +1,191 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+[tox]\n+# We need 4.4.0 for constrain_package_deps.\n+min_version = 4.4.0\n+envlist =\n+ lint\n+ test\n+ dependencies\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [tox]\n+# envlist_lines = """\n+# my_other_environment\n+# """\n+# config_lines = """\n+# my_extra_top_level_tox_configuration_lines\n+# """\n+##\n+\n+[testenv]\n+skip_install = true\n+allowlist_externals =\n+ echo\n+ false\n+# Make sure typos like `tox -e formaat` are caught instead of silently doing nothing.\n+# See https://github.com/tox-dev/tox/issues/2858.\n+commands =\n+ echo "Unrecognized environment name {envname}"\n+ false\n+\n+[testenv:format]\n+description = automatically reformat code\n+skip_install = true\n+deps =\n+ pre-commit\n+commands =\n+ pre-commit run -a pyupgrade\n+ pre-commit run -a isort\n+ pre-commit run -a black\n+ pre-commit run -a zpretty\n+\n+[testenv:lint]\n+description = run linters that will help improve the code style\n+skip_install = true\n+deps =\n+ pre-commit\n+commands =\n+ pre-commit run -a\n+\n+[testenv:dependencies]\n+description = check if the package defines all its dependencies\n+skip_install = true\n+deps =\n+ build\n+ z3c.dependencychecker==2.11\n+commands =\n+ python -m build --sdist --no-isolation\n+ dependencychecker\n+\n+[testenv:dependencies-graph]\n+description = generate a graph out of the dependencies of the package\n+skip_install = false\n+allowlist_externals =\n+ sh\n+deps =\n+ pipdeptree==2.5.1\n+ graphviz # optional dependency of pipdeptree\n+commands =\n+ sh -c \'pipdeptree --exclude setuptools,wheel,pipdeptree,zope.interface,zope.component --graph-output svg > dependencies.svg\'\n+\n+[testenv:test]\n+description = run the distribution tests\n+use_develop = true\n+skip_install = false\n+constrain_package_deps = true\n+set_env =\n+ ROBOT_BROWSER=headlesschrome\n+\n+##\n+# Specify extra test environment variables in .meta.toml:\n+# [tox]\n+# test_environment_variables = """\n+# PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/\n+# """\n+##\n+deps =\n+ zope.testrunner\n+ -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+##\n+# Specify a custom constraints file in .meta.toml:\n+# [tox]\n+# constraints_file = "https://my-server.com/constraints.txt"\n+##\n+commands =\n+ zope-testrunner --all --test-path={toxinidir} -s plone.app.lockingbehavior {posargs}\n+extras =\n+ test\n+ tests\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [tox]\n+# test_extras = """\n+# tests\n+# widgets\n+# """\n+##\n+\n+[testenv:coverage]\n+description = get a test coverage report\n+use_develop = true\n+skip_install = false\n+constrain_package_deps = true\n+set_env =\n+ ROBOT_BROWSER=headlesschrome\n+\n+##\n+# Specify extra test environment variables in .meta.toml:\n+# [tox]\n+# test_environment_variables = """\n+# PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/\n+# """\n+##\n+deps =\n+ coverage\n+ zope.testrunner\n+ -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+commands =\n+ coverage run --branch --source plone.app.lockingbehavior {envbindir}/zope-testrunner --quiet --all --test-path={toxinidir} -s plone.app.lockingbehavior {posargs}\n+ coverage report -m --format markdown\n+ coverage xml\n+extras =\n+ test\n+ tests\n+\n+\n+[testenv:release-check]\n+description = ensure that the distribution is ready to release\n+skip_install = true\n+deps =\n+ twine\n+ build\n+ towncrier\n+ -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+commands =\n+ # fake version to not have to install the package\n+ # we build the change log as news entries might break\n+ # the README that is displayed on PyPI\n+ towncrier build --version=100.0.0 --yes\n+ python -m build --sdist --no-isolation\n+ twine check dist/*\n+\n+[testenv:circular]\n+description = ensure there are no cyclic dependencies\n+use_develop = true\n+skip_install = false\n+set_env =\n+\n+##\n+# Specify extra test environment variables in .meta.toml:\n+# [tox]\n+# test_environment_variables = """\n+# PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/\n+# """\n+##\n+allowlist_externals =\n+ sh\n+deps =\n+ pipdeptree\n+ pipforester\n+ -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+commands =\n+ # Generate the full dependency tree\n+ sh -c \'pipdeptree -j > forest.json\'\n+ # Generate a DOT graph with the circular dependencies, if any\n+ pipforester -i forest.json -o forest.dot --cycles\n+ # Report if there are any circular dependencies, i.e. error if there are any\n+ pipforester -i forest.json --check-cycles -o /dev/null\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [tox]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n' +b'diff --git a/.editorconfig b/.editorconfig\nindex b4158b8..919b411 100644\n--- a/.editorconfig\n+++ b/.editorconfig\n@@ -1,5 +1,6 @@\n # Generated from:\n # https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n #\n # EditorConfig Configuration file, for more details see:\n # http://EditorConfig.org\n@@ -32,8 +33,21 @@ indent_size = 4\n # 2 space indentation\n indent_size = 2\n \n+[*.{json,jsonl,js,jsx,ts,tsx,css,less,scss,html}] # Frontend development\n+# 2 space indentation\n+indent_size = 2\n+\n [{Makefile,.gitmodules}]\n # Tab indentation (no size specified, but view as 4 spaces)\n indent_style = tab\n indent_size = unset\n tab_width = unset\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [editorconfig]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/setup.cfg b/.flake8\nsimilarity index 62%\nrename from setup.cfg\nrename to .flake8\nindex 0da8f8f..7ef4f64 100644\n--- a/setup.cfg\n+++ b/.flake8\n@@ -1,8 +1,6 @@\n # Generated from:\n # https://github.com/plone/meta/tree/master/config/default\n-[bdist_wheel]\n-universal = 0\n-\n+# See the inline comments on how to expand/tweak this configuration file\n [flake8]\n doctests = 1\n ignore =\n@@ -15,9 +13,10 @@ ignore =\n # black takes care of spaces after commas\n E231,\n \n-[check-manifest]\n-ignore =\n- .editorconfig\n- .meta.toml\n- .pre-commit-config.yaml\n- tox.ini\n+##\n+# Add extra configuration options in .meta.toml:\n+# [flake8]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/.github/workflows/meta.yml b/.github/workflows/meta.yml\nnew file mode 100644\nindex 0000000..a7f25e0\n--- /dev/null\n+++ b/.github/workflows/meta.yml\n@@ -0,0 +1,28 @@\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+name: Meta\n+on:\n+ push:\n+ branches:\n+ - master\n+ - main\n+ pull_request:\n+ branches:\n+ - master\n+ - main\n+ workflow_dispatch:\n+\n+jobs:\n+ qa:\n+ uses: plone/meta/.github/workflows/qa.yml@main\n+ test:\n+ uses: plone/meta/.github/workflows/test.yml@main\n+ coverage:\n+ uses: plone/meta/.github/workflows/coverage.yml@main\n+ dependencies:\n+ uses: plone/meta/.github/workflows/dependencies.yml@main\n+ release-ready:\n+ uses: plone/meta/.github/workflows/release_ready.yml@main\n+ circular:\n+ uses: plone/meta/.github/workflows/circular.yml@main\ndiff --git a/.gitignore b/.gitignore\nindex 7709f60..81594fd 100644\n--- a/.gitignore\n+++ b/.gitignore\n@@ -1,10 +1,51 @@\n-*.pyc\n-.DS_Store\n+# Generated from:\n+# https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n+# python related\n *.egg-info\n-.installed.cfg\n-.mr.developer.cfg\n+*.pyc\n+*.pyo\n+\n+# tools related\n+build/\n+.coverage\n+coverage.xml\n+dist/\n+docs/_build\n+__pycache__/\n+.tox\n+.vscode/\n+node_modules/\n+\n+# venv / buildout related\n bin/\n develop-eggs/\n-extras/\n+eggs/\n+.eggs/\n+etc/\n+.installed.cfg\n+include/\n+lib/\n+lib64\n+.mr.developer.cfg\n parts/\n+pyvenv.cfg\n var/\n+\n+# mxdev\n+/instance/\n+/.make-sentinels/\n+/*-mxdev.txt\n+/reports/\n+/sources/\n+/venv/\n+.installed.txt\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [gitignore]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/.meta.toml b/.meta.toml\nindex 99342b2..4ca2970 100644\n--- a/.meta.toml\n+++ b/.meta.toml\n@@ -1,5 +1,6 @@\n # Generated from:\n # https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n [meta]\n template = "default"\n-commit-id = "2a4ba395"\n+commit-id = "cfffba8c"\ndiff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml\nindex 14c1f9c..235e4ad 100644\n--- a/.pre-commit-config.yaml\n+++ b/.pre-commit-config.yaml\n@@ -1,5 +1,6 @@\n # Generated from:\n # https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n ci:\n autofix_prs: false\n autoupdate_schedule: monthly\n@@ -22,16 +23,40 @@ repos:\n rev: 3.1.0\n hooks:\n - id: zpretty\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# zpretty_extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n - repo: https://github.com/PyCQA/flake8\n rev: 6.1.0\n hooks:\n - id: flake8\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# flake8_extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n - repo: https://github.com/codespell-project/codespell\n rev: v2.2.6\n hooks:\n - id: codespell\n additional_dependencies:\n - tomli\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# codespell_extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n - repo: https://github.com/mgedmin/check-manifest\n rev: "0.49"\n hooks:\n@@ -40,3 +65,20 @@ repos:\n rev: "4.2"\n hooks:\n - id: pyroma\n+- repo: https://github.com/mgedmin/check-python-versions\n+ rev: "0.21.2"\n+ hooks:\n+ - id: check-python-versions\n+ args: [\'--only\', \'setup.py,pyproject.toml\']\n+- repo: https://github.com/collective/i18ndude\n+ rev: "6.0.0"\n+ hooks:\n+ - id: i18ndude\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pre_commit]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/news/cfffba8c.internal b/news/cfffba8c.internal\nnew file mode 100644\nindex 0000000..c08f539\n--- /dev/null\n+++ b/news/cfffba8c.internal\n@@ -0,0 +1,2 @@\n+Update configuration files.\n+[plone devs]\ndiff --git a/plone/resourceeditor/preview.pt b/plone/resourceeditor/preview.pt\nindex e522369..f70e370 100644\n--- a/plone/resourceeditor/preview.pt\n+++ b/plone/resourceeditor/preview.pt\n@@ -19,12 +19,16 @@\n

\n Date Modified:\n \n- n/a\n+ n/a\n
\n Size:\n \n- n/a\n+ n/a\n

\n \ndiff --git a/pyproject.toml b/pyproject.toml\nindex 860fd37..e442bd0 100644\n--- a/pyproject.toml\n+++ b/pyproject.toml\n@@ -1,8 +1,9 @@\n # Generated from:\n # https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n [tool.towncrier]\n-filename = "CHANGES.rst"\n directory = "news/"\n+filename = "CHANGES.rst"\n title_format = "{version} ({project_date})"\n underlines = ["-", ""]\n \n@@ -36,14 +37,45 @@ directory = "tests"\n name = "Tests"\n showcontent = true\n \n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# towncrier_extra_lines = """\n+# extra_configuration\n+# """\n+##\n+\n [tool.isort]\n profile = "plone"\n \n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# isort_extra_lines = """\n+# extra_configuration\n+# """\n+##\n+\n [tool.black]\n target-version = ["py38"]\n \n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# black_extra_lines = """\n+# extra_configuration\n+# """\n+##\n+\n [tool.codespell]\n-ignore-words-list = "discreet"\n+ignore-words-list = "discreet,"\n+skip = "*.po,"\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# codespell_ignores = "foo,bar"\n+# codespell_skip = "*.po,*.map,package-lock.json"\n+##\n \n [tool.dependencychecker]\n Zope = [\n@@ -84,3 +116,42 @@ Zope = [\n \'Products.CMFCore\', \'Products.CMFDynamicViewFTI\',\n ]\n python-dateutil = [\'dateutil\']\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# dependencies_ignores = "[\'zestreleaser.towncrier\']"\n+# dependencies_mappings = [\n+# "gitpython = [\'git\']",\n+# "pygithub = [\'github\']",\n+# ]\n+# """\n+##\n+\n+[tool.check-manifest]\n+ignore = [\n+ ".editorconfig",\n+ ".meta.toml",\n+ ".pre-commit-config.yaml",\n+ "tox.ini",\n+ ".flake8",\n+ "mx.ini",\n+\n+]\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# check_manifest_ignores = """\n+# "*.map.js",\n+# "*.pyc",\n+# """\n+##\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [pyproject]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\ndiff --git a/setup.py b/setup.py\nindex f05530b..f15ed05 100644\n--- a/setup.py\n+++ b/setup.py\n@@ -1,14 +1,22 @@\n+from pathlib import Path\n from setuptools import find_packages\n from setuptools import setup\n \n \n version = "4.0.1.dev0"\n \n+long_description = (\n+ f"{Path(\'README.rst\').read_text()}\\n{Path(\'CHANGES.rst\').read_text()}"\n+)\n+\n setup(\n name="plone.resourceeditor",\n version=version,\n description="Integrates ACE editor into Plone",\n- long_description=(open("README.rst").read() + "\\n" + open("CHANGES.rst").read()),\n+ long_description=long_description,\n+ long_description_content_type="text/x-rst",\n+ # Get more strings from\n+ # https://pypi.org/classifiers/\n classifiers=[\n "Development Status :: 5 - Production/Stable",\n "Framework :: Plone",\ndiff --git a/tox.ini b/tox.ini\nindex fd8c81d..e0ba481 100644\n--- a/tox.ini\n+++ b/tox.ini\n@@ -1,16 +1,36 @@\n # Generated from:\n # https://github.com/plone/meta/tree/master/config/default\n+# See the inline comments on how to expand/tweak this configuration file\n [tox]\n # We need 4.4.0 for constrain_package_deps.\n min_version = 4.4.0\n envlist =\n- format\n lint\n test\n+ dependencies\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [tox]\n+# envlist_lines = """\n+# my_other_environment\n+# """\n+# config_lines = """\n+# my_extra_top_level_tox_configuration_lines\n+# """\n+##\n \n [testenv]\n+skip_install = true\n allowlist_externals =\n- sh\n+ echo\n+ false\n+# Make sure typos like `tox -e formaat` are caught instead of silently doing nothing.\n+# See https://github.com/tox-dev/tox/issues/2858.\n+commands =\n+ echo "Unrecognized environment name {envname}"\n+ false\n \n [testenv:format]\n description = automatically reformat code\n@@ -42,7 +62,10 @@ commands =\n dependencychecker\n \n [testenv:dependencies-graph]\n-description = generate a graph out of the package\'s dependencies\n+description = generate a graph out of the dependencies of the package\n+skip_install = false\n+allowlist_externals =\n+ sh\n deps =\n pipdeptree==2.5.1\n graphviz # optional dependency of pipdeptree\n@@ -50,27 +73,117 @@ commands =\n sh -c \'pipdeptree --exclude setuptools,wheel,pipdeptree,zope.interface,zope.component --graph-output svg > dependencies.svg\'\n \n [testenv:test]\n+description = run the distribution tests\n use_develop = true\n+skip_install = false\n constrain_package_deps = true\n-set_env = ROBOT_BROWSER=headlesschrome\n+set_env =\n+ ROBOT_BROWSER=headlesschrome\n+\n+##\n+# Specify extra test environment variables in .meta.toml:\n+# [tox]\n+# test_environment_variables = """\n+# PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/\n+# """\n+##\n deps =\n zope.testrunner\n -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+##\n+# Specify a custom constraints file in .meta.toml:\n+# [tox]\n+# constraints_file = "https://my-server.com/constraints.txt"\n+##\n commands =\n zope-testrunner --all --test-path={toxinidir} -s plone.resourceeditor {posargs}\n extras =\n test\n \n+##\n+# Add extra configuration options in .meta.toml:\n+# [tox]\n+# test_extras = """\n+# tests\n+# widgets\n+# """\n+##\n+\n [testenv:coverage]\n+description = get a test coverage report\n use_develop = true\n+skip_install = false\n constrain_package_deps = true\n-set_env = ROBOT_BROWSER=headlesschrome\n+set_env =\n+ ROBOT_BROWSER=headlesschrome\n+\n+##\n+# Specify extra test environment variables in .meta.toml:\n+# [tox]\n+# test_environment_variables = """\n+# PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/\n+# """\n+##\n deps =\n coverage\n zope.testrunner\n -c https://dist.plone.org/release/6.0-dev/constraints.txt\n commands =\n- coverage run {envbindir}/zope-testrunner --all --test-path={toxinidir} -s plone.resourceeditor {posargs}\n+ coverage run --branch --source plone.resourceeditor {envbindir}/zope-testrunner --quiet --all --test-path={toxinidir} -s plone.resourceeditor {posargs}\n coverage report -m --format markdown\n+ coverage xml\n extras =\n test\n+\n+\n+[testenv:release-check]\n+description = ensure that the distribution is ready to release\n+skip_install = true\n+deps =\n+ twine\n+ build\n+ towncrier\n+ -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+commands =\n+ # fake version to not have to install the package\n+ # we build the change log as news entries might break\n+ # the README that is displayed on PyPI\n+ towncrier build --version=100.0.0 --yes\n+ python -m build --sdist --no-isolation\n+ twine check dist/*\n+\n+[testenv:circular]\n+description = ensure there are no cyclic dependencies\n+use_develop = true\n+skip_install = false\n+set_env =\n+\n+##\n+# Specify extra test environment variables in .meta.toml:\n+# [tox]\n+# test_environment_variables = """\n+# PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/\n+# """\n+##\n+allowlist_externals =\n+ sh\n+deps =\n+ pipdeptree\n+ pipforester\n+ -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+commands =\n+ # Generate the full dependency tree\n+ sh -c \'pipdeptree -j > forest.json\'\n+ # Generate a DOT graph with the circular dependencies, if any\n+ pipforester -i forest.json -o forest.dot --cycles\n+ # Report if there are any circular dependencies, i.e. error if there are any\n+ pipforester -i forest.json --check-cycles -o /dev/null\n+\n+\n+##\n+# Add extra configuration options in .meta.toml:\n+# [tox]\n+# extra_lines = """\n+# _your own configuration lines_\n+# """\n+##\n'