From b3a1e06fe64a346f5c955a60219a38aafa042a57 Mon Sep 17 00:00:00 2001 From: Jose Ignacio Palma Date: Fri, 26 Jun 2026 10:14:19 -0400 Subject: [PATCH] feat: add Verawood (June 2026) support - Drop Python 3.11 support (Verawood requires Python 3.12+) - Drop Django 4.2 support (Verawood requires Django 5.2+) - Update test matrix to py312-django52 only - Bump version to 2.3.0 --- .github/workflows/ci.yml | 4 +- CHANGELOG.rst | 10 ++++ README.rst | 4 +- flow_control/__init__.py | 2 +- requirements/base.txt | 48 +++++++++--------- requirements/ci.txt | 64 +++++++++++------------ requirements/dev.txt | 101 ++++++++++++++++++------------------- requirements/django42.txt | 1 - requirements/django52.txt | 2 +- requirements/pip-tools.txt | 16 +++--- requirements/pip.txt | 10 ++-- requirements/quality.txt | 10 ++-- requirements/test.txt | 54 ++++++++++---------- requirements/tox.txt | 28 ++++++---- setup.cfg | 2 +- setup.py | 4 +- tox.ini | 3 -- 17 files changed, 187 insertions(+), 176 deletions(-) delete mode 100644 requirements/django42.txt diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bdec10f..7c2c418 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,8 +15,8 @@ jobs: strategy: matrix: os: [ubuntu-22.04] - python-version: ['3.11'] - toxenv: [django42] + python-version: ['3.12'] + toxenv: [django52] steps: - uses: actions/checkout@v5 diff --git a/CHANGELOG.rst b/CHANGELOG.rst index b1095bb..7b7c49b 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -14,6 +14,16 @@ Unreleased * +[2.3.0] - 2026-06-26 +~~~~~~~~~~~~~~~~~~~~~ + +Added +_____ + +* Add support for Verawood release. +* Drop support for Python 3.11 (Verawood requires Python 3.12+). +* Drop support for Django 4.2 (Verawood requires Django 5.2+). + 2.2.0 - 2025-10-14 ********************************************** diff --git a/README.rst b/README.rst index 94ab3f1..561be38 100644 --- a/README.rst +++ b/README.rst @@ -19,7 +19,9 @@ Compatibility Notes +------------------+--------------+ | Teak | >= 2.1.0 | +------------------+--------------+ -| Teak | >= 2.2.0 | +| Ulmo | >= 2.2.0 | ++------------------+--------------+ +| Verawood | >= 2.3.0 | +------------------+--------------+ Enabling in Studio diff --git a/flow_control/__init__.py b/flow_control/__init__.py index 3f38f75..f1ac49e 100644 --- a/flow_control/__init__.py +++ b/flow_control/__init__.py @@ -2,4 +2,4 @@ Init for main Flow-Control XBlock """ from .flow import FlowCheckPointXblock -__version__ = '2.2.0' +__version__ = '2.3.0' diff --git a/requirements/base.txt b/requirements/base.txt index 5ba3ce1..55f0cb9 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,27 +1,29 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # make upgrade # appdirs==1.4.4 # via fs -asgiref==3.10.0 +asgiref==3.11.1 # via django -boto3==1.40.51 +boto3==1.43.36 # via fs-s3fs -botocore==1.40.51 +botocore==1.43.36 # via # boto3 # s3transfer -django==5.2.7 +django==5.2.15 # via # -c requirements/constraints.txt # openedx-django-pyfs dnspython==2.8.0 # via pymongo -edx-opaque-keys[django]==3.0.0 - # via -r requirements/base.in +edx-opaque-keys[django]==4.0.0 + # via + # -r requirements/base.in + # xblock fs==2.4.16 # via # fs-s3fs @@ -29,15 +31,15 @@ fs==2.4.16 # xblock fs-s3fs==1.1.1 # via openedx-django-pyfs -jmespath==1.0.1 +jmespath==1.1.0 # via # boto3 # botocore lazy==1.6 # via xblock -lxml==6.0.2 +lxml==6.1.1 # via xblock -mako==1.3.10 +mako==1.3.12 # via # xblock # xblock-utils @@ -45,21 +47,21 @@ markupsafe==3.0.3 # via # mako # xblock -openedx-django-pyfs==3.8.0 +openedx-django-pyfs==4.0.0 # via xblock -pymongo==4.15.3 +pymongo==4.17.0 # via edx-opaque-keys python-dateutil==2.9.0.post0 # via # botocore # xblock -pytz==2025.2 +pytz==2026.2 # via xblock pyyaml==6.0.3 # via xblock -s3transfer==0.14.0 +s3transfer==0.19.0 # via boto3 -simplejson==3.20.2 +simplejson==4.1.1 # via # xblock # xblock-utils @@ -68,21 +70,19 @@ six==1.17.0 # fs # fs-s3fs # python-dateutil -sqlparse==0.5.3 +sqlparse==0.5.5 # via django -stevedore==5.5.0 +stevedore==5.8.0 # via edx-opaque-keys typing-extensions==4.15.0 # via edx-opaque-keys -urllib3==2.5.0 +urllib3==2.7.0 # via botocore -web-fragments==3.1.0 - # via - # xblock - # xblock-utils -webob==1.8.9 +web-fragments==4.0.0 + # via xblock-utils +webob==1.8.10 # via xblock -xblock[django]==5.2.0 +xblock[django]==6.3.0 # via # -r requirements/base.in # xblock-utils diff --git a/requirements/ci.txt b/requirements/ci.txt index 58b0951..559ac6e 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -1,88 +1,89 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # make upgrade # -backports-tarfile==1.2.0 - # via jaraco-context -certifi==2025.10.5 +certifi==2026.6.17 # via requests cffi==2.0.0 # via cryptography -charset-normalizer==3.4.4 +charset-normalizer==3.4.7 # via requests -cryptography==46.0.2 +cryptography==49.0.0 # via secretstorage -distlib==0.4.0 +distlib==0.4.3 # via virtualenv -docutils==0.22.2 +docutils==0.23 # via readme-renderer -filelock==3.20.0 +filelock==3.29.4 # via + # python-discovery # tox # virtualenv -id==1.5.0 +id==1.6.1 # via twine -idna==3.11 +idna==3.18 # via requests -importlib-metadata==8.7.0 - # via keyring jaraco-classes==3.4.0 # via keyring -jaraco-context==6.0.1 +jaraco-context==6.1.2 # via keyring -jaraco-functools==4.3.0 +jaraco-functools==4.5.0 # via keyring jeepney==0.9.0 # via # keyring # secretstorage -keyring==25.6.0 +keyring==25.7.0 # via twine -markdown-it-py==4.0.0 +markdown-it-py==4.2.0 # via rich mdurl==0.1.2 # via markdown-it-py -more-itertools==10.8.0 +more-itertools==11.1.0 # via # jaraco-classes # jaraco-functools -nh3==0.3.1 +nh3==0.3.6 # via readme-renderer -packaging==25.0 +packaging==26.2 # via # pyproject-api # tox # twine -platformdirs==4.5.0 +platformdirs==4.10.0 # via + # python-discovery # tox # virtualenv pluggy==1.6.0 # via tox py==1.11.0 # via tox -pycparser==2.23 +pycparser==3.0 # via cffi -pygments==2.19.2 +pygments==2.20.0 # via # readme-renderer # rich -readme-renderer==44.0 +python-discovery==1.4.2 + # via + # tox + # virtualenv +readme-renderer==45.0 # via twine -requests==2.32.5 +requests==2.34.2 # via - # id # requests-toolbelt # twine requests-toolbelt==1.0.0 # via twine rfc3986==2.0.0 # via twine -rich==14.2.0 +rich==15.0.0 # via twine -secretstorage==3.4.0 +secretstorage==3.5.0 # via keyring six==1.17.0 # via tox @@ -94,11 +95,10 @@ tox-battery==0.6.2 # via -r requirements/ci.in twine==6.2.0 # via -r requirements/ci.in -urllib3==2.5.0 +urllib3==2.7.0 # via + # id # requests # twine -virtualenv==20.35.3 +virtualenv==21.5.1 # via tox -zipp==3.23.0 - # via importlib-metadata diff --git a/requirements/dev.txt b/requirements/dev.txt index d70c1c5..648e71b 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -1,24 +1,20 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # make upgrade # -asgiref==3.10.0 +asgiref==3.11.1 # via django astroid==3.3.11 # via # -r requirements/quality.txt # pylint -backports-tarfile==1.2.0 - # via - # -r requirements/ci.txt - # jaraco-context -build==1.3.0 +build==1.5.0 # via # -r requirements/pip-tools.txt # pip-tools -certifi==2025.10.5 +certifi==2026.6.17 # via # -r requirements/ci.txt # requests @@ -26,59 +22,56 @@ cffi==2.0.0 # via # -r requirements/ci.txt # cryptography -chardet==5.2.0 +chardet==7.4.3 # via diff-cover -charset-normalizer==3.4.4 +charset-normalizer==3.4.7 # via # -r requirements/ci.txt # requests -click==8.3.0 +click==8.4.2 # via # -r requirements/pip-tools.txt # pip-tools -coverage==7.10.7 +coverage==7.14.3 # via -r requirements/quality.txt -cryptography==46.0.2 +cryptography==49.0.0 # via # -r requirements/ci.txt # secretstorage -diff-cover==9.7.1 +diff-cover==10.3.0 # via -r requirements/dev.in -dill==0.4.0 +dill==0.4.1 # via # -r requirements/quality.txt # pylint -distlib==0.4.0 +distlib==0.4.3 # via # -r requirements/ci.txt # virtualenv -django==5.2.7 +django==5.2.15 # via # -c requirements/constraints.txt # edx-i18n-tools -docutils==0.22.2 +docutils==0.23 # via # -r requirements/ci.txt # readme-renderer -edx-i18n-tools==1.9.0 +edx-i18n-tools==2.0.0 # via -r requirements/dev.in -filelock==3.20.0 +filelock==3.29.4 # via # -r requirements/ci.txt + # python-discovery # tox # virtualenv -id==1.5.0 +id==1.6.1 # via # -r requirements/ci.txt # twine -idna==3.11 +idna==3.18 # via # -r requirements/ci.txt # requests -importlib-metadata==8.7.0 - # via - # -r requirements/ci.txt - # keyring isort==6.1.0 # via # -r requirements/quality.txt @@ -87,11 +80,11 @@ jaraco-classes==3.4.0 # via # -r requirements/ci.txt # keyring -jaraco-context==6.0.1 +jaraco-context==6.1.2 # via # -r requirements/ci.txt # keyring -jaraco-functools==4.3.0 +jaraco-functools==4.5.0 # via # -r requirements/ci.txt # keyring @@ -102,17 +95,17 @@ jeepney==0.9.0 # secretstorage jinja2==3.1.6 # via diff-cover -keyring==25.6.0 +keyring==25.7.0 # via # -r requirements/ci.txt # twine -lxml[html-clean]==6.0.2 +lxml[html-clean]==6.1.1 # via # edx-i18n-tools # lxml-html-clean -lxml-html-clean==0.4.3 +lxml-html-clean==0.4.5 # via lxml -markdown-it-py==4.0.0 +markdown-it-py==4.2.0 # via # -r requirements/ci.txt # rich @@ -126,33 +119,35 @@ mdurl==0.1.2 # via # -r requirements/ci.txt # markdown-it-py -more-itertools==10.8.0 +more-itertools==11.1.0 # via # -r requirements/ci.txt # jaraco-classes # jaraco-functools -nh3==0.3.1 +nh3==0.3.6 # via # -r requirements/ci.txt # readme-renderer -packaging==25.0 +packaging==26.2 # via # -r requirements/ci.txt # -r requirements/pip-tools.txt # build # tox # twine + # wheel path==16.16.0 # via edx-i18n-tools pep8==1.7.1 # via -r requirements/quality.txt -pip-tools==7.5.1 +pip-tools==7.5.3 # via -r requirements/pip-tools.txt -platformdirs==4.5.0 +platformdirs==4.10.0 # via # -r requirements/ci.txt # -r requirements/quality.txt # pylint + # python-discovery # virtualenv pluggy==1.6.0 # via @@ -165,11 +160,11 @@ py==1.11.0 # via # -r requirements/ci.txt # tox -pycparser==2.23 +pycparser==3.0 # via # -r requirements/ci.txt # cffi -pygments==2.19.2 +pygments==2.20.0 # via # -r requirements/ci.txt # diff-cover @@ -184,16 +179,19 @@ pyproject-hooks==1.2.0 # -r requirements/pip-tools.txt # build # pip-tools +python-discovery==1.4.2 + # via + # -r requirements/ci.txt + # virtualenv pyyaml==6.0.3 # via edx-i18n-tools -readme-renderer==44.0 +readme-renderer==45.0 # via # -r requirements/ci.txt # twine -requests==2.32.5 +requests==2.34.2 # via # -r requirements/ci.txt - # id # requests-toolbelt # twine requests-toolbelt==1.0.0 @@ -204,11 +202,11 @@ rfc3986==2.0.0 # via # -r requirements/ci.txt # twine -rich==14.2.0 +rich==15.0.0 # via # -r requirements/ci.txt # twine -secretstorage==3.4.0 +secretstorage==3.5.0 # via # -r requirements/ci.txt # keyring @@ -216,9 +214,9 @@ six==1.17.0 # via # -r requirements/ci.txt # tox -sqlparse==0.5.3 +sqlparse==0.5.5 # via django -tomlkit==0.13.3 +tomlkit==0.15.0 # via # -r requirements/quality.txt # pylint @@ -230,23 +228,20 @@ tox-battery==0.6.2 # via -r requirements/ci.txt twine==6.2.0 # via -r requirements/ci.txt -urllib3==2.5.0 +urllib3==2.7.0 # via # -r requirements/ci.txt + # id # requests # twine -virtualenv==20.35.3 +virtualenv==21.5.1 # via # -r requirements/ci.txt # tox -wheel==0.45.1 +wheel==0.47.0 # via # -r requirements/pip-tools.txt # pip-tools -zipp==3.23.0 - # via - # -r requirements/ci.txt - # importlib-metadata # The following packages are considered to be unsafe in a requirements file: # pip diff --git a/requirements/django42.txt b/requirements/django42.txt deleted file mode 100644 index bb879a5..0000000 --- a/requirements/django42.txt +++ /dev/null @@ -1 +0,0 @@ -django==4.2.23 \ No newline at end of file diff --git a/requirements/django52.txt b/requirements/django52.txt index 9109eb2..f480bed 100644 --- a/requirements/django52.txt +++ b/requirements/django52.txt @@ -1 +1 @@ -django==5.2.7 +django==5.2.15 diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt index e97cb1b..a082bfc 100644 --- a/requirements/pip-tools.txt +++ b/requirements/pip-tools.txt @@ -1,22 +1,24 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # make upgrade # -build==1.3.0 +build==1.5.0 # via pip-tools -click==8.3.0 +click==8.4.2 # via pip-tools -packaging==25.0 - # via build -pip-tools==7.5.1 +packaging==26.2 + # via + # build + # wheel +pip-tools==7.5.3 # via -r requirements/pip-tools.in pyproject-hooks==1.2.0 # via # build # pip-tools -wheel==0.45.1 +wheel==0.47.0 # via pip-tools # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/pip.txt b/requirements/pip.txt index dec1587..f3c1555 100644 --- a/requirements/pip.txt +++ b/requirements/pip.txt @@ -1,14 +1,16 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # make upgrade # -wheel==0.45.1 +packaging==26.2 + # via wheel +wheel==0.47.0 # via -r requirements/pip.in # The following packages are considered to be unsafe in a requirements file: -pip==25.2 +pip==26.1.2 # via -r requirements/pip.in -setuptools==80.9.0 +setuptools==82.0.1 # via -r requirements/pip.in diff --git a/requirements/quality.txt b/requirements/quality.txt index 4921166..80bbd42 100644 --- a/requirements/quality.txt +++ b/requirements/quality.txt @@ -1,14 +1,14 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # make upgrade # astroid==3.3.11 # via pylint -coverage==7.10.7 +coverage==7.14.3 # via -r requirements/quality.in -dill==0.4.0 +dill==0.4.1 # via pylint isort==6.1.0 # via pylint @@ -16,11 +16,11 @@ mccabe==0.7.0 # via pylint pep8==1.7.1 # via -r requirements/quality.in -platformdirs==4.5.0 +platformdirs==4.10.0 # via pylint pylint==3.3.9 # via # -c requirements/constraints.txt # -r requirements/quality.in -tomlkit==0.13.3 +tomlkit==0.15.0 # via pylint diff --git a/requirements/test.txt b/requirements/test.txt index cb26d84..be35c7d 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -1,16 +1,16 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # make upgrade # appdirs==1.4.4 # via fs -asgiref==3.10.0 +asgiref==3.11.1 # via django -boto3==1.40.51 +boto3==1.43.36 # via fs-s3fs -botocore==1.40.51 +botocore==1.43.36 # via # boto3 # s3transfer @@ -21,8 +21,10 @@ ddt==1.7.2 # openedx-django-pyfs dnspython==2.8.0 # via pymongo -edx-opaque-keys[django]==3.0.0 - # via -r requirements/base.in +edx-opaque-keys[django]==4.0.0 + # via + # -r requirements/base.in + # xblock fs==2.4.16 # via # fs-s3fs @@ -30,17 +32,17 @@ fs==2.4.16 # xblock fs-s3fs==1.1.1 # via openedx-django-pyfs -iniconfig==2.1.0 +iniconfig==2.3.0 # via pytest -jmespath==1.0.1 +jmespath==1.1.0 # via # boto3 # botocore lazy==1.6 # via xblock -lxml==6.0.2 +lxml==6.1.1 # via xblock -mako==1.3.10 +mako==1.3.12 # via # xblock # xblock-utils @@ -50,29 +52,29 @@ markupsafe==3.0.3 # xblock mock==5.2.0 # via -r requirements/test.in -openedx-django-pyfs==3.8.0 +openedx-django-pyfs==4.0.0 # via xblock -packaging==25.0 +packaging==26.2 # via pytest pluggy==1.6.0 # via pytest -pygments==2.19.2 +pygments==2.20.0 # via pytest -pymongo==4.15.3 +pymongo==4.17.0 # via edx-opaque-keys -pytest==8.4.2 +pytest==9.1.1 # via -r requirements/test.in python-dateutil==2.9.0.post0 # via # botocore # xblock -pytz==2025.2 +pytz==2026.2 # via xblock pyyaml==6.0.3 # via xblock -s3transfer==0.14.0 +s3transfer==0.19.0 # via boto3 -simplejson==3.20.2 +simplejson==4.1.1 # via # xblock # xblock-utils @@ -81,21 +83,19 @@ six==1.17.0 # fs # fs-s3fs # python-dateutil -sqlparse==0.5.3 +sqlparse==0.5.5 # via django -stevedore==5.5.0 +stevedore==5.8.0 # via edx-opaque-keys typing-extensions==4.15.0 # via edx-opaque-keys -urllib3==2.5.0 +urllib3==2.7.0 # via botocore -web-fragments==3.1.0 - # via - # xblock - # xblock-utils -webob==1.8.9 +web-fragments==4.0.0 + # via xblock-utils +webob==1.8.10 # via xblock -xblock[django]==5.2.0 +xblock[django]==6.3.0 # via # -r requirements/base.in # xblock-utils diff --git a/requirements/tox.txt b/requirements/tox.txt index cd4c8c9..60dd0f8 100644 --- a/requirements/tox.txt +++ b/requirements/tox.txt @@ -1,34 +1,40 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # make upgrade # -cachetools==6.2.1 - # via tox -chardet==5.2.0 +cachetools==7.1.4 # via tox colorama==0.4.6 # via tox -distlib==0.4.0 +distlib==0.4.3 # via virtualenv -filelock==3.20.0 +filelock==3.29.4 # via + # python-discovery # tox # virtualenv -packaging==25.0 +packaging==26.2 # via # pyproject-api # tox -platformdirs==4.5.0 +platformdirs==4.10.0 # via + # python-discovery # tox # virtualenv pluggy==1.6.0 # via tox -pyproject-api==1.10.0 +pyproject-api==1.10.1 + # via tox +python-discovery==1.4.2 + # via + # tox + # virtualenv +tomli-w==1.2.0 # via tox -tox==4.31.0 +tox==4.56.1 # via -r requirements/tox.in -virtualenv==20.35.3 +virtualenv==21.5.1 # via tox diff --git a/setup.cfg b/setup.cfg index 7e22c6b..c503f62 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 2.2.0 +current_version = 2.3.0 commit = True tag = True diff --git a/setup.py b/setup.py index 4640f5b..5649f9c 100644 --- a/setup.py +++ b/setup.py @@ -93,16 +93,14 @@ def load_requirements(*requirements_paths): long_description=long_description, long_description_content_type='text/x-rst', url='https://github.com/eduNEXT/flow-control-xblock', - python_requires=">=3.11", + python_requires=">=3.12", packages=find_packages(), classifiers=[ - 'Framework :: Django :: 4.2', 'Framework :: Django :: 5.2', 'Intended Audience :: Developers', 'Intended Audience :: Education', 'License :: OSI Approved :: GNU Affero General Public License v3', 'Operating System :: OS Independent', - 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', 'Topic :: Internet', 'Topic :: Internet :: WWW/HTTP', diff --git a/tox.ini b/tox.ini index ce91fd9..4af7759 100644 --- a/tox.ini +++ b/tox.ini @@ -1,15 +1,12 @@ # testing with tox [tox] envlist = - py311-django42 - py311-django52 py312-django52 skipsdist = true [testenv] DJANGO_SETTINGS_MODULE = flow_control.settings.test deps = - django42: -r requirements/django42.txt django52: -r requirements/django52.txt -r {toxinidir}/requirements/test.txt commands =