diff --git a/.github/workflows/check-reserved-keywords.yml b/.github/workflows/check-reserved-keywords.yml index 22f8b335..5978ec79 100644 --- a/.github/workflows/check-reserved-keywords.yml +++ b/.github/workflows/check-reserved-keywords.yml @@ -15,7 +15,7 @@ jobs: - name: setup python uses: actions/setup-python@v5 with: - python-version: 3.11 + python-version: 3.12 - name: Install pip run: pip install -r requirements/pip.txt diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a7de04a9..e720fa04 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - python-version: ['3.11', '3.12'] + python-version: ['3.12'] toxenv: [django42, django52, quality] steps: @@ -36,7 +36,7 @@ jobs: run: tox - name: Run Coverage - if: matrix.python-version == '3.11' && matrix.toxenv=='django42' + if: matrix.python-version == '3.12' && matrix.toxenv=='django42' uses: codecov/codecov-action@v5 with: flags: unittests @@ -56,7 +56,7 @@ jobs: - name: setup python uses: actions/setup-python@v5 with: - python-version: 3.11 + python-version: 3.12 - name: Install pip run: pip install -r requirements/pip.txt diff --git a/.github/workflows/pypi-publish.yml b/.github/workflows/pypi-publish.yml index 1bc4399b..eba2eb2d 100644 --- a/.github/workflows/pypi-publish.yml +++ b/.github/workflows/pypi-publish.yml @@ -15,7 +15,7 @@ jobs: - name: setup python uses: actions/setup-python@v5 with: - python-version: 3.11 + python-version: 3.12 - name: Install pip run: pip install -r requirements/pip.txt diff --git a/.github/workflows/verify_changed_contract.yml b/.github/workflows/verify_changed_contract.yml index 0928a1f0..13d3b46c 100644 --- a/.github/workflows/verify_changed_contract.yml +++ b/.github/workflows/verify_changed_contract.yml @@ -24,7 +24,7 @@ jobs: - name: setup python uses: actions/setup-python@v5 with: - python-version: 3.11 + python-version: 3.12 - name: Install pip run: pip install -r requirements/pip.txt diff --git a/Makefile b/Makefile index d691630f..4a1c1c99 100644 --- a/Makefile +++ b/Makefile @@ -45,9 +45,15 @@ upgrade: $(COMMON_CONSTRAINTS_TXT) pip-compile --rebuild --upgrade -o requirements/pip-tools.txt requirements/pip-tools.in pip install -qr requirements/pip.txt pip install -qr requirements/pip-tools.txt - pip-compile --rebuild --upgrade -o requirements/dev.txt requirements/base.in requirements/dev.in requirements/quality.in requirements/test.in requirements/ci.in - pip-compile --rebuild --upgrade -o requirements/quality.txt requirements/base.in requirements/quality.in requirements/test.in - pip-compile --rebuild --upgrade -o requirements/test.txt requirements/base.in requirements/test.in + # --allow-unsafe is required here because fs (pyfilesystem2) depends on setuptools + # (via pkg_resources for namespace package declarations). Without it, pip-compile + # silently omits setuptools from the output, causing ImportError at runtime. + # TODO: remove --allow-unsafe and the setuptools<82 constraint in constraints.txt + # once a version of fs is available that does not depend on pkg_resources. + # Track: https://github.com/PyFilesystem/pyfilesystem2/issues/577 + pip-compile --rebuild --upgrade --allow-unsafe -o requirements/dev.txt requirements/base.in requirements/dev.in requirements/quality.in requirements/test.in requirements/ci.in + pip-compile --rebuild --upgrade --allow-unsafe -o requirements/quality.txt requirements/base.in requirements/quality.in requirements/test.in + pip-compile --rebuild --upgrade --allow-unsafe -o requirements/test.txt requirements/base.in requirements/test.in pip-compile --rebuild --upgrade -o requirements/ci.txt requirements/ci.in # Let tox control the Django version for tests sed '/^[dD]jango==/d' requirements/test.txt > requirements/test.tmp diff --git a/edxval/__init__.py b/edxval/__init__.py index b5a91c28..cde3e292 100644 --- a/edxval/__init__.py +++ b/edxval/__init__.py @@ -2,4 +2,4 @@ init """ -__version__ = '3.2.0' +__version__ = '4.0.0' diff --git a/edxval/models.py b/edxval/models.py index 72773398..60ff04c0 100644 --- a/edxval/models.py +++ b/edxval/models.py @@ -298,7 +298,7 @@ def validate_list(self, value): return validate_generated_images(value, self.max_items) def deconstruct(self): - name, path, args, kwargs = super().deconstruct() + name, path, args, kwargs = super().deconstruct() # pylint: disable=no-member # Only include kwarg if it's not the default if self.max_items != LIST_MAX_ITEMS: kwargs['max_items'] = self.max_items diff --git a/requirements/ci.txt b/requirements/ci.txt index 968283d3..17984d38 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -1,52 +1,68 @@ # -# 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==5.5.2 +annotated-doc==0.0.4 + # via typer +cachetools==7.0.5 # via tox -certifi==2025.4.26 +certifi==2026.2.25 # via requests -chardet==5.2.0 - # via tox -charset-normalizer==3.4.2 +charset-normalizer==3.4.5 # via requests +click==8.3.1 + # via typer colorama==0.4.6 # via tox -coverage[toml]==7.8.0 +coverage[toml]==7.13.4 # via coveralls -coveralls==4.0.1 +coveralls==4.1.0 # via -r requirements/ci.in -distlib==0.3.9 +distlib==0.4.0 # via virtualenv -docopt==0.6.2 - # via coveralls -filelock==3.18.0 +filelock==3.25.2 # via + # python-discovery # tox # virtualenv -idna==3.10 +idna==3.11 # via requests -packaging==25.0 +markdown-it-py==4.0.0 + # via rich +mdurl==0.1.2 + # via markdown-it-py +packaging==26.0 # via # pyproject-api # tox -platformdirs==4.3.7 +platformdirs==4.9.4 # via + # python-discovery # tox # virtualenv -pluggy==1.5.0 +pluggy==1.6.0 # via tox -pyproject-api==1.9.0 +pygments==2.19.2 + # via rich +pyproject-api==1.10.0 # via tox -requests==2.32.3 +python-discovery==1.1.3 + # via virtualenv +requests==2.32.5 # via coveralls -tox==4.25.0 +rich==14.3.3 + # via typer +shellingham==1.5.4 + # via typer +tomli-w==1.2.0 + # via tox +tox==4.49.1 # via -r requirements/ci.in -urllib3==2.2.3 - # via - # -c requirements/common_constraints.txt - # requests -virtualenv==20.30.0 +typer==0.24.1 + # via coveralls +urllib3==2.6.3 + # via requests +virtualenv==21.2.0 # via tox diff --git a/requirements/common_constraints.txt b/requirements/common_constraints.txt index 1511019d..72cc4cc8 100644 --- a/requirements/common_constraints.txt +++ b/requirements/common_constraints.txt @@ -12,20 +12,9 @@ # this file from Github directly. It does not require packaging in edx-lint. # using LTS django version -Django<5.0 +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 - -# django-simple-history>3.0.0 adds indexing and causes a lot of migrations to be affected -django-simple-history==3.0.0 - -# Cause: https://github.com/openedx/edx-lint/issues/458 -# This can be unpinned once https://github.com/openedx/edx-lint/issues/459 has been resolved. -pip<24.3 - -# Cause: https://github.com/openedx/edx-lint/issues/475 -# This can be unpinned once https://github.com/openedx/edx-lint/issues/476 has been resolved. -urllib3<2.3.0 diff --git a/requirements/constraints.txt b/requirements/constraints.txt index 116e8bf2..53ab4a7a 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -10,3 +10,14 @@ # Common constraints for edx repos -c common_constraints.txt + +# setuptools 82+ removed pkg_resources, which fs (pyfilesystem2) uses for +# namespace package declarations in fs/__init__.py. Pin until fs is updated. +# See: https://github.com/PyFilesystem/pyfilesystem2/issues/577 +setuptools<82 + +# pact-python 3.x has a completely different API from 2.x. +# The verify_pact.py code uses the 2.x API (Verifier with provider/provider_base_url kwargs). +# Pin until the code is updated to use the new API. +# See: https://github.com/openedx/edx-val/issues/598 +pact-python<3 diff --git a/requirements/dev.txt b/requirements/dev.txt index cbee17b1..21373adc 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -1,75 +1,85 @@ # -# 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 # +annotated-doc==0.0.4 + # via + # fastapi + # typer annotated-types==0.7.0 # via pydantic -anyio==4.9.0 +anyio==4.12.1 # via starlette appdirs==1.4.4 # via fs -asgiref==3.8.1 +asgiref==3.11.1 # via django -astroid==3.3.9 +astroid==4.0.4 # via # pylint # pylint-celery -backports-tarfile==1.2.0 - # via jaraco-context -cachetools==5.5.2 +boto3==1.42.66 + # via -r requirements/test.in +botocore==1.42.66 + # via + # boto3 + # s3transfer +cachetools==7.0.5 # via # -r requirements/base.in # tox -certifi==2025.4.26 +certifi==2026.2.25 # via requests cffi==1.17.1 # via # cryptography # pact-python # pynacl -chardet==5.2.0 +chardet==7.1.0 # via # diff-cover # pysrt - # tox -charset-normalizer==3.4.2 +charset-normalizer==3.4.5 # via requests -click==8.1.8 +click==8.3.1 # via # click-log # code-annotations # edx-django-utils # edx-lint # pact-python + # typer # uvicorn click-log==0.4.0 # via edx-lint -code-annotations==2.3.0 +code-annotations==2.3.2 # via # edx-lint # edx-toggles colorama==0.4.6 # via tox -coverage[toml]==7.8.0 +coverage[toml]==7.13.4 # via # -r requirements/test.in # coveralls # pytest-cov -coveralls==4.0.1 +coveralls==4.1.0 # via -r requirements/ci.in -cryptography==44.0.3 - # via pyjwt +cryptography==46.0.0 + # via + # pyjwt + # secretstorage ddt==1.7.2 # via -r requirements/test.in -diff-cover==9.2.4 +diff-cover==10.2.0 # via -r requirements/dev.in -dill==0.4.0 +dill==0.4.1 # via pylint -distlib==0.3.9 +distlib==0.4.0 # via virtualenv -django==4.2.20 +django==5.2.12 # via # -c requirements/common_constraints.txt # -r requirements/base.in @@ -91,26 +101,24 @@ django-model-utils==5.0.0 # via -r requirements/base.in django-storages==1.14.6 # via -r requirements/base.in -django-waffle==4.2.0 +django-waffle==5.0.0 # via # edx-django-utils # edx-drf-extensions # edx-toggles -djangorestframework==3.16.0 +djangorestframework==3.16.1 # via # drf-jwt # edx-drf-extensions -dnspython==2.7.0 +dnspython==2.8.0 # via pymongo -docopt==0.6.2 - # via coveralls -docutils==0.21.2 +docutils==0.22.4 # via readme-renderer drf-jwt==1.19.2 # via edx-drf-extensions edx-django-release-util==1.5.0 # via -r requirements/base.in -edx-django-utils==7.4.0 +edx-django-utils==8.0.1 # via # edx-drf-extensions # edx-toggles @@ -118,52 +126,59 @@ edx-drf-extensions==10.6.0 # via -r requirements/base.in edx-lint==5.6.0 # via -r requirements/quality.in -edx-opaque-keys==3.0.0 +edx-opaque-keys==3.1.0 # via edx-drf-extensions -edx-toggles==5.3.0 +edx-toggles==5.4.1 # via -r requirements/base.in -fastapi==0.115.12 +fastapi==0.135.1 # via pact-python -filelock==3.18.0 +filelock==3.25.2 # via + # python-discovery # tox # virtualenv fs==2.4.16 # via -r requirements/test.in h11==0.16.0 # via uvicorn -id==1.5.0 +id==1.6.1 # via twine -idna==3.10 +idna==3.11 # via # anyio # requests # yarl -importlib-metadata==8.7.0 - # via keyring -iniconfig==2.1.0 +iniconfig==2.3.0 # via pytest -isort==6.0.1 +isort==8.0.1 # via # -r requirements/quality.in # pylint jaraco-classes==3.4.0 # via keyring -jaraco-context==6.0.1 +jaraco-context==6.1.1 # via keyring -jaraco-functools==4.1.0 +jaraco-functools==4.4.0 # via keyring +jeepney==0.9.0 + # via + # keyring + # secretstorage jinja2==3.1.6 # via # code-annotations # diff-cover -keyring==25.6.0 +jmespath==1.1.0 + # via + # boto3 + # botocore +keyring==25.7.0 # via twine -lxml==5.4.0 +lxml==6.0.2 # via -r requirements/base.in -markdown-it-py==3.0.0 +markdown-it-py==4.0.0 # via rich -markupsafe==3.0.2 +markupsafe==3.0.3 # via jinja2 mccabe==0.7.0 # via pylint @@ -171,64 +186,65 @@ mdurl==0.1.2 # via markdown-it-py mock==5.2.0 # via -r requirements/test.in -more-itertools==10.7.0 +more-itertools==10.8.0 # via # jaraco-classes # jaraco-functools -multidict==6.4.3 +multidict==6.7.1 # via yarl -newrelic==10.11.0 - # via edx-django-utils -nh3==0.2.21 +nh3==0.3.3 # via readme-renderer -packaging==25.0 +packaging==26.0 # via # pyproject-api # pytest # tox # twine -pact-python==2.3.1 - # via -r requirements/test.in -pbr==6.1.1 - # via stevedore -pillow==11.2.1 +pact-python==2.3.3 + # via + # -c requirements/constraints.txt + # -r requirements/test.in +pillow==12.1.1 # via -r requirements/base.in -platformdirs==4.3.7 +platformdirs==4.9.4 # via # pylint + # python-discovery # tox # virtualenv -pluggy==1.5.0 +pluggy==1.6.0 # via # diff-cover # pytest + # pytest-cov # tox -propcache==0.3.1 +propcache==0.4.1 # via yarl -psutil==6.1.1 +psutil==7.2.2 # via # edx-django-utils # pact-python -pycodestyle==2.13.0 +pycodestyle==2.14.0 # via -r requirements/quality.in -pycparser==2.22 +pycparser==3.0 # via cffi -pydantic==2.11.4 +pydantic==2.12.5 # via fastapi -pydantic-core==2.33.2 +pydantic-core==2.41.5 # via pydantic pydocstyle==6.3.0 # via -r requirements/quality.in -pygments==2.19.1 +pygments==2.19.2 # via # diff-cover + # pytest # readme-renderer # rich -pyjwt[crypto]==2.10.1 +pyjwt[crypto]==2.11.0 # via # drf-jwt # edx-drf-extensions -pylint==3.3.7 +pylint==4.0.5 # via # edx-lint # pylint-celery @@ -236,107 +252,126 @@ pylint==3.3.7 # pylint-plugin-utils pylint-celery==0.3 # via edx-lint -pylint-django==2.6.1 +pylint-django==2.7.0 # via edx-lint -pylint-plugin-utils==0.8.2 +pylint-plugin-utils==0.9.0 # via # pylint-celery # pylint-django -pymongo==4.12.1 +pymongo==4.16.0 # via edx-opaque-keys -pynacl==1.5.0 +pynacl==1.6.0 # via edx-django-utils -pyproject-api==1.9.0 +pyproject-api==1.10.0 # via tox pysrt==1.1.2 # via -r requirements/base.in -pytest==8.3.5 +pytest==9.0.2 # via # pytest-cov # pytest-django -pytest-cov==6.1.1 +pytest-cov==7.0.0 # via -r requirements/test.in -pytest-django==4.11.1 +pytest-django==4.12.0 # via -r requirements/test.in +python-dateutil==2.9.0.post0 + # via botocore +python-discovery==1.1.3 + # via virtualenv python-slugify==8.0.4 # via code-annotations -pyyaml==6.0.2 +pyyaml==6.0.3 # via # code-annotations # edx-django-release-util # responses readme-renderer==44.0 # via twine -requests==2.32.3 +requests==2.32.5 # via # coveralls # edx-drf-extensions - # id # pact-python # requests-toolbelt # responses # twine requests-toolbelt==1.0.0 # via twine -responses==0.25.7 +responses==0.26.0 # via -r requirements/test.in rfc3986==2.0.0 # via twine -rich==14.0.0 - # via twine +rich==14.3.3 + # via + # twine + # typer +s3transfer==0.16.0 + # via boto3 +secretstorage==3.5.0 + # via keyring semantic-version==2.10.0 # via edx-drf-extensions +shellingham==1.5.4 + # via typer six==1.17.0 # via # edx-django-release-util # edx-lint # fs # pact-python -sniffio==1.3.1 - # via anyio -snowballstemmer==2.2.0 + # python-dateutil +snowballstemmer==3.0.1 # via pydocstyle -sqlparse==0.5.3 +sqlparse==0.5.5 # via django -starlette==0.46.2 +starlette==0.52.1 # via fastapi -stevedore==5.4.1 +stevedore==5.7.0 # via # code-annotations # edx-django-utils # edx-opaque-keys text-unidecode==1.3 # via python-slugify -tomlkit==0.13.2 +tomli-w==1.2.0 + # via tox +tomlkit==0.14.0 # via pylint -tox==4.25.0 +tox==4.49.1 # via -r requirements/ci.in -twine==6.1.0 +twine==6.2.0 # via -r requirements/quality.in -typing-extensions==4.13.2 +typer==0.24.1 + # via coveralls +typing-extensions==4.15.0 # via # anyio # edx-opaque-keys # fastapi # pydantic # pydantic-core + # starlette # typing-inspection -typing-inspection==0.4.0 - # via pydantic -urllib3==2.2.3 +typing-inspection==0.4.2 # via - # -c requirements/common_constraints.txt + # fastapi + # pydantic +urllib3==2.6.3 + # via + # botocore + # id # requests # responses # twine -uvicorn==0.34.2 +uvicorn==0.41.0 # via pact-python -virtualenv==20.30.0 +virtualenv==21.2.0 # via tox -yarl==1.20.0 +yarl==1.23.0 # via pact-python -zipp==3.21.0 - # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -# setuptools +setuptools==81.0.0 + # via + # -c requirements/constraints.txt + # fs diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt index 1dd71b5e..d89516b8 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.2.2.post1 +build==1.4.0 # via pip-tools -click==8.1.8 +click==8.3.1 # via pip-tools -packaging==25.0 - # via build -pip-tools==7.4.1 +packaging==26.0 + # 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.46.3 # 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 5d3482a4..8bd16d64 100644 --- a/requirements/pip.txt +++ b/requirements/pip.txt @@ -1,16 +1,18 @@ # -# 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.0 + # via wheel +wheel==0.46.3 # via -r requirements/pip.in # The following packages are considered to be unsafe in a requirements file: -pip==24.2 +pip==26.0.1 + # via -r requirements/pip.in +setuptools==81.0.0 # via - # -c requirements/common_constraints.txt + # -c requirements/constraints.txt # -r requirements/pip.in -setuptools==80.3.1 - # via -r requirements/pip.in diff --git a/requirements/quality.txt b/requirements/quality.txt index 63b1b541..c5b0c116 100644 --- a/requirements/quality.txt +++ b/requirements/quality.txt @@ -1,37 +1,43 @@ # -# 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 # +annotated-doc==0.0.4 + # via fastapi annotated-types==0.7.0 # via pydantic -anyio==4.9.0 +anyio==4.12.1 # via starlette appdirs==1.4.4 # via fs -asgiref==3.8.1 +asgiref==3.11.1 # via django -astroid==3.3.9 +astroid==4.0.4 # via # pylint # pylint-celery -backports-tarfile==1.2.0 - # via jaraco-context -cachetools==5.5.2 +boto3==1.42.66 + # via -r requirements/test.in +botocore==1.42.66 + # via + # boto3 + # s3transfer +cachetools==7.0.5 # via -r requirements/base.in -certifi==2025.4.26 +certifi==2026.2.25 # via requests cffi==1.17.1 # via # cryptography # pact-python # pynacl -chardet==5.2.0 +chardet==7.1.0 # via pysrt -charset-normalizer==3.4.2 +charset-normalizer==3.4.5 # via requests -click==8.1.8 +click==8.3.1 # via # click-log # code-annotations @@ -41,21 +47,23 @@ click==8.1.8 # uvicorn click-log==0.4.0 # via edx-lint -code-annotations==2.3.0 +code-annotations==2.3.2 # via # edx-lint # edx-toggles -coverage[toml]==7.8.0 +coverage[toml]==7.13.4 # via # -r requirements/test.in # pytest-cov -cryptography==44.0.3 - # via pyjwt +cryptography==46.0.0 + # via + # pyjwt + # secretstorage ddt==1.7.2 # via -r requirements/test.in -dill==0.4.0 +dill==0.4.1 # via pylint -django==4.2.20 +django==5.2.12 # via # -c requirements/common_constraints.txt # -r requirements/base.in @@ -77,24 +85,24 @@ django-model-utils==5.0.0 # via -r requirements/base.in django-storages==1.14.6 # via -r requirements/base.in -django-waffle==4.2.0 +django-waffle==5.0.0 # via # edx-django-utils # edx-drf-extensions # edx-toggles -djangorestframework==3.16.0 +djangorestframework==3.16.1 # via # drf-jwt # edx-drf-extensions -dnspython==2.7.0 +dnspython==2.8.0 # via pymongo -docutils==0.21.2 +docutils==0.22.4 # via readme-renderer drf-jwt==1.19.2 # via edx-drf-extensions edx-django-release-util==1.5.0 # via -r requirements/base.in -edx-django-utils==7.4.0 +edx-django-utils==8.0.1 # via # edx-drf-extensions # edx-toggles @@ -102,46 +110,52 @@ edx-drf-extensions==10.6.0 # via -r requirements/base.in edx-lint==5.6.0 # via -r requirements/quality.in -edx-opaque-keys==3.0.0 +edx-opaque-keys==3.1.0 # via edx-drf-extensions -edx-toggles==5.3.0 +edx-toggles==5.4.1 # via -r requirements/base.in -fastapi==0.115.12 +fastapi==0.135.1 # via pact-python fs==2.4.16 # via -r requirements/test.in h11==0.16.0 # via uvicorn -id==1.5.0 +id==1.6.1 # via twine -idna==3.10 +idna==3.11 # via # anyio # requests # yarl -importlib-metadata==8.7.0 - # via keyring -iniconfig==2.1.0 +iniconfig==2.3.0 # via pytest -isort==6.0.1 +isort==8.0.1 # via # -r requirements/quality.in # pylint jaraco-classes==3.4.0 # via keyring -jaraco-context==6.0.1 +jaraco-context==6.1.1 # via keyring -jaraco-functools==4.1.0 +jaraco-functools==4.4.0 # via keyring +jeepney==0.9.0 + # via + # keyring + # secretstorage jinja2==3.1.6 # via code-annotations -keyring==25.6.0 +jmespath==1.1.0 + # via + # boto3 + # botocore +keyring==25.7.0 # via twine -lxml==5.4.0 +lxml==6.0.2 # via -r requirements/base.in -markdown-it-py==3.0.0 +markdown-it-py==4.0.0 # via rich -markupsafe==3.0.2 +markupsafe==3.0.3 # via jinja2 mccabe==0.7.0 # via pylint @@ -149,55 +163,56 @@ mdurl==0.1.2 # via markdown-it-py mock==5.2.0 # via -r requirements/test.in -more-itertools==10.7.0 +more-itertools==10.8.0 # via # jaraco-classes # jaraco-functools -multidict==6.4.3 +multidict==6.7.1 # via yarl -newrelic==10.11.0 - # via edx-django-utils -nh3==0.2.21 +nh3==0.3.3 # via readme-renderer -packaging==25.0 +packaging==26.0 # via # pytest # twine -pact-python==2.3.1 - # via -r requirements/test.in -pbr==6.1.1 - # via stevedore -pillow==11.2.1 +pact-python==2.3.3 + # via + # -c requirements/constraints.txt + # -r requirements/test.in +pillow==12.1.1 # via -r requirements/base.in -platformdirs==4.3.7 +platformdirs==4.9.4 # via pylint -pluggy==1.5.0 - # via pytest -propcache==0.3.1 +pluggy==1.6.0 + # via + # pytest + # pytest-cov +propcache==0.4.1 # via yarl -psutil==6.1.1 +psutil==7.2.2 # via # edx-django-utils # pact-python -pycodestyle==2.13.0 +pycodestyle==2.14.0 # via -r requirements/quality.in -pycparser==2.22 +pycparser==3.0 # via cffi -pydantic==2.11.4 +pydantic==2.12.5 # via fastapi -pydantic-core==2.33.2 +pydantic-core==2.41.5 # via pydantic pydocstyle==6.3.0 # via -r requirements/quality.in -pygments==2.19.1 +pygments==2.19.2 # via + # pytest # readme-renderer # rich -pyjwt[crypto]==2.10.1 +pyjwt[crypto]==2.11.0 # via # drf-jwt # edx-drf-extensions -pylint==3.3.7 +pylint==4.0.5 # via # edx-lint # pylint-celery @@ -205,51 +220,56 @@ pylint==3.3.7 # pylint-plugin-utils pylint-celery==0.3 # via edx-lint -pylint-django==2.6.1 +pylint-django==2.7.0 # via edx-lint -pylint-plugin-utils==0.8.2 +pylint-plugin-utils==0.9.0 # via # pylint-celery # pylint-django -pymongo==4.12.1 +pymongo==4.16.0 # via edx-opaque-keys -pynacl==1.5.0 +pynacl==1.6.0 # via edx-django-utils pysrt==1.1.2 # via -r requirements/base.in -pytest==8.3.5 +pytest==9.0.2 # via # pytest-cov # pytest-django -pytest-cov==6.1.1 +pytest-cov==7.0.0 # via -r requirements/test.in -pytest-django==4.11.1 +pytest-django==4.12.0 # via -r requirements/test.in +python-dateutil==2.9.0.post0 + # via botocore python-slugify==8.0.4 # via code-annotations -pyyaml==6.0.2 +pyyaml==6.0.3 # via # code-annotations # edx-django-release-util # responses readme-renderer==44.0 # via twine -requests==2.32.3 +requests==2.32.5 # via # edx-drf-extensions - # id # pact-python # requests-toolbelt # responses # twine requests-toolbelt==1.0.0 # via twine -responses==0.25.7 +responses==0.26.0 # via -r requirements/test.in rfc3986==2.0.0 # via twine -rich==14.0.0 +rich==14.3.3 # via twine +s3transfer==0.16.0 + # via boto3 +secretstorage==3.5.0 + # via keyring semantic-version==2.10.0 # via edx-drf-extensions six==1.17.0 @@ -258,47 +278,51 @@ six==1.17.0 # edx-lint # fs # pact-python -sniffio==1.3.1 - # via anyio -snowballstemmer==2.2.0 + # python-dateutil +snowballstemmer==3.0.1 # via pydocstyle -sqlparse==0.5.3 +sqlparse==0.5.5 # via django -starlette==0.46.2 +starlette==0.52.1 # via fastapi -stevedore==5.4.1 +stevedore==5.7.0 # via # code-annotations # edx-django-utils # edx-opaque-keys text-unidecode==1.3 # via python-slugify -tomlkit==0.13.2 +tomlkit==0.14.0 # via pylint -twine==6.1.0 +twine==6.2.0 # via -r requirements/quality.in -typing-extensions==4.13.2 +typing-extensions==4.15.0 # via # anyio # edx-opaque-keys # fastapi # pydantic # pydantic-core + # starlette # typing-inspection -typing-inspection==0.4.0 - # via pydantic -urllib3==2.2.3 +typing-inspection==0.4.2 # via - # -c requirements/common_constraints.txt + # fastapi + # pydantic +urllib3==2.6.3 + # via + # botocore + # id # requests # responses # twine -uvicorn==0.34.2 +uvicorn==0.41.0 # via pact-python -yarl==1.20.0 +yarl==1.23.0 # via pact-python -zipp==3.21.0 - # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -# setuptools +setuptools==81.0.0 + # via + # -c requirements/constraints.txt + # fs diff --git a/requirements/test.txt b/requirements/test.txt index 70844c77..cbab2a37 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -1,49 +1,51 @@ # -# 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 # +annotated-doc==0.0.4 + # via fastapi annotated-types==0.7.0 # via pydantic -anyio==4.9.0 +anyio==4.12.1 # via starlette appdirs==1.4.4 # via fs -asgiref==3.8.1 +asgiref==3.11.1 # via django -boto3==1.38.8 +boto3==1.42.66 # via -r requirements/test.in -botocore==1.38.8 +botocore==1.42.66 # via # boto3 # s3transfer -cachetools==5.5.2 +cachetools==7.0.5 # via -r requirements/base.in -certifi==2025.4.26 +certifi==2026.2.25 # via requests cffi==1.17.1 # via # cryptography # pact-python # pynacl -chardet==5.2.0 +chardet==7.1.0 # via pysrt -charset-normalizer==3.4.2 +charset-normalizer==3.4.5 # via requests -click==8.1.8 +click==8.3.1 # via # code-annotations # edx-django-utils # pact-python # uvicorn -code-annotations==2.3.0 +code-annotations==2.3.2 # via edx-toggles -coverage[toml]==7.8.0 +coverage[toml]==7.13.4 # via # -r requirements/test.in # pytest-cov -cryptography==44.0.3 +cryptography==46.0.0 # via pyjwt ddt==1.7.2 # via -r requirements/test.in @@ -68,111 +70,119 @@ django-model-utils==5.0.0 # via -r requirements/base.in django-storages==1.14.6 # via -r requirements/base.in -django-waffle==4.2.0 +django-waffle==5.0.0 # via # edx-django-utils # edx-drf-extensions # edx-toggles -djangorestframework==3.16.0 +djangorestframework==3.16.1 # via # drf-jwt # edx-drf-extensions -dnspython==2.7.0 +dnspython==2.8.0 # via pymongo drf-jwt==1.19.2 # via edx-drf-extensions edx-django-release-util==1.5.0 # via -r requirements/base.in -edx-django-utils==7.4.0 +edx-django-utils==8.0.1 # via # edx-drf-extensions # edx-toggles edx-drf-extensions==10.6.0 # via -r requirements/base.in -edx-opaque-keys==3.0.0 +edx-opaque-keys==3.1.0 # via edx-drf-extensions -edx-toggles==5.3.0 +edx-toggles==5.4.1 # via -r requirements/base.in -fastapi==0.115.12 +fastapi==0.135.1 # via pact-python fs==2.4.16 # via -r requirements/test.in h11==0.16.0 # via uvicorn -idna==3.10 +idna==3.11 # via # anyio # requests # yarl -iniconfig==2.1.0 +iniconfig==2.3.0 # via pytest jinja2==3.1.6 # via code-annotations -lxml==5.4.0 +jmespath==1.1.0 + # via + # boto3 + # botocore +lxml==6.0.2 # via -r requirements/base.in -markupsafe==3.0.2 +markupsafe==3.0.3 # via jinja2 mock==5.2.0 # via -r requirements/test.in -multidict==6.4.3 +multidict==6.7.1 # via yarl -newrelic==10.11.0 - # via edx-django-utils -packaging==25.0 +packaging==26.0 # via pytest -pact-python==2.3.1 - # via -r requirements/test.in -pbr==6.1.1 - # via stevedore -pillow==11.2.1 +pact-python==2.3.3 + # via + # -c requirements/constraints.txt + # -r requirements/test.in +pillow==12.1.1 # via -r requirements/base.in -pluggy==1.5.0 - # via pytest -propcache==0.3.1 +pluggy==1.6.0 + # via + # pytest + # pytest-cov +propcache==0.4.1 # via yarl -psutil==6.1.1 +psutil==7.2.2 # via # edx-django-utils # pact-python -pycparser==2.22 +pycparser==3.0 # via cffi -pydantic==2.11.4 +pydantic==2.12.5 # via fastapi -pydantic-core==2.33.2 +pydantic-core==2.41.5 # via pydantic -pyjwt[crypto]==2.10.1 +pygments==2.19.2 + # via pytest +pyjwt[crypto]==2.11.0 # via # drf-jwt # edx-drf-extensions -pymongo==4.12.1 +pymongo==4.16.0 # via edx-opaque-keys -pynacl==1.5.0 +pynacl==1.6.0 # via edx-django-utils pysrt==1.1.2 # via -r requirements/base.in -pytest==8.3.5 +pytest==9.0.2 # via # pytest-cov # pytest-django -pytest-cov==6.1.1 +pytest-cov==7.0.0 # via -r requirements/test.in -pytest-django==4.11.1 +pytest-django==4.12.0 # via -r requirements/test.in +python-dateutil==2.9.0.post0 + # via botocore python-slugify==8.0.4 # via code-annotations -pyyaml==6.0.2 +pyyaml==6.0.3 # via # code-annotations # edx-django-release-util # responses -requests==2.32.3 +requests==2.32.5 # via # edx-drf-extensions # pact-python # responses -responses==0.25.7 +responses==0.26.0 # via -r requirements/test.in -s3transfer==0.12.0 +s3transfer==0.16.0 # via boto3 semantic-version==2.10.0 # via edx-drf-extensions @@ -181,38 +191,43 @@ six==1.17.0 # edx-django-release-util # fs # pact-python -sniffio==1.3.1 - # via anyio -sqlparse==0.5.3 + # python-dateutil +sqlparse==0.5.5 # via django -starlette==0.46.2 +starlette==0.52.1 # via fastapi -stevedore==5.4.1 +stevedore==5.7.0 # via # code-annotations # edx-django-utils # edx-opaque-keys text-unidecode==1.3 # via python-slugify -typing-extensions==4.13.2 +typing-extensions==4.15.0 # via # anyio # edx-opaque-keys # fastapi # pydantic # pydantic-core + # starlette # typing-inspection -typing-inspection==0.4.0 - # via pydantic -urllib3==2.2.3 +typing-inspection==0.4.2 # via - # -c requirements/common_constraints.txt + # fastapi + # pydantic +urllib3==2.6.3 + # via + # botocore # requests # responses -uvicorn==0.34.2 +uvicorn==0.41.0 # via pact-python -yarl==1.20.0 +yarl==1.23.0 # via pact-python # The following packages are considered to be unsafe in a requirements file: -# setuptools +setuptools==81.0.0 + # via + # -c requirements/constraints.txt + # fs diff --git a/setup.py b/setup.py index 4fa86270..99557c56 100644 --- a/setup.py +++ b/setup.py @@ -148,7 +148,6 @@ def get_version(*file_paths): 'Operating System :: OS Independent', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', 'Framework :: Django', 'Framework :: Django :: 4.2',