From 05fd92d1ccfe77bb88c19cf3b58e3156e37ec5ff Mon Sep 17 00:00:00 2001 From: davisagli Date: Fri, 24 Jan 2025 12:57:39 -0800 Subject: [PATCH] [fc] Repository: plone.restapi Branch: refs/heads/main Date: 2025-01-24T12:57:39-08:00 Author: Maurits van Rees (mauritsvanrees) Commit: https://github.com/plone/plone.restapi/commit/d54f9747ff2be681909aaee11f776381863dd7d2 Prevent deprecation warnings. (#1863) Files changed: A news/4090.bugfix M src/plone/restapi/bbb.py M src/plone/restapi/configure.zcml M src/plone/restapi/profiles/performance/registry.xml M src/plone/restapi/search/handler.py M src/plone/restapi/serializer/dxcontent.py M src/plone/restapi/services/addons/configure.zcml M src/plone/restapi/services/aliases/configure.zcml M src/plone/restapi/services/auth/configure.zcml M src/plone/restapi/services/content/configure.zcml M src/plone/restapi/services/content/utils.py M src/plone/restapi/services/contextnavigation/get.py M src/plone/restapi/services/controlpanels/configure.zcml M src/plone/restapi/services/database/configure.zcml M src/plone/restapi/services/linkintegrity/configure.zcml M src/plone/restapi/services/locking/configure.zcml M src/plone/restapi/services/navigation/get.py M src/plone/restapi/services/querysources/configure.zcml M src/plone/restapi/services/querystring/configure.zcml M src/plone/restapi/services/querystringsearch/configure.zcml M src/plone/restapi/services/relations/configure.zcml M src/plone/restapi/services/roles/configure.zcml M src/plone/restapi/services/site/configure.zcml M src/plone/restapi/services/site/get.py M src/plone/restapi/services/system/configure.zcml M src/plone/restapi/services/transactions/configure.zcml M src/plone/restapi/services/types/configure.zcml M src/plone/restapi/services/types/get.py M src/plone/restapi/services/upgrade/configure.zcml M src/plone/restapi/services/vocabularies/configure.zcml M src/plone/restapi/services/workflow/configure.zcml M src/plone/restapi/tests/test_auth.py M src/plone/restapi/tests/test_documentation.py M src/plone/restapi/tests/test_search.py M src/plone/restapi/tests/test_services_contextnavigation.py M src/plone/restapi/tests/test_services_navroot.py M src/plone/restapi/upgrades/configure.zcml --- last_commit.txt | 206 ++++++++++-------------------------------------- 1 file changed, 42 insertions(+), 164 deletions(-) diff --git a/last_commit.txt b/last_commit.txt index 2e0bd3c42c..d23107abf3 100644 --- a/last_commit.txt +++ b/last_commit.txt @@ -1,173 +1,51 @@ -Repository: plone.rest +Repository: plone.restapi Branch: refs/heads/main -Date: 2025-01-20T22:48:51+01:00 +Date: 2025-01-24T12:57:39-08:00 Author: Maurits van Rees (mauritsvanrees) -Commit: https://github.com/plone/plone.rest/commit/4b8e567efc7751cdb5d41474fddb86476067228f +Commit: https://github.com/plone/plone.restapi/commit/d54f9747ff2be681909aaee11f776381863dd7d2 -Fix DeprecationWarnings. +Prevent deprecation warnings. (#1863) Files changed: A news/4090.bugfix -A src/plone/rest/bbb.py -M .meta.toml -M README.rst -M pyproject.toml -M setup.py -M src/plone/rest/testing.py -M src/plone/rest/testing.zcml -M src/plone/rest/tests/test_traversal.py - -b'diff --git a/.meta.toml b/.meta.toml\nindex 2ca393b..d870133 100644\n--- a/.meta.toml\n+++ b/.meta.toml\n@@ -14,4 +14,4 @@ jobs = [\n ]\n \n [pyproject]\n-dependencies_ignores = "[\'plone.app.redirector\']"\n+dependencies_ignores = "[\'plone.app.layout\', \'plone.app.redirector\', \'plone.base\', \'Products.CMFPlone\']"\ndiff --git a/README.rst b/README.rst\nindex f6923eb..3a2cf0f 100644\n--- a/README.rst\n+++ b/README.rst\n@@ -180,7 +180,7 @@ Named services can be registered by providing a \'name\' attribute in the service\n \n \n \n \n \n \n \n \n \n \n \n \ndiff --git a/src/plone/rest/tests/test_traversal.py b/src/plone/rest/tests/test_traversal.py\nindex 43ee632..a8d10f2 100644\n--- a/src/plone/rest/tests/test_traversal.py\n+++ b/src/plone/rest/tests/test_traversal.py\n@@ -1,9 +1,9 @@\n from base64 import b64encode\n-from plone.app.layout.navigation.interfaces import INavigationRoot\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_ID\n+from plone.rest.bbb import INavigationRoot\n from plone.rest.service import Service\n from plone.rest.testing import PLONE_REST_INTEGRATION_TESTING\n from Products.SiteAccess.VirtualHostMonster import VirtualHostMonster\n' - -Repository: plone.rest - - -Branch: refs/heads/main -Date: 2025-01-20T22:51:51+01:00 -Author: Maurits van Rees (mauritsvanrees) -Commit: https://github.com/plone/plone.rest/commit/0b2786d8b65fcc53cec492846c9b487ee4250938 - -Test on Plone 6.0.13. - -6.0.9 is too old, giving various errors. See https://github.com/plone/plone.rest/actions/runs/12875351288?pr=184 - -And 6.0.14 may be too new, because it officially drops support for Python 3.8. - -Files changed: -M plone-6.0.x.cfg -M requirements-6.0.txt - -b'diff --git a/plone-6.0.x.cfg b/plone-6.0.x.cfg\nindex 3564243..8a4ca92 100644\n--- a/plone-6.0.x.cfg\n+++ b/plone-6.0.x.cfg\n@@ -1,4 +1,4 @@\n [buildout]\n extends =\n- https://dist.plone.org/release/6.0.9/versions.cfg\n+ https://dist.plone.org/release/6.0.13/versions.cfg\n base.cfg\ndiff --git a/requirements-6.0.txt b/requirements-6.0.txt\nindex 12977a8..2e4627d 100644\n--- a/requirements-6.0.txt\n+++ b/requirements-6.0.txt\n@@ -1 +1 @@\n--r https://dist.plone.org/release/6.0.9/requirements.txt\n+-r https://dist.plone.org/release/6.0.13/requirements.txt\n' - -Repository: plone.rest - - -Branch: refs/heads/main -Date: 2025-01-20T23:10:53+01:00 -Author: Maurits van Rees (mauritsvanrees) -Commit: https://github.com/plone/plone.rest/commit/7a95d54d2127cb281a7159f0896424641650a029 - -Test Python 3.8 with Plone 6.0.13, newer Pythons on 6.0.14. - -Otherwise on 3.12 you get a too old Pillow and on 3.9-3.11 a too old docutils. - -Files changed: -M plone-6.0.x.cfg -M requirements-6.0.txt - -b'diff --git a/plone-6.0.x.cfg b/plone-6.0.x.cfg\nindex 8a4ca92..10faaa8 100644\n--- a/plone-6.0.x.cfg\n+++ b/plone-6.0.x.cfg\n@@ -1,4 +1,8 @@\n [buildout]\n extends =\n- https://dist.plone.org/release/6.0.13/versions.cfg\n+ https://dist.plone.org/release/6.0.14/versions.cfg\n base.cfg\n+\n+[buildout:python38]\n+extends =\n+ https://dist.plone.org/release/6.0.13/versions.cfg\ndiff --git a/requirements-6.0.txt b/requirements-6.0.txt\nindex 2e4627d..d75ea5c 100644\n--- a/requirements-6.0.txt\n+++ b/requirements-6.0.txt\n@@ -1 +1 @@\n--r https://dist.plone.org/release/6.0.13/requirements.txt\n+-r https://dist.plone.org/release/6.0.14/requirements.txt\n' - -Repository: plone.rest - - -Branch: refs/heads/main -Date: 2025-01-20T23:25:08+01:00 -Author: Maurits van Rees (mauritsvanrees) -Commit: https://github.com/plone/plone.rest/commit/62e7fea91dc94dc7f1c845b95d86df3a919c189a - -Do not test Plone 6.0 on Python 3.8. Do start testing 6.1. - -Python 3.8 is not supported since Plone 6.0.14. - -And it is too hard to use 6.0.13 on 3.8 and 6.0.14 on 3.9+: we would need a different requirements file for 3.8, otherwise pip fails with: - -``` -No matching distribution found for setuptools==75.6.0 -``` - -Files changed: -A plone-6.1.x.cfg -A requirements-6.1.txt -M .github/workflows/tests.yml -M plone-6.0.x.cfg - -b'diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml\nindex 8622555..5cebf31 100644\n--- a/.github/workflows/tests.yml\n+++ b/.github/workflows/tests.yml\n@@ -6,17 +6,25 @@ jobs:\n strategy:\n fail-fast: false\n matrix:\n- python-version: ["3.12", "3.11", "3.10", "3.9", "3.8"]\n- plone-version: ["6.0", "5.2"]\n+ python-version: ["3.13", "3.12", "3.11", "3.10", "3.9", "3.8"]\n+ plone-version: ["6.1", "6.0", "5.2"]\n exclude:\n+ - python-version: 3.13\n+ plone-version: 5.2\n - python-version: 3.12\n plone-version: 5.2\n - python-version: 3.11\n plone-version: 5.2\n - python-version: 3.10\n plone-version: 5.2\n+ - python-version: 3.9\n+ plone-version: 6.1\n - python-version: 3.9\n plone-version: 5.2\n+ - python-version: 3.8\n+ plone-version: 6.1\n+ - python-version: 3.8\n+ plone-version: 6.0\n steps:\n # git checkout\n - uses: actions/checkout@v2\ndiff --git a/plone-6.0.x.cfg b/plone-6.0.x.cfg\nindex 10faaa8..e35457e 100644\n--- a/plone-6.0.x.cfg\n+++ b/plone-6.0.x.cfg\n@@ -2,7 +2,3 @@\n extends =\n https://dist.plone.org/release/6.0.14/versions.cfg\n base.cfg\n-\n-[buildout:python38]\n-extends =\n- https://dist.plone.org/release/6.0.13/versions.cfg\ndiff --git a/plone-6.1.x.cfg b/plone-6.1.x.cfg\nnew file mode 100644\nindex 0000000..a37de09\n--- /dev/null\n+++ b/plone-6.1.x.cfg\n@@ -0,0 +1,4 @@\n+[buildout]\n+extends =\n+ https://dist.plone.org/release/6.1.0b1/versions.cfg\n+ base.cfg\ndiff --git a/requirements-6.1.txt b/requirements-6.1.txt\nnew file mode 100644\nindex 0000000..d088e28\n--- /dev/null\n+++ b/requirements-6.1.txt\n@@ -0,0 +1 @@\n+-r https://dist.plone.org/release/6.1.0b1/requirements.txt\n' - -Repository: plone.rest - - -Branch: refs/heads/main -Date: 2025-01-24T11:07:06-08:00 -Author: David Glick (davisagli) -Commit: https://github.com/plone/plone.rest/commit/bafb5a20130bbfbadad20b84061e9841bfe27a55 - -Drop support for Plone 5.2 - -Files changed: -A news/4090.breaking -M .github/workflows/tests.yml -M Makefile -M README.rst -M news/178.internal -M plone-6.1.x.cfg -M requirements-6.1.txt -M requirements.txt -M setup.py -M src/plone/rest/patches.py -M src/plone/rest/patches.zcml -M src/plone/rest/testing.zcml -M src/plone/rest/tests/test_traversal.py -M tox.ini -D plone-5.2.x.cfg -D requirements-5.2.txt -D src/plone/rest/bbb.py - -b'diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml\nindex 5cebf31..c703bce 100644\n--- a/.github/workflows/tests.yml\n+++ b/.github/workflows/tests.yml\n@@ -6,47 +6,24 @@ jobs:\n strategy:\n fail-fast: false\n matrix:\n- python-version: ["3.13", "3.12", "3.11", "3.10", "3.9", "3.8"]\n- plone-version: ["6.1", "6.0", "5.2"]\n+ python-version: ["3.13", "3.12", "3.11", "3.10", "3.9"]\n+ plone-version: ["6.1", "6.0"]\n exclude:\n- - python-version: 3.13\n- plone-version: 5.2\n- - python-version: 3.12\n- plone-version: 5.2\n- - python-version: 3.11\n- plone-version: 5.2\n- - python-version: 3.10\n- plone-version: 5.2\n - python-version: 3.9\n plone-version: 6.1\n- - python-version: 3.9\n- plone-version: 5.2\n- - python-version: 3.8\n- plone-version: 6.1\n- - python-version: 3.8\n- plone-version: 6.0\n steps:\n # git checkout\n - uses: actions/checkout@v2\n \n # python setup\n - name: Set up Python ${{ matrix.python-version }}\n- uses: actions/setup-python@v4\n+ uses: actions/setup-python@v5\n with:\n python-version: ${{ matrix.python-version }}\n cache: "pip"\n-\n- # python cache\n- - uses: actions/cache@v1\n- with:\n- path: ~/.cache/pip\n- key: ${{ runner.os }}-pip-${{ hashFiles(\'**/requirements.txt\') }}\n- restore-keys: |\n- ${{ runner.os }}-pip-\n+ cache-dependency-path: "**/requirements.txt"\n \n # python install\n- - run: pip install virtualenv\n- - run: pip install wheel\n - name: pip install\n run: pip install -r requirements-${{ matrix.plone-version }}.txt\n \ndiff --git a/Makefile b/Makefile\nindex e1eb2a8..4a77f7b 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -32,29 +32,6 @@ bin/buildout: bin/pip\n bin/python bin/pip:\n \tpython$(version) -m venv . || virtualenv --python=python$(version) .\n \n-py2:\n-\tvirtualenv --python=python2 .\n-\tbin/pip install --upgrade pip\n-\tbin/pip install -r requirements.txt\n-\n-.PHONY: Build Plone 5.2 with Python 2\n-build-plone-5.2-py: py2 ## Build Plone 5.2 with Python 2\n-\tbin/pip install --upgrade pip\n-\tbin/pip install -r requirements.txt\n-\tbin/buildout -c plone-5.2.x.cfg\n-\n-.PHONY: Build Plone 5.2\n-build-plone-5.2: .installed.cfg ## Build Plone 5.2\n-\tbin/pip install --upgrade pip\n-\tbin/pip install -r requirements.txt\n-\tbin/buildout -c plone-5.2.x.cfg\n-\n-.PHONY: Build Plone 5.2 Performance\n-build-plone-5.2-performance: .installed.cfg ## Build Plone 5.2\n-\tbin/pip install --upgrade pip\n-\tbin/pip install -r requirements.txt\n-\tbin/buildout -c plone-5.2.x-performance.cfg\n-\n build-plone-6.0: ## Build Plone 6.0\n \tpython$(version) -m venv .\n \tbin/pip install --upgrade pip\ndiff --git a/README.rst b/README.rst\nindex 3a2cf0f..021f77a 100644\n--- a/README.rst\n+++ b/README.rst\n@@ -315,6 +315,8 @@ and then running "bin/buildout"\n Plone/Python Support\n --------------------\n \n+plone.rest 5.x.x supports Plone 6.x on Python 3.9 and newer.\n+\n plone.rest 4.x.x supports Plone 5.2 and 6.x on Python 3.8 and newer.\n \n plone.rest 3.x.x supports Plone 5.2 on Python 2.7 and 3.6 to 3.8 and Plone 6.0 on Python 3.8 to 3.11.\ndiff --git a/news/178.internal b/news/178.internal\nindex 634cb72..f175d57 100644\n--- a/news/178.internal\n+++ b/news/178.internal\n@@ -1 +1 @@\n-Update Plone to 6.0.9 and 5.2.14 in buildout. Also removes buildout of unsupported Plone versions. @wesleybl\n+Update Plone to 6.0.14 and 6.1.0b2 for testing. Also removes buildout of unsupported Plone versions. @wesleybl, @davisagli\ndiff --git a/news/4090.breaking b/news/4090.breaking\nnew file mode 100644\nindex 0000000..2c1f03a\n--- /dev/null\n+++ b/news/4090.breaking\n@@ -0,0 +1 @@\n+Drop support for Plone 5.2 and Python 3.8. @davisagli\ndiff --git a/plone-5.2.x.cfg b/plone-5.2.x.cfg\ndeleted file mode 100644\nindex dbc7af7..0000000\n--- a/plone-5.2.x.cfg\n+++ /dev/null\n@@ -1,4 +0,0 @@\n-[buildout]\n-extends =\n- https://dist.plone.org/release/5.2.14/versions.cfg\n- base.cfg\ndiff --git a/plone-6.1.x.cfg b/plone-6.1.x.cfg\nindex a37de09..3728066 100644\n--- a/plone-6.1.x.cfg\n+++ b/plone-6.1.x.cfg\n@@ -1,4 +1,4 @@\n [buildout]\n extends =\n- https://dist.plone.org/release/6.1.0b1/versions.cfg\n+ https://dist.plone.org/release/6.1.0b2/versions.cfg\n base.cfg\ndiff --git a/requirements-5.2.txt b/requirements-5.2.txt\ndeleted file mode 100644\nindex 37660fa..0000000\n--- a/requirements-5.2.txt\n+++ /dev/null\n@@ -1 +0,0 @@\n--r https://dist.plone.org/release/5.2.14/requirements.txt\ndiff --git a/requirements-6.1.txt b/requirements-6.1.txt\nindex d088e28..1abfefe 100644\n--- a/requirements-6.1.txt\n+++ b/requirements-6.1.txt\n@@ -1 +1 @@\n--r https://dist.plone.org/release/6.1.0b1/requirements.txt\n+-r https://dist.plone.org/release/6.1.0b2/requirements.txt\ndiff --git a/requirements.txt b/requirements.txt\nindex 9471139..ea41d45 100644\n--- a/requirements.txt\n+++ b/requirements.txt\n@@ -1 +1 @@\n--r requirements-6.0.txt\n+-r requirements-6.1.txt\ndiff --git a/setup.py b/setup.py\nindex a6c4ceb..2a6118f 100644\n--- a/setup.py\n+++ b/setup.py\n@@ -8,7 +8,7 @@ def read(*rnames):\n return open(os.path.join(os.path.dirname(__file__), *rnames)).read()\n \n \n-version = "4.1.4.dev0"\n+version = "5.0.0.dev0"\n \n long_description = read("README.rst") + "\\n\\n" + read("CHANGES.rst") + "\\n\\n"\n \n@@ -24,17 +24,14 @@ def read(*rnames):\n "Development Status :: 5 - Production/Stable",\n "Environment :: Web Environment",\n "Framework :: Plone",\n- "Framework :: Plone :: 5.2",\n "Framework :: Plone :: 6.0",\n "Framework :: Plone :: 6.1",\n "Framework :: Plone :: Core",\n "Framework :: Zope2",\n- "Framework :: Zope :: 4",\n "Framework :: Zope :: 5",\n "License :: OSI Approved :: GNU General Public License (GPL)",\n "Operating System :: OS Independent",\n "Programming Language :: Python",\n- "Programming Language :: Python :: 3.8",\n "Programming Language :: Python :: 3.9",\n "Programming Language :: Python :: 3.10",\n "Programming Language :: Python :: 3.11",\ndiff --git a/src/plone/rest/bbb.py b/src/plone/rest/bbb.py\ndeleted file mode 100644\nindex 80d4a51..0000000\n--- a/src/plone/rest/bbb.py\n+++ /dev/null\n@@ -1,6 +0,0 @@\n-try:\n- from plone.base.interfaces import INavigationRoot # noqa\n- from plone.base.interfaces import IPloneSiteRoot # noqa\n-except ImportError:\n- from plone.app.layout.navigation.interfaces import INavigationRoot # noqa\n- from Products.CMFPlone.interfaces import IPloneSiteRoot # noqa\ndiff --git a/src/plone/rest/patches.py b/src/plone/rest/patches.py\nindex 8f4cb5d..e61bbdd 100644\n--- a/src/plone/rest/patches.py\n+++ b/src/plone/rest/patches.py\n@@ -12,30 +12,3 @@ def __before_publishing_traverse__(self, arg1, arg2=None):\n return\n \n return self._old___before_publishing_traverse__(arg1, arg2)\n-\n-\n-PERMANENT_REDIRECT = {308: "Permanent Redirect"}\n-\n-\n-def patch_zpublisher_status_codes(scope, unused_original, unused_replacement):\n- """Add \'308 Permanent Redirect\' to the list of status codes the ZPublisher\n- knows about. Otherwise setStatus() will turn it into a 500.\n-\n- This is needed for up to and including Plone 5.1.\n- """\n- status_reasons = getattr(scope, "status_reasons", {})\n- if 308 in status_reasons:\n- # Already present in zExceptions >= 3.2 / Zope >= 4.0a1 / Plone 5.2\n- return\n-\n- # Patch the forward mapping (code -> reason)\n- status_reasons.update(PERMANENT_REDIRECT)\n-\n- # Update the reverse mapping\n- status_codes = getattr(scope, "status_codes", {})\n- key, val = PERMANENT_REDIRECT.items()[0]\n-\n- status_codes["".join(val.split(" ")).lower()] = key\n- status_codes[val.lower()] = key\n- status_codes[key] = key\n- status_codes[str(key)] = key\ndiff --git a/src/plone/rest/patches.zcml b/src/plone/rest/patches.zcml\nindex a26791d..2b90ff8 100644\n--- a/src/plone/rest/patches.zcml\n+++ b/src/plone/rest/patches.zcml\n@@ -14,14 +14,4 @@\n preserveOriginal="true"\n />\n \n- \n-\n \ndiff --git a/src/plone/rest/testing.zcml b/src/plone/rest/testing.zcml\nindex 0869e99..c3f0295 100644\n--- a/src/plone/rest/testing.zcml\n+++ b/src/plone/rest/testing.zcml\n@@ -54,42 +54,42 @@\n \n \n \n \n \n \n \n \n \n \n \n \ndiff --git a/src/plone/rest/tests/test_traversal.py b/src/plone/rest/tests/test_traversal.py\nindex a8d10f2..a7be671 100644\n--- a/src/plone/rest/tests/test_traversal.py\n+++ b/src/plone/rest/tests/test_traversal.py\n@@ -3,7 +3,7 @@\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_ID\n-from plone.rest.bbb import INavigationRoot\n+from plone.base.interfaces import INavigationRoot\n from plone.rest.service import Service\n from plone.rest.testing import PLONE_REST_INTEGRATION_TESTING\n from Products.SiteAccess.VirtualHostMonster import VirtualHostMonster\ndiff --git a/tox.ini b/tox.ini\nindex c30d780..081d87a 100644\n--- a/tox.ini\n+++ b/tox.ini\n@@ -100,7 +100,7 @@ set_env =\n ##\n deps =\n zope.testrunner\n- -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+ -c https://dist.plone.org/release/6.1-dev/constraints.txt\n \n ##\n # Specify additional deps in .meta.toml:\n@@ -143,7 +143,7 @@ set_env =\n deps =\n coverage\n zope.testrunner\n- -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+ -c https://dist.plone.org/release/6.1-dev/constraints.txt\n \n commands =\n coverage run --branch --source plone.rest {envbindir}/zope-testrunner --quiet --all --test-path={toxinidir}/src -s plone.rest {posargs}\n@@ -160,7 +160,7 @@ deps =\n twine\n build\n towncrier\n- -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+ -c https://dist.plone.org/release/6.1-dev/constraints.txt\n \n commands =\n # fake version to not have to install the package\n@@ -188,7 +188,7 @@ allowlist_externals =\n deps =\n pipdeptree\n pipforester\n- -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+ -c https://dist.plone.org/release/6.1-dev/constraints.txt\n \n commands =\n # Generate the full dependency tree\n' - -Repository: plone.rest - - -Branch: refs/heads/main -Date: 2025-01-24T11:14:46-08:00 -Author: David Glick (davisagli) -Commit: https://github.com/plone/plone.rest/commit/3a0142c8618681af6a2c21e43f678333eea8af39 - -fix CI - -Files changed: -M .pre-commit-config.yaml -M setup.py - -b'diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml\nindex d63a1c8..7be8a0b 100644\n--- a/.pre-commit-config.yaml\n+++ b/.pre-commit-config.yaml\n@@ -66,7 +66,7 @@ repos:\n hooks:\n - id: pyroma\n - repo: https://github.com/mgedmin/check-python-versions\n- rev: "0.22.0"\n+ rev: "0.22.1"\n hooks:\n - id: check-python-versions\n args: [\'--only\', \'setup.py,pyproject.toml\']\ndiff --git a/setup.py b/setup.py\nindex 2a6118f..ce4735e 100644\n--- a/setup.py\n+++ b/setup.py\n@@ -32,6 +32,7 @@ def read(*rnames):\n "License :: OSI Approved :: GNU General Public License (GPL)",\n "Operating System :: OS Independent",\n "Programming Language :: Python",\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' - -Repository: plone.rest - - -Branch: refs/heads/main -Date: 2025-01-24T11:48:12-08:00 -Author: David Glick (davisagli) -Commit: https://github.com/plone/plone.rest/commit/6f4b6cf4912750bd3cde8ca2d04f2e6885712459 - -Merge pull request #184 from plone/maurits-warnings - -Fix DeprecationWarnings. - -Files changed: -A news/4090.breaking -A news/4090.bugfix -A plone-6.1.x.cfg -A requirements-6.1.txt -M .github/workflows/tests.yml -M .meta.toml -M .pre-commit-config.yaml -M Makefile -M README.rst -M news/178.internal -M plone-6.0.x.cfg -M pyproject.toml -M requirements-6.0.txt -M requirements.txt -M setup.py -M src/plone/rest/patches.py -M src/plone/rest/patches.zcml -M src/plone/rest/testing.py -M src/plone/rest/testing.zcml -M src/plone/rest/tests/test_traversal.py -M tox.ini -D plone-5.2.x.cfg -D requirements-5.2.txt - -b'diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml\nindex 8622555..c703bce 100644\n--- a/.github/workflows/tests.yml\n+++ b/.github/workflows/tests.yml\n@@ -6,39 +6,24 @@ jobs:\n strategy:\n fail-fast: false\n matrix:\n- python-version: ["3.12", "3.11", "3.10", "3.9", "3.8"]\n- plone-version: ["6.0", "5.2"]\n+ python-version: ["3.13", "3.12", "3.11", "3.10", "3.9"]\n+ plone-version: ["6.1", "6.0"]\n exclude:\n- - python-version: 3.12\n- plone-version: 5.2\n- - python-version: 3.11\n- plone-version: 5.2\n- - python-version: 3.10\n- plone-version: 5.2\n - python-version: 3.9\n- plone-version: 5.2\n+ plone-version: 6.1\n steps:\n # git checkout\n - uses: actions/checkout@v2\n \n # python setup\n - name: Set up Python ${{ matrix.python-version }}\n- uses: actions/setup-python@v4\n+ uses: actions/setup-python@v5\n with:\n python-version: ${{ matrix.python-version }}\n cache: "pip"\n-\n- # python cache\n- - uses: actions/cache@v1\n- with:\n- path: ~/.cache/pip\n- key: ${{ runner.os }}-pip-${{ hashFiles(\'**/requirements.txt\') }}\n- restore-keys: |\n- ${{ runner.os }}-pip-\n+ cache-dependency-path: "**/requirements.txt"\n \n # python install\n- - run: pip install virtualenv\n- - run: pip install wheel\n - name: pip install\n run: pip install -r requirements-${{ matrix.plone-version }}.txt\n \ndiff --git a/.meta.toml b/.meta.toml\nindex 2ca393b..d870133 100644\n--- a/.meta.toml\n+++ b/.meta.toml\n@@ -14,4 +14,4 @@ jobs = [\n ]\n \n [pyproject]\n-dependencies_ignores = "[\'plone.app.redirector\']"\n+dependencies_ignores = "[\'plone.app.layout\', \'plone.app.redirector\', \'plone.base\', \'Products.CMFPlone\']"\ndiff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml\nindex d63a1c8..7be8a0b 100644\n--- a/.pre-commit-config.yaml\n+++ b/.pre-commit-config.yaml\n@@ -66,7 +66,7 @@ repos:\n hooks:\n - id: pyroma\n - repo: https://github.com/mgedmin/check-python-versions\n- rev: "0.22.0"\n+ rev: "0.22.1"\n hooks:\n - id: check-python-versions\n args: [\'--only\', \'setup.py,pyproject.toml\']\ndiff --git a/Makefile b/Makefile\nindex e1eb2a8..4a77f7b 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -32,29 +32,6 @@ bin/buildout: bin/pip\n bin/python bin/pip:\n \tpython$(version) -m venv . || virtualenv --python=python$(version) .\n \n-py2:\n-\tvirtualenv --python=python2 .\n-\tbin/pip install --upgrade pip\n-\tbin/pip install -r requirements.txt\n-\n-.PHONY: Build Plone 5.2 with Python 2\n-build-plone-5.2-py: py2 ## Build Plone 5.2 with Python 2\n-\tbin/pip install --upgrade pip\n-\tbin/pip install -r requirements.txt\n-\tbin/buildout -c plone-5.2.x.cfg\n-\n-.PHONY: Build Plone 5.2\n-build-plone-5.2: .installed.cfg ## Build Plone 5.2\n-\tbin/pip install --upgrade pip\n-\tbin/pip install -r requirements.txt\n-\tbin/buildout -c plone-5.2.x.cfg\n-\n-.PHONY: Build Plone 5.2 Performance\n-build-plone-5.2-performance: .installed.cfg ## Build Plone 5.2\n-\tbin/pip install --upgrade pip\n-\tbin/pip install -r requirements.txt\n-\tbin/buildout -c plone-5.2.x-performance.cfg\n-\n build-plone-6.0: ## Build Plone 6.0\n \tpython$(version) -m venv .\n \tbin/pip install --upgrade pip\ndiff --git a/README.rst b/README.rst\nindex f6923eb..021f77a 100644\n--- a/README.rst\n+++ b/README.rst\n@@ -180,7 +180,7 @@ Named services can be registered by providing a \'name\' attribute in the service\n = 3.2 / Zope >= 4.0a1 / Plone 5.2\n- return\n-\n- # Patch the forward mapping (code -> reason)\n- status_reasons.update(PERMANENT_REDIRECT)\n-\n- # Update the reverse mapping\n- status_codes = getattr(scope, "status_codes", {})\n- key, val = PERMANENT_REDIRECT.items()[0]\n-\n- status_codes["".join(val.split(" ")).lower()] = key\n- status_codes[val.lower()] = key\n- status_codes[key] = key\n- status_codes[str(key)] = key\ndiff --git a/src/plone/rest/patches.zcml b/src/plone/rest/patches.zcml\nindex a26791d..2b90ff8 100644\n--- a/src/plone/rest/patches.zcml\n+++ b/src/plone/rest/patches.zcml\n@@ -14,14 +14,4 @@\n preserveOriginal="true"\n />\n \n- \n-\n \ndiff --git a/src/plone/rest/testing.py b/src/plone/rest/testing.py\nindex bcd4eeb..95e4d12 100644\n--- a/src/plone/rest/testing.py\n+++ b/src/plone/rest/testing.py\n@@ -3,7 +3,7 @@\n from plone.app.testing import IntegrationTesting\n from plone.app.testing import PloneSandboxLayer\n from plone.rest.service import Service\n-from plone.testing import z2\n+from plone.testing import zope\n from zope.configuration import xmlconfig\n \n \n@@ -22,7 +22,8 @@ def setUpZope(self, app, configurationContext):\n bases=(PLONE_REST_FIXTURE,), name="PloneRestLayer:Integration"\n )\n PLONE_REST_FUNCTIONAL_TESTING = FunctionalTesting(\n- bases=(PLONE_REST_FIXTURE, z2.ZSERVER_FIXTURE), name="PloneRestLayer:Functional"\n+ bases=(PLONE_REST_FIXTURE, zope.WSGI_SERVER_FIXTURE),\n+ name="PloneRestLayer:Functional",\n )\n \n \ndiff --git a/src/plone/rest/testing.zcml b/src/plone/rest/testing.zcml\nindex 2033039..c3f0295 100644\n--- a/src/plone/rest/testing.zcml\n+++ b/src/plone/rest/testing.zcml\n@@ -54,42 +54,42 @@\n \n \n \n \n \n \n \n \n \n \n \n \ndiff --git a/src/plone/rest/tests/test_traversal.py b/src/plone/rest/tests/test_traversal.py\nindex 43ee632..a7be671 100644\n--- a/src/plone/rest/tests/test_traversal.py\n+++ b/src/plone/rest/tests/test_traversal.py\n@@ -1,9 +1,9 @@\n from base64 import b64encode\n-from plone.app.layout.navigation.interfaces import INavigationRoot\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_ID\n+from plone.base.interfaces import INavigationRoot\n from plone.rest.service import Service\n from plone.rest.testing import PLONE_REST_INTEGRATION_TESTING\n from Products.SiteAccess.VirtualHostMonster import VirtualHostMonster\ndiff --git a/tox.ini b/tox.ini\nindex c30d780..081d87a 100644\n--- a/tox.ini\n+++ b/tox.ini\n@@ -100,7 +100,7 @@ set_env =\n ##\n deps =\n zope.testrunner\n- -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+ -c https://dist.plone.org/release/6.1-dev/constraints.txt\n \n ##\n # Specify additional deps in .meta.toml:\n@@ -143,7 +143,7 @@ set_env =\n deps =\n coverage\n zope.testrunner\n- -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+ -c https://dist.plone.org/release/6.1-dev/constraints.txt\n \n commands =\n coverage run --branch --source plone.rest {envbindir}/zope-testrunner --quiet --all --test-path={toxinidir}/src -s plone.rest {posargs}\n@@ -160,7 +160,7 @@ deps =\n twine\n build\n towncrier\n- -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+ -c https://dist.plone.org/release/6.1-dev/constraints.txt\n \n commands =\n # fake version to not have to install the package\n@@ -188,7 +188,7 @@ allowlist_externals =\n deps =\n pipdeptree\n pipforester\n- -c https://dist.plone.org/release/6.0-dev/constraints.txt\n+ -c https://dist.plone.org/release/6.1-dev/constraints.txt\n \n commands =\n # Generate the full dependency tree\n' +M src/plone/restapi/bbb.py +M src/plone/restapi/configure.zcml +M src/plone/restapi/profiles/performance/registry.xml +M src/plone/restapi/search/handler.py +M src/plone/restapi/serializer/dxcontent.py +M src/plone/restapi/services/addons/configure.zcml +M src/plone/restapi/services/aliases/configure.zcml +M src/plone/restapi/services/auth/configure.zcml +M src/plone/restapi/services/content/configure.zcml +M src/plone/restapi/services/content/utils.py +M src/plone/restapi/services/contextnavigation/get.py +M src/plone/restapi/services/controlpanels/configure.zcml +M src/plone/restapi/services/database/configure.zcml +M src/plone/restapi/services/linkintegrity/configure.zcml +M src/plone/restapi/services/locking/configure.zcml +M src/plone/restapi/services/navigation/get.py +M src/plone/restapi/services/querysources/configure.zcml +M src/plone/restapi/services/querystring/configure.zcml +M src/plone/restapi/services/querystringsearch/configure.zcml +M src/plone/restapi/services/relations/configure.zcml +M src/plone/restapi/services/roles/configure.zcml +M src/plone/restapi/services/site/configure.zcml +M src/plone/restapi/services/site/get.py +M src/plone/restapi/services/system/configure.zcml +M src/plone/restapi/services/transactions/configure.zcml +M src/plone/restapi/services/types/configure.zcml +M src/plone/restapi/services/types/get.py +M src/plone/restapi/services/upgrade/configure.zcml +M src/plone/restapi/services/vocabularies/configure.zcml +M src/plone/restapi/services/workflow/configure.zcml +M src/plone/restapi/tests/test_auth.py +M src/plone/restapi/tests/test_documentation.py +M src/plone/restapi/tests/test_search.py +M src/plone/restapi/tests/test_services_contextnavigation.py +M src/plone/restapi/tests/test_services_navroot.py +M src/plone/restapi/upgrades/configure.zcml + +b'diff --git a/news/4090.bugfix b/news/4090.bugfix\nnew file mode 100644\nindex 0000000000..3a0ea37c4b\n--- /dev/null\n+++ b/news/4090.bugfix\n@@ -0,0 +1 @@\n+Prevent deprecation warnings. @mauritsvanrees\ndiff --git a/src/plone/restapi/bbb.py b/src/plone/restapi/bbb.py\nindex 6e54f1d84e..bbe8c0faef 100644\n--- a/src/plone/restapi/bbb.py\n+++ b/src/plone/restapi/bbb.py\n@@ -5,6 +5,8 @@\n from plone.base.interfaces import IImagingSchema\n from plone.base.interfaces import ILanguage\n from plone.base.interfaces import IMailSchema\n+ from plone.base.interfaces import IMigratingPloneSiteRoot\n+ from plone.base.interfaces import INavigationRoot\n from plone.base.interfaces import INavigationSchema\n from plone.base.interfaces import INonInstallable\n from plone.base.interfaces import INonStructuralFolder\n@@ -13,18 +15,25 @@\n from plone.base.interfaces import ISecuritySchema\n from plone.base.interfaces import ISelectableConstrainTypes\n from plone.base.interfaces import ISiteSchema\n+ from plone.base.interfaces import ITestCasePloneSiteRoot\n+ from plone.base.navigationroot import get_navigation_root\n from plone.base.utils import base_hasattr\n from plone.base.utils import safe_callable\n from plone.base.utils import safe_hasattr\n from plone.base.utils import safe_text\n except ImportError:\n # BBB Plone 5.2\n+ from plone.app.layout.navigation.interfaces import INavigationRoot\n+ from plone.app.layout.navigation.root import (\n+ getNavigationRoot as get_navigation_root,\n+ )\n from Products.CMFPlone.defaultpage import is_default_page\n from Products.CMFPlone.interfaces import IConstrainTypes\n from Products.CMFPlone.interfaces import IEditingSchema\n from Products.CMFPlone.interfaces import IImagingSchema\n from Products.CMFPlone.interfaces import ILanguage\n from Products.CMFPlone.interfaces import IMailSchema\n+ from Products.CMFPlone.interfaces import IMigratingPloneSiteRoot\n from Products.CMFPlone.interfaces import INavigationSchema\n from Products.CMFPlone.interfaces import INonInstallable\n from Products.CMFPlone.interfaces import INonStructuralFolder\n@@ -33,6 +42,7 @@\n from Products.CMFPlone.interfaces import ISecuritySchema\n from Products.CMFPlone.interfaces import ISelectableConstrainTypes\n from Products.CMFPlone.interfaces import ISiteSchema\n+ from Products.CMFPlone.interfaces import ITestCasePloneSiteRoot\n from Products.CMFPlone.utils import base_hasattr\n from Products.CMFPlone.utils import safe_callable\n from Products.CMFPlone.utils import safe_hasattr\ndiff --git a/src/plone/restapi/configure.zcml b/src/plone/restapi/configure.zcml\nindex 8bd6c38c33..6d6ab0bace 100644\n--- a/src/plone/restapi/configure.zcml\n+++ b/src/plone/restapi/configure.zcml\n@@ -52,7 +52,7 @@\n title="plone.restapi testing"\n description="Adds sample content types for testing"\n provides="Products.GenericSetup.interfaces.EXTENSION"\n- for="Products.CMFPlone.interfaces.ITestCasePloneSiteRoot"\n+ for="plone.restapi.bbb.ITestCasePloneSiteRoot"\n directory="profiles/testing"\n />\n \n@@ -61,7 +61,7 @@\n title="plone.restapi testing-workflows"\n description="Adds sample workflows for testing"\n provides="Products.GenericSetup.interfaces.EXTENSION"\n- for="Products.CMFPlone.interfaces.ITestCasePloneSiteRoot"\n+ for="plone.restapi.bbb.ITestCasePloneSiteRoot"\n directory="profiles/testing-workflows"\n />\n \n@@ -127,7 +127,7 @@\n \n \n \ndiff --git a/src/plone/restapi/profiles/performance/registry.xml b/src/plone/restapi/profiles/performance/registry.xml\nindex b95fcf8861..f169f73704 100644\n--- a/src/plone/restapi/profiles/performance/registry.xml\n+++ b/src/plone/restapi/profiles/performance/registry.xml\n@@ -1,6 +1,6 @@\n \n \n- \n+ \n \n icon 32:32\n tile 64:64\ndiff --git a/src/plone/restapi/search/handler.py b/src/plone/restapi/search/handler.py\nindex 2a362e05d5..22dda01fb8 100644\n--- a/src/plone/restapi/search/handler.py\n+++ b/src/plone/restapi/search/handler.py\n@@ -1,5 +1,6 @@\n from plone.registry.interfaces import IRegistry\n from plone.restapi.bbb import ISearchSchema\n+from plone.restapi.bbb import get_navigation_root\n from plone.restapi.interfaces import ISerializeToJson\n from plone.restapi.interfaces import IZCatalogCompatibleQuery\n from Products.CMFCore.utils import getToolByName\n@@ -7,14 +8,6 @@\n from zope.component import getUtility\n \n \n-try:\n- from plone.base.navigationroot import get_navigation_root\n-except ImportError:\n- from plone.app.layout.navigation.root import (\n- getNavigationRoot as get_navigation_root,\n- )\n-\n-\n class SearchHandler:\n """Executes a catalog search based on a query dict, and returns\n JSON compatible results.\ndiff --git a/src/plone/restapi/serializer/dxcontent.py b/src/plone/restapi/serializer/dxcontent.py\nindex eb0fc44c6e..30e0a970e0 100644\n--- a/src/plone/restapi/serializer/dxcontent.py\n+++ b/src/plone/restapi/serializer/dxcontent.py\n@@ -7,6 +7,7 @@\n from plone.dexterity.interfaces import IDexterityContent\n from plone.dexterity.utils import iterSchemata\n from plone.restapi.batching import HypermediaBatch\n+from plone.restapi.bbb import base_hasattr\n from plone.restapi.deserializer import boolean_value\n from plone.restapi.interfaces import IFieldSerializer\n from plone.restapi.interfaces import IObjectPrimaryFieldTarget\n@@ -21,7 +22,6 @@\n from plone.rfc822.interfaces import IPrimaryFieldInfo\n from plone.supermodel.utils import mergedTaggedValueDict\n from Products.CMFCore.utils import getToolByName\n-from Products.CMFPlone.utils import base_hasattr\n from Products.CMFCore.interfaces import IContentish\n from zope.component import adapter\n from zope.component import ComponentLookupError\ndiff --git a/src/plone/restapi/services/addons/configure.zcml b/src/plone/restapi/services/addons/configure.zcml\nindex b8140dc1fb..e05ca6f114 100644\n--- a/src/plone/restapi/services/addons/configure.zcml\n+++ b/src/plone/restapi/services/addons/configure.zcml\n@@ -14,7 +14,7 @@\n \ndiff --git a/src/plone/restapi/services/aliases/configure.zcml b/src/plone/restapi/services/aliases/configure.zcml\nindex b68d1050cb..b3417c7f15 100644\n--- a/src/plone/restapi/services/aliases/configure.zcml\n+++ b/src/plone/restapi/services/aliases/configure.zcml\n@@ -7,7 +7,7 @@\n method="GET"\n accept="application/json,application/schema+json"\n factory=".get.AliasesGet"\n- for="Products.CMFPlone.interfaces.IPloneSiteRoot"\n+ for="plone.restapi.bbb.IPloneSiteRoot"\n permission="Products.CMFPlone.ManagePortalAliases"\n name="@aliases"\n />\n@@ -16,7 +16,7 @@\n method="GET"\n accept="text/csv"\n factory=".get.AliasesGet"\n- for="Products.CMFPlone.interfaces.IPloneSiteRoot"\n+ for="plone.restapi.bbb.IPloneSiteRoot"\n permission="Products.CMFPlone.ManagePortalAliases"\n name="@aliases"\n />\n@@ -41,7 +41,7 @@\n \n@@ -57,7 +57,7 @@\n \ndiff --git a/src/plone/restapi/services/auth/configure.zcml b/src/plone/restapi/services/auth/configure.zcml\nindex f5604d81f2..96607f4fb7 100644\n--- a/src/plone/restapi/services/auth/configure.zcml\n+++ b/src/plone/restapi/services/auth/configure.zcml\n@@ -6,7 +6,7 @@\n \n@@ -14,7 +14,7 @@\n \n@@ -22,7 +22,7 @@\n \n@@ -30,7 +30,7 @@\n \ndiff --git a/src/plone/restapi/services/content/configure.zcml b/src/plone/restapi/services/content/configure.zcml\nindex 72073faafb..674d54523b 100644\n--- a/src/plone/restapi/services/content/configure.zcml\n+++ b/src/plone/restapi/services/content/configure.zcml\n@@ -8,7 +8,7 @@\n \n \n@@ -27,7 +27,7 @@\n \n \n@@ -55,7 +55,7 @@\n \n@@ -71,7 +71,7 @@\n \n@@ -119,7 +119,7 @@\n \n@@ -135,7 +135,7 @@\n \ndiff --git a/src/plone/restapi/services/content/utils.py b/src/plone/restapi/services/content/utils.py\nindex beb23b98ef..a2d958990a 100644\n--- a/src/plone/restapi/services/content/utils.py\n+++ b/src/plone/restapi/services/content/utils.py\n@@ -2,9 +2,9 @@\n from DateTime import DateTime\n from plone.app.content.interfaces import INameFromTitle\n from plone.app.uuid.utils import uuidToObject\n+from plone.restapi.bbb import base_hasattr\n from plone.uuid.interfaces import IUUID\n from Products.CMFCore.utils import getToolByName\n-from Products.CMFPlone.utils import base_hasattr\n from random import randint\n from zExceptions import Unauthorized\n from zope.component import getUtility\ndiff --git a/src/plone/restapi/services/contextnavigation/get.py b/src/plone/restapi/services/contextnavigation/get.py\nindex 3f22602222..c312ea7b05 100644\n--- a/src/plone/restapi/services/contextnavigation/get.py\n+++ b/src/plone/restapi/services/contextnavigation/get.py\n@@ -6,12 +6,12 @@\n from Acquisition import aq_parent\n from collections import UserDict\n from plone import api\n-from plone.app.layout.navigation.interfaces import INavigationRoot\n from plone.app.layout.navigation.navtree import buildFolderTree\n-from plone.app.layout.navigation.root import getNavigationRoot\n+from plone.restapi.bbb import get_navigation_root\n from plone.i18n.normalizer.interfaces import IIDNormalizer\n from plone.memoize.instance import memoize\n from plone.registry.interfaces import IRegistry\n+from plone.restapi.bbb import INavigationRoot\n from plone.restapi.bbb import INavigationSchema\n from plone.restapi.bbb import INonStructuralFolder\n from plone.restapi.bbb import is_default_page\n@@ -353,7 +353,7 @@ def getMimeTypeIcon(self, node):\n if not node["normalized_portal_type"] == "file":\n return\n fileo = node["item"].getObject().file\n- portal_url = getNavigationRoot(self.context)\n+ portal_url = get_navigation_root(self.context)\n mtt = getToolByName(self.context, "mimetypes_registry")\n if fileo.contentType:\n ctype = mtt.lookup(fileo.contentType)\n@@ -563,7 +563,7 @@ def getRootPath(context, currentFolderOnly, topLevel, root_path):\n if root is not None:\n rootPath = "/".join(root.getPhysicalPath())\n else:\n- rootPath = getNavigationRoot(context)\n+ rootPath = get_navigation_root(context)\n \n # Adjust for topLevel\n if topLevel > 0:\n@@ -638,7 +638,7 @@ def __init__(self, context, data):\n if root is not None:\n rootPath = "/".join(root.getPhysicalPath())\n else:\n- rootPath = getNavigationRoot(context)\n+ rootPath = get_navigation_root(context)\n \n currentPath = "/".join(context.getPhysicalPath())\n \ndiff --git a/src/plone/restapi/services/controlpanels/configure.zcml b/src/plone/restapi/services/controlpanels/configure.zcml\nindex 690490e2aa..beb718fe7a 100644\n--- a/src/plone/restapi/services/controlpanels/configure.zcml\n+++ b/src/plone/restapi/services/controlpanels/configure.zcml\n@@ -19,7 +19,7 @@\n \n@@ -27,7 +27,7 @@\n \n@@ -35,7 +35,7 @@\n \n@@ -43,7 +43,7 @@\n \ndiff --git a/src/plone/restapi/services/database/configure.zcml b/src/plone/restapi/services/database/configure.zcml\nindex a4477cc3b0..428bcb5373 100644\n--- a/src/plone/restapi/services/database/configure.zcml\n+++ b/src/plone/restapi/services/database/configure.zcml\n@@ -19,7 +19,7 @@\n \ndiff --git a/src/plone/restapi/services/linkintegrity/configure.zcml b/src/plone/restapi/services/linkintegrity/configure.zcml\nindex 65da4559e8..377f17de3b 100644\n--- a/src/plone/restapi/services/linkintegrity/configure.zcml\n+++ b/src/plone/restapi/services/linkintegrity/configure.zcml\n@@ -9,7 +9,7 @@\n \ndiff --git a/src/plone/restapi/services/locking/configure.zcml b/src/plone/restapi/services/locking/configure.zcml\nindex abfd584a77..1c0b10a82a 100644\n--- a/src/plone/restapi/services/locking/configure.zcml\n+++ b/src/plone/restapi/services/locking/configure.zcml\n@@ -14,7 +14,7 @@\n \n@@ -30,7 +30,7 @@\n \n@@ -46,7 +46,7 @@\n \n@@ -62,7 +62,7 @@\n \ndiff --git a/src/plone/restapi/services/navigation/get.py b/src/plone/restapi/services/navigation/get.py\nindex 96748f336f..c70ca51a8e 100644\n--- a/src/plone/restapi/services/navigation/get.py\n+++ b/src/plone/restapi/services/navigation/get.py\n@@ -1,6 +1,6 @@\n from Acquisition import aq_inner\n from collections import defaultdict\n-from plone.app.layout.navigation.root import getNavigationRoot\n+from plone.restapi.bbb import get_navigation_root\n from plone.memoize.view import memoize\n from plone.memoize.view import memoize_contextless\n from plone.registry.interfaces import IRegistry\n@@ -60,7 +60,7 @@ def default_language(self):\n \n @property\n def navtree_path(self):\n- return getNavigationRoot(self.context)\n+ return get_navigation_root(self.context)\n \n @property\n def current_language(self):\ndiff --git a/src/plone/restapi/services/querysources/configure.zcml b/src/plone/restapi/services/querysources/configure.zcml\nindex e44dfab15d..cb807d94d0 100644\n--- a/src/plone/restapi/services/querysources/configure.zcml\n+++ b/src/plone/restapi/services/querysources/configure.zcml\n@@ -7,7 +7,7 @@\n method="GET"\n accept="application/json"\n factory=".get.QuerySourcesGet"\n- for="Products.CMFPlone.interfaces.IPloneSiteRoot"\n+ for="plone.restapi.bbb.IPloneSiteRoot"\n permission="plone.restapi.vocabularies"\n name="@querysources"\n />\ndiff --git a/src/plone/restapi/services/querystring/configure.zcml b/src/plone/restapi/services/querystring/configure.zcml\nindex f7e6f38343..c280558a72 100644\n--- a/src/plone/restapi/services/querystring/configure.zcml\n+++ b/src/plone/restapi/services/querystring/configure.zcml\n@@ -8,7 +8,7 @@\n \ndiff --git a/src/plone/restapi/services/querystringsearch/configure.zcml b/src/plone/restapi/services/querystringsearch/configure.zcml\nindex 21ad182d55..35a690c2a6 100644\n--- a/src/plone/restapi/services/querystringsearch/configure.zcml\n+++ b/src/plone/restapi/services/querystringsearch/configure.zcml\n@@ -8,7 +8,7 @@\n \n@@ -24,7 +24,7 @@\n \ndiff --git a/src/plone/restapi/services/relations/configure.zcml b/src/plone/restapi/services/relations/configure.zcml\nindex f21cd0ac15..fb7e9d5e17 100644\n--- a/src/plone/restapi/services/relations/configure.zcml\n+++ b/src/plone/restapi/services/relations/configure.zcml\n@@ -7,7 +7,7 @@\n method="GET"\n accept="application/json,application/schema+json"\n factory=".get.GetRelations"\n- for="Products.CMFPlone.interfaces.IPloneSiteRoot"\n+ for="plone.restapi.bbb.IPloneSiteRoot"\n permission="zope2.View"\n name="@relations"\n />\n@@ -15,7 +15,7 @@\n \n@@ -23,7 +23,7 @@\n \ndiff --git a/src/plone/restapi/services/roles/configure.zcml b/src/plone/restapi/services/roles/configure.zcml\nindex 4dfd989234..e903274aca 100644\n--- a/src/plone/restapi/services/roles/configure.zcml\n+++ b/src/plone/restapi/services/roles/configure.zcml\n@@ -6,7 +6,7 @@\n \ndiff --git a/src/plone/restapi/services/site/configure.zcml b/src/plone/restapi/services/site/configure.zcml\nindex 24ed968654..87c65903b6 100644\n--- a/src/plone/restapi/services/site/configure.zcml\n+++ b/src/plone/restapi/services/site/configure.zcml\n@@ -8,7 +8,7 @@\n \ndiff --git a/src/plone/restapi/services/site/get.py b/src/plone/restapi/services/site/get.py\nindex 4ab0a9801e..b6f0c5a803 100644\n--- a/src/plone/restapi/services/site/get.py\n+++ b/src/plone/restapi/services/site/get.py\n@@ -5,10 +5,10 @@\n from plone.event.utils import validated_timezone\n from plone.i18n.interfaces import ILanguageSchema\n from plone.registry.interfaces import IRegistry\n+from plone.restapi.bbb import IImagingSchema\n+from plone.restapi.bbb import ISiteSchema\n from plone.restapi.interfaces import IExpandableElement\n from plone.restapi.services import Service\n-from Products.CMFPlone.interfaces import IImagingSchema\n-from Products.CMFPlone.interfaces import ISiteSchema\n from Products.CMFPlone.utils import getSiteLogo\n from Products.CMFPlone.controlpanel.browser.redirects import RedirectionSet\n from zope.component import adapter\ndiff --git a/src/plone/restapi/services/system/configure.zcml b/src/plone/restapi/services/system/configure.zcml\nindex bbf1900010..9258c0aa52 100644\n--- a/src/plone/restapi/services/system/configure.zcml\n+++ b/src/plone/restapi/services/system/configure.zcml\n@@ -6,7 +6,7 @@\n \ndiff --git a/src/plone/restapi/services/transactions/configure.zcml b/src/plone/restapi/services/transactions/configure.zcml\nindex 1a44d018b7..6117fc3aaf 100644\n--- a/src/plone/restapi/services/transactions/configure.zcml\n+++ b/src/plone/restapi/services/transactions/configure.zcml\n@@ -9,7 +9,7 @@\n \n@@ -17,7 +17,7 @@\n \ndiff --git a/src/plone/restapi/services/types/configure.zcml b/src/plone/restapi/services/types/configure.zcml\nindex a386e9b159..f91bbca5fa 100644\n--- a/src/plone/restapi/services/types/configure.zcml\n+++ b/src/plone/restapi/services/types/configure.zcml\n@@ -15,7 +15,7 @@\n \n@@ -23,7 +23,7 @@\n \n@@ -31,7 +31,7 @@\n \n@@ -39,7 +39,7 @@\n \ndiff --git a/src/plone/restapi/services/types/get.py b/src/plone/restapi/services/types/get.py\nindex af20cdd01f..777e9379eb 100644\n--- a/src/plone/restapi/services/types/get.py\n+++ b/src/plone/restapi/services/types/get.py\n@@ -1,5 +1,6 @@\n from plone.dexterity.interfaces import IDexterityContent\n from plone.restapi.bbb import IConstrainTypes\n+from plone.restapi.bbb import IPloneSiteRoot\n from plone.restapi.interfaces import IExpandableElement\n from plone.restapi.interfaces import IPloneRestapiLayer\n from plone.restapi.services import Service\n@@ -7,7 +8,6 @@\n from plone.restapi.types.utils import get_info_for_fieldset\n from plone.restapi.types.utils import get_info_for_type\n from Products.CMFCore.interfaces import IFolderish\n-from Products.CMFPlone.interfaces import IPloneSiteRoot\n from Products.CMFCore.utils import getToolByName\n from zExceptions import Unauthorized\n from zope.component import adapter\ndiff --git a/src/plone/restapi/services/upgrade/configure.zcml b/src/plone/restapi/services/upgrade/configure.zcml\nindex 5079d7fedb..9abc266b84 100644\n--- a/src/plone/restapi/services/upgrade/configure.zcml\n+++ b/src/plone/restapi/services/upgrade/configure.zcml\n@@ -6,7 +6,7 @@\n \n@@ -14,7 +14,7 @@\n \ndiff --git a/src/plone/restapi/services/vocabularies/configure.zcml b/src/plone/restapi/services/vocabularies/configure.zcml\nindex 8091472727..295fc46de3 100644\n--- a/src/plone/restapi/services/vocabularies/configure.zcml\n+++ b/src/plone/restapi/services/vocabularies/configure.zcml\n@@ -7,7 +7,7 @@\n method="GET"\n accept="application/json"\n factory=".get.VocabulariesGet"\n- for="Products.CMFPlone.interfaces.IPloneSiteRoot"\n+ for="plone.restapi.bbb.IPloneSiteRoot"\n permission="zope2.View"\n name="@vocabularies"\n />\ndiff --git a/src/plone/restapi/services/workflow/configure.zcml b/src/plone/restapi/services/workflow/configure.zcml\nindex 29cb0163bf..a9ab252218 100644\n--- a/src/plone/restapi/services/workflow/configure.zcml\n+++ b/src/plone/restapi/services/workflow/configure.zcml\n@@ -7,7 +7,7 @@\n \ndiff --git a/src/plone/restapi/tests/test_auth.py b/src/plone/restapi/tests/test_auth.py\nindex e7df8470bb..23ed49640f 100644\n--- a/src/plone/restapi/tests/test_auth.py\n+++ b/src/plone/restapi/tests/test_auth.py\n@@ -1,6 +1,8 @@\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_PASSWORD\n+from plone.restapi.bbb import IPloneSiteRoot\n+from plone.restapi.interfaces import ILoginProviders\n from plone.restapi.permissions import UseRESTAPI\n from plone.restapi.testing import PLONE_RESTAPI_DX_INTEGRATION_TESTING\n from unittest import TestCase\n@@ -8,8 +10,6 @@\n from zope.event import notify\n from ZPublisher.pubevents import PubStart\n from zope.component import provideAdapter\n-from plone.restapi.interfaces import ILoginProviders\n-from Products.CMFPlone.interfaces import IPloneSiteRoot\n \n \n class TestLogin(TestCase):\ndiff --git a/src/plone/restapi/tests/test_documentation.py b/src/plone/restapi/tests/test_documentation.py\nindex 916f654b2a..5f2c92d97d 100644\n--- a/src/plone/restapi/tests/test_documentation.py\n+++ b/src/plone/restapi/tests/test_documentation.py\n@@ -21,6 +21,8 @@\n from plone.namedfile.file import NamedBlobFile\n from plone.namedfile.file import NamedBlobImage\n from plone.registry.interfaces import IRegistry\n+from plone.restapi.bbb import IPloneSiteRoot\n+from plone.restapi.interfaces import ILoginProviders\n from plone.restapi.testing import PLONE_RESTAPI_DX_FUNCTIONAL_TESTING\n from plone.restapi.testing import PLONE_RESTAPI_DX_PAM_FUNCTIONAL_TESTING\n from plone.restapi.testing import PLONE_RESTAPI_ITERATE_FUNCTIONAL_TESTING\n@@ -43,9 +45,6 @@\n from plone.app.testing import pushGlobalRegistry\n from plone.restapi.testing import register_static_uuid_utility\n from zope.component import provideAdapter\n-from plone.restapi.interfaces import ILoginProviders\n-from Products.CMFPlone.interfaces import IPloneSiteRoot\n-\n \n import collections\n import json\ndiff --git a/src/plone/restapi/tests/test_search.py b/src/plone/restapi/tests/test_search.py\nindex 84b6e0b480..471340994f 100644\n--- a/src/plone/restapi/tests/test_search.py\n+++ b/src/plone/restapi/tests/test_search.py\n@@ -4,13 +4,13 @@\n from pkg_resources import parse_version\n from plone import api\n from plone.app.discussion.interfaces import IDiscussionSettings\n-from plone.app.layout.navigation.interfaces import INavigationRoot\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_PASSWORD\n from plone.app.textfield.value import RichTextValue\n from plone.dexterity.utils import createContentInContainer\n from plone.registry.interfaces import IRegistry\n+from plone.restapi.bbb import INavigationRoot\n from plone.restapi.search.query import ZCatalogCompatibleQueryAdapter\n from plone.restapi.testing import PLONE_RESTAPI_DX_FUNCTIONAL_TESTING\n from plone.restapi.testing import RelativeSession\ndiff --git a/src/plone/restapi/tests/test_services_contextnavigation.py b/src/plone/restapi/tests/test_services_contextnavigation.py\nindex 05fe3c037e..334ce95f17 100644\n--- a/src/plone/restapi/tests/test_services_contextnavigation.py\n+++ b/src/plone/restapi/tests/test_services_contextnavigation.py\n@@ -1,10 +1,10 @@\n-from plone.app.layout.navigation.interfaces import INavigationRoot\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_ID\n from plone.namedfile.file import NamedBlobFile\n from plone.registry.interfaces import IRegistry\n+from plone.restapi.bbb import INavigationRoot\n from plone.restapi.services.contextnavigation.get import ContextNavigation\n from plone.restapi.testing import PLONE_RESTAPI_DX_FUNCTIONAL_TESTING\n from plone.restapi.testing import RelativeSession\ndiff --git a/src/plone/restapi/tests/test_services_navroot.py b/src/plone/restapi/tests/test_services_navroot.py\nindex 327b48847b..6f447c1063 100644\n--- a/src/plone/restapi/tests/test_services_navroot.py\n+++ b/src/plone/restapi/tests/test_services_navroot.py\n@@ -1,6 +1,7 @@\n-# -*- coding: utf-8 -*-\n+from plone import api\n from plone.app.testing import setRoles\n from plone.app.testing import TEST_USER_ID\n+from plone.restapi.bbb import INavigationRoot\n from plone.restapi.testing import (\n PLONE_RESTAPI_DX_FUNCTIONAL_TESTING,\n PLONE_RESTAPI_DX_PAM_FUNCTIONAL_TESTING,\n@@ -8,11 +9,9 @@\n from plone.restapi.testing import RelativeSession\n from zope.component import getMultiAdapter\n from zope.interface import alsoProvides\n-from plone.app.layout.navigation.interfaces import INavigationRoot\n \n-import unittest\n-from plone import api\n import transaction\n+import unittest\n \n \n class TestServicesNavroot(unittest.TestCase):\ndiff --git a/src/plone/restapi/upgrades/configure.zcml b/src/plone/restapi/upgrades/configure.zcml\nindex ab6cae887d..aeae9a0297 100644\n--- a/src/plone/restapi/upgrades/configure.zcml\n+++ b/src/plone/restapi/upgrades/configure.zcml\n@@ -8,7 +8,7 @@\n \n \n@@ -28,7 +28,7 @@\n title="plone.restapi.upgrades.0002"\n description=""\n provides="Products.GenericSetup.interfaces.EXTENSION"\n- for="Products.CMFPlone.interfaces.IMigratingPloneSiteRoot"\n+ for="plone.restapi.bbb.IMigratingPloneSiteRoot"\n directory="profiles/0002"\n />\n \n@@ -47,7 +47,7 @@\n title="plone.restapi.upgrades.0004"\n description=""\n provides="Products.GenericSetup.interfaces.EXTENSION"\n- for="Products.CMFPlone.interfaces.IMigratingPloneSiteRoot"\n+ for="plone.restapi.bbb.IMigratingPloneSiteRoot"\n directory="profiles/0004"\n />\n \n'