From ec3fa7cf04aeb9beb29f2549c1fd64555cd440ac Mon Sep 17 00:00:00 2001 From: Jose Ignacio Palma Date: Tue, 14 Oct 2025 18:42:27 +0200 Subject: [PATCH] chore: add support for Python 3.12 and Django 5.2 --- .github/workflows/ci.yml | 4 +- CHANGELOG.rst | 8 ++++ Makefile | 4 ++ README.rst | 2 + flow_control/__init__.py | 2 +- requirements/base.txt | 36 ++++++++--------- requirements/ci.txt | 43 ++++++++++---------- requirements/constraints.txt | 15 ++++++- requirements/dev.txt | 77 ++++++++++++++++++------------------ requirements/django42.txt | 1 + requirements/django52.txt | 1 + requirements/pip-tools.txt | 6 +-- requirements/pip.txt | 6 +-- requirements/quality.txt | 14 ++++--- requirements/test.txt | 39 ++++++++---------- requirements/tox.txt | 14 +++---- setup.cfg | 2 +- setup.py | 4 +- tox.ini | 8 +++- 19 files changed, 154 insertions(+), 132 deletions(-) create mode 100644 requirements/django42.txt create mode 100644 requirements/django52.txt diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6bd191c..bdec10f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,9 +19,9 @@ jobs: toxenv: [django42] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: setup python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d50d10e..b1095bb 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -14,6 +14,14 @@ Unreleased * +2.2.0 - 2025-10-14 +********************************************** + +Changed +======= + +* **Ulmo Support**: Upgrade requirements base on edx-platform Ulmo release, update GitHub Workflows with new actions version. + 2.1.0 - 2025-06-22 ********************************************** diff --git a/Makefile b/Makefile index 4483079..4dbf6e7 100644 --- a/Makefile +++ b/Makefile @@ -46,6 +46,10 @@ upgrade: ## update the pip requirements files to use the latest releases satisfy pip-compile --rebuild --upgrade -o requirements/ci.txt requirements/ci.in pip-compile --rebuild --upgrade -o requirements/dev.txt requirements/dev.in + grep -e "^django==" requirements/test.txt > requirements/django52.txt + sed '/^[dD]jango==/d;' requirements/test.txt > requirements/test.tmp + mv requirements/test.tmp requirements/test.txt + test-python: clean ## Run test suite. $(TOX) pip install -r requirements/base.txt --exists-action w $(TOX) coverage run --source="." -m pytest ./flow_control_xblock diff --git a/README.rst b/README.rst index 14a0beb..94ab3f1 100644 --- a/README.rst +++ b/README.rst @@ -19,6 +19,8 @@ Compatibility Notes +------------------+--------------+ | Teak | >= 2.1.0 | +------------------+--------------+ +| Teak | >= 2.2.0 | ++------------------+--------------+ Enabling in Studio ------------------ diff --git a/flow_control/__init__.py b/flow_control/__init__.py index 19f3efd..3f38f75 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.1.0' +__version__ = '2.2.0' diff --git a/requirements/base.txt b/requirements/base.txt index 161caa2..5ba3ce1 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -6,19 +6,19 @@ # appdirs==1.4.4 # via fs -asgiref==3.8.1 +asgiref==3.10.0 # via django -boto3==1.38.41 +boto3==1.40.51 # via fs-s3fs -botocore==1.38.41 +botocore==1.40.51 # via # boto3 # s3transfer -django==4.2.23 +django==5.2.7 # via - # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -c requirements/constraints.txt # openedx-django-pyfs -dnspython==2.7.0 +dnspython==2.8.0 # via pymongo edx-opaque-keys[django]==3.0.0 # via -r requirements/base.in @@ -35,21 +35,19 @@ jmespath==1.0.1 # botocore lazy==1.6 # via xblock -lxml==5.4.0 +lxml==6.0.2 # via xblock mako==1.3.10 # via # xblock # xblock-utils -markupsafe==3.0.2 +markupsafe==3.0.3 # via # mako # xblock openedx-django-pyfs==3.8.0 # via xblock -pbr==6.1.1 - # via stevedore -pymongo==4.13.2 +pymongo==4.15.3 # via edx-opaque-keys python-dateutil==2.9.0.post0 # via @@ -57,11 +55,11 @@ python-dateutil==2.9.0.post0 # xblock pytz==2025.2 # via xblock -pyyaml==6.0.2 +pyyaml==6.0.3 # via xblock -s3transfer==0.13.0 +s3transfer==0.14.0 # via boto3 -simplejson==3.20.1 +simplejson==3.20.2 # via # xblock # xblock-utils @@ -72,14 +70,12 @@ six==1.17.0 # python-dateutil sqlparse==0.5.3 # via django -stevedore==5.4.1 +stevedore==5.5.0 # via edx-opaque-keys -typing-extensions==4.14.0 +typing-extensions==4.15.0 # via edx-opaque-keys -urllib3==2.2.3 - # via - # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt - # botocore +urllib3==2.5.0 + # via botocore web-fragments==3.1.0 # via # xblock diff --git a/requirements/ci.txt b/requirements/ci.txt index 48e6dcd..58b0951 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -6,25 +6,25 @@ # backports-tarfile==1.2.0 # via jaraco-context -certifi==2025.6.15 +certifi==2025.10.5 # via requests -cffi==1.17.1 +cffi==2.0.0 # via cryptography -charset-normalizer==3.4.2 +charset-normalizer==3.4.4 # via requests -cryptography==45.0.4 +cryptography==46.0.2 # via secretstorage -distlib==0.3.9 +distlib==0.4.0 # via virtualenv -docutils==0.21.2 +docutils==0.22.2 # via readme-renderer -filelock==3.18.0 +filelock==3.20.0 # via # tox # virtualenv id==1.5.0 # via twine -idna==3.10 +idna==3.11 # via requests importlib-metadata==8.7.0 # via keyring @@ -32,7 +32,7 @@ jaraco-classes==3.4.0 # via keyring jaraco-context==6.0.1 # via keyring -jaraco-functools==4.1.0 +jaraco-functools==4.3.0 # via keyring jeepney==0.9.0 # via @@ -40,22 +40,22 @@ jeepney==0.9.0 # secretstorage keyring==25.6.0 # via twine -markdown-it-py==3.0.0 +markdown-it-py==4.0.0 # via rich mdurl==0.1.2 # via markdown-it-py -more-itertools==10.7.0 +more-itertools==10.8.0 # via # jaraco-classes # jaraco-functools -nh3==0.2.21 +nh3==0.3.1 # via readme-renderer packaging==25.0 # via # pyproject-api # tox # twine -platformdirs==4.3.8 +platformdirs==4.5.0 # via # tox # virtualenv @@ -63,15 +63,15 @@ pluggy==1.6.0 # via tox py==1.11.0 # via tox -pycparser==2.22 +pycparser==2.23 # via cffi -pygments==2.19.1 +pygments==2.19.2 # via # readme-renderer # rich readme-renderer==44.0 # via twine -requests==2.32.4 +requests==2.32.5 # via # id # requests-toolbelt @@ -80,9 +80,9 @@ requests-toolbelt==1.0.0 # via twine rfc3986==2.0.0 # via twine -rich==14.0.0 +rich==14.2.0 # via twine -secretstorage==3.3.3 +secretstorage==3.4.0 # via keyring six==1.17.0 # via tox @@ -92,14 +92,13 @@ tox==3.28.0 # tox-battery tox-battery==0.6.2 # via -r requirements/ci.in -twine==6.1.0 +twine==6.2.0 # via -r requirements/ci.in -urllib3==2.2.3 +urllib3==2.5.0 # via - # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # requests # twine -virtualenv==20.31.2 +virtualenv==20.35.3 # via tox zipp==3.23.0 # via importlib-metadata diff --git a/requirements/constraints.txt b/requirements/constraints.txt index a569aac..0b6cd3c 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -9,5 +9,16 @@ # linking to it here is good. -# Common constraints for edx repos --c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt \ No newline at end of file +# using LTS django version +Django<6.0 + +# elasticsearch>=7.14.0 includes breaking changes in it which caused issues in discovery upgrade process. +# elastic search changelog: https://www.elastic.co/guide/en/enterprise-search/master/release-notes-7.14.0.html +# See https://github.com/openedx/edx-platform/issues/35126 for more info +elasticsearch<7.14.0 + +# NOTE: Pylint 4.x introduces changes in how the "ignore" and "ignore-patterns" options +# are parsed from setup.cfg and other configuration files. This causes Django migration +# modules (e.g., eox_tenant/migrations) to be linted even when explicitly ignored. +# Until we find a stable fix or plugin-based workaround, we keep Pylint pinned below 4. +pylint<4 \ No newline at end of file diff --git a/requirements/dev.txt b/requirements/dev.txt index 34ec49c..d70c1c5 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -4,9 +4,9 @@ # # make upgrade # -asgiref==3.8.1 +asgiref==3.10.0 # via django -astroid==3.3.10 +astroid==3.3.11 # via # -r requirements/quality.txt # pylint @@ -14,55 +14,55 @@ backports-tarfile==1.2.0 # via # -r requirements/ci.txt # jaraco-context -build==1.2.2.post1 +build==1.3.0 # via # -r requirements/pip-tools.txt # pip-tools -certifi==2025.6.15 +certifi==2025.10.5 # via # -r requirements/ci.txt # requests -cffi==1.17.1 +cffi==2.0.0 # via # -r requirements/ci.txt # cryptography chardet==5.2.0 # via diff-cover -charset-normalizer==3.4.2 +charset-normalizer==3.4.4 # via # -r requirements/ci.txt # requests -click==8.2.1 +click==8.3.0 # via # -r requirements/pip-tools.txt # pip-tools -coverage==7.9.1 +coverage==7.10.7 # via -r requirements/quality.txt -cryptography==45.0.4 +cryptography==46.0.2 # via # -r requirements/ci.txt # secretstorage -diff-cover==9.3.2 +diff-cover==9.7.1 # via -r requirements/dev.in dill==0.4.0 # via # -r requirements/quality.txt # pylint -distlib==0.3.9 +distlib==0.4.0 # via # -r requirements/ci.txt # virtualenv -django==4.2.23 +django==5.2.7 # via - # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -c requirements/constraints.txt # edx-i18n-tools -docutils==0.21.2 +docutils==0.22.2 # via # -r requirements/ci.txt # readme-renderer edx-i18n-tools==1.9.0 # via -r requirements/dev.in -filelock==3.18.0 +filelock==3.20.0 # via # -r requirements/ci.txt # tox @@ -71,7 +71,7 @@ id==1.5.0 # via # -r requirements/ci.txt # twine -idna==3.10 +idna==3.11 # via # -r requirements/ci.txt # requests @@ -79,7 +79,7 @@ importlib-metadata==8.7.0 # via # -r requirements/ci.txt # keyring -isort==6.0.1 +isort==6.1.0 # via # -r requirements/quality.txt # pylint @@ -91,7 +91,7 @@ jaraco-context==6.0.1 # via # -r requirements/ci.txt # keyring -jaraco-functools==4.1.0 +jaraco-functools==4.3.0 # via # -r requirements/ci.txt # keyring @@ -106,17 +106,17 @@ keyring==25.6.0 # via # -r requirements/ci.txt # twine -lxml[html-clean,html_clean]==5.4.0 +lxml[html-clean]==6.0.2 # via # edx-i18n-tools # lxml-html-clean -lxml-html-clean==0.4.2 +lxml-html-clean==0.4.3 # via lxml -markdown-it-py==3.0.0 +markdown-it-py==4.0.0 # via # -r requirements/ci.txt # rich -markupsafe==3.0.2 +markupsafe==3.0.3 # via jinja2 mccabe==0.7.0 # via @@ -126,12 +126,12 @@ mdurl==0.1.2 # via # -r requirements/ci.txt # markdown-it-py -more-itertools==10.7.0 +more-itertools==10.8.0 # via # -r requirements/ci.txt # jaraco-classes # jaraco-functools -nh3==0.2.21 +nh3==0.3.1 # via # -r requirements/ci.txt # readme-renderer @@ -146,9 +146,9 @@ path==16.16.0 # via edx-i18n-tools pep8==1.7.1 # via -r requirements/quality.txt -pip-tools==7.4.1 +pip-tools==7.5.1 # via -r requirements/pip-tools.txt -platformdirs==4.3.8 +platformdirs==4.5.0 # via # -r requirements/ci.txt # -r requirements/quality.txt @@ -165,30 +165,32 @@ py==1.11.0 # via # -r requirements/ci.txt # tox -pycparser==2.22 +pycparser==2.23 # via # -r requirements/ci.txt # cffi -pygments==2.19.1 +pygments==2.19.2 # via # -r requirements/ci.txt # diff-cover # readme-renderer # rich -pylint==3.3.7 - # via -r requirements/quality.txt +pylint==3.3.9 + # via + # -c requirements/constraints.txt + # -r requirements/quality.txt pyproject-hooks==1.2.0 # via # -r requirements/pip-tools.txt # build # pip-tools -pyyaml==6.0.2 +pyyaml==6.0.3 # via edx-i18n-tools readme-renderer==44.0 # via # -r requirements/ci.txt # twine -requests==2.32.4 +requests==2.32.5 # via # -r requirements/ci.txt # id @@ -202,11 +204,11 @@ rfc3986==2.0.0 # via # -r requirements/ci.txt # twine -rich==14.0.0 +rich==14.2.0 # via # -r requirements/ci.txt # twine -secretstorage==3.3.3 +secretstorage==3.4.0 # via # -r requirements/ci.txt # keyring @@ -226,15 +228,14 @@ tox==3.28.0 # tox-battery tox-battery==0.6.2 # via -r requirements/ci.txt -twine==6.1.0 +twine==6.2.0 # via -r requirements/ci.txt -urllib3==2.2.3 +urllib3==2.5.0 # via - # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/ci.txt # requests # twine -virtualenv==20.31.2 +virtualenv==20.35.3 # via # -r requirements/ci.txt # tox diff --git a/requirements/django42.txt b/requirements/django42.txt new file mode 100644 index 0000000..bb879a5 --- /dev/null +++ b/requirements/django42.txt @@ -0,0 +1 @@ +django==4.2.23 \ No newline at end of file diff --git a/requirements/django52.txt b/requirements/django52.txt new file mode 100644 index 0000000..9109eb2 --- /dev/null +++ b/requirements/django52.txt @@ -0,0 +1 @@ +django==5.2.7 diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt index 990b423..e97cb1b 100644 --- a/requirements/pip-tools.txt +++ b/requirements/pip-tools.txt @@ -4,13 +4,13 @@ # # make upgrade # -build==1.2.2.post1 +build==1.3.0 # via pip-tools -click==8.2.1 +click==8.3.0 # via pip-tools packaging==25.0 # via build -pip-tools==7.4.1 +pip-tools==7.5.1 # via -r requirements/pip-tools.in pyproject-hooks==1.2.0 # via diff --git a/requirements/pip.txt b/requirements/pip.txt index e109db2..dec1587 100644 --- a/requirements/pip.txt +++ b/requirements/pip.txt @@ -8,9 +8,7 @@ wheel==0.45.1 # via -r requirements/pip.in # The following packages are considered to be unsafe in a requirements file: -pip==24.2 - # via - # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt - # -r requirements/pip.in +pip==25.2 + # via -r requirements/pip.in setuptools==80.9.0 # via -r requirements/pip.in diff --git a/requirements/quality.txt b/requirements/quality.txt index 1ed4c76..4921166 100644 --- a/requirements/quality.txt +++ b/requirements/quality.txt @@ -4,21 +4,23 @@ # # make upgrade # -astroid==3.3.10 +astroid==3.3.11 # via pylint -coverage==7.9.1 +coverage==7.10.7 # via -r requirements/quality.in dill==0.4.0 # via pylint -isort==6.0.1 +isort==6.1.0 # via pylint mccabe==0.7.0 # via pylint pep8==1.7.1 # via -r requirements/quality.in -platformdirs==4.3.8 +platformdirs==4.5.0 # via pylint -pylint==3.3.7 - # via -r requirements/quality.in +pylint==3.3.9 + # via + # -c requirements/constraints.txt + # -r requirements/quality.in tomlkit==0.13.3 # via pylint diff --git a/requirements/test.txt b/requirements/test.txt index 1067f4d..cb26d84 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -6,21 +6,20 @@ # appdirs==1.4.4 # via fs -asgiref==3.8.1 +asgiref==3.10.0 # via django -boto3==1.38.41 +boto3==1.40.51 # via fs-s3fs -botocore==1.38.41 +botocore==1.40.51 # via # boto3 # s3transfer ddt==1.7.2 # via -r requirements/test.in -django==4.2.23 # via - # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt + # -c requirements/constraints.txt # openedx-django-pyfs -dnspython==2.7.0 +dnspython==2.8.0 # via pymongo edx-opaque-keys[django]==3.0.0 # via -r requirements/base.in @@ -39,13 +38,13 @@ jmespath==1.0.1 # botocore lazy==1.6 # via xblock -lxml==5.4.0 +lxml==6.0.2 # via xblock mako==1.3.10 # via # xblock # xblock-utils -markupsafe==3.0.2 +markupsafe==3.0.3 # via # mako # xblock @@ -55,15 +54,13 @@ openedx-django-pyfs==3.8.0 # via xblock packaging==25.0 # via pytest -pbr==6.1.1 - # via stevedore pluggy==1.6.0 # via pytest -pygments==2.19.1 +pygments==2.19.2 # via pytest -pymongo==4.13.2 +pymongo==4.15.3 # via edx-opaque-keys -pytest==8.4.1 +pytest==8.4.2 # via -r requirements/test.in python-dateutil==2.9.0.post0 # via @@ -71,11 +68,11 @@ python-dateutil==2.9.0.post0 # xblock pytz==2025.2 # via xblock -pyyaml==6.0.2 +pyyaml==6.0.3 # via xblock -s3transfer==0.13.0 +s3transfer==0.14.0 # via boto3 -simplejson==3.20.1 +simplejson==3.20.2 # via # xblock # xblock-utils @@ -86,14 +83,12 @@ six==1.17.0 # python-dateutil sqlparse==0.5.3 # via django -stevedore==5.4.1 +stevedore==5.5.0 # via edx-opaque-keys -typing-extensions==4.14.0 +typing-extensions==4.15.0 # via edx-opaque-keys -urllib3==2.2.3 - # via - # -c https://raw.githubusercontent.com/edx/edx-lint/master/edx_lint/files/common_constraints.txt - # botocore +urllib3==2.5.0 + # via botocore web-fragments==3.1.0 # via # xblock diff --git a/requirements/tox.txt b/requirements/tox.txt index 6f56498..cd4c8c9 100644 --- a/requirements/tox.txt +++ b/requirements/tox.txt @@ -4,15 +4,15 @@ # # make upgrade # -cachetools==6.1.0 +cachetools==6.2.1 # via tox chardet==5.2.0 # via tox colorama==0.4.6 # via tox -distlib==0.3.9 +distlib==0.4.0 # via virtualenv -filelock==3.18.0 +filelock==3.20.0 # via # tox # virtualenv @@ -20,15 +20,15 @@ packaging==25.0 # via # pyproject-api # tox -platformdirs==4.3.8 +platformdirs==4.5.0 # via # tox # virtualenv pluggy==1.6.0 # via tox -pyproject-api==1.9.1 +pyproject-api==1.10.0 # via tox -tox==4.27.0 +tox==4.31.0 # via -r requirements/tox.in -virtualenv==20.31.2 +virtualenv==20.35.3 # via tox diff --git a/setup.cfg b/setup.cfg index 4473f95..7e22c6b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 2.0.1 +current_version = 2.2.0 commit = True tag = True diff --git a/setup.py b/setup.py index 91c0904..4640f5b 100644 --- a/setup.py +++ b/setup.py @@ -97,13 +97,13 @@ def load_requirements(*requirements_paths): 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', - 'Programming Language :: Python :: 3', '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 32d73ff..ce91fd9 100644 --- a/tox.ini +++ b/tox.ini @@ -1,12 +1,16 @@ # testing with tox [tox] -envlist = py311-django{42} +envlist = + py311-django42 + py311-django52 + py312-django52 skipsdist = true [testenv] DJANGO_SETTINGS_MODULE = flow_control.settings.test deps = - django42: Django>=4.2,<5.0 + django42: -r requirements/django42.txt + django52: -r requirements/django52.txt -r {toxinidir}/requirements/test.txt commands = pytest