diff --git a/.github/workflows/backend.yml b/.github/workflows/backend.yml index be35851..c21b724 100644 --- a/.github/workflows/backend.yml +++ b/.github/workflows/backend.yml @@ -1,10 +1,7 @@ name: Backend CI on: - push: - paths: - - "backend/**" - - ".github/workflows/backend.yml" + workflow_call: workflow_dispatch: env: @@ -12,11 +9,16 @@ env: IMAGE_NAME_SUFFIX: backend PYTHON_VERSION: "3.11" +defaults: + run: + working-directory: ./backend + jobs: - meta: + config: runs-on: ubuntu-latest outputs: + BASE_TAG: ${{ steps.vars.outputs.BASE_TAG }} PLONE_VERSION: ${{ steps.vars.outputs.PLONE_VERSION }} steps: - name: Checkout @@ -25,91 +27,70 @@ jobs: - name: Set Env Vars id: vars run: | - echo "PLONE_VERSION=$(cat backend/version.txt)" >> $GITHUB_OUTPUT + echo "PLONE_VERSION=$(cat version.txt)" >> $GITHUB_OUTPUT + echo 'BASE_TAG=sha-'$(git rev-parse --short HEAD) >> $GITHUB_OUTPUT + + - name: Test vars + run: | + echo 'BASE_TAG=${{ steps.vars.outputs.BASE_TAG }}' + echo 'PLONE_VERSION=${{ steps.vars.outputs.PLONE_VERSION }}' - black: + code-quality: runs-on: ubuntu-latest + needs: + - config steps: - name: Checkout codebase uses: actions/checkout@v4 - - name: Run check - uses: plone/code-analysis-action@v2 - with: - base_dir: 'backend' - check: 'black' + - name: Install hatch + run: pipx install hatch - flake8: - runs-on: ubuntu-latest - steps: - - name: Checkout codebase - uses: actions/checkout@v4 + - name: Generate Constraints file + run: pipx run mxdev -c mx.ini - - name: Run check - uses: plone/code-analysis-action@v2 + - uses: actions/setup-python@v5 with: - base_dir: 'backend' - check: 'flake8' + python-version: ${{ env.PYTHON_VERSION }} + cache: 'pip' - isort: - runs-on: ubuntu-latest - steps: - - name: Checkout codebase - uses: actions/checkout@v4 + - name: "Install Environment" + run: hatch env create - - name: Run check - uses: plone/code-analysis-action@v2 - with: - base_dir: 'backend' - check: 'isort' + - name: "Run checks" + run: hatch run lint - zpretty: + test: runs-on: ubuntu-latest + needs: + - config steps: - name: Checkout codebase uses: actions/checkout@v4 - - name: Run check - uses: plone/code-analysis-action@v2 - with: - base_dir: 'backend' - check: 'zpretty' + - name: Install hatch + run: pipx install hatch - tests: - runs-on: ubuntu-latest - needs: - - meta - defaults: - run: - working-directory: ./backend - - steps: - - uses: actions/checkout@v4 + - name: Generate Constraints file + run: pipx run mxdev -c mx.ini - - name: Setup Plone ${{ needs.meta.outputs.PLONE_VERSION }} with Python ${{ env.PYTHON_VERSION }} - uses: plone/setup-plone@v2.0.0 + - uses: actions/setup-python@v5 with: python-version: ${{ env.PYTHON_VERSION }} - plone-version: ${{ needs.meta.outputs.PLONE_VERSION }} + cache: 'pip' - - name: Install package - run: | - pip install mxdev - mxdev -c mx.ini - pip install -r requirements-mxdev.txt + - name: "Install Environment" + run: hatch env create - - name: Run tests - run: | - pytest --disable-warnings src/collective.voltoformblock/tests + - name: "Test Codebase" + run: hatch run test release: runs-on: ubuntu-latest needs: - - black - - flake8 - - isort - - zpretty - - tests + - config + - code-quality + - test permissions: contents: read packages: write @@ -156,3 +137,34 @@ jobs: push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} + build-args: | + PLONE_VERSION=${{ needs.config.outputs.PLONE_VERSION }} + + - name: Docker meta + id: meta-demo + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.IMAGE_NAME_PREFIX }}-demo + labels: | + org.label-schema.docker.cmd=docker run -d -p 8080:8080 ${{ env.IMAGE_NAME_PREFIX }}-demo:latest + flavor: + latest=false + tags: | + type=ref,event=branch + type=sha + type=raw,value=latest,enable={{is_default_branch}} + + - name: Build and push demo + uses: docker/build-push-action@v5 + with: + platforms: linux/amd64 + context: backend + file: backend/Dockerfile.demo + load: true + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta-demo.outputs.tags }} + labels: ${{ steps.meta-demo.outputs.labels }} + build-args: | + SEED=${{ github.run_id }} + IMAGE_TAG=${{ needs.config.outputs.BASE_TAG }} diff --git a/.github/workflows/frontend.yml b/.github/workflows/frontend.yml index 742e7cc..62ced8d 100644 --- a/.github/workflows/frontend.yml +++ b/.github/workflows/frontend.yml @@ -1,10 +1,7 @@ name: Frontend CI on: - push: - paths: - - "frontend/**" - - ".github/workflows/frontend.yml" + workflow_call: workflow_dispatch: env: @@ -88,7 +85,7 @@ jobs: echo '| --- | --- |' >> $GITHUB_STEP_SUMMARY echo '| Lint | ${{ steps.lint.conclusion == 'failure' && '❌' || ' ✅' }} |' >> $GITHUB_STEP_SUMMARY echo '| i18n | ${{ steps.i18n.conclusion == 'failure' && '❌' || ' ✅' }} |' >> $GITHUB_STEP_SUMMARY - echo '| Unit Tests | ${{ steps.unit.conclusion == 'failure' && '❌' || ' ✅' }} |' >> $GITHUB_STEP_SUMMARY + echo '| Unit Tests | ${{ steps.unit.conclusion == 'failure' && '❌' || ' ✅' }} |' >> $GITHUB_STEP_SUMMARY release: runs-on: ubuntu-latest diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..c48bee6 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,48 @@ +name: 'volto-form-block' + +on: + push: + paths: + - "backend/**" + - "frontend/**" + - ".github/workflows/backend.yml" + - ".github/workflows/frontend.yml" + - ".github/workflows/main.yml" + workflow_dispatch: + +jobs: + config: + runs-on: ubuntu-latest + outputs: + backend: ${{ steps.filter.outputs.backend }} + frontend: ${{ steps.filter.outputs.frontend }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - uses: dorny/paths-filter@v3 + id: filter + with: + filters: | + backend: + - 'backend/**' + - '.github/workflows/backend.yml' + frontend: + - 'frontend/**' + - '.github/workflows/frontend.yml' + + backend: + uses: ./.github/workflows/backend.yml + needs: config + if: ${{ needs.config.outputs.backend == 'true' }} + permissions: + contents: read + packages: write + + frontend: + uses: ./.github/workflows/frontend.yml + needs: config + if: ${{ needs.config.outputs.frontend == 'true' }} + permissions: + contents: read + packages: write diff --git a/backend/Makefile b/backend/Makefile index be12a1e..35c3ca1 100644 --- a/backend/Makefile +++ b/backend/Makefile @@ -42,6 +42,7 @@ GIT_FOLDER=$(BACKEND_FOLDER)/.git VENV_FOLDER=$(BACKEND_FOLDER)/.venv BIN_FOLDER=$(VENV_FOLDER)/bin +SEED=$(shell date +'%Y%m%d-%H%M%S') all: build @@ -51,24 +52,24 @@ all: build help: ## This help message @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' -$(BIN_FOLDER)/pip $(BIN_FOLDER)/tox $(BIN_FOLDER)/pipx $(BIN_FOLDER)/uv $(BIN_FOLDER)/mxdev: - @echo "$(GREEN)==> Setup Virtual Env$(RESET)" - $(PYTHON) -m venv $(VENV_FOLDER) - $(BIN_FOLDER)/pip install -U "pip" "uv" "wheel" "pipx" "mxdev" "tox" "pre-commit" - if [ -d $(GIT_FOLDER) ]; then $(BIN_FOLDER)/pre-commit install; else echo "$(RED) Not installing pre-commit$(RESET)";fi +$(BIN_FOLDER)/hatch: ## Setup virtual env + @echo "$(GREEN)==> Install dependencies$(RESET)" + @pipx run hatch env create -instance/etc/zope.ini: $(BIN_FOLDER)/pip ## Create instance configuration +instance/etc/zope.ini: ## Create instance configuration @echo "$(GREEN)==> Create instance configuration$(RESET)" - $(BIN_FOLDER)/pipx run cookiecutter -f --no-input --config-file instance.yaml gh:plone/cookiecutter-zope-instance + @pipx run cookiecutter -f --no-input --config-file instance.yaml gh:plone/cookiecutter-zope-instance .PHONY: config config: instance/etc/zope.ini +constraints-mxdev.txt: ## Generate constraints file + @echo "$(GREEN)==> Generate constraints file$(RESET)" + @echo '-c https://dist.plone.org/release/$(PLONE_VERSION)/constraints.txt' > requirements.txt + @pipx run mxdev -c mx.ini + .PHONY: build-dev -build-dev: config ## Install Plone packages - @echo "$(GREEN)==> Setup Build$(RESET)" - $(BIN_FOLDER)/mxdev -c mx.ini - $(BIN_FOLDER)/uv pip install -r requirements-mxdev.txt +build-dev: constraints-mxdev.txt config $(BIN_FOLDER)/hatch ## Install Plone packages .PHONY: install install: build-dev ## Install Plone @@ -79,19 +80,19 @@ build: build-dev ## Install Plone .PHONY: clean clean: ## Clean environment @echo "$(RED)==> Cleaning environment and build$(RESET)" - rm -rf $(VENV_FOLDER) pyvenv.cfg .installed.cfg instance .tox .venv .pytest_cache + rm -rf $(VENV_FOLDER) pyvenv.cfg dist instance .venv .pytest_cache requirements-mxdev.txt constraints-mxdev.txt requirements.lock .PHONY: start start: ## Start a Plone instance on localhost:8080 - PYTHONWARNINGS=ignore $(BIN_FOLDER)/runwsgi instance/etc/zope.ini + ALLOWED_DISTRIBUTIONS=portalbrasil-intranet PYTHONWARNINGS=ignore $(BIN_FOLDER)/runwsgi instance/etc/zope.ini .PHONY: console console: instance/etc/zope.ini ## Start a console into a Plone instance - PYTHONWARNINGS=ignore $(BIN_FOLDER)/zconsole debug instance/etc/zope.conf + ALLOWED_DISTRIBUTIONS=portalbrasil-intranet PYTHONWARNINGS=ignore $(BIN_FOLDER)/zconsole debug instance/etc/zope.conf .PHONY: create-site create-site: instance/etc/zope.ini ## Create a new site from scratch - PYTHONWARNINGS=ignore $(BIN_FOLDER)/zconsole run instance/etc/zope.conf ./scripts/create_site.py + ALLOWED_DISTRIBUTIONS=portalbrasil-intranet PYTHONWARNINGS=ignore $(BIN_FOLDER)/zconsole run instance/etc/zope.conf ./scripts/create_site.py # Example Content .PHONY: update-example-content @@ -100,39 +101,42 @@ update-example-content: $(BIN_FOLDER)/tox ## Export example content inside packa if [ -d $(EXAMPLE_CONTENT_FOLDER)/content ]; then rm -r $(EXAMPLE_CONTENT_FOLDER)/* ;fi $(BIN_FOLDER)/plone-exporter instance/etc/zope.conf $(PLONE_SITE_ID) $(EXAMPLE_CONTENT_FOLDER) -.PHONY: check -check: $(BIN_FOLDER)/tox ## Check and fix code base according to Plone standards - @echo "$(GREEN)==> Format codebase$(RESET)" - $(BIN_FOLDER)/tox -e lint +.PHONY: lint +lint: $(BIN_FOLDER)/hatch ## Check and fix code base according to Plone standards + @echo "$(GREEN)==> Lint codebase$(RESET)" + $(BIN_FOLDER)/hatch run lint -# i18n -$(BIN_FOLDER)/i18ndude: $(BIN_FOLDER)/pip - @echo "$(GREEN)==> Install translation tools$(RESET)" - $(BIN_FOLDER)/uv pip install i18ndude +.PHONY: format +format: $(BIN_FOLDER)/hatch ## Check and fix code base according to Plone standards + @echo "$(GREEN)==> Format codebase$(RESET)" + $(BIN_FOLDER)/hatch run format .PHONY: i18n -i18n: $(BIN_FOLDER)/i18ndude ## Update locales +i18n: ## Update locales @echo "$(GREEN)==> Updating locales$(RESET)" - $(BIN_FOLDER)/update_locale + $(BIN_FOLDER)/hatch run i18n # Tests .PHONY: test -test: $(BIN_FOLDER)/tox ## run tests - $(BIN_FOLDER)/tox -e test +test: $(BIN_FOLDER)/pytest ## run tests + $(BIN_FOLDER)/hatch run test .PHONY: test-coverage -test-coverage: $(BIN_FOLDER)/tox ## run tests with coverage - $(BIN_FOLDER)/tox -e coverage +test-coverage: $(BIN_FOLDER)/pytest ## run tests with coverage + $(BIN_FOLDER)/hatch run cov # Build Docker images .PHONY: build-image build-image: ## Build Docker Images @DOCKER_BUILDKIT=1 docker build . -t $(IMAGE_NAME_PREFIX)-backend:$(IMAGE_TAG) -f Dockerfile --build-arg PLONE_VERSION=$(PLONE_VERSION) + @echo "$(GREEN)==> Building $(IMAGE_NAME_PREFIX)-demo:$(IMAGE_TAG) $(RESET)" + @DOCKER_BUILDKIT=1 docker build . --pull=false -t $(IMAGE_NAME_PREFIX)-demo:$(IMAGE_TAG) -f Dockerfile.demo --build-arg IMAGE_TAG=$(IMAGE_TAG) --build-arg SEED=$(SEED) + # Acceptance tests .PHONY: acceptance-backend-start acceptance-backend-start: ## Start backend acceptance server - ZSERVER_HOST=0.0.0.0 ZSERVER_PORT=55001 LISTEN_PORT=55001 APPLY_PROFILES="collective/voltoformblock:default" CONFIGURE_PACKAGES="plone.restapi,plone.volto,plone.volto.cors,collective/voltoformblock" $(BIN_FOLDER)/robot-server plone.app.robotframework.testing.VOLTO_ROBOT_TESTING + ZSERVER_HOST=0.0.0.0 ZSERVER_PORT=55001 LISTEN_PORT=55001 APPLY_PROFILES="plonegovbr/intranet:default" CONFIGURE_PACKAGES="plone.restapi,plone.volto,plone.volto.cors,plonegovbr/intranet" $(BIN_FOLDER)/robot-server plone.app.robotframework.testing.VOLTO_ROBOT_TESTING .PHONY: acceptance-image-build acceptance-image-build: ## Build Docker Images diff --git a/backend/pyproject.toml b/backend/pyproject.toml index c982aa9..af6f275 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -1,10 +1,181 @@ -# Generated from: -# https://github.com/plone/meta/tree/main/config/default -# See the inline comments on how to expand/tweak this configuration file +[project] +name = "collective.volto.formsupport" +description = "Add support for customizable forms in Volto" +dynamic = ["version"] +authors = [ + { name = "RedTurtle Technology", email = "sviluppo@redturtle.it" }, +] +readme = "README.md" +requires-python = ">=3.8" +license = "MIT" +keywords = ["Plone", "Python", "forms", "CMS", "Volto"] +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "Framework :: Plone", + "Framework :: Plone :: Addon", + "Framework :: Plone :: 6.0", + "Programming Language :: Python", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Operating System :: OS Independent", + "License :: OSI Approved :: GNU General Public License v2 (GPLv2)", +] +dependencies = [ + "setuptools", + "z3c.jbot", + "Zope", + "plone.api>=1.8.4", + "plone.dexterity", + "plone.keyring", + "plone.i18n", + "plone.memoize", + "plone.protect", + "plone.registry", + "plone.restapi>=8.36.0", + "plone.schema", + "Products.GenericSetup", + "Products.PortalTransforms", + "souper.plone", + "click", + "beautifulsoup4", + "pyotp", +] + +[project.urls] +Documentation = "https://github.com/collective/collective.volto.formsupport#readme" +Issues = "https://github.com/collective/collective.volto.formsupport/issues" +Source = "https://github.com/collective/collective.volto.formsupport" + +[project.entry-points."z3c.autoinclude.plugin"] +target = "plone" + +[tool.hatch.version] +path = "src/collective/volto/formsupport/about.py" + +[tool.hatch.build] +strict-naming = false +packages = ["src/collective","src/collective/volto"] + +[tool.hatch.build.targets.sdist] +exclude = [ + "/.github", +] + [build-system] -requires = ["setuptools>=68.2"] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.hatch.env] +requires = [ + "hatch-pip-compile" +] + +[tool.hatch.envs.default] +type = "pip-compile" +path = ".venv" +pip-compile-resolver = "uv" +pip-compile-installer = "uv" +lock-filename = "requirements.lock" +pip-compile-args = [ + "--constraint", + "constraints-mxdev.txt", +] +dependencies = [ + "coverage[toml]>=6.5", + "hatch", + "ruff", + "i18ndude", + "isort", + "hatchling==1.24.2", + "plone.app.testing", + "plone.restapi[test]", + "pytest-cov==5.0.0", + "pytest-plone>=0.5.0", + "pytest", + "towncrier==23.11.0", + "zpretty", + "Products.MailHost", + "plone.browserlayer", + "collective.MockMailHost", + "collective.honeypot", + "plone.formwidget.hcaptcha", + "plone.formwidget.recaptcha", + "collective.z3cform.norobots", + "collective.honeypot", +] + +[tool.hatch.envs.default.scripts] +test = "pytest {args:tests}" +test-cov = "coverage run -m pytest {args:tests}" +cov-report = [ + "- coverage combine", + "coverage report", +] +cov = [ + "test-cov", + "cov-report", +] +zpretty_lint = [ + "find src -name '*.xml'|xargs zpretty -x --check", + "find src -name '*.zcml'|xargs zpretty -z --check", +] +zpretty_format = [ + "find src -name '*.xml'|xargs zpretty -x -i", + "find src -name '*.zcml'|xargs zpretty -z -i", +] +lint = [ + "ruff check", + "isort --check-only src/ tests/", + "zpretty_lint" +] +format = [ + "ruff format", + "isort src/ tests/", + "zpretty_format" +] +i18n = [ + "python -m collective.volto.formsupport.locales.update" +] +changelog-draft = "towncrier --draft" + +[[tool.hatch.envs.all.matrix]] +python = ["3.10", "3.11", "3.12"] + +[tool.coverage.run] +source_pkgs = ["collective.volto.formsupport", "tests"] +branch = true +parallel = true +omit = [ + "collective/volto/formsupport/locales/__init__.py", + "collective/volto/formsupport/locales/update.py", +] + +[tool.coverage.paths] +collective.volto.formsupport = ["src/collective/volto/formsupport"] +tests = ["tests",] + +[tool.coverage.report] +skip_empty = true +show_missing = true +exclude_lines = [ + "no cov", + "if __name__ == .__main__.:", + "if TYPE_CHECKING:", +] + +[tool.pytest.ini_options] +testpaths = ["tests"] + +[tool.isort] +profile = "plone" [tool.towncrier] +package = "collective.volto.formsupport" +package_dir = "src" directory = "news/" filename = "CHANGES.md" start_string = "\n" @@ -42,97 +213,52 @@ directory = "tests" name = "Tests" showcontent = true -## -# Add extra configuration options in .meta.toml: -# [pyproject] -# towncrier_extra_lines = """ -# extra_configuration -# """ -## +[tool.ruff] +target-version = "py310" +line-length = 88 +fix = true +lint.select = [ + # flake8-2020 + "YTT", + # flake8-bandit + "S", + # flake8-bugbear + "B", + # flake8-builtins + "A", + # flake8-comprehensions + "C4", + # flake8-debugger + "T10", + # flake8-simplify + "SIM", + # mccabe + "C90", + # pycodestyle + "E", "W", + # pyflakes + "F", + # pygrep-hooks + "PGH", + # pyupgrade + "UP", + # ruff + "RUF", +] +lint.ignore = [ + # DoNotAssignLambda + "E731", +] -[tool.isort] -profile = "plone" +[tool.ruff.format] +preview = true -## -# Add extra configuration options in .meta.toml: -# [pyproject] -# isort_extra_lines = """ -# extra_configuration -# """ -## - -[tool.black] -target-version = ["py38"] - -## -# Add extra configuration options in .meta.toml: -# [pyproject] -# black_extra_lines = """ -# extra_configuration -# """ -## +[tool.ruff.lint.per-file-ignores] +"tests/*" = ["S101"] [tool.codespell] ignore-words-list = "discreet,vew" skip = "*.po,*.min.js" -## -# Add extra configuration options in .meta.toml: -# [pyproject] -# codespell_ignores = "foo,bar" -# codespell_skip = "*.po,*.map,package-lock.json" -## - -[tool.dependencychecker] -Zope = [ - # Zope own provided namespaces - 'App', 'OFS', 'Products.Five', 'Products.OFSP', 'Products.PageTemplates', - 'Products.SiteAccess', 'Shared', 'Testing', 'ZPublisher', 'ZTUtils', - 'Zope2', 'webdav', 'zmi', - # ExtensionClass own provided namespaces - 'ExtensionClass', 'ComputedAttribute', 'MethodObject', - # Zope dependencies - 'AccessControl', 'Acquisition', 'AuthEncoding', 'beautifulsoup4', 'BTrees', - 'cffi', 'Chameleon', 'DateTime', 'DocumentTemplate', - 'MultiMapping', 'multipart', 'PasteDeploy', 'Persistence', 'persistent', - 'pycparser', 'python-gettext', 'pytz', 'RestrictedPython', 'roman', - 'soupsieve', 'transaction', 'waitress', 'WebOb', 'WebTest', 'WSGIProxy2', - 'z3c.pt', 'zc.lockfile', 'ZConfig', 'zExceptions', 'ZODB', 'zodbpickle', - 'zope.annotation', 'zope.browser', 'zope.browsermenu', 'zope.browserpage', - 'zope.browserresource', 'zope.cachedescriptors', 'zope.component', - 'zope.configuration', 'zope.container', 'zope.contentprovider', - 'zope.contenttype', 'zope.datetime', 'zope.deferredimport', - 'zope.deprecation', 'zope.dottedname', 'zope.event', 'zope.exceptions', - 'zope.filerepresentation', 'zope.globalrequest', 'zope.hookable', - 'zope.i18n', 'zope.i18nmessageid', 'zope.interface', 'zope.lifecycleevent', - 'zope.location', 'zope.pagetemplate', 'zope.processlifetime', 'zope.proxy', - 'zope.ptresource', 'zope.publisher', 'zope.schema', 'zope.security', - 'zope.sequencesort', 'zope.site', 'zope.size', 'zope.structuredtext', - 'zope.tal', 'zope.tales', 'zope.testbrowser', 'zope.testing', - 'zope.traversing', 'zope.viewlet' -] -'Products.CMFCore' = [ - 'docutils', 'five.localsitemanager', 'Missing', 'Products.BTreeFolder2', - 'Products.GenericSetup', 'Products.MailHost', 'Products.PythonScripts', - 'Products.StandardCacheManagers', 'Products.ZCatalog', 'Record', - 'zope.sendmail', 'Zope' -] -'plone.base' = [ - 'plone.batching', 'plone.registry', 'plone.schema','plone.z3cform', - 'Products.CMFCore', 'Products.CMFDynamicViewFTI', -] -python-dateutil = ['dateutil'] -pytest-plone = ['pytest', 'plone.testing', 'plone.app.testing'] -ignore-packages = ['plone.app.iterate', 'plone.app.upgrade', 'plone.volto', 'zestreleaser.towncrier', 'zest.releaser', 'pytest-cov'] - -## -# Add extra configuration options in .meta.toml: -# [pyproject] -# dependencies_ignores = "['zestreleaser.towncrier']" -# dependencies_mappings = [ -# "gitpython = ['git']", -# "pygithub = ['github']", -# ] -## [tool.check-manifest] ignore = [ @@ -142,29 +268,4 @@ ignore = [ ".pre-commit-config.yaml", "dependabot.yml", "mx.ini", - "tox.ini", - -] - -## -# Add extra configuration options in .meta.toml: -# [pyproject] -# check_manifest_ignores = """ -# "*.map.js", -# "*.pyc", -# """ -# check_manifest_extra_lines = """ -# ignore-bad-ideas = [ -# "some/test/file/PKG-INFO", -# ] -# """ -## - - -## -# Add extra configuration options in .meta.toml: -# [pyproject] -# extra_lines = """ -# _your own configuration lines_ -# """ -## +] diff --git a/backend/requirements.lock b/backend/requirements.lock new file mode 100644 index 0000000..6688a9a --- /dev/null +++ b/backend/requirements.lock @@ -0,0 +1,2867 @@ +# +# This file is autogenerated by hatch-pip-compile with Python 3.12 +# +# - coverage[toml]>=6.5 +# - hatch +# - ruff +# - i18ndude +# - isort +# - hatchling==1.24.2 +# - plone.app.testing +# - plone.restapi[test] +# - pytest-cov==5.0.0 +# - pytest-plone>=0.5.0 +# - pytest +# - towncrier==23.11.0 +# - zpretty +# - Products.MailHost +# - plone.browserlayer +# - collective.MockMailHost +# - collective.honeypot +# - plone.formwidget.hcaptcha +# - plone.formwidget.recaptcha +# - collective.z3cform.norobots +# - collective.honeypot +# - beautifulsoup4 +# - click +# - plone-api>=1.8.4 +# - plone-dexterity +# - plone-i18n +# - plone-keyring +# - plone-memoize +# - plone-protect +# - plone-registry +# - plone-restapi>=8.36.0 +# - plone-schema +# - products-genericsetup +# - products-portaltransforms +# - pyotp +# - setuptools +# - souper-plone +# - z3c-jbot +# - zope +# + +accesscontrol==6.3 + # via + # -c constraints-mxdev.txt + # borg-localrole + # documenttemplate + # five-intid + # plone-app-caching + # plone-batching + # plone-subrequest + # products-btreefolder2 + # products-externalmethod + # products-mailhost + # products-pluggableauthservice + # products-pythonscripts + # products-sessions + # products-siteerrorlog + # products-standardcachemanagers + # products-zcatalog + # zope +acquisition==5.1 + # via + # -c constraints-mxdev.txt + # accesscontrol + # borg-localrole + # documenttemplate + # five-customerize + # five-intid + # five-localsitemanager + # plone-app-caching + # plone-app-customerize + # plone-app-users + # plone-schemaeditor + # plone-subrequest + # plone-uuid + # products-btreefolder2 + # products-externalmethod + # products-mailhost + # products-pythonscripts + # products-sessions + # products-siteerrorlog + # products-zcatalog + # products-zopeversioncontrol + # zope +anyio==4.4.0 + # via httpx +attrs==23.2.0 + # via + # -c constraints-mxdev.txt + # jsonschema + # outcome + # referencing + # trio +authencoding==5.0 + # via + # -c constraints-mxdev.txt + # accesscontrol + # products-plonepas +babel==2.13.1 + # via + # -c constraints-mxdev.txt + # plone-app-robotframework +beautifulsoup4==4.12.2 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # plone-outputfilters + # webtest + # zope-testbrowser + # zpretty +borg-localrole==3.1.11 + # via + # -c constraints-mxdev.txt + # products-cmfplone +btrees==5.1 + # via + # -c constraints-mxdev.txt + # accesscontrol + # plone-app-discussion + # plone-app-multilingual + # plone-app-portlets + # plone-app-redirector + # plone-app-vocabularies + # plone-formwidget-namedfile + # plone-portlets + # products-btreefolder2 + # products-cmfeditions + # products-daterecurringindex + # products-plonepas + # products-zcatalog + # zc-relation + # zodb + # zodb3 + # zope + # zope-container + # zope-index + # zope-intid +certifi==2024.2.2 + # via + # -c constraints-mxdev.txt + # httpcore + # httpx + # requests + # selenium +cffi==1.16.0 + # via + # -c constraints-mxdev.txt + # persistent +chameleon==4.2.0 + # via + # -c constraints-mxdev.txt + # z3c-pt + # zope +charset-normalizer==3.3.2 + # via + # -c constraints-mxdev.txt + # requests +click==8.1.7 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # hatch + # robotframework-browser + # towncrier + # userpath +collective-honeypot==3.0.0 + # via hatch.envs.default +collective-mockmailhost==3.0.0 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # plone-restapi +collective-monkeypatcher==1.2.1 + # via + # -c constraints-mxdev.txt + # plone-protect + # plone-rest +collective-z3cform-norobots==3.0 + # via hatch.envs.default +coverage==7.5.4 + # via + # hatch.envs.default + # pytest-cov +cssselect==1.2.0 + # via + # -c constraints-mxdev.txt + # diazo + # lxml +datetime==5.3 + # via + # -c constraints-mxdev.txt + # accesscontrol + # products-mailhost + # products-pythonscripts + # products-zcatalog + # products-zopeversioncontrol + # zope +decorator==5.1.1 + # via + # -c constraints-mxdev.txt + # plone-api + # plone-app-testing +diazo==2.0.1 + # via + # -c constraints-mxdev.txt + # plone-app-theming +distlib==0.3.8 + # via virtualenv +documenttemplate==4.6 + # via + # -c constraints-mxdev.txt + # plone-outputfilters + # products-mailhost + # products-portaltransforms + # products-pythonscripts + # products-zcatalog + # zope +docutils==0.18.1 + # via + # -c constraints-mxdev.txt + # plone-app-robotframework + # plone-app-theming + # products-cmfcore + # products-portaltransforms +extensionclass==5.1 + # via + # -c constraints-mxdev.txt + # accesscontrol + # acquisition + # documenttemplate + # missing + # multimapping + # persistence + # plone-app-portlets + # plone-portlet-collection + # products-btreefolder2 + # products-externalmethod + # products-mailhost + # products-zcatalog + # record + # zope +feedparser==6.0.11 + # via + # -c constraints-mxdev.txt + # plone-app-portlets +filelock==3.13.4 + # via + # -c constraints-mxdev.txt + # virtualenv +five-customerize==3.0.0 + # via + # -c constraints-mxdev.txt + # plone-app-customerize + # plone-app-portlets + # products-cmfplone +five-intid==2.0.0 + # via + # -c constraints-mxdev.txt + # plone-app-intid + # plone-app-relationfield +five-localsitemanager==4.0 + # via + # -c constraints-mxdev.txt + # five-intid + # products-cmfcore + # products-genericsetup +furl==2.1.3 + # via + # -c constraints-mxdev.txt + # robotframework-seleniumtestability +grpcio==1.59.0 + # via + # grpcio-tools + # robotframework-browser +grpcio-tools==1.59.0 + # via + # -c constraints-mxdev.txt + # robotframework-browser +h11==0.14.0 + # via + # -c constraints-mxdev.txt + # httpcore + # wsproto +hatch==1.12.0 + # via hatch.envs.default +hatchling==1.24.2 + # via + # hatch.envs.default + # hatch +httpcore==1.0.5 + # via httpx +httpx==0.27.0 + # via hatch +hyperlink==21.0.0 + # via hatch +i18ndude==6.2.0 + # via + # -c constraints-mxdev.txt + # hatch.envs.default +icalendar==5.0.12 + # via + # -c constraints-mxdev.txt + # plone-app-event +idna==3.4 + # via + # -c constraints-mxdev.txt + # anyio + # httpx + # hyperlink + # requests + # trio +incremental==22.10.0 + # via + # -c constraints-mxdev.txt + # towncrier +iniconfig==2.0.0 + # via pytest +isort==5.13.2 + # via hatch.envs.default +jaraco-classes==3.3.1 + # via + # -c constraints-mxdev.txt + # keyring +jinja2==3.1.2 + # via + # -c constraints-mxdev.txt + # towncrier +jsonschema==4.21.1 + # via + # -c constraints-mxdev.txt + # plone-schema +jsonschema-specifications==2023.12.1 + # via + # -c constraints-mxdev.txt + # jsonschema +keyring==24.3.1 + # via + # -c constraints-mxdev.txt + # hatch +lxml==5.2.1 + # via + # -c constraints-mxdev.txt + # diazo + # i18ndude + # lxml-html-clean + # plone-app-contentrules + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-registry + # plone-app-theming + # plone-autoform + # plone-protect + # plone-staticresources + # plone-supermodel + # products-cmfplone + # products-portaltransforms + # repoze-xmliter + # robotsuite + # zpretty +lxml-html-clean==0.1.1 + # via + # -c constraints-mxdev.txt + # products-portaltransforms +markdown==3.5.2 + # via + # -c constraints-mxdev.txt + # products-portaltransforms +markdown-it-py==3.0.0 + # via + # -c constraints-mxdev.txt + # rich +markupsafe==2.1.3 + # via + # -c constraints-mxdev.txt + # jinja2 +mdurl==0.1.2 + # via + # -c constraints-mxdev.txt + # markdown-it-py +missing==5.0 + # via + # -c constraints-mxdev.txt + # plone-app-content + # products-cmfeditions + # products-zcatalog +mock==5.1.0 + # via + # -c constraints-mxdev.txt + # plone-restapi +more-itertools==10.2.0 + # via + # -c constraints-mxdev.txt + # jaraco-classes +multimapping==5.0 + # via + # -c constraints-mxdev.txt + # zope +multipart==0.2.4 + # via + # -c constraints-mxdev.txt + # zope + # zope-publisher +node==1.2.2 + # via node-ext-zodb +node-ext-zodb==1.6 + # via souper +odict==1.9.0 + # via node +orderedmultidict==1.0.1 + # via + # -c constraints-mxdev.txt + # furl +outcome==1.3.0.post0 + # via + # -c constraints-mxdev.txt + # trio +overrides==7.7.0 + # via + # -c constraints-mxdev.txt + # robotframework-browser +packaging==23.2 + # via + # -c constraints-mxdev.txt + # hatch + # hatchling + # pytest +paste==3.7.1 + # via + # -c constraints-mxdev.txt + # zope +pastedeploy==3.1.0 + # via + # -c constraints-mxdev.txt + # zope +pathspec==0.12.1 + # via hatchling +persistence==4.1 + # via + # -c constraints-mxdev.txt + # accesscontrol + # products-btreefolder2 + # products-cmfeditions + # products-externalmethod + # products-mailhost + # products-portaltransforms + # products-sessions + # products-zcatalog + # zope +persistent==5.1 + # via + # -c constraints-mxdev.txt + # btrees + # five-intid + # five-localsitemanager + # persistence + # plone-app-discussion + # plone-app-redirector + # plone-app-testing + # plone-app-viewletmanager + # plone-app-workflow + # plone-formwidget-namedfile + # plone-keyring + # plone-namedfile + # plone-portlets + # plone-scale + # products-portaltransforms + # products-sessions + # zeo + # zodb + # zodb3 + # zope-container + # zope-index + # zope-intid + # zope-ramcache +pexpect==4.9.0 + # via hatch +piexif==1.1.3 + # via + # -c constraints-mxdev.txt + # plone-namedfile +pillow==9.5.0 + # via + # -c constraints-mxdev.txt + # plone-app-robotframework + # plone-app-users + # plone-scale + # products-plonepas + # products-portaltransforms +platformdirs==4.2.2 + # via + # hatch + # virtualenv +plone-alterego==2.0.1 + # via + # -c constraints-mxdev.txt + # plone-dexterity +plone-api==2.1.0 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # plone-app-discussion + # plone-restapi + # products-cmfplone + # pytest-plone +plone-app-caching==3.1.4 + # via + # -c constraints-mxdev.txt + # plone-restapi +plone-app-content==4.1.2 + # via + # -c constraints-mxdev.txt + # plone-app-contentmenu + # plone-app-layout + # plone-app-multilingual + # products-cmfplone +plone-app-contentlisting==3.0.5 + # via + # -c constraints-mxdev.txt + # plone-app-event + # plone-app-querystring + # plone-app-z3cform + # products-cmfplone +plone-app-contentmenu==3.0.4 + # via + # -c constraints-mxdev.txt + # plone-app-contenttypes + # plone-app-multilingual + # products-cmfplone +plone-app-contentrules==5.0.3 + # via + # -c constraints-mxdev.txt + # products-cmfplone +plone-app-contenttypes==3.0.7 + # via + # -c constraints-mxdev.txt + # plone-app-contentrules + # plone-app-event + # plone-app-testing + # plone-restapi + # products-cmfplone +plone-app-customerize==2.0.1 + # via + # -c constraints-mxdev.txt + # products-cmfplone +plone-app-dexterity==3.2.0 + # via + # -c constraints-mxdev.txt + # plone-app-content + # plone-app-contenttypes + # plone-app-event + # plone-app-multilingual + # plone-app-versioningbehavior + # products-cmfplone +plone-app-discussion==4.1.2 + # via + # -c constraints-mxdev.txt + # plone-app-contentrules + # products-cmfplone +plone-app-event==5.1.2 + # via + # -c constraints-mxdev.txt + # plone-app-discussion + # plone-app-multilingual + # plone-app-users +plone-app-i18n==4.0.1 + # via + # -c constraints-mxdev.txt + # plone-app-multilingual + # plone-app-portlets + # products-cmfplone +plone-app-intid==2.0.0 + # via + # -c constraints-mxdev.txt + # plone-app-dexterity + # plone-app-linkintegrity + # plone-app-relationfield +plone-app-layout==4.1.0 + # via + # -c constraints-mxdev.txt + # plone-app-contenttypes + # plone-app-discussion + # plone-app-multilingual + # plone-app-portlets + # plone-app-users + # products-cmfplone +plone-app-linkintegrity==4.0.3 + # via + # -c constraints-mxdev.txt + # plone-api + # plone-app-contenttypes + # products-cmfplone +plone-app-locales==6.0.21 + # via + # -c constraints-mxdev.txt + # products-cmfplone +plone-app-lockingbehavior==2.0.0 + # via + # -c constraints-mxdev.txt + # plone-app-contenttypes +plone-app-multilingual==7.0.4 + # via + # -c constraints-mxdev.txt + # products-cmfplone +plone-app-portlets==5.0.7 + # via + # -c constraints-mxdev.txt + # plone-app-event + # plone-portlet-collection + # plone-portlet-static + # products-cmfplone +plone-app-querystring==2.1.1 + # via + # -c constraints-mxdev.txt + # plone-app-content + # plone-app-contenttypes + # plone-app-event + # plone-portlet-collection +plone-app-redirector==3.0.2 + # via + # -c constraints-mxdev.txt + # products-cmfplone +plone-app-registry==2.0.4 + # via + # -c constraints-mxdev.txt + # collective-z3cform-norobots + # plone-app-caching + # plone-app-discussion + # plone-app-event + # plone-app-multilingual + # plone-app-querystring + # plone-app-theming + # plone-formwidget-hcaptcha + # plone-formwidget-recaptcha + # products-cmfplone +plone-app-relationfield==3.0.5 + # via + # -c constraints-mxdev.txt + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-layout + # plone-app-linkintegrity +plone-app-robotframework==2.1.2 + # via + # -c constraints-mxdev.txt + # plone-app-contenttypes +plone-app-testing==7.0.2 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # plone-app-contenttypes + # plone-app-robotframework + # plone-restapi + # pytest-plone +plone-app-textfield==2.0.1 + # via + # -c constraints-mxdev.txt + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-event + # plone-app-linkintegrity + # plone-app-robotframework + # plone-app-z3cform + # plone-portlet-static +plone-app-theming==5.0.8 + # via + # -c constraints-mxdev.txt + # plonetheme-barceloneta + # products-cmfplone +plone-app-users==3.0.6 + # via + # -c constraints-mxdev.txt + # products-cmfplone +plone-app-uuid==2.2.3 + # via + # -c constraints-mxdev.txt + # plone-api + # plone-app-content + # plone-app-contentrules + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-discussion + # plone-app-event + # plone-app-layout + # plone-app-linkintegrity + # plone-app-multilingual + # plone-app-portlets + # plone-dexterity + # plone-namedfile + # plone-outputfilters + # plone-portlet-collection + # products-cmfplone +plone-app-versioningbehavior==2.0.2 + # via + # -c constraints-mxdev.txt + # plone-app-contenttypes +plone-app-viewletmanager==4.0.3 + # via + # -c constraints-mxdev.txt + # plone-app-layout + # products-cmfplone +plone-app-vocabularies==5.0.5 + # via + # -c constraints-mxdev.txt + # plone-app-content + # plone-app-contentrules + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-event + # plone-app-multilingual + # plone-app-portlets + # plone-app-querystring + # plone-app-relationfield + # plone-app-users + # plone-portlet-collection + # products-cmfplone +plone-app-workflow==5.0.3 + # via + # -c constraints-mxdev.txt + # products-cmfplone +plone-app-z3cform==4.3.2 + # via + # -c constraints-mxdev.txt + # plone-app-content + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-event + # plone-app-multilingual + # plone-app-portlets + # plone-app-registry + # plone-app-relationfield + # plone-portlet-collection + # plone-portlet-static + # products-cmfplone +plone-autoform==2.0.2 + # via + # -c constraints-mxdev.txt + # plone-app-content + # plone-app-contentrules + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-event + # plone-app-multilingual + # plone-app-portlets + # plone-app-registry + # plone-app-relationfield + # plone-app-users + # plone-app-versioningbehavior + # plone-dexterity + # plone-portlet-collection + # plone-portlet-static + # plone-schemaeditor +plone-autoinclude==1.0.1 + # via + # -c constraints-mxdev.txt + # products-cmfplone +plone-base==1.4.0 + # via + # -c constraints-mxdev.txt + # collective-z3cform-norobots + # plone-app-caching + # plone-app-content + # plone-app-contentlisting + # plone-app-contentmenu + # plone-app-contentrules + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-discussion + # plone-app-event + # plone-app-layout + # plone-app-linkintegrity + # plone-app-multilingual + # plone-app-portlets + # plone-app-querystring + # plone-app-registry + # plone-app-relationfield + # plone-app-robotframework + # plone-app-textfield + # plone-app-theming + # plone-app-users + # plone-app-versioningbehavior + # plone-app-vocabularies + # plone-app-workflow + # plone-app-z3cform + # plone-dexterity + # plone-formwidget-namedfile + # plone-formwidget-recurrence + # plone-locking + # plone-outputfilters + # plone-portlet-collection + # plone-portlet-static + # plone-resourceeditor + # plone-staticresources + # plone-stringinterp + # products-cmfdifftool + # products-cmfplone + # products-isurlinportal + # products-plonepas + # products-portaltransforms + # pytest-plone +plone-batching==2.0.6 + # via + # -c constraints-mxdev.txt + # plone-app-querystring + # plone-base + # plone-z3cform +plone-behavior==2.0.1 + # via + # -c constraints-mxdev.txt + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-event + # plone-app-lockingbehavior + # plone-app-multilingual + # plone-app-relationfield + # plone-app-versioningbehavior + # plone-dexterity +plone-browserlayer==3.0.2 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # plone-app-contenttypes + # plone-app-customerize + # plone-app-event + # products-cmfplone + # pytest-plone +plone-cachepurging==3.0.2 + # via + # -c constraints-mxdev.txt + # plone-app-caching +plone-caching==2.0.1 + # via + # -c constraints-mxdev.txt + # plone-app-caching + # plone-resource +plone-contentrules==3.0.1 + # via + # -c constraints-mxdev.txt + # plone-app-contentrules + # plone-app-dexterity + # products-cmfplone +plone-dexterity==3.0.6 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # plone-app-caching + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-event + # plone-app-layout + # plone-app-linkintegrity + # plone-app-lockingbehavior + # plone-app-multilingual + # plone-app-relationfield + # plone-app-robotframework + # plone-app-testing + # plone-app-versioningbehavior + # plone-app-z3cform + # pytest-plone +plone-event==2.0.1 + # via + # -c constraints-mxdev.txt + # plone-app-contenttypes + # plone-app-event + # products-daterecurringindex +plone-folder==4.0.1 + # via + # -c constraints-mxdev.txt + # plone-app-content + # plone-app-contenttypes + # plone-app-event + # plone-dexterity + # products-cmfeditions + # products-cmfplone +plone-formwidget-hcaptcha==1.0.3 + # via hatch.envs.default +plone-formwidget-namedfile==3.1.0 + # via + # -c constraints-mxdev.txt + # plone-app-dexterity + # plone-app-layout + # plone-app-users + # plone-app-z3cform +plone-formwidget-recaptcha==2.3.0 + # via hatch.envs.default +plone-formwidget-recurrence==3.0.4 + # via + # -c constraints-mxdev.txt + # plone-app-event +plone-i18n==5.0.2 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # plone-app-content + # plone-app-contentlisting + # plone-app-contenttypes + # plone-app-i18n + # plone-app-layout + # plone-app-multilingual + # plone-app-portlets + # plone-app-querystring + # plone-app-robotframework + # plone-app-theming + # plone-app-users + # plone-app-workflow + # plone-app-z3cform + # plone-portlet-collection + # plone-portlet-static + # products-cmfplone + # products-plonepas +plone-indexer==2.0.1 + # via + # -c constraints-mxdev.txt + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-discussion + # plone-app-event + # plone-app-multilingual + # plone-app-uuid + # products-cmfplone +plone-intelligenttext==4.0.1 + # via + # -c constraints-mxdev.txt + # products-cmfplone + # products-portaltransforms +plone-keyring==4.0.1 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # plone-protect + # plone-session +plone-locking==3.0.1 + # via + # -c constraints-mxdev.txt + # plone-app-content + # plone-app-contentmenu + # plone-app-dexterity + # plone-app-lockingbehavior + # plone-app-multilingual + # products-cmfeditions + # products-cmfplone +plone-memoize==3.0.2 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # borg-localrole + # plone-app-caching + # plone-app-content + # plone-app-contentmenu + # plone-app-contentrules + # plone-app-contenttypes + # plone-app-event + # plone-app-layout + # plone-app-multilingual + # plone-app-portlets + # plone-app-redirector + # plone-app-testing + # plone-app-theming + # plone-app-vocabularies + # plone-app-workflow + # plone-dexterity + # plone-portlet-collection + # plone-portlets + # plone-rest + # plone-schemaeditor + # plone-stringinterp + # products-cmfplone + # products-plonepas +plone-namedfile==6.3.0 + # via + # -c constraints-mxdev.txt + # plone-app-caching + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-event + # plone-app-robotframework + # plone-app-users + # plone-app-versioningbehavior + # plone-app-vocabularies + # plone-formwidget-namedfile + # plone-outputfilters +plone-outputfilters==5.0.4 + # via + # -c constraints-mxdev.txt + # products-cmfplone +plone-portlet-collection==4.0.3 + # via + # -c constraints-mxdev.txt + # products-cmfplone +plone-portlet-static==4.0.2 + # via + # -c constraints-mxdev.txt + # products-cmfplone +plone-portlets==3.0.1 + # via + # -c constraints-mxdev.txt + # five-customerize + # plone-app-contentmenu + # plone-app-contenttypes + # plone-app-customerize + # plone-app-event + # plone-app-layout + # plone-app-portlets + # plone-portlet-collection + # plone-portlet-static + # products-cmfplone +plone-protect==5.0.1 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # plone-app-caching + # plone-app-content + # plone-app-contentmenu + # plone-app-layout + # plone-app-multilingual + # plone-app-portlets + # plone-app-robotframework + # plone-app-users + # plone-app-z3cform + # plone-schemaeditor + # plone-session + # plone-subrequest + # products-cmfplone + # products-plonepas +plone-registry==2.0.1 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # collective-z3cform-norobots + # plone-app-caching + # plone-app-contentlisting + # plone-app-contentmenu + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-discussion + # plone-app-linkintegrity + # plone-app-multilingual + # plone-app-portlets + # plone-app-querystring + # plone-app-registry + # plone-app-robotframework + # plone-app-testing + # plone-app-theming + # plone-app-users + # plone-app-vocabularies + # plone-app-z3cform + # plone-base + # plone-cachepurging + # plone-caching + # plone-formwidget-hcaptcha + # plone-formwidget-namedfile + # plone-formwidget-recaptcha + # plone-i18n + # plone-outputfilters + # plone-portlet-collection + # products-plonepas + # products-portaltransforms +plone-resource==3.0.2 + # via + # -c constraints-mxdev.txt + # plone-app-discussion + # plone-app-event + # plone-app-theming + # plone-resourceeditor + # plone-staticresources + # plonetheme-barceloneta + # products-cmfplone +plone-resourceeditor==4.0.1 + # via + # -c constraints-mxdev.txt + # plone-app-theming +plone-rest==4.1.3 + # via + # -c constraints-mxdev.txt + # plone-restapi +plone-restapi==9.6.1 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # collective-z3cform-norobots +plone-rfc822==3.0.1 + # via + # -c constraints-mxdev.txt + # plone-app-contentlisting + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-relationfield + # plone-app-versioningbehavior + # plone-dexterity + # plone-namedfile +plone-scale==4.1.2 + # via + # -c constraints-mxdev.txt + # plone-namedfile + # plone-protect +plone-schema==2.0.1 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # plone-app-dexterity + # plone-app-users + # plone-app-z3cform + # plone-base + # plone-restapi + # products-cmfplone +plone-schemaeditor==4.0.5 + # via + # -c constraints-mxdev.txt + # plone-app-dexterity + # plone-app-multilingual + # plone-app-relationfield + # plone-app-users + # plone-namedfile +plone-session==4.0.4 + # via + # -c constraints-mxdev.txt + # products-cmfplone + # products-plonepas +plone-staticresources==2.1.14 + # via + # -c constraints-mxdev.txt + # plone-app-theming + # plone-resourceeditor + # products-cmfplone +plone-stringinterp==2.0.2 + # via + # -c constraints-mxdev.txt + # plone-app-contentrules +plone-subrequest==2.0.5 + # via + # -c constraints-mxdev.txt + # plone-app-theming + # plone-i18n +plone-supermodel==2.0.4 + # via + # -c constraints-mxdev.txt + # plone-app-content + # plone-app-contentrules + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-event + # plone-app-multilingual + # plone-app-registry + # plone-app-relationfield + # plone-app-users + # plone-app-versioningbehavior + # plone-autoform + # plone-dexterity + # plone-i18n + # plone-namedfile + # plone-schemaeditor +plone-testing==9.0.1 + # via + # -c constraints-mxdev.txt + # plone-app-contenttypes + # plone-app-robotframework + # plone-app-testing +plone-theme==4.0.1 + # via + # -c constraints-mxdev.txt + # plonetheme-barceloneta + # products-cmfplone +plone-transformchain==3.0.1 + # via + # -c constraints-mxdev.txt + # plone-app-caching + # plone-app-theming + # plone-caching + # plone-protect +plone-uuid==2.0.1 + # via + # -c constraints-mxdev.txt + # plone-api + # plone-app-content + # plone-app-contentlisting + # plone-app-contentrules + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-discussion + # plone-app-event + # plone-app-linkintegrity + # plone-app-multilingual + # plone-app-querystring + # plone-app-relationfield + # plone-app-robotframework + # plone-app-users + # plone-app-uuid + # plone-app-vocabularies + # plone-app-z3cform + # plone-dexterity + # plone-outputfilters +plone-z3cform==2.0.3 + # via + # -c constraints-mxdev.txt + # plone-app-caching + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-discussion + # plone-app-multilingual + # plone-app-registry + # plone-app-users + # plone-app-z3cform + # plone-autoform + # plone-base + # plone-schemaeditor +plonetheme-barceloneta==3.1.9 + # via + # -c constraints-mxdev.txt + # products-cmfplone +pluggy==1.5.0 + # via + # hatchling + # pytest +plumber==1.7 + # via node +products-btreefolder2==5.1 + # via + # -c constraints-mxdev.txt + # plone-app-contenttypes + # plone-resource + # products-cmfcore + # products-plonepas +products-cmfcore==3.5 + # via + # -c constraints-mxdev.txt + # borg-localrole + # collective-mockmailhost + # five-intid + # plone-app-caching + # plone-app-customerize + # plone-app-i18n + # plone-app-intid + # plone-app-multilingual + # plone-app-redirector + # plone-app-relationfield + # plone-app-uuid + # plone-app-viewletmanager + # plone-base + # plone-browserlayer + # plone-dexterity + # plone-folder + # plone-formwidget-hcaptcha + # plone-formwidget-recaptcha + # plone-i18n + # plone-indexer + # plone-protect + # plone-resource + # plone-resourceeditor + # plone-rest + # plone-theme + # products-cmfdynamicviewfti + # products-cmfeditions + # products-cmfuid + # products-dcworkflow + # products-mimetypesregistry + # products-portaltransforms +products-cmfdifftool==4.0.3 + # via + # -c constraints-mxdev.txt + # products-cmfeditions +products-cmfdynamicviewfti==7.0.2 + # via + # -c constraints-mxdev.txt + # plone-app-caching + # plone-base +products-cmfeditions==4.0.3 + # via + # -c constraints-mxdev.txt + # plone-app-layout + # plone-app-versioningbehavior + # products-cmfplone +products-cmfplone==6.0.11 + # via + # -c constraints-mxdev.txt + # collective-z3cform-norobots + # plone-app-caching + # plone-app-robotframework + # plone-app-testing + # plone-restapi + # pytest-plone + # souper-plone +products-cmfuid==4.2 + # via + # -c constraints-mxdev.txt + # products-cmfeditions +products-daterecurringindex==3.0.1 + # via + # -c constraints-mxdev.txt + # plone-app-event +products-dcworkflow==3.0 + # via + # -c constraints-mxdev.txt + # plone-app-workflow + # products-cmfplone +products-extendedpathindex==4.0.1 + # via + # -c constraints-mxdev.txt + # products-cmfplone +products-externalmethod==5.0 + # via + # -c constraints-mxdev.txt + # products-dcworkflow +products-genericsetup==3.0.2 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # borg-localrole + # collective-mockmailhost + # collective-z3cform-norobots + # plone-app-caching + # plone-app-contentrules + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-discussion + # plone-app-event + # plone-app-intid + # plone-app-linkintegrity + # plone-app-multilingual + # plone-app-portlets + # plone-app-querystring + # plone-app-registry + # plone-app-testing + # plone-app-theming + # plone-app-users + # plone-app-versioningbehavior + # plone-app-viewletmanager + # plone-app-workflow + # plone-app-z3cform + # plone-browserlayer + # plone-formwidget-recurrence + # plone-outputfilters + # plone-portlet-collection + # plone-portlet-static + # plone-protect + # plone-resource + # plone-session + # plone-staticresources + # plonetheme-barceloneta + # products-cmfcore + # products-cmfdifftool + # products-cmfeditions + # products-dcworkflow + # products-plonepas + # products-pluggableauthservice + # products-pluginregistry + # products-portaltransforms +products-isurlinportal==2.0.2 + # via + # -c constraints-mxdev.txt + # products-cmfplone +products-mailhost==5.2 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # collective-mockmailhost + # plone-app-contentrules + # plone-app-testing + # products-cmfcore +products-mimetypesregistry==3.0.1 + # via + # -c constraints-mxdev.txt + # plone-app-content + # plone-app-contentlisting + # plone-app-contenttypes + # plone-app-portlets + # plone-formwidget-namedfile + # plone-outputfilters + # plone-portlet-collection + # products-cmfplone + # products-portaltransforms +products-plonepas==8.0.2 + # via + # -c constraints-mxdev.txt + # borg-localrole + # plone-app-robotframework + # plone-app-users + # plone-stringinterp + # products-cmfplone +products-pluggableauthservice==3.0 + # via + # -c constraints-mxdev.txt + # borg-localrole + # plone-app-contentrules + # plone-app-portlets + # plone-app-robotframework + # plone-app-testing + # plone-protect + # plone-session + # products-plonepas +products-pluginregistry==2.0 + # via + # -c constraints-mxdev.txt + # products-pluggableauthservice +products-portaltransforms==4.0.3 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # plone-app-content + # plone-app-contenttypes + # plone-outputfilters + # products-cmfdifftool + # products-cmfplone +products-pythonscripts==5.0 + # via + # -c constraints-mxdev.txt + # plone-app-portlets + # products-cmfcore + # products-dcworkflow + # products-genericsetup +products-sessions==5.0 + # via + # -c constraints-mxdev.txt + # products-pluggableauthservice +products-siteerrorlog==6.0 + # via + # -c constraints-mxdev.txt + # products-cmfplone +products-standardcachemanagers==5.0 + # via + # -c constraints-mxdev.txt + # products-cmfcore + # products-pluggableauthservice +products-statusmessages==5.0.6 + # via + # -c constraints-mxdev.txt + # plone-api + # plone-app-caching + # plone-app-content + # plone-app-contentrules + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-discussion + # plone-app-event + # plone-app-layout + # plone-app-linkintegrity + # plone-app-multilingual + # plone-app-portlets + # plone-app-registry + # plone-app-theming + # plone-app-users + # plone-app-workflow + # plone-dexterity + # plone-schemaeditor + # products-cmfeditions + # products-cmfplone +products-zcatalog==7.0 + # via + # -c constraints-mxdev.txt + # plone-app-contentlisting + # plone-app-discussion + # plone-app-event + # plone-app-layout + # plone-app-querystring + # plone-app-redirector + # plone-app-uuid + # plone-app-vocabularies + # plone-folder + # products-cmfcore + # products-cmfuid + # products-daterecurringindex + # products-extendedpathindex + # products-genericsetup +products-zopeversioncontrol==4.1 + # via + # -c constraints-mxdev.txt + # products-cmfeditions +prompt-toolkit==2.0.10 + # via + # -c constraints-mxdev.txt + # robotframework-debuglibrary +protobuf==4.24.4 + # via + # grpcio-tools + # robotframework-browser +ptyprocess==0.7.0 + # via pexpect +pycparser==2.21 + # via + # -c constraints-mxdev.txt + # cffi +pygments==2.17.2 + # via + # -c constraints-mxdev.txt + # rich +pyjwt==2.8.0 + # via + # -c constraints-mxdev.txt + # plone-restapi +pyotp==2.9.0 + # via hatch.envs.default +pysocks==1.7.1 + # via + # -c constraints-mxdev.txt + # urllib3 +pytest==7.4.4 + # via + # hatch.envs.default + # pytest-cov + # pytest-plone + # zope-pytestlayer +pytest-cov==5.0.0 + # via hatch.envs.default +pytest-plone==0.5.0 + # via hatch.envs.default +python-dateutil==2.8.2 + # via + # -c constraints-mxdev.txt + # icalendar + # plone-app-caching + # plone-app-querystring + # plone-app-theming + # plone-event + # plone-formwidget-recurrence + # plone-resource + # plone-restapi + # plone-rfc822 +python-gettext==5.0 + # via + # -c constraints-mxdev.txt + # zope-i18n +pytz==2023.3.post1 + # via + # -c constraints-mxdev.txt + # datetime + # icalendar + # plone-app-event + # plone-app-vocabularies + # plone-app-z3cform + # plone-event + # plone-restapi + # zope-i18n + # zope-testbrowser +record==4.0 + # via + # -c constraints-mxdev.txt + # products-zcatalog +referencing==0.33.0 + # via + # -c constraints-mxdev.txt + # jsonschema + # jsonschema-specifications +repoze-catalog==0.9.0 + # via souper +repoze-xmliter==1.0b1 + # via + # -c constraints-mxdev.txt + # plone-app-theming + # plone-protect +requests==2.31.0 + # via + # -c constraints-mxdev.txt + # plone-cachepurging + # plone-restapi +restrictedpython==7.0 + # via + # -c constraints-mxdev.txt + # accesscontrol + # documenttemplate + # products-pythonscripts + # products-zcatalog + # zope +rich==13.7.1 + # via + # -c constraints-mxdev.txt + # hatch +robotframework==6.0.2 + # via + # -c constraints-mxdev.txt + # plone-app-robotframework + # robotframework-assertion-engine + # robotframework-browser + # robotframework-debuglibrary + # robotframework-seleniumlibrary + # robotsuite +robotframework-assertion-engine==2.0.0 + # via + # -c constraints-mxdev.txt + # robotframework-browser +robotframework-browser==17.5.2 + # via + # -c constraints-mxdev.txt + # plone-app-robotframework +robotframework-debuglibrary==2.3.0 + # via + # -c constraints-mxdev.txt + # plone-app-robotframework +robotframework-pythonlibcore==4.2.0 + # via + # -c constraints-mxdev.txt + # robotframework-assertion-engine + # robotframework-browser + # robotframework-seleniumlibrary +robotframework-selenium2library==3.0.0 + # via + # -c constraints-mxdev.txt + # plone-app-robotframework + # plone-app-testing +robotframework-seleniumlibrary==6.1.3 + # via + # -c constraints-mxdev.txt + # robotframework-selenium2library + # robotframework-seleniumtestability +robotframework-seleniumtestability==2.1.0 + # via + # -c constraints-mxdev.txt + # plone-app-robotframework +robotsuite==2.3.2 + # via + # -c constraints-mxdev.txt + # plone-app-contenttypes + # plone-app-robotframework + # plone-app-testing +roman==4.1 + # via + # -c constraints-mxdev.txt + # documenttemplate +rpds-py==0.13.2 + # via + # -c constraints-mxdev.txt + # jsonschema + # referencing +ruff==0.5.1 + # via hatch.envs.default +selenium==4.9.1 + # via + # -c constraints-mxdev.txt + # plone-app-robotframework + # plone-app-testing + # robotframework-seleniumlibrary +setuptools==69.5.1 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # babel + # borg-localrole + # collective-honeypot + # collective-mockmailhost + # collective-monkeypatcher + # collective-z3cform-norobots + # five-customerize + # five-intid + # five-localsitemanager + # grpcio-tools + # node + # node-ext-zodb + # odict + # paste + # plone-alterego + # plone-api + # plone-app-caching + # plone-app-contentlisting + # plone-app-contentmenu + # plone-app-contentrules + # plone-app-contenttypes + # plone-app-customerize + # plone-app-dexterity + # plone-app-discussion + # plone-app-event + # plone-app-i18n + # plone-app-intid + # plone-app-layout + # plone-app-linkintegrity + # plone-app-locales + # plone-app-lockingbehavior + # plone-app-multilingual + # plone-app-portlets + # plone-app-querystring + # plone-app-redirector + # plone-app-registry + # plone-app-relationfield + # plone-app-robotframework + # plone-app-testing + # plone-app-textfield + # plone-app-theming + # plone-app-users + # plone-app-uuid + # plone-app-versioningbehavior + # plone-app-viewletmanager + # plone-app-vocabularies + # plone-app-workflow + # plone-app-z3cform + # plone-autoform + # plone-autoinclude + # plone-base + # plone-batching + # plone-behavior + # plone-browserlayer + # plone-cachepurging + # plone-caching + # plone-contentrules + # plone-dexterity + # plone-event + # plone-folder + # plone-formwidget-hcaptcha + # plone-formwidget-namedfile + # plone-formwidget-recaptcha + # plone-formwidget-recurrence + # plone-i18n + # plone-indexer + # plone-intelligenttext + # plone-keyring + # plone-locking + # plone-memoize + # plone-namedfile + # plone-outputfilters + # plone-portlet-collection + # plone-portlet-static + # plone-portlets + # plone-protect + # plone-registry + # plone-resource + # plone-resourceeditor + # plone-rest + # plone-restapi + # plone-rfc822 + # plone-scale + # plone-schema + # plone-schemaeditor + # plone-session + # plone-staticresources + # plone-stringinterp + # plone-subrequest + # plone-supermodel + # plone-testing + # plone-theme + # plone-transformchain + # plone-uuid + # plone-z3cform + # plonetheme-barceloneta + # plumber + # products-btreefolder2 + # products-cmfcore + # products-cmfdifftool + # products-cmfdynamicviewfti + # products-cmfeditions + # products-cmfplone + # products-cmfuid + # products-daterecurringindex + # products-dcworkflow + # products-extendedpathindex + # products-externalmethod + # products-genericsetup + # products-isurlinportal + # products-mailhost + # products-mimetypesregistry + # products-plonepas + # products-pluggableauthservice + # products-pluginregistry + # products-portaltransforms + # products-pythonscripts + # products-sessions + # products-siteerrorlog + # products-standardcachemanagers + # products-statusmessages + # products-zcatalog + # products-zopeversioncontrol + # pytest-plone + # repoze-catalog + # repoze-xmliter + # robotsuite + # souper + # souper-plone + # z3c-caching + # z3c-form + # z3c-formwidget-query + # z3c-jbot + # z3c-objpath + # z3c-pt + # z3c-relationfield + # z3c-zcmlhook + # zc-lockfile + # zc-relation + # zdaemon + # zexceptions + # zodbpickle + # zope + # zope-annotation + # zope-app-locales + # zope-browser + # zope-browsermenu + # zope-browserpage + # zope-browserresource + # zope-cachedescriptors + # zope-component + # zope-componentvocabulary + # zope-configuration + # zope-container + # zope-contentprovider + # zope-contenttype + # zope-copy + # zope-datetime + # zope-deferredimport + # zope-deprecation + # zope-dottedname + # zope-event + # zope-exceptions + # zope-filerepresentation + # zope-globalrequest + # zope-hookable + # zope-i18n + # zope-i18nmessageid + # zope-index + # zope-interface + # zope-intid + # zope-keyreference + # zope-lifecycleevent + # zope-location + # zope-pagetemplate + # zope-processlifetime + # zope-proxy + # zope-ptresource + # zope-publisher + # zope-pytestlayer + # zope-ramcache + # zope-schema + # zope-security + # zope-sendmail + # zope-sequencesort + # zope-site + # zope-size + # zope-structuredtext + # zope-tal + # zope-tales + # zope-testbrowser + # zope-testing + # zope-testrunner + # zope-traversing + # zope-viewlet + # zpretty +sgmllib3k==1.0.0 + # via + # -c constraints-mxdev.txt + # feedparser +shellingham==1.5.4 + # via hatch +simplejson==3.19.2 + # via + # -c constraints-mxdev.txt + # plone-app-content +six==1.16.0 + # via + # -c constraints-mxdev.txt + # collective-monkeypatcher + # furl + # orderedmultidict + # paste + # products-extendedpathindex + # prompt-toolkit + # python-dateutil + # robotsuite + # souper + # z3c-form + # zodb + # zope-componentvocabulary +sniffio==1.3.1 + # via + # -c constraints-mxdev.txt + # anyio + # httpx + # trio +sortedcontainers==2.4.0 + # via + # -c constraints-mxdev.txt + # trio +souper==1.1.2 + # via souper-plone +souper-plone==1.3.1 + # via hatch.envs.default +soupsieve==2.5 + # via + # -c constraints-mxdev.txt + # beautifulsoup4 + # zope-testbrowser +tomli-w==1.0.0 + # via hatch +tomlkit==0.13.0 + # via hatch +towncrier==23.11.0 + # via + # -c constraints-mxdev.txt + # hatch.envs.default +transaction==4.0 + # via + # -c constraints-mxdev.txt + # accesscontrol + # products-sessions + # products-siteerrorlog + # products-standardcachemanagers + # products-zopeversioncontrol + # zeo + # zodb + # zodb3 + # zope + # zope-sendmail + # zope-traversing +trio==0.24.0 + # via + # -c constraints-mxdev.txt + # selenium + # trio-websocket +trio-websocket==0.11.1 + # via + # -c constraints-mxdev.txt + # selenium +trove-classifiers==2024.4.10 + # via + # -c constraints-mxdev.txt + # hatchling +typing-extensions==4.9.0 + # via + # -c constraints-mxdev.txt + # robotframework-browser +unidecode==1.3.8 + # via + # -c constraints-mxdev.txt + # plone-i18n +urllib3==2.1.0 + # via + # -c constraints-mxdev.txt + # requests + # selenium +userpath==1.9.2 + # via hatch +uv==0.2.24 + # via hatch +virtualenv==20.26.3 + # via hatch +waitress==2.1.2 + # via + # -c constraints-mxdev.txt + # webtest + # zope +wcwidth==0.2.13 + # via + # -c constraints-mxdev.txt + # prompt-toolkit +webob==1.8.7 + # via + # -c constraints-mxdev.txt + # webtest + # wsgiproxy2 +webresource==1.2 + # via + # -c constraints-mxdev.txt + # products-cmfplone +webtest==3.0.0 + # via + # -c constraints-mxdev.txt + # zope-testbrowser +wrapt==1.16.0 + # via + # -c constraints-mxdev.txt + # robotframework-browser + # robotframework-seleniumtestability +wsgiproxy2==0.5.1 + # via + # -c constraints-mxdev.txt + # zope-testbrowser +wsproto==1.2.0 + # via + # -c constraints-mxdev.txt + # trio-websocket +z3c-caching==3.0 + # via + # -c constraints-mxdev.txt + # plone-app-caching + # plone-cachepurging + # plone-caching + # plone-resource +z3c-form==4.3 + # via + # -c constraints-mxdev.txt + # collective-z3cform-norobots + # plone-app-caching + # plone-app-content + # plone-app-contentrules + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-discussion + # plone-app-event + # plone-app-multilingual + # plone-app-portlets + # plone-app-registry + # plone-app-relationfield + # plone-app-robotframework + # plone-app-users + # plone-app-versioningbehavior + # plone-app-z3cform + # plone-autoform + # plone-dexterity + # plone-formwidget-hcaptcha + # plone-formwidget-namedfile + # plone-formwidget-recaptcha + # plone-formwidget-recurrence + # plone-schema + # plone-schemaeditor + # plone-z3cform + # z3c-formwidget-query +z3c-formwidget-query==2.0.0 + # via + # -c constraints-mxdev.txt + # plone-app-relationfield + # plone-app-vocabularies +z3c-jbot==2.0 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # collective-honeypot +z3c-objpath==2.0 + # via + # -c constraints-mxdev.txt + # plone-app-relationfield + # z3c-relationfield +z3c-pt==4.0 + # via + # -c constraints-mxdev.txt + # zope +z3c-relationfield==1.0 + # via + # -c constraints-mxdev.txt + # plone-app-content + # plone-app-dexterity + # plone-app-linkintegrity + # plone-app-multilingual + # plone-app-relationfield + # plone-app-robotframework + # plone-app-versioningbehavior + # plone-app-z3cform + # products-cmfdifftool +z3c-zcmlhook==2.0 + # via + # -c constraints-mxdev.txt + # plone-app-caching + # plone-protect + # plone-supermodel +zc-lockfile==3.0.post1 + # via + # -c constraints-mxdev.txt + # zeo + # zodb +zc-relation==2.0 + # via + # -c constraints-mxdev.txt + # plone-app-linkintegrity + # plone-app-multilingual + # plone-app-relationfield + # z3c-relationfield +zconfig==4.0 + # via + # -c constraints-mxdev.txt + # zdaemon + # zeo + # zodb + # zope +zdaemon==5.0 + # via + # -c constraints-mxdev.txt + # zeo +zeo==6.0.0 + # via + # -c constraints-mxdev.txt + # zodb3 +zexceptions==5.0 + # via + # -c constraints-mxdev.txt + # accesscontrol + # documenttemplate + # products-pythonscripts + # products-siteerrorlog + # products-zcatalog + # zope +zodb==5.8.1 + # via + # -c constraints-mxdev.txt + # five-intid + # node-ext-zodb + # plone-portlets + # plone-scale + # plone-testing + # products-daterecurringindex + # products-externalmethod + # products-sessions + # products-zcatalog + # products-zopeversioncontrol + # zeo + # zodb3 + # zope + # zope-keyreference +zodb3==3.11.0 + # via + # -c constraints-mxdev.txt + # repoze-catalog +zodbpickle==3.1 + # via + # -c constraints-mxdev.txt + # zodb +zope==5.9 + # via + # -c constraints-mxdev.txt + # hatch.envs.default + # borg-localrole + # collective-z3cform-norobots + # five-customerize + # five-intid + # five-localsitemanager + # plone-app-contentmenu + # plone-app-contenttypes + # plone-app-dexterity + # plone-app-event + # plone-app-layout + # plone-app-multilingual + # plone-app-portlets + # plone-app-querystring + # plone-app-redirector + # plone-app-relationfield + # plone-app-testing + # plone-app-users + # plone-app-viewletmanager + # plone-app-z3cform + # plone-base + # plone-batching + # plone-browserlayer + # plone-cachepurging + # plone-contentrules + # plone-dexterity + # plone-folder + # plone-formwidget-recurrence + # plone-indexer + # plone-locking + # plone-portlet-static + # plone-protect + # plone-registry + # plone-resource + # plone-resourceeditor + # plone-rest + # plone-schemaeditor + # plone-session + # plone-stringinterp + # plone-theme + # plone-transformchain + # plone-z3cform + # products-btreefolder2 + # products-cmfcore + # products-cmfdifftool + # products-cmfdynamicviewfti + # products-cmfeditions + # products-cmfplone + # products-cmfuid + # products-dcworkflow + # products-extendedpathindex + # products-externalmethod + # products-genericsetup + # products-mailhost + # products-pluggableauthservice + # products-pluginregistry + # products-portaltransforms + # products-pythonscripts + # products-sessions + # products-siteerrorlog + # products-standardcachemanagers + # products-zcatalog + # products-zopeversioncontrol + # zope2 +zope-annotation==5.0 + # via + # -c constraints-mxdev.txt + # borg-localrole + # plone-app-caching + # plone-app-discussion + # plone-app-portlets + # plone-app-users + # plone-app-versioningbehavior + # plone-behavior + # plone-cachepurging + # plone-formwidget-hcaptcha + # plone-formwidget-namedfile + # plone-formwidget-recaptcha + # plone-memoize + # plone-portlets + # plone-scale + # products-statusmessages + # zope-site +zope-app-locales==5.0 + # via + # -c constraints-mxdev.txt + # products-cmfplone +zope-browser==3.0 + # via + # -c constraints-mxdev.txt + # plone-app-portlets + # plone-app-vocabularies + # z3c-caching + # z3c-form + # zope + # zope-browsermenu + # zope-publisher +zope-browsermenu==5.0 + # via + # -c constraints-mxdev.txt + # plone-app-content + # plone-app-multilingual + # zope +zope-browserpage==5.0 + # via + # -c constraints-mxdev.txt + # plone-app-dexterity + # plone-namedfile + # plone-rest + # plone-uuid + # plone-z3cform + # z3c-form + # zope + # zope-viewlet +zope-browserresource==5.1 + # via + # -c constraints-mxdev.txt + # plone-app-caching + # z3c-form + # zope + # zope-ptresource +zope-cachedescriptors==5.0 + # via + # -c constraints-mxdev.txt + # plone-app-dexterity + # plone-app-users + # plone-namedfile + # plone-outputfilters + # plone-schemaeditor + # products-cmfplone + # zope-app-locales + # zope-container + # zope-testbrowser +zope-component==6.0 + # via + # -c constraints-mxdev.txt + # accesscontrol + # borg-localrole + # five-customerize + # five-intid + # five-localsitemanager + # node + # plone-alterego + # plone-app-caching + # plone-app-customerize + # plone-app-robotframework + # plone-app-testing + # plone-app-users + # plone-behavior + # plone-browserlayer + # plone-cachepurging + # plone-caching + # plone-event + # plone-formwidget-hcaptcha + # plone-formwidget-recaptcha + # plone-memoize + # plone-namedfile + # plone-portlets + # plone-rfc822 + # plone-schemaeditor + # plone-subrequest + # plone-supermodel + # plone-testing + # plone-uuid + # products-isurlinportal + # products-siteerrorlog + # products-standardcachemanagers + # pytest-plone + # repoze-catalog + # z3c-caching + # z3c-form + # z3c-formwidget-query + # z3c-jbot + # z3c-pt + # z3c-zcmlhook + # zope + # zope-annotation + # zope-browsermenu + # zope-browserpage + # zope-browserresource + # zope-componentvocabulary + # zope-container + # zope-contentprovider + # zope-i18n + # zope-intid + # zope-keyreference + # zope-pagetemplate + # zope-publisher + # zope-security + # zope-sendmail + # zope-site + # zope-traversing + # zope-viewlet +zope-componentvocabulary==2.3.0 + # via + # -c constraints-mxdev.txt + # five-customerize + # plone-contentrules +zope-configuration==5.0 + # via + # -c constraints-mxdev.txt + # accesscontrol + # plone-app-testing + # plone-autoinclude + # plone-behavior + # plone-testing + # z3c-caching + # z3c-form + # z3c-jbot + # z3c-zcmlhook + # zope + # zope-browsermenu + # zope-browserpage + # zope-browserresource + # zope-component + # zope-i18n + # zope-publisher + # zope-sendmail + # zope-viewlet +zope-container==5.2 + # via + # -c constraints-mxdev.txt + # plone-app-versioningbehavior + # plone-keyring + # plone-portlets + # plone-schemaeditor + # products-btreefolder2 + # zope + # zope-site +zope-contentprovider==5.0 + # via + # -c constraints-mxdev.txt + # plone-app-portlets + # plone-app-viewletmanager + # plone-portlets + # z3c-form + # z3c-pt + # zope + # zope-viewlet +zope-contenttype==5.1 + # via + # -c constraints-mxdev.txt + # zope + # zope-browserresource + # zope-publisher +zope-copy==4.3 + # via + # -c constraints-mxdev.txt + # plone-namedfile + # products-cmfeditions +zope-datetime==5.0.0 + # via + # -c constraints-mxdev.txt + # products-cmfcore + # zope +zope-deferredimport==5.0 + # via + # -c constraints-mxdev.txt + # accesscontrol + # borg-localrole + # missing + # node + # plone-supermodel + # products-cmfplone + # products-mailhost + # products-zcatalog + # zope + # zope-container +zope-deprecation==5.0 + # via + # -c constraints-mxdev.txt + # node + # plone-app-z3cform + # plone-autoform + # products-cmfplone + # zope-i18n + # zope-site +zope-dottedname==6.0 + # via + # -c constraints-mxdev.txt + # five-customerize + # plone-app-dexterity + # plone-app-querystring + # plone-app-registry + # plone-app-testing + # plone-app-workflow + # plone-autoform + # plone-supermodel + # products-cmfeditions + # products-cmfplone + # products-zcatalog + # zope-container + # zope-pytestlayer +zope-event==5.0 + # via + # -c constraints-mxdev.txt + # five-intid + # five-localsitemanager + # plone-app-caching + # plone-app-users + # plone-cachepurging + # plone-schemaeditor + # plone-testing + # products-btreefolder2 + # products-siteerrorlog + # z3c-caching + # z3c-form + # zope + # zope-component + # zope-container + # zope-contentprovider + # zope-intid + # zope-lifecycleevent + # zope-publisher + # zope-schema + # zope-site + # zope-viewlet +zope-exceptions==5.0.1 + # via + # -c constraints-mxdev.txt + # zope + # zope-publisher + # zope-testrunner +zope-filerepresentation==6.0 + # via + # -c constraints-mxdev.txt + # plone-app-dexterity + # zope-container +zope-globalrequest==2.0 + # via + # -c constraints-mxdev.txt + # plone-api + # plone-app-caching + # plone-app-querystring + # plone-app-vocabularies + # plone-app-z3cform + # plone-cachepurging + # plone-i18n + # plone-memoize + # plone-schemaeditor + # plone-subrequest + # products-zcatalog + # zope +zope-hookable==6.0 + # via + # -c constraints-mxdev.txt + # zope-component +zope-i18n==5.1 + # via + # -c constraints-mxdev.txt + # plone-app-robotframework + # plone-schemaeditor + # products-cmfplone + # products-statusmessages + # z3c-form + # z3c-pt + # zope + # zope-browserresource + # zope-pagetemplate + # zope-publisher + # zope-traversing +zope-i18nmessageid==6.1.0 + # via + # -c constraints-mxdev.txt + # i18ndude + # plone-app-caching + # plone-cachepurging + # plone-caching + # plone-formwidget-hcaptcha + # plone-formwidget-recaptcha + # plone-schema + # plone-schemaeditor + # plone-supermodel + # products-cmfplone + # z3c-form + # z3c-formwidget-query + # zope + # zope-app-locales + # zope-browsermenu + # zope-component + # zope-componentvocabulary + # zope-configuration + # zope-container + # zope-i18n + # zope-keyreference + # zope-pagetemplate + # zope-security + # zope-sendmail + # zope-size + # zope-tal + # zope-traversing + # zope-viewlet +zope-index==6.1 + # via repoze-catalog +zope-interface==6.1 + # via + # -c constraints-mxdev.txt + # accesscontrol + # acquisition + # borg-localrole + # btrees + # datetime + # five-customerize + # five-intid + # five-localsitemanager + # i18ndude + # persistent + # plone-alterego + # plone-app-caching + # plone-app-customerize + # plone-app-users + # plone-app-uuid + # plone-autoform + # plone-batching + # plone-behavior + # plone-browserlayer + # plone-cachepurging + # plone-caching + # plone-event + # plone-formwidget-hcaptcha + # plone-formwidget-recaptcha + # plone-keyring + # plone-memoize + # plone-portlets + # plone-rfc822 + # plone-scale + # plone-schemaeditor + # plone-subrequest + # plone-supermodel + # plone-uuid + # products-cmfcore + # products-daterecurringindex + # products-mailhost + # products-sessions + # products-siteerrorlog + # products-statusmessages + # products-zcatalog + # products-zopeversioncontrol + # transaction + # z3c-caching + # z3c-form + # z3c-formwidget-query + # z3c-objpath + # z3c-pt + # z3c-zcmlhook + # zc-relation + # zeo + # zexceptions + # zodb + # zope + # zope-annotation + # zope-app-locales + # zope-browser + # zope-browsermenu + # zope-browserpage + # zope-browserresource + # zope-component + # zope-componentvocabulary + # zope-configuration + # zope-container + # zope-contentprovider + # zope-copy + # zope-exceptions + # zope-filerepresentation + # zope-globalrequest + # zope-index + # zope-intid + # zope-keyreference + # zope-lifecycleevent + # zope-location + # zope-pagetemplate + # zope-processlifetime + # zope-proxy + # zope-ptresource + # zope-publisher + # zope-ramcache + # zope-schema + # zope-security + # zope-sendmail + # zope-site + # zope-size + # zope-tal + # zope-tales + # zope-testbrowser + # zope-testrunner + # zope-traversing + # zope-viewlet +zope-intid==5.0 + # via + # -c constraints-mxdev.txt + # five-intid + # plone-app-intid + # plone-app-linkintegrity + # plone-app-multilingual + # plone-app-relationfield + # plone-app-robotframework + # z3c-relationfield +zope-keyreference==6.0 + # via + # -c constraints-mxdev.txt + # five-intid + # plone-app-linkintegrity + # zope-intid +zope-lifecycleevent==5.0 + # via + # -c constraints-mxdev.txt + # five-customerize + # five-intid + # five-localsitemanager + # node + # plone-app-caching + # plone-app-intid + # plone-schemaeditor + # plone-uuid + # products-btreefolder2 + # z3c-caching + # z3c-form + # zope + # zope-container + # zope-intid + # zope-site +zope-location==5.0 + # via + # -c constraints-mxdev.txt + # five-intid + # five-localsitemanager + # plone-keyring + # z3c-form + # zope + # zope-annotation + # zope-browserresource + # zope-container + # zope-contentprovider + # zope-intid + # zope-publisher + # zope-ramcache + # zope-security + # zope-site + # zope-traversing + # zope-viewlet +zope-pagetemplate==5.0 + # via + # -c constraints-mxdev.txt + # five-customerize + # plone-app-caching + # plone-app-multilingual + # plone-z3cform + # z3c-form + # z3c-jbot + # zope + # zope-browsermenu + # zope-browserpage + # zope-ptresource +zope-processlifetime==3.0 + # via + # -c constraints-mxdev.txt + # plone-app-theming + # zope +zope-proxy==5.1 + # via + # -c constraints-mxdev.txt + # zope + # zope-annotation + # zope-container + # zope-deferredimport + # zope-location + # zope-publisher + # zope-security + # zope-traversing +zope-ptresource==5.0 + # via + # -c constraints-mxdev.txt + # zope +zope-publisher==7.0 + # via + # -c constraints-mxdev.txt + # accesscontrol + # plone-app-caching + # plone-app-customerize + # plone-app-uuid + # plone-formwidget-hcaptcha + # plone-formwidget-recaptcha + # plone-portlets + # plone-schemaeditor + # plone-subrequest + # plone-uuid + # products-statusmessages + # z3c-form + # z3c-jbot + # zexceptions + # zope + # zope-browsermenu + # zope-browserpage + # zope-browserresource + # zope-container + # zope-contentprovider + # zope-globalrequest + # zope-ptresource + # zope-traversing + # zope-viewlet +zope-pytestlayer==8.2 + # via pytest-plone +zope-ramcache==3.0 + # via + # -c constraints-mxdev.txt + # plone-app-caching + # plone-memoize +zope-schema==7.0.1 + # via + # -c constraints-mxdev.txt + # accesscontrol + # five-customerize + # plone-app-caching + # plone-app-robotframework + # plone-app-users + # plone-autoform + # plone-batching + # plone-behavior + # plone-cachepurging + # plone-caching + # plone-formwidget-hcaptcha + # plone-formwidget-recaptcha + # plone-portlets + # plone-rfc822 + # plone-schemaeditor + # plone-supermodel + # products-daterecurringindex + # products-zcatalog + # pytest-plone + # z3c-caching + # z3c-form + # z3c-formwidget-query + # z3c-zcmlhook + # zope + # zope-browsermenu + # zope-browserpage + # zope-browserresource + # zope-componentvocabulary + # zope-configuration + # zope-container + # zope-contentprovider + # zope-filerepresentation + # zope-i18n + # zope-keyreference + # zope-location + # zope-security + # zope-sendmail + # zope-testbrowser + # zope-viewlet +zope-security==6.2 + # via + # -c constraints-mxdev.txt + # accesscontrol + # plone-autoform + # plone-namedfile + # plone-schemaeditor + # plone-testing + # z3c-form + # z3c-jbot + # zexceptions + # zope + # zope-browsermenu + # zope-browserpage + # zope-componentvocabulary + # zope-container + # zope-i18n + # zope-intid + # zope-ptresource + # zope-publisher + # zope-site + # zope-traversing + # zope-viewlet +zope-sendmail==6.2 + # via + # -c constraints-mxdev.txt + # products-mailhost +zope-sequencesort==5.0 + # via + # -c constraints-mxdev.txt + # documenttemplate + # zope +zope-site==5.0 + # via + # -c constraints-mxdev.txt + # five-localsitemanager + # plone-portlets + # z3c-form + # zope +zope-size==5.0 + # via + # -c constraints-mxdev.txt + # plone-formwidget-namedfile + # zope + # zope-container +zope-structuredtext==5.0 + # via + # -c constraints-mxdev.txt + # documenttemplate + # products-cmfplone + # products-portaltransforms +zope-tal==5.0.1 + # via + # -c constraints-mxdev.txt + # i18ndude + # zope + # zope-browserpage + # zope-pagetemplate +zope-tales==6.0 + # via + # -c constraints-mxdev.txt + # zope + # zope-contentprovider + # zope-pagetemplate +zope-testbrowser==6.0 + # via + # -c constraints-mxdev.txt + # zope +zope-testing==5.0.1 + # via + # -c constraints-mxdev.txt + # accesscontrol + # five-localsitemanager + # plone-app-testing + # plone-cachepurging + # plone-testing + # products-zcatalog + # zc-relation + # zope +zope-testrunner==6.2 + # via + # -c constraints-mxdev.txt + # plone-app-robotframework +zope-traversing==5.0 + # via + # -c constraints-mxdev.txt + # five-customerize + # plone-app-theming + # plone-browserlayer + # plone-namedfile + # z3c-form + # z3c-pt + # zope + # zope-browsermenu + # zope-browserpage + # zope-browserresource + # zope-container + # zope-globalrequest + # zope-pagetemplate + # zope-viewlet +zope-viewlet==5.0 + # via + # -c constraints-mxdev.txt + # five-customerize + # plone-app-customerize + # plone-app-i18n + # plone-app-viewletmanager + # zope +zope2==4.0 + # via + # -c constraints-mxdev.txt + # plone-formwidget-hcaptcha + # plone-formwidget-recaptcha +zpretty==3.1.0 + # via hatch.envs.default +zstandard==0.22.0 + # via hatch diff --git a/backend/requirements.txt b/backend/requirements.txt index da44320..d32a83f 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -1 +1 @@ --c constraints.txt +-c https://dist.plone.org/release/6.0.11/constraints.txt diff --git a/backend/scripts/create_site.py b/backend/scripts/create_site.py index 9880331..13dbbe7 100644 --- a/backend/scripts/create_site.py +++ b/backend/scripts/create_site.py @@ -1,5 +1,5 @@ from AccessControl.SecurityManagement import newSecurityManager -from collective.volto.formsupport.interfaces import ( # noqa +from collective.volto.formsupport.interfaces import ( ICollectiveVoltoFormsupportLayer, ) from Products.CMFPlone.factory import _DEFAULT_PROFILE diff --git a/backend/src/collective/volto/formsupport/about.py b/backend/src/collective/volto/formsupport/about.py new file mode 100644 index 0000000..d539d50 --- /dev/null +++ b/backend/src/collective/volto/formsupport/about.py @@ -0,0 +1 @@ +__version__ = "3.1.1" diff --git a/backend/src/collective/volto/formsupport/datamanager/catalog.py b/backend/src/collective/volto/formsupport/datamanager/catalog.py index f746119..ba0d383 100644 --- a/backend/src/collective/volto/formsupport/datamanager/catalog.py +++ b/backend/src/collective/volto/formsupport/datamanager/catalog.py @@ -72,9 +72,7 @@ def add(self, data): form_fields = self.get_form_fields() if not form_fields: logger.error( - 'Block with id {} and type "form" not found in context: {}.'.format( - self.block_id, self.context.absolute_url() - ) + f'Block with id {self.block_id} and type "form" not found in context: {self.context.absolute_url()}.' ) return None diff --git a/backend/src/collective/volto/formsupport/locales/update.py b/backend/src/collective/volto/formsupport/locales/update.py index a548b8a..1f397d3 100644 --- a/backend/src/collective/volto/formsupport/locales/update.py +++ b/backend/src/collective/volto/formsupport/locales/update.py @@ -53,13 +53,7 @@ def _rebuild(): def _sync(): - cmd = "{} sync --pot {}/{}.pot {}*/LC_MESSAGES/{}.po".format( - i18ndude, - locale_path, - domain, - locale_path, - domain, - ) + cmd = f"{i18ndude} sync --pot {locale_path}/{domain}.pot {locale_path}*/LC_MESSAGES/{domain}.po" subprocess.call( cmd, shell=True, diff --git a/backend/src/collective/volto/formsupport/restapi/serializer/blocks.py b/backend/src/collective/volto/formsupport/restapi/serializer/blocks.py index 9b70dd6..7148ef4 100644 --- a/backend/src/collective/volto/formsupport/restapi/serializer/blocks.py +++ b/backend/src/collective/volto/formsupport/restapi/serializer/blocks.py @@ -33,7 +33,7 @@ def __call__(self, value): Otherwise, skip default values because we need them only in edit and to send emails from the backend. """ - if "captcha" in value and value["captcha"]: + if value.get("captcha"): value["captcha_props"] = getMultiAdapter( (self.context, self.request), ICaptchaSupport, diff --git a/backend/src/collective/volto/formsupport/tests/test_captcha.py b/backend/src/collective/volto/formsupport/tests/test_captcha.py index 4d8adaf..3ef6220 100644 --- a/backend/src/collective/volto/formsupport/tests/test_captcha.py +++ b/backend/src/collective/volto/formsupport/tests/test_captcha.py @@ -1,5 +1,5 @@ -from collective.volto.formsupport.testing import ( # noqa: E501, - VOLTO_FORMSUPPORT_API_FUNCTIONAL_TESTING, +from collective.volto.formsupport.testing import ( + VOLTO_FORMSUPPORT_API_FUNCTIONAL_TESTING, # , ) from collective.z3cform.norobots.browser.interfaces import INorobotsWidgetSettings from hashlib import md5 @@ -379,15 +379,13 @@ def test_norobots(self): } transaction.commit() - captcha_token = json.dumps( - { - "value": "5", - "id": "question0", - "id_check": md5( - "Write five using ciphers".encode("ascii", "ignore") - ).hexdigest(), - } - ) + captcha_token = json.dumps({ + "value": "5", + "id": "question0", + "id_check": md5( + "Write five using ciphers".encode("ascii", "ignore") + ).hexdigest(), + }) response = self.submit_form( data={ @@ -434,15 +432,13 @@ def test_norobots_wrong_captcha(self): } transaction.commit() - captcha_token = json.dumps( - { - "value": "15", - "id": "question0", - "id_check": md5( - "Write five using ciphers".encode("ascii", "ignore") - ).hexdigest(), - } - ) + captcha_token = json.dumps({ + "value": "15", + "id": "question0", + "id_check": md5( + "Write five using ciphers".encode("ascii", "ignore") + ).hexdigest(), + }) response = self.submit_form( data={ diff --git a/backend/src/collective/volto/formsupport/tests/test_deserialize_block.py b/backend/src/collective/volto/formsupport/tests/test_deserialize_block.py index cfa2c43..b61f9e0 100644 --- a/backend/src/collective/volto/formsupport/tests/test_deserialize_block.py +++ b/backend/src/collective/volto/formsupport/tests/test_deserialize_block.py @@ -1,5 +1,5 @@ -from collective.volto.formsupport.testing import ( # noqa: E501, - VOLTO_FORMSUPPORT_API_FUNCTIONAL_TESTING, +from collective.volto.formsupport.testing import ( + VOLTO_FORMSUPPORT_API_FUNCTIONAL_TESTING, # , ) from copy import deepcopy from plone import api @@ -54,9 +54,9 @@ def tearDown(self): def test_deserializer_cleanup_data_in_send_message_field(self): new_blocks = deepcopy(self.document.blocks) - new_blocks["form-id"][ - "send_message" - ] = "click here
keep tags
" + new_blocks["form-id"]["send_message"] = ( + "click herekeep tags
" + ) self.api_session.patch( self.document_url, json={"blocks": new_blocks}, diff --git a/backend/src/collective/volto/formsupport/tests/test_event.py b/backend/src/collective/volto/formsupport/tests/test_event.py index 5e48444..def9e6a 100644 --- a/backend/src/collective/volto/formsupport/tests/test_event.py +++ b/backend/src/collective/volto/formsupport/tests/test_event.py @@ -1,5 +1,5 @@ -from collective.volto.formsupport.testing import ( # noqa: E501, - VOLTO_FORMSUPPORT_API_FUNCTIONAL_TESTING, +from collective.volto.formsupport.testing import ( + VOLTO_FORMSUPPORT_API_FUNCTIONAL_TESTING, # , ) from plone import api from plone.app.testing import setRoles diff --git a/backend/src/collective/volto/formsupport/tests/test_honeypot.py b/backend/src/collective/volto/formsupport/tests/test_honeypot.py index 6531106..f52089b 100644 --- a/backend/src/collective/volto/formsupport/tests/test_honeypot.py +++ b/backend/src/collective/volto/formsupport/tests/test_honeypot.py @@ -1,5 +1,5 @@ -from collective.volto.formsupport.testing import ( # noqa: E501, - VOLTO_FORMSUPPORT_API_FUNCTIONAL_TESTING, +from collective.volto.formsupport.testing import ( + VOLTO_FORMSUPPORT_API_FUNCTIONAL_TESTING, # , ) from plone import api from plone.app.testing import setRoles diff --git a/backend/src/collective/volto/formsupport/tests/test_send_action_form.py b/backend/src/collective/volto/formsupport/tests/test_send_action_form.py index 0363b7b..1432299 100644 --- a/backend/src/collective/volto/formsupport/tests/test_send_action_form.py +++ b/backend/src/collective/volto/formsupport/tests/test_send_action_form.py @@ -1,5 +1,5 @@ -from collective.volto.formsupport.testing import ( # noqa: E501, - VOLTO_FORMSUPPORT_API_FUNCTIONAL_TESTING, +from collective.volto.formsupport.testing import ( + VOLTO_FORMSUPPORT_API_FUNCTIONAL_TESTING, # , ) from collective.volto.formsupport.utils import generate_email_token from email.parser import Parser @@ -134,7 +134,7 @@ def test_email_not_send_if_no_action_set(self): self.assertEqual(response.status_code, 400) self.assertEqual( res["message"], - 'You need to set at least one form action between "send" and "store".', # noqa + 'You need to set at least one form action between "send" and "store".', ) def test_email_not_send_if_block_id_is_correct_but_form_data_missing( diff --git a/backend/src/collective/volto/formsupport/tests/test_serialize_block.py b/backend/src/collective/volto/formsupport/tests/test_serialize_block.py index 1d89002..c4b23dd 100644 --- a/backend/src/collective/volto/formsupport/tests/test_serialize_block.py +++ b/backend/src/collective/volto/formsupport/tests/test_serialize_block.py @@ -1,5 +1,5 @@ -from collective.volto.formsupport.testing import ( # noqa: E501, - VOLTO_FORMSUPPORT_API_FUNCTIONAL_TESTING, +from collective.volto.formsupport.testing import ( + VOLTO_FORMSUPPORT_API_FUNCTIONAL_TESTING, # , ) from plone import api from plone.app.testing import setRoles diff --git a/backend/src/collective/volto/formsupport/tests/test_setup.py b/backend/src/collective/volto/formsupport/tests/test_setup.py index a9f39fc..1113655 100644 --- a/backend/src/collective/volto/formsupport/tests/test_setup.py +++ b/backend/src/collective/volto/formsupport/tests/test_setup.py @@ -1,7 +1,7 @@ """Setup tests for this package.""" -from collective.volto.formsupport.testing import ( # noqa: E501, - VOLTO_FORMSUPPORT_INTEGRATION_TESTING, +from collective.volto.formsupport.testing import ( + VOLTO_FORMSUPPORT_INTEGRATION_TESTING, # , ) from plone import api from plone.app.testing import setRoles diff --git a/backend/src/collective/volto/formsupport/tests/test_store_action_form.py b/backend/src/collective/volto/formsupport/tests/test_store_action_form.py index 5bf076d..d785b90 100644 --- a/backend/src/collective/volto/formsupport/tests/test_store_action_form.py +++ b/backend/src/collective/volto/formsupport/tests/test_store_action_form.py @@ -1,5 +1,5 @@ -from collective.volto.formsupport.testing import ( # noqa: E501, - VOLTO_FORMSUPPORT_API_FUNCTIONAL_TESTING, +from collective.volto.formsupport.testing import ( + VOLTO_FORMSUPPORT_API_FUNCTIONAL_TESTING, # , ) from datetime import datetime from io import StringIO diff --git a/backend/src/collective/volto/formsupport/upgrades.py b/backend/src/collective/volto/formsupport/upgrades.py index 0eb7114..6d5d429 100644 --- a/backend/src/collective/volto/formsupport/upgrades.py +++ b/backend/src/collective/volto/formsupport/upgrades.py @@ -126,9 +126,7 @@ def get_field_info_from_block(block, field_id): normalizer = getUtility(IIDNormalizer) for field in block.get("subblocks", []): normalized_label = normalizer.normalize(field.get("label", "")) - if field_id == normalized_label: - return {"id": field["field_id"], "label": field.get("label", "")} - elif field_id == field["field_id"]: + if field_id == normalized_label or field_id == field["field_id"]: return {"id": field["field_id"], "label": field.get("label", "")} return {"id": field_id, "label": field_id} @@ -200,7 +198,7 @@ def fix_data(blocks, context): logger.info(f"- {path}") -def to_1300(context): # noqa: C901 # pragma: no cover +def to_1300(context): # pragma: no cover def update_send_from_bool_to_list_for_content(item): blocks = ( item.blocks @@ -214,9 +212,7 @@ def update_send_from_bool_to_list_for_content(item): new_send_value = ["recipient"] if block.get("send") else [] block["send"] = new_send_value logger.info( - "[CONVERTED] - {} form send value from {} to {}".format( - item, send, new_send_value - ) + f"[CONVERTED] - {item} form send value from {send} to {new_send_value}" ) item.blocks = blocks diff --git a/backend/tests/conftest.py b/backend/tests/conftest.py index 060ab1b..a0ab009 100644 --- a/backend/tests/conftest.py +++ b/backend/tests/conftest.py @@ -8,11 +8,9 @@ globals().update( - fixtures_factory( - ( - (ACCEPTANCE_TESTING, "acceptance"), - (FUNCTIONAL_TESTING, "functional"), - (INTEGRATION_TESTING, "integration"), - ) - ) + fixtures_factory(( + (ACCEPTANCE_TESTING, "acceptance"), + (FUNCTIONAL_TESTING, "functional"), + (INTEGRATION_TESTING, "integration"), + )) )