Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use plone.app.z3cform.widgets.OrderedSelect in Plone 6.1 #171

Merged
merged 5 commits into from
Mar 18, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Generated from:
# https://github.com/plone/meta/tree/main/config/default
# https://github.com/plone/meta/tree/main/src/plone/meta/default
# See the inline comments on how to expand/tweak this configuration file
#
# EditorConfig Configuration file, for more details see:
2 changes: 1 addition & 1 deletion .flake8
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Generated from:
# https://github.com/plone/meta/tree/main/config/default
# https://github.com/plone/meta/tree/main/src/plone/meta/default
# See the inline comments on how to expand/tweak this configuration file
[flake8]
doctests = 1
2 changes: 1 addition & 1 deletion dependabot.yml → .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Generated from:
# https://github.com/plone/meta/tree/main/config/default
# https://github.com/plone/meta/tree/main/src/plone/meta/default
# See the inline comments on how to expand/tweak this configuration file
version: 2
updates:
38 changes: 1 addition & 37 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Test Collective Taxonomy
name: Test Collective Taxonomy Javascripts

on:
push:
@@ -14,46 +14,10 @@ jobs:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python:
- "3.8"
- "3.10"
- "3.11"
- "3.12"
plone:
- "6.0-latest"
- "6.1-latest"
exclude:
- python: "3.10"
plone: "6.0-latest"
- python: "3.12"
plone: "6.0-latest"
- python: "3.8"
plone: "6.1-latest"
- python: "3.11"
plone: "6.1-latest"

steps:
- uses: actions/checkout@v4

- name: Setup Plone ${{ matrix.plone }} with Python ${{ matrix.python }}
id: setup
uses: plone/[email protected]
with:
python-version: ${{ matrix.python }}
plone-version: ${{ matrix.plone }}
- name: Install package
run: |
make install
- name: Run Lint
run: |
make lint
- name: Run tests
run: |
make test-ignore-warnings
- name: Run Javascript Tests
run: |
cd resources; make test
16 changes: 4 additions & 12 deletions .github/workflows/meta.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Generated from:
# https://github.com/plone/meta/tree/main/config/default
# https://github.com/plone/meta/tree/main/src/plone/meta/default
# See the inline comments on how to expand/tweak this configuration file
name: Meta
on:
@@ -25,18 +25,17 @@ on:

jobs:
qa:
uses: plone/meta/.github/workflows/qa.yml@main
uses: plone/meta/.github/workflows/qa.yml@2.x
test:
uses: plone/meta/.github/workflows/test.yml@main
uses: plone/meta/.github/workflows/test.yml@2.x
release_ready:
uses: plone/meta/.github/workflows/release_ready.yml@main
uses: plone/meta/.github/workflows/release_ready.yml@2.x

##
# To modify the list of default jobs being created add in .meta.toml:
# [github]
# jobs = [
# "qa",
# "test",
# "coverage",
# "dependencies",
# "release_ready",
@@ -51,13 +50,6 @@ jobs:
# os_dependencies = "git libxml2 libxslt"
##

##
# To test against a specific matrix of python versions
# when running tests jobs, add in .meta.toml:
# [github]
# py_versions = "['3.12', '3.11']"
##


##
# Specify additional jobs in .meta.toml:
52 changes: 52 additions & 0 deletions .github/workflows/test-matrix.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Generated from:
# https://github.com/plone/meta/tree/main/src/plone/meta/default
# See the inline comments on how to expand/tweak this configuration file
name: Tests

on:
push:

jobs:
build:
permissions:
contents: read
pull-requests: write
strategy:
# We want to see all failures:
fail-fast: false
matrix:
os:
- ["ubuntu", "ubuntu-latest"]
config:
# [Python version, visual name, tox env]
- ["3.13", "6.2 on py3.13", "py313-plone62"]
- ["3.13", "6.1 on py3.13", "py313-plone61"]
- ["3.10", "6.1 on py3.10", "py310-plone61"]
- ["3.9", "6.0 on py3.9", "py39-plone60"]

runs-on: ${{ matrix.os[1] }}
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
name: ${{ matrix.config[1] }}
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.config[0] }}
allow-prereleases: true
- name: Pip cache
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ matrix.config[0] }}-${{ hashFiles('setup.*', 'tox.ini') }}
restore-keys: |
${{ runner.os }}-pip-${{ matrix.config[0] }}-
${{ runner.os }}-pip-
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install tox
- name: Test
run: tox -e ${{ matrix.config[2] }}
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Generated from:
# https://github.com/plone/meta/tree/main/config/default
# https://github.com/plone/meta/tree/main/src/plone/meta/default
# See the inline comments on how to expand/tweak this configuration file
# python related
*.egg-info
7 changes: 5 additions & 2 deletions .meta.toml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Generated from:
# https://github.com/plone/meta/tree/main/config/default
# https://github.com/plone/meta/tree/main/src/plone/meta/default
# See the inline comments on how to expand/tweak this configuration file
[meta]
template = "default"
commit-id = "4cf2df11"
commit-id = "2.0.1.dev0"

[pyproject]
codespell_skip = "*.js,*.min.js,*.min.js.map,*.min.css.map,*.svg,*.lock,*.json"
@@ -20,3 +20,6 @@ extra_lines = """
robot_*
test_*
"""

[tox]
test_matrix = {"6.2" = ["3.13"], "6.1" = ["3.13", "3.10"], "6.0" = ["3.9"]}
16 changes: 8 additions & 8 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
# Generated from:
# https://github.com/plone/meta/tree/main/config/default
# https://github.com/plone/meta/tree/main/src/plone/meta/default
# See the inline comments on how to expand/tweak this configuration file
ci:
autofix_prs: false
autoupdate_schedule: monthly

repos:
- repo: https://github.com/asottile/pyupgrade
rev: v3.17.0
rev: v3.19.1
hooks:
- id: pyupgrade
args: [--py38-plus]
- repo: https://github.com/pycqa/isort
rev: 5.13.2
rev: 6.0.1
hooks:
- id: isort
- repo: https://github.com/psf/black
rev: 24.8.0
rev: 25.1.0
hooks:
- id: black
- repo: https://github.com/collective/zpretty
@@ -32,7 +32,7 @@ repos:
# """
##
- repo: https://github.com/PyCQA/flake8
rev: 7.1.1
rev: 7.1.2
hooks:
- id: flake8

@@ -44,7 +44,7 @@ repos:
# """
##
- repo: https://github.com/codespell-project/codespell
rev: v2.3.0
rev: v2.4.1
hooks:
- id: codespell
additional_dependencies:
@@ -58,15 +58,15 @@ repos:
# """
##
- repo: https://github.com/mgedmin/check-manifest
rev: "0.49"
rev: "0.50"
hooks:
- id: check-manifest
- repo: https://github.com/regebro/pyroma
rev: "4.2"
hooks:
- id: pyroma
- repo: https://github.com/mgedmin/check-python-versions
rev: "0.22.0"
rev: "0.22.1"
hooks:
- id: check-python-versions
args: ['--only', 'setup.py,pyproject.toml']
3 changes: 2 additions & 1 deletion CHANGES.rst
Original file line number Diff line number Diff line change
@@ -14,7 +14,8 @@ New features:

Bug fixes:

- *add item here*
- Use `plone.app.z3cform.widgets.OrderedSelect` in Plone 6.1
[petschki]


3.1.5 (2024-11-05)
6 changes: 3 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Generated from:
# https://github.com/plone/meta/tree/main/config/default
# https://github.com/plone/meta/tree/main/src/plone/meta/default
# See the inline comments on how to expand/tweak this configuration file
[build-system]
requires = ["setuptools>=68.2"]
requires = ["setuptools>=68.2,<=75.8.0", "wheel"]

##
# Add extra configuration options in .meta.toml:
@@ -35,7 +35,7 @@ target-version = ["py38"]
##

[tool.codespell]
ignore-words-list = "discreet,assertin,"
ignore-words-list = "discreet,assertin,thet,"
skip = "*.po,*.js,*.min.js,*.min.js.map,*.min.css.map,*.svg,*.lock,*.json"
##
# Add extra configuration options in .meta.toml:
2 changes: 1 addition & 1 deletion src/collective/taxonomy/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
PATH_SEPARATOR = "\u241F"
PATH_SEPARATOR = "\u241f"
LEGACY_PATH_SEPARATOR = "/"
PRETTY_PATH_SEPARATOR = " » "
NODE = "#NODE"
3 changes: 1 addition & 2 deletions src/collective/taxonomy/restapi/serializers/taxonomy.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
""" RestAPI Taxonomy serializer
"""
"""RestAPI Taxonomy serializer"""

from collective.taxonomy import PATH_SEPARATOR
from collective.taxonomy.interfaces import ITaxonomy
3 changes: 1 addition & 2 deletions src/collective/taxonomy/restapi/services/taxonomy/update.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
""" RestAPI PATCH
"""
"""RestAPI PATCH"""

from BTrees.OOBTree import OOBTree
from collective.taxonomy import PATH_SEPARATOR
10 changes: 8 additions & 2 deletions src/collective/taxonomy/tests/robot/test_taxonomy.robot
Original file line number Diff line number Diff line change
@@ -21,7 +21,8 @@ Scenario: As a manager I can add a taxonomy
Given a logged in manager
and an page type with a taxonomy
When I edit the page
and I select multiple options
and I select option 'Information Science'
and I select option 'Information Science » Chronology'
Then I see '2' selected options

When I save the page
@@ -52,13 +53,18 @@ I edit the page
Get Text //body contains Edit Page

I select multiple options
Select Options By //select[@name="form.widgets.test.taxonomy_test.from"] index 0 2
Focus //select[@name="form.widgets.test.taxonomy_test.from"]
${selected} = Select Options By //select[@name="form.widgets.test.taxonomy_test.from"] index 1 2
Click //button[@name="from2toButton"]

I save the page
Click //button[@name="form.buttons.save"]
Wait For Condition Text //body contains Changes saved

I select option '${label}'
Select Options By //select[@name="form.widgets.test.taxonomy_test.from"] label ${label}
Click //button[@name="from2toButton"]

I deselect option '${label}'
Select Options By //select[@name="form.widgets.test.taxonomy_test.to"] label ${label}
Click //button[@name="to2fromButton"]
8 changes: 7 additions & 1 deletion src/collective/taxonomy/widget.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
from collective.taxonomy.interfaces import ITaxonomySelectWidget
from plone.memoize import ram
from z3c.form import interfaces
from z3c.form.browser.orderedselect import OrderedSelectWidget
from z3c.form.widget import FieldWidget

import zope.component
import zope.interface
import zope.schema.interfaces


try:
# Plone 6.1
from plone.app.z3cform.widgets.orderedselect import OrderedSelectWidget
except ImportError:
from z3c.form.browser.orderedselect import OrderedSelectWidget


def _items_cachekey(fun, self):
# try to get modified time of taxonomy utility
try:
207 changes: 45 additions & 162 deletions src/collective/taxonomy/widget_input.pt
Original file line number Diff line number Diff line change
@@ -3,161 +3,28 @@
xmlns:tal="http://xml.zope.org/namespaces/tal"
tal:omit-tag=""
>
<script type="text/javascript">
/* <![CDATA[ */
function moveItems(from, to)
{
// shortcuts for selection fields
var src = document.getElementById(from);
var tgt = document.getElementById(to);
if (src.selectedIndex == -1) selectionError();
else
{
// iterate over all selected items
// --> attribute "selectedIndex" doesn't support multiple selection.
// Anyway, it works here, as a moved item isn't selected anymore,
// thus "selectedIndex" indicating the "next" selected item :)
while (src.selectedIndex > -1)
if (src.options[src.selectedIndex].selected)
{
// create a new virtual object with values of item to copy
temp = new Option(src.options[src.selectedIndex].text,
src.options[src.selectedIndex].value);
// append virtual object to targe
tgt.options[tgt.length] = temp;
// want to select newly created item
temp.selected = true;
// delete moved item in source
src.options[src.selectedIndex] = null;
}
}
}
// move item from "from" selection to "to" selection
function from2to(name)
{
moveItems(name+"-from", name+"-to");
copyDataForSubmit(name);
}
// move item from "to" selection back to "from" selection
function to2from(name)
{
moveItems(name+"-to", name+"-from");
copyDataForSubmit(name);
}
function swapFields(a, b)
{
// swap text
var temp = a.text;
a.text = b.text;
b.text = temp;
// swap value
temp = a.value;
a.value = b.value;
b.value = temp;
// swap selection
temp = a.selected;
a.selected = b.selected;
b.selected = temp;
}
// move selected item in "to" selection one up
function moveUp(name) {
// shortcuts for selection field
var toSel = document.getElementById(name+"-to");
if (toSel.selectedIndex == -1) {
selectionError();
} else if (toSel.options[0].selected) {
alert("Cannot move further up!");
} else for (var i = 0; i < toSel.length; i++) {
if (toSel.options[i].selected) {
swapFields(toSel.options[i-1], toSel.options[i]);
copyDataForSubmit(name);
}
}
}
// move selected item in "to" selection one down
function moveDown(name)
{
// shortcuts for selection field
var toSel = document.getElementById(name+"-to");
if (toSel.selectedIndex == -1) {
selectionError();
} else if (toSel.options[toSel.length-1].selected) {
alert("Cannot move further down!");
} else {
for (var i = toSel.length-1; i >= 0; i--) {
if (toSel.options[i].selected) {
swapFields(toSel.options[i+1], toSel.options[i]);
}
}
copyDataForSubmit(name);
}
}
// copy each item of "toSel" into one hidden input field
function copyDataForSubmit(name)
{
// shortcuts for selection field and hidden data field
var toSel = document.getElementById(name+"-to");
var toDataContainer = document.getElementById(name+"-toDataContainer");
// delete all child nodes (--> complete content) of "toDataContainer" span
while (toDataContainer.hasChildNodes())
toDataContainer.removeChild(toDataContainer.firstChild);
// create new hidden input fields - one for each selection item of
// "to" selection
for (var i = 0; i < toSel.options.length; i++)
{
// create virtual node with suitable attributes
var newNode = document.createElement("input");
var newAttr = document.createAttribute("name");
newAttr.nodeValue = name.replace(/-/g, '.')+':list';
newNode.setAttributeNode(newAttr);
newAttr = document.createAttribute("type");
newAttr.nodeValue = "hidden";
newNode.setAttributeNode(newAttr);
newAttr = document.createAttribute("value");
newAttr.nodeValue = toSel.options[i].value;
newNode.setAttributeNode(newAttr);
// actually append virtual node to DOM tree
toDataContainer.appendChild(newNode);
}
}
// error message for missing selection
function selectionError() {
alert("Must select something!");
}
/* ]]> */
</script>
<script src="++resource++orderedselect_input.js"
type="text/javascript"
></script>

<table class="ordered-selection-field"
border="0"
tal:attributes="
id view/id;
"
>
<tr>
<td>
<select class=""
id="from"
multiple
name="from"
size="5"
style="width: 100%"
tal:attributes="
id string:${view/id}-from;
name string:${view/name}.from;
class view/klass;
Xstyle view/style;
style view/style;
title view/title;
lang view/lang;
onclick view/onclick;
@@ -188,39 +55,36 @@ function selectionError() {
></option>
</select>
</td>
</tr>
<tr>
<td style="text-align: center; padding-top: 5px; padding-bottom: 5px;">
<button name="to2fromButton"
onclick="javascript:to2from()"
type="button"
value="&uarr;"
tal:attributes="
onClick string:javascript:to2from('${view/id}');
"
>&uarr;</button>
<td>
<button name="from2toButton"
onclick="javascript:from2to()"
type="button"
value="&darr;"
value="&rarr;"
tal:attributes="
onClick string:javascript:from2to('${view/id}');
"
>&darr;</button>
>&rarr;</button>
<br />
<button name="to2fromButton"
onclick="javascript:to2from()"
type="button"
value="&larr;"
tal:attributes="
onClick string:javascript:to2from('${view/id}');
"
>&larr;</button>
</td>
</tr>
<tr>
<td style="text-align: right">
<td>
<select class=""
id="to"
multiple
name="to"
size="5"
style="width: 100%"
tal:attributes="
id string:${view/id}-to;
name string:${view/name}.to;
class view/klass;
Xstyle view/style;
style view/style;
title view/title;
lang view/lang;
onclick view/onclick;
@@ -257,22 +121,41 @@ function selectionError() {
"
/>
<span id="toDataContainer"
style="display: none"
tal:attributes="
id string:${view/id}-toDataContainer;
"
>
<script type="text/javascript"
tal:content="string:
copyDataForSubmit('${view/id}');"
tal:content="string:copyDataForSubmit('${view/id}');"
>
/* <![CDATA[ */
// initial copying of field "field.to" --> "field"
copyDataForSubmit("<i tal:replace="${view/id}"/>");
/* ]]> */
</script>
</span>

</td>
<td>
<button name="upButton"
onclick="javascript:moveUp()"
type="button"
value="&uarr;"
tal:attributes="
onClick string:javascript:moveUp('${view/id}');
"
>&uarr;</button>
<br />
<button name="downButton"
onclick="javascript:moveDown()"
type="button"
value="&darr;"
tal:attributes="
onClick string:javascript:moveDown('${view/id}');
"
>&darr;</button>
</td>
</tr>
</table>

</html>
131 changes: 75 additions & 56 deletions tox.ini
Original file line number Diff line number Diff line change
@@ -1,18 +1,26 @@
# Generated from:
# https://github.com/plone/meta/tree/main/config/default
# https://github.com/plone/meta/tree/main/src/plone/meta/default
# See the inline comments on how to expand/tweak this configuration file
[tox]
# We need 4.4.0 for constrain_package_deps.
min_version = 4.4.0
envlist =
lint
test
py313-plone62
py313-plone61
py310-plone61
py39-plone60
dependencies


##
# Add extra configuration options in .meta.toml:
# - to specify a custom testing combination of Plone and python versions, use `test_matrix`
# - to specify extra custom environments, use `envlist_lines`
# - to specify extra `tox` top-level options, use `config_lines`
# [tox]
# test_matrix = {"6.2" = ["3.13", "3.12"], "6.1" = ["3.10", "3.9"]}
# envlist_lines = """
# my_other_environment
# """
@@ -21,32 +29,14 @@ envlist =
# """
##

[testenv]
skip_install = true
allowlist_externals =
echo
false
# Make sure typos like `tox -e formaat` are caught instead of silently doing nothing.
# See https://github.com/tox-dev/tox/issues/2858.
commands =
echo "Unrecognized environment name {envname}"
false

##
# Add extra configuration options in .meta.toml:
# [tox]
# testenv_options = """
# basepython = /usr/bin/python3.8
# """
##

[testenv:init]
description = Prepare environment
skip_install = true
allowlist_externals =
echo
commands =
echo "Initial setup complete"


[testenv:format]
description = automatically reformat code
skip_install = true
@@ -87,8 +77,21 @@ deps =
commands =
sh -c 'pipdeptree --exclude setuptools,wheel,pipdeptree,zope.interface,zope.component --graph-output svg > dependencies.svg'

[testenv:test]
description = run the distribution tests

[test_runner]
deps = zope.testrunner
test =
rfbrowser init
zope-testrunner --all --test-path={toxinidir}/src -s collective.taxonomy {posargs}
coverage =
rfbrowser init
coverage run --branch --source collective.taxonomy {envbindir}/zope-testrunner --quiet --all --test-path={toxinidir}/src -s collective.taxonomy {posargs}
coverage report -m --format markdown
coverage xml
coverage html

[base]
description = shared configuration for tests and coverage
use_develop = true
skip_install = false
constrain_package_deps = true
@@ -104,64 +107,80 @@ set_env =
#
# Set constrain_package_deps .meta.toml:
# [tox]
# constrain_package_deps = "false"
# constrain_package_deps = false
##
deps =
zope.testrunner
-c https://dist.plone.org/release/6.0-dev/constraints.txt
{[test_runner]deps}
plone62: -c https://dist.plone.org/release/6.2-dev/constraints.txt
plone61: -c https://dist.plone.org/release/6.1-dev/constraints.txt
plone60: -c https://dist.plone.org/release/6.0-dev/constraints.txt

##
# Specify additional deps in .meta.toml:
# [tox]
# test_deps_additional = "-esources/plonegovbr.portal_base[test]"
# test_deps_additional = """
# -esources/plonegovbr.portal_base[test]
# """
#
# Specify a custom constraints file in .meta.toml:
# [tox]
# constraints_file = "https://my-server.com/constraints.txt"
##
commands =
rfbrowser init
zope-testrunner --all --test-path={toxinidir}/src -s collective.taxonomy {posargs}
extras =
test


##
# Add extra configuration options in .meta.toml:
# [tox]
# test_extras = """
# tests
# widgets
# """
#
# Add extra configuration options in .meta.toml:
# [tox]
# testenv_options = """
# basepython = /usr/bin/python3.8
# """
##

[testenv:test]
description = run the distribution tests
use_develop = {[base]use_develop}
skip_install = {[base]skip_install}
constrain_package_deps = {[base]constrain_package_deps}
set_env = {[base]set_env}
deps =
{[test_runner]deps}
-c https://dist.plone.org/release/6.2-dev/constraints.txt
commands = {[test_runner]test}
extras = {[base]extras}


[testenv]
description = run the distribution tests (generative environments)
use_develop = {[base]use_develop}
skip_install = {[base]skip_install}
constrain_package_deps = {[base]constrain_package_deps}
set_env = {[base]set_env}
deps = {[base]deps}
commands = {[test_runner]test}
extras = {[base]extras}


[testenv:coverage]
description = get a test coverage report
use_develop = true
skip_install = false
constrain_package_deps = true
set_env =
ROBOT_BROWSER=headlesschrome

##
# Specify extra test environment variables in .meta.toml:
# [tox]
# test_environment_variables = """
# PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/
# """
##
use_develop = {[base]use_develop}
skip_install = {[base]skip_install}
constrain_package_deps = {[base]constrain_package_deps}
set_env = {[base]set_env}
deps =
{[test_runner]deps}
coverage
zope.testrunner
-c https://dist.plone.org/release/6.0-dev/constraints.txt

commands =
rfbrowser init
coverage run --branch --source collective.taxonomy {envbindir}/zope-testrunner --quiet --all --test-path={toxinidir}/src -s collective.taxonomy {posargs}
coverage report -m --format markdown
coverage xml
coverage html
extras =
test
-c https://dist.plone.org/release/6.2-dev/constraints.txt
commands = {[test_runner]coverage}
extras = {[base]extras}


[testenv:release-check]
@@ -170,7 +189,7 @@ skip_install = true
deps =
twine
build
-c https://dist.plone.org/release/6.0-dev/constraints.txt
-c https://dist.plone.org/release/6.2-dev/constraints.txt

commands =
python -m build --sdist
@@ -197,7 +216,7 @@ allowlist_externals =
deps =
pipdeptree
pipforester
-c https://dist.plone.org/release/6.0-dev/constraints.txt
-c https://dist.plone.org/release/6.2-dev/constraints.txt

commands =
# Generate the full dependency tree