diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e88bc950..f5c82ec9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,6 +18,7 @@ jobs: - '3.11' - '3.12' - '3.13' + - '3.14' steps: - uses: actions/checkout@v6 diff --git a/pyproject.toml b/pyproject.toml index 9f8fdf43..50ea09a5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,6 +31,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development", "Topic :: Software Development :: Libraries :: Application Frameworks", diff --git a/tests/requirements/compile.py b/tests/requirements/compile.py index f180fc51..9988a24d 100755 --- a/tests/requirements/compile.py +++ b/tests/requirements/compile.py @@ -10,10 +10,14 @@ "py311-dj52-cms50": [], "py312-dj52-cms50": [], "py313-dj52-cms50": [], + "py314-dj52-cms50": [], "py312-dj60-cms50": [], "py313-dj60-cms50": [], + "py314-dj60-cms50": [], "py313-djmain-cmsdev": [], "py313-djmain-cms50": [], + "py314-djmain-cmsdev": [], + "py314-djmain-cms50": [], } django_dict = { @@ -77,6 +81,8 @@ def run(*args, **kwargs): "install", "--upgrade", "pip-tools", + "pip==24.3.1", + "--break-system-packages", ] subprocess.run(args, capture_output=True, check=False) diff --git a/tests/requirements/py311-dj52-cms50-default.txt b/tests/requirements/py311-dj52-cms50-default.txt index 52f58fdc..7dbb8900 100644 --- a/tests/requirements/py311-dj52-cms50-default.txt +++ b/tests/requirements/py311-dj52-cms50-default.txt @@ -19,21 +19,21 @@ django==5.2.8 # django-classy-tags # django-cms # django-formtools + # django-fsm-2 # django-parler # django-sekizai # django-treebeard # djangocms-admin-style - # djangocms-versioning django-classy-tags==4.1.0 # via # -r requirements.in # django-cms # django-sekizai -django-cms==5.0.3 +django-cms==5.0.5 # via djangocms-versioning django-formtools==2.5.1 # via django-cms -django-fsm==2.8.2 +django-fsm-2==4.1.0 # via # -r requirements.in # djangocms-versioning @@ -47,7 +47,7 @@ django-treebeard==4.7.1 # via django-cms djangocms-admin-style==3.3.1 # via django-cms -djangocms-versioning==2.4.0 +djangocms-versioning==2.5.0 # via -r requirements.in flake8==7.2.0 # via -r requirements.in diff --git a/tests/requirements/py311-dj52-cms50-versioning.txt b/tests/requirements/py311-dj52-cms50-versioning.txt index 52f58fdc..7dbb8900 100644 --- a/tests/requirements/py311-dj52-cms50-versioning.txt +++ b/tests/requirements/py311-dj52-cms50-versioning.txt @@ -19,21 +19,21 @@ django==5.2.8 # django-classy-tags # django-cms # django-formtools + # django-fsm-2 # django-parler # django-sekizai # django-treebeard # djangocms-admin-style - # djangocms-versioning django-classy-tags==4.1.0 # via # -r requirements.in # django-cms # django-sekizai -django-cms==5.0.3 +django-cms==5.0.5 # via djangocms-versioning django-formtools==2.5.1 # via django-cms -django-fsm==2.8.2 +django-fsm-2==4.1.0 # via # -r requirements.in # djangocms-versioning @@ -47,7 +47,7 @@ django-treebeard==4.7.1 # via django-cms djangocms-admin-style==3.3.1 # via django-cms -djangocms-versioning==2.4.0 +djangocms-versioning==2.5.0 # via -r requirements.in flake8==7.2.0 # via -r requirements.in diff --git a/tests/requirements/py312-dj52-cms50-default.txt b/tests/requirements/py312-dj52-cms50-default.txt index 0d38c8aa..f42f647b 100644 --- a/tests/requirements/py312-dj52-cms50-default.txt +++ b/tests/requirements/py312-dj52-cms50-default.txt @@ -19,6 +19,7 @@ django==5.2.8 # django-classy-tags # django-cms # django-formtools + # django-fsm-2 # django-parler # django-sekizai # django-treebeard @@ -29,14 +30,14 @@ django-classy-tags==4.1.0 # -r requirements.in # django-cms # django-sekizai -django-cms==5.0.3 +django-cms==5.0.4 # via djangocms-versioning django-formtools==2.5.1 # via django-cms django-fsm==2.8.2 - # via - # -r requirements.in - # djangocms-versioning + # via djangocms-versioning +django-fsm-2==4.1.0 + # via -r requirements.in django-parler==2.3 # via -r requirements.in django-sekizai==4.1.0 diff --git a/tests/requirements/py312-dj52-cms50-versioning.txt b/tests/requirements/py312-dj52-cms50-versioning.txt index 0d38c8aa..f42f647b 100644 --- a/tests/requirements/py312-dj52-cms50-versioning.txt +++ b/tests/requirements/py312-dj52-cms50-versioning.txt @@ -19,6 +19,7 @@ django==5.2.8 # django-classy-tags # django-cms # django-formtools + # django-fsm-2 # django-parler # django-sekizai # django-treebeard @@ -29,14 +30,14 @@ django-classy-tags==4.1.0 # -r requirements.in # django-cms # django-sekizai -django-cms==5.0.3 +django-cms==5.0.4 # via djangocms-versioning django-formtools==2.5.1 # via django-cms django-fsm==2.8.2 - # via - # -r requirements.in - # djangocms-versioning + # via djangocms-versioning +django-fsm-2==4.1.0 + # via -r requirements.in django-parler==2.3 # via -r requirements.in django-sekizai==4.1.0 diff --git a/tests/requirements/py312-dj60-cms50-default.txt b/tests/requirements/py312-dj60-cms50-default.txt index 86c7f40b..48b2f6a0 100644 --- a/tests/requirements/py312-dj60-cms50-default.txt +++ b/tests/requirements/py312-dj60-cms50-default.txt @@ -14,11 +14,12 @@ coverage[toml]==7.10.6 # via # -r requirements.in # pytest-cov -django==5.2.8 +django==6.0b1 # via # django-classy-tags # django-cms # django-formtools + # django-fsm-2 # django-parler # django-sekizai # django-treebeard @@ -29,14 +30,14 @@ django-classy-tags==4.1.0 # -r requirements.in # django-cms # django-sekizai -django-cms==5.0.3 +django-cms==5.0.4 # via djangocms-versioning django-formtools==2.5.1 # via django-cms django-fsm==2.8.2 - # via - # -r requirements.in - # djangocms-versioning + # via djangocms-versioning +django-fsm-2==4.1.0 + # via -r requirements.in django-parler==2.3 # via -r requirements.in django-sekizai==4.1.0 diff --git a/tests/requirements/py312-dj60-cms50-versioning.txt b/tests/requirements/py312-dj60-cms50-versioning.txt index 86c7f40b..48b2f6a0 100644 --- a/tests/requirements/py312-dj60-cms50-versioning.txt +++ b/tests/requirements/py312-dj60-cms50-versioning.txt @@ -14,11 +14,12 @@ coverage[toml]==7.10.6 # via # -r requirements.in # pytest-cov -django==5.2.8 +django==6.0b1 # via # django-classy-tags # django-cms # django-formtools + # django-fsm-2 # django-parler # django-sekizai # django-treebeard @@ -29,14 +30,14 @@ django-classy-tags==4.1.0 # -r requirements.in # django-cms # django-sekizai -django-cms==5.0.3 +django-cms==5.0.4 # via djangocms-versioning django-formtools==2.5.1 # via django-cms django-fsm==2.8.2 - # via - # -r requirements.in - # djangocms-versioning + # via djangocms-versioning +django-fsm-2==4.1.0 + # via -r requirements.in django-parler==2.3 # via -r requirements.in django-sekizai==4.1.0 diff --git a/tests/requirements/py313-dj52-cms50-default.txt b/tests/requirements/py313-dj52-cms50-default.txt index d27fec79..8d75b846 100644 --- a/tests/requirements/py313-dj52-cms50-default.txt +++ b/tests/requirements/py313-dj52-cms50-default.txt @@ -19,21 +19,21 @@ django==5.2.8 # django-classy-tags # django-cms # django-formtools + # django-fsm-2 # django-parler # django-sekizai # django-treebeard # djangocms-admin-style - # djangocms-versioning django-classy-tags==4.1.0 # via # -r requirements.in # django-cms # django-sekizai -django-cms==5.0.3 +django-cms==5.0.5 # via djangocms-versioning django-formtools==2.5.1 # via django-cms -django-fsm==2.8.2 +django-fsm-2==4.1.0 # via # -r requirements.in # djangocms-versioning @@ -47,7 +47,7 @@ django-treebeard==4.7.1 # via django-cms djangocms-admin-style==3.3.1 # via django-cms -djangocms-versioning==2.4.0 +djangocms-versioning==2.5.0 # via -r requirements.in flake8==7.2.0 # via -r requirements.in diff --git a/tests/requirements/py313-dj52-cms50-versioning.txt b/tests/requirements/py313-dj52-cms50-versioning.txt index d27fec79..8d75b846 100644 --- a/tests/requirements/py313-dj52-cms50-versioning.txt +++ b/tests/requirements/py313-dj52-cms50-versioning.txt @@ -19,21 +19,21 @@ django==5.2.8 # django-classy-tags # django-cms # django-formtools + # django-fsm-2 # django-parler # django-sekizai # django-treebeard # djangocms-admin-style - # djangocms-versioning django-classy-tags==4.1.0 # via # -r requirements.in # django-cms # django-sekizai -django-cms==5.0.3 +django-cms==5.0.5 # via djangocms-versioning django-formtools==2.5.1 # via django-cms -django-fsm==2.8.2 +django-fsm-2==4.1.0 # via # -r requirements.in # djangocms-versioning @@ -47,7 +47,7 @@ django-treebeard==4.7.1 # via django-cms djangocms-admin-style==3.3.1 # via django-cms -djangocms-versioning==2.4.0 +djangocms-versioning==2.5.0 # via -r requirements.in flake8==7.2.0 # via -r requirements.in diff --git a/tests/requirements/py313-dj60-cms50-default.txt b/tests/requirements/py313-dj60-cms50-default.txt index 2d06e55d..d3304ee8 100644 --- a/tests/requirements/py313-dj60-cms50-default.txt +++ b/tests/requirements/py313-dj60-cms50-default.txt @@ -14,26 +14,26 @@ coverage[toml]==7.10.6 # via # -r requirements.in # pytest-cov -django==5.2.8 +django==6.0b1 # via # django-classy-tags # django-cms # django-formtools + # django-fsm-2 # django-parler # django-sekizai # django-treebeard # djangocms-admin-style - # djangocms-versioning django-classy-tags==4.1.0 # via # -r requirements.in # django-cms # django-sekizai -django-cms==5.0.3 +django-cms==5.0.5 # via djangocms-versioning django-formtools==2.5.1 # via django-cms -django-fsm==2.8.2 +django-fsm-2==4.1.0 # via # -r requirements.in # djangocms-versioning @@ -47,7 +47,7 @@ django-treebeard==4.7.1 # via django-cms djangocms-admin-style==3.3.1 # via django-cms -djangocms-versioning==2.4.0 +djangocms-versioning==2.5.0 # via -r requirements.in flake8==7.3.0 # via -r requirements.in diff --git a/tests/requirements/py313-dj60-cms50-versioning.txt b/tests/requirements/py313-dj60-cms50-versioning.txt index 2d06e55d..d3304ee8 100644 --- a/tests/requirements/py313-dj60-cms50-versioning.txt +++ b/tests/requirements/py313-dj60-cms50-versioning.txt @@ -14,26 +14,26 @@ coverage[toml]==7.10.6 # via # -r requirements.in # pytest-cov -django==5.2.8 +django==6.0b1 # via # django-classy-tags # django-cms # django-formtools + # django-fsm-2 # django-parler # django-sekizai # django-treebeard # djangocms-admin-style - # djangocms-versioning django-classy-tags==4.1.0 # via # -r requirements.in # django-cms # django-sekizai -django-cms==5.0.3 +django-cms==5.0.5 # via djangocms-versioning django-formtools==2.5.1 # via django-cms -django-fsm==2.8.2 +django-fsm-2==4.1.0 # via # -r requirements.in # djangocms-versioning @@ -47,7 +47,7 @@ django-treebeard==4.7.1 # via django-cms djangocms-admin-style==3.3.1 # via django-cms -djangocms-versioning==2.4.0 +djangocms-versioning==2.5.0 # via -r requirements.in flake8==7.3.0 # via -r requirements.in diff --git a/tests/requirements/py313-djmain-cms50-default.txt b/tests/requirements/py313-djmain-cms50-default.txt index 85f9b61f..806ae33b 100644 --- a/tests/requirements/py313-djmain-cms50-default.txt +++ b/tests/requirements/py313-djmain-cms50-default.txt @@ -19,21 +19,21 @@ django @ https://github.com/django/django/tarball/main # django-classy-tags # django-cms # django-formtools + # django-fsm-2 # django-parler # django-sekizai # django-treebeard # djangocms-admin-style - # djangocms-versioning django-classy-tags==4.1.0 # via # -r requirements.in # django-cms # django-sekizai -django-cms==5.0.3 +django-cms==5.0.5 # via djangocms-versioning django-formtools==2.5.1 # via django-cms -django-fsm==2.8.2 +django-fsm-2==4.1.0 # via # -r requirements.in # djangocms-versioning @@ -47,7 +47,7 @@ django-treebeard==4.7.1 # via django-cms djangocms-admin-style==3.3.1 # via django-cms -djangocms-versioning==2.4.0 +djangocms-versioning==2.5.0 # via -r requirements.in flake8==7.2.0 # via -r requirements.in diff --git a/tests/requirements/py313-djmain-cms50-versioning.txt b/tests/requirements/py313-djmain-cms50-versioning.txt index 85f9b61f..806ae33b 100644 --- a/tests/requirements/py313-djmain-cms50-versioning.txt +++ b/tests/requirements/py313-djmain-cms50-versioning.txt @@ -19,21 +19,21 @@ django @ https://github.com/django/django/tarball/main # django-classy-tags # django-cms # django-formtools + # django-fsm-2 # django-parler # django-sekizai # django-treebeard # djangocms-admin-style - # djangocms-versioning django-classy-tags==4.1.0 # via # -r requirements.in # django-cms # django-sekizai -django-cms==5.0.3 +django-cms==5.0.5 # via djangocms-versioning django-formtools==2.5.1 # via django-cms -django-fsm==2.8.2 +django-fsm-2==4.1.0 # via # -r requirements.in # djangocms-versioning @@ -47,7 +47,7 @@ django-treebeard==4.7.1 # via django-cms djangocms-admin-style==3.3.1 # via django-cms -djangocms-versioning==2.4.0 +djangocms-versioning==2.5.0 # via -r requirements.in flake8==7.2.0 # via -r requirements.in diff --git a/tests/requirements/py313-djmain-cmsdev-default.txt b/tests/requirements/py313-djmain-cmsdev-default.txt index d68b3186..8a6b0c3c 100644 --- a/tests/requirements/py313-djmain-cmsdev-default.txt +++ b/tests/requirements/py313-djmain-cmsdev-default.txt @@ -19,10 +19,10 @@ django @ https://github.com/django/django/tarball/main # django-classy-tags # django-cms # django-formtools + # django-fsm-2 # django-parler # django-sekizai # django-treebeard - # djangocms-versioning django-classy-tags==4.1.0 # via # -r requirements.in @@ -32,7 +32,7 @@ django-cms @ https://github.com/django-cms/django-cms/tarball/main # via djangocms-versioning django-formtools==2.5.1 # via django-cms -django-fsm==2.8.2 +django-fsm-2==4.1.0 # via # -r requirements.in # djangocms-versioning @@ -44,7 +44,7 @@ django-sekizai==4.1.0 # django-cms django-treebeard==4.7.1 # via django-cms -djangocms-versioning==2.4.0 +djangocms-versioning==2.5.0 # via -r requirements.in flake8==7.2.0 # via -r requirements.in diff --git a/tests/requirements/py313-djmain-cmsdev-versioning.txt b/tests/requirements/py313-djmain-cmsdev-versioning.txt index d68b3186..8a6b0c3c 100644 --- a/tests/requirements/py313-djmain-cmsdev-versioning.txt +++ b/tests/requirements/py313-djmain-cmsdev-versioning.txt @@ -19,10 +19,10 @@ django @ https://github.com/django/django/tarball/main # django-classy-tags # django-cms # django-formtools + # django-fsm-2 # django-parler # django-sekizai # django-treebeard - # djangocms-versioning django-classy-tags==4.1.0 # via # -r requirements.in @@ -32,7 +32,7 @@ django-cms @ https://github.com/django-cms/django-cms/tarball/main # via djangocms-versioning django-formtools==2.5.1 # via django-cms -django-fsm==2.8.2 +django-fsm-2==4.1.0 # via # -r requirements.in # djangocms-versioning @@ -44,7 +44,7 @@ django-sekizai==4.1.0 # django-cms django-treebeard==4.7.1 # via django-cms -djangocms-versioning==2.4.0 +djangocms-versioning==2.5.0 # via -r requirements.in flake8==7.2.0 # via -r requirements.in diff --git a/tests/requirements/py314-dj52-cms50-default.txt b/tests/requirements/py314-dj52-cms50-default.txt new file mode 100644 index 00000000..9fd3801d --- /dev/null +++ b/tests/requirements/py314-dj52-cms50-default.txt @@ -0,0 +1,94 @@ +# +# This file is autogenerated by pip-compile with Python 3.14 +# by the following command: +# +# requirements/compile.py +# +asgiref==3.10.0 + # via django +beautifulsoup4==4.14.2 + # via bs4 +bs4==0.0.2 + # via -r requirements.in +coverage[toml]==7.11.0 + # via + # -r requirements.in + # pytest-cov +django==5.2.8 + # via + # django-classy-tags + # django-cms + # django-formtools + # django-fsm-2 + # django-parler + # django-sekizai + # django-treebeard + # djangocms-admin-style +django-classy-tags==4.1.0 + # via + # -r requirements.in + # django-cms + # django-sekizai +django-cms==5.0.5 + # via djangocms-versioning +django-formtools==2.5.1 + # via django-cms +django-fsm-2==4.1.0 + # via + # -r requirements.in + # djangocms-versioning +django-parler==2.3 + # via -r requirements.in +django-sekizai==4.1.0 + # via + # -r requirements.in + # django-cms +django-treebeard==4.7.1 + # via django-cms +djangocms-admin-style==3.3.1 + # via django-cms +djangocms-versioning==2.5.0 + # via -r requirements.in +flake8==7.3.0 + # via -r requirements.in +iniconfig==2.3.0 + # via pytest +isort==7.0.0 + # via -r requirements.in +mccabe==0.7.0 + # via flake8 +packaging==25.0 + # via + # django-cms + # djangocms-versioning + # pytest +pluggy==1.6.0 + # via + # pytest + # pytest-cov +pycodestyle==2.14.0 + # via flake8 +pyflakes==3.4.0 + # via + # -r requirements.in + # flake8 +pygments==2.19.2 + # via pytest +pytest==8.4.2 + # via + # pytest-cov + # pytest-django +pytest-cov==7.0.0 + # via -r requirements.in +pytest-django==4.11.1 + # via -r requirements.in +soupsieve==2.8 + # via beautifulsoup4 +sqlparse==0.5.3 + # via django +typing-extensions==4.15.0 + # via beautifulsoup4 + +# The following packages are considered to be unsafe in a requirements file: +setuptools==80.9.0 + # via django-cms diff --git a/tests/requirements/py314-dj52-cms50-versioning.txt b/tests/requirements/py314-dj52-cms50-versioning.txt new file mode 100644 index 00000000..9fd3801d --- /dev/null +++ b/tests/requirements/py314-dj52-cms50-versioning.txt @@ -0,0 +1,94 @@ +# +# This file is autogenerated by pip-compile with Python 3.14 +# by the following command: +# +# requirements/compile.py +# +asgiref==3.10.0 + # via django +beautifulsoup4==4.14.2 + # via bs4 +bs4==0.0.2 + # via -r requirements.in +coverage[toml]==7.11.0 + # via + # -r requirements.in + # pytest-cov +django==5.2.8 + # via + # django-classy-tags + # django-cms + # django-formtools + # django-fsm-2 + # django-parler + # django-sekizai + # django-treebeard + # djangocms-admin-style +django-classy-tags==4.1.0 + # via + # -r requirements.in + # django-cms + # django-sekizai +django-cms==5.0.5 + # via djangocms-versioning +django-formtools==2.5.1 + # via django-cms +django-fsm-2==4.1.0 + # via + # -r requirements.in + # djangocms-versioning +django-parler==2.3 + # via -r requirements.in +django-sekizai==4.1.0 + # via + # -r requirements.in + # django-cms +django-treebeard==4.7.1 + # via django-cms +djangocms-admin-style==3.3.1 + # via django-cms +djangocms-versioning==2.5.0 + # via -r requirements.in +flake8==7.3.0 + # via -r requirements.in +iniconfig==2.3.0 + # via pytest +isort==7.0.0 + # via -r requirements.in +mccabe==0.7.0 + # via flake8 +packaging==25.0 + # via + # django-cms + # djangocms-versioning + # pytest +pluggy==1.6.0 + # via + # pytest + # pytest-cov +pycodestyle==2.14.0 + # via flake8 +pyflakes==3.4.0 + # via + # -r requirements.in + # flake8 +pygments==2.19.2 + # via pytest +pytest==8.4.2 + # via + # pytest-cov + # pytest-django +pytest-cov==7.0.0 + # via -r requirements.in +pytest-django==4.11.1 + # via -r requirements.in +soupsieve==2.8 + # via beautifulsoup4 +sqlparse==0.5.3 + # via django +typing-extensions==4.15.0 + # via beautifulsoup4 + +# The following packages are considered to be unsafe in a requirements file: +setuptools==80.9.0 + # via django-cms diff --git a/tests/requirements/py314-dj60-cms50-default.txt b/tests/requirements/py314-dj60-cms50-default.txt new file mode 100644 index 00000000..0836361d --- /dev/null +++ b/tests/requirements/py314-dj60-cms50-default.txt @@ -0,0 +1,94 @@ +# +# This file is autogenerated by pip-compile with Python 3.14 +# by the following command: +# +# requirements/compile.py +# +asgiref==3.10.0 + # via django +beautifulsoup4==4.14.2 + # via bs4 +bs4==0.0.2 + # via -r requirements.in +coverage[toml]==7.11.0 + # via + # -r requirements.in + # pytest-cov +django==6.0b1 + # via + # django-classy-tags + # django-cms + # django-formtools + # django-fsm-2 + # django-parler + # django-sekizai + # django-treebeard + # djangocms-admin-style +django-classy-tags==4.1.0 + # via + # -r requirements.in + # django-cms + # django-sekizai +django-cms==5.0.5 + # via djangocms-versioning +django-formtools==2.5.1 + # via django-cms +django-fsm-2==4.1.0 + # via + # -r requirements.in + # djangocms-versioning +django-parler==2.3 + # via -r requirements.in +django-sekizai==4.1.0 + # via + # -r requirements.in + # django-cms +django-treebeard==4.7.1 + # via django-cms +djangocms-admin-style==3.3.1 + # via django-cms +djangocms-versioning==2.5.0 + # via -r requirements.in +flake8==7.3.0 + # via -r requirements.in +iniconfig==2.3.0 + # via pytest +isort==7.0.0 + # via -r requirements.in +mccabe==0.7.0 + # via flake8 +packaging==25.0 + # via + # django-cms + # djangocms-versioning + # pytest +pluggy==1.6.0 + # via + # pytest + # pytest-cov +pycodestyle==2.14.0 + # via flake8 +pyflakes==3.4.0 + # via + # -r requirements.in + # flake8 +pygments==2.19.2 + # via pytest +pytest==8.4.2 + # via + # pytest-cov + # pytest-django +pytest-cov==7.0.0 + # via -r requirements.in +pytest-django==4.11.1 + # via -r requirements.in +soupsieve==2.8 + # via beautifulsoup4 +sqlparse==0.5.3 + # via django +typing-extensions==4.15.0 + # via beautifulsoup4 + +# The following packages are considered to be unsafe in a requirements file: +setuptools==80.9.0 + # via django-cms diff --git a/tests/requirements/py314-dj60-cms50-versioning.txt b/tests/requirements/py314-dj60-cms50-versioning.txt new file mode 100644 index 00000000..0836361d --- /dev/null +++ b/tests/requirements/py314-dj60-cms50-versioning.txt @@ -0,0 +1,94 @@ +# +# This file is autogenerated by pip-compile with Python 3.14 +# by the following command: +# +# requirements/compile.py +# +asgiref==3.10.0 + # via django +beautifulsoup4==4.14.2 + # via bs4 +bs4==0.0.2 + # via -r requirements.in +coverage[toml]==7.11.0 + # via + # -r requirements.in + # pytest-cov +django==6.0b1 + # via + # django-classy-tags + # django-cms + # django-formtools + # django-fsm-2 + # django-parler + # django-sekizai + # django-treebeard + # djangocms-admin-style +django-classy-tags==4.1.0 + # via + # -r requirements.in + # django-cms + # django-sekizai +django-cms==5.0.5 + # via djangocms-versioning +django-formtools==2.5.1 + # via django-cms +django-fsm-2==4.1.0 + # via + # -r requirements.in + # djangocms-versioning +django-parler==2.3 + # via -r requirements.in +django-sekizai==4.1.0 + # via + # -r requirements.in + # django-cms +django-treebeard==4.7.1 + # via django-cms +djangocms-admin-style==3.3.1 + # via django-cms +djangocms-versioning==2.5.0 + # via -r requirements.in +flake8==7.3.0 + # via -r requirements.in +iniconfig==2.3.0 + # via pytest +isort==7.0.0 + # via -r requirements.in +mccabe==0.7.0 + # via flake8 +packaging==25.0 + # via + # django-cms + # djangocms-versioning + # pytest +pluggy==1.6.0 + # via + # pytest + # pytest-cov +pycodestyle==2.14.0 + # via flake8 +pyflakes==3.4.0 + # via + # -r requirements.in + # flake8 +pygments==2.19.2 + # via pytest +pytest==8.4.2 + # via + # pytest-cov + # pytest-django +pytest-cov==7.0.0 + # via -r requirements.in +pytest-django==4.11.1 + # via -r requirements.in +soupsieve==2.8 + # via beautifulsoup4 +sqlparse==0.5.3 + # via django +typing-extensions==4.15.0 + # via beautifulsoup4 + +# The following packages are considered to be unsafe in a requirements file: +setuptools==80.9.0 + # via django-cms diff --git a/tests/requirements/py314-djmain-cms50-default.txt b/tests/requirements/py314-djmain-cms50-default.txt new file mode 100644 index 00000000..a21666dc --- /dev/null +++ b/tests/requirements/py314-djmain-cms50-default.txt @@ -0,0 +1,94 @@ +# +# This file is autogenerated by pip-compile with Python 3.14 +# by the following command: +# +# requirements/compile.py +# +asgiref==3.10.0 + # via django +beautifulsoup4==4.14.2 + # via bs4 +bs4==0.0.2 + # via -r requirements.in +coverage[toml]==7.11.0 + # via + # -r requirements.in + # pytest-cov +django @ https://github.com/django/django/tarball/main + # via + # django-classy-tags + # django-cms + # django-formtools + # django-fsm-2 + # django-parler + # django-sekizai + # django-treebeard + # djangocms-admin-style +django-classy-tags==4.1.0 + # via + # -r requirements.in + # django-cms + # django-sekizai +django-cms==5.0.5 + # via djangocms-versioning +django-formtools==2.5.1 + # via django-cms +django-fsm-2==4.1.0 + # via + # -r requirements.in + # djangocms-versioning +django-parler==2.3 + # via -r requirements.in +django-sekizai==4.1.0 + # via + # -r requirements.in + # django-cms +django-treebeard==4.7.1 + # via django-cms +djangocms-admin-style==3.3.1 + # via django-cms +djangocms-versioning==2.5.0 + # via -r requirements.in +flake8==7.3.0 + # via -r requirements.in +iniconfig==2.3.0 + # via pytest +isort==7.0.0 + # via -r requirements.in +mccabe==0.7.0 + # via flake8 +packaging==25.0 + # via + # django-cms + # djangocms-versioning + # pytest +pluggy==1.6.0 + # via + # pytest + # pytest-cov +pycodestyle==2.14.0 + # via flake8 +pyflakes==3.4.0 + # via + # -r requirements.in + # flake8 +pygments==2.19.2 + # via pytest +pytest==8.4.2 + # via + # pytest-cov + # pytest-django +pytest-cov==7.0.0 + # via -r requirements.in +pytest-django==4.11.1 + # via -r requirements.in +soupsieve==2.8 + # via beautifulsoup4 +sqlparse==0.5.3 + # via django +typing-extensions==4.15.0 + # via beautifulsoup4 + +# The following packages are considered to be unsafe in a requirements file: +setuptools==80.9.0 + # via django-cms diff --git a/tests/requirements/py314-djmain-cms50-versioning.txt b/tests/requirements/py314-djmain-cms50-versioning.txt new file mode 100644 index 00000000..a21666dc --- /dev/null +++ b/tests/requirements/py314-djmain-cms50-versioning.txt @@ -0,0 +1,94 @@ +# +# This file is autogenerated by pip-compile with Python 3.14 +# by the following command: +# +# requirements/compile.py +# +asgiref==3.10.0 + # via django +beautifulsoup4==4.14.2 + # via bs4 +bs4==0.0.2 + # via -r requirements.in +coverage[toml]==7.11.0 + # via + # -r requirements.in + # pytest-cov +django @ https://github.com/django/django/tarball/main + # via + # django-classy-tags + # django-cms + # django-formtools + # django-fsm-2 + # django-parler + # django-sekizai + # django-treebeard + # djangocms-admin-style +django-classy-tags==4.1.0 + # via + # -r requirements.in + # django-cms + # django-sekizai +django-cms==5.0.5 + # via djangocms-versioning +django-formtools==2.5.1 + # via django-cms +django-fsm-2==4.1.0 + # via + # -r requirements.in + # djangocms-versioning +django-parler==2.3 + # via -r requirements.in +django-sekizai==4.1.0 + # via + # -r requirements.in + # django-cms +django-treebeard==4.7.1 + # via django-cms +djangocms-admin-style==3.3.1 + # via django-cms +djangocms-versioning==2.5.0 + # via -r requirements.in +flake8==7.3.0 + # via -r requirements.in +iniconfig==2.3.0 + # via pytest +isort==7.0.0 + # via -r requirements.in +mccabe==0.7.0 + # via flake8 +packaging==25.0 + # via + # django-cms + # djangocms-versioning + # pytest +pluggy==1.6.0 + # via + # pytest + # pytest-cov +pycodestyle==2.14.0 + # via flake8 +pyflakes==3.4.0 + # via + # -r requirements.in + # flake8 +pygments==2.19.2 + # via pytest +pytest==8.4.2 + # via + # pytest-cov + # pytest-django +pytest-cov==7.0.0 + # via -r requirements.in +pytest-django==4.11.1 + # via -r requirements.in +soupsieve==2.8 + # via beautifulsoup4 +sqlparse==0.5.3 + # via django +typing-extensions==4.15.0 + # via beautifulsoup4 + +# The following packages are considered to be unsafe in a requirements file: +setuptools==80.9.0 + # via django-cms diff --git a/tests/requirements/py314-djmain-cmsdev-default.txt b/tests/requirements/py314-djmain-cmsdev-default.txt new file mode 100644 index 00000000..ff727b9c --- /dev/null +++ b/tests/requirements/py314-djmain-cmsdev-default.txt @@ -0,0 +1,86 @@ +# +# This file is autogenerated by pip-compile with Python 3.14 +# by the following command: +# +# requirements/compile.py +# +asgiref==3.10.0 + # via django +beautifulsoup4==4.14.2 + # via bs4 +bs4==0.0.2 + # via -r requirements.in +coverage[toml]==7.11.0 + # via + # -r requirements.in + # pytest-cov +django @ https://github.com/django/django/tarball/main + # via + # django-classy-tags + # django-cms + # django-formtools + # django-fsm-2 + # django-parler + # django-sekizai + # django-treebeard +django-classy-tags==4.1.0 + # via + # -r requirements.in + # django-cms + # django-sekizai +django-cms @ https://github.com/django-cms/django-cms/tarball/main + # via djangocms-versioning +django-formtools==2.5.1 + # via django-cms +django-fsm-2==4.1.0 + # via + # -r requirements.in + # djangocms-versioning +django-parler==2.3 + # via -r requirements.in +django-sekizai==4.1.0 + # via + # -r requirements.in + # django-cms +django-treebeard==4.7.1 + # via django-cms +djangocms-versioning==2.5.0 + # via -r requirements.in +flake8==7.3.0 + # via -r requirements.in +iniconfig==2.3.0 + # via pytest +isort==7.0.0 + # via -r requirements.in +mccabe==0.7.0 + # via flake8 +packaging==25.0 + # via + # djangocms-versioning + # pytest +pluggy==1.6.0 + # via + # pytest + # pytest-cov +pycodestyle==2.14.0 + # via flake8 +pyflakes==3.4.0 + # via + # -r requirements.in + # flake8 +pygments==2.19.2 + # via pytest +pytest==8.4.2 + # via + # pytest-cov + # pytest-django +pytest-cov==7.0.0 + # via -r requirements.in +pytest-django==4.11.1 + # via -r requirements.in +soupsieve==2.8 + # via beautifulsoup4 +sqlparse==0.5.3 + # via django +typing-extensions==4.15.0 + # via beautifulsoup4 diff --git a/tests/requirements/py314-djmain-cmsdev-versioning.txt b/tests/requirements/py314-djmain-cmsdev-versioning.txt new file mode 100644 index 00000000..ff727b9c --- /dev/null +++ b/tests/requirements/py314-djmain-cmsdev-versioning.txt @@ -0,0 +1,86 @@ +# +# This file is autogenerated by pip-compile with Python 3.14 +# by the following command: +# +# requirements/compile.py +# +asgiref==3.10.0 + # via django +beautifulsoup4==4.14.2 + # via bs4 +bs4==0.0.2 + # via -r requirements.in +coverage[toml]==7.11.0 + # via + # -r requirements.in + # pytest-cov +django @ https://github.com/django/django/tarball/main + # via + # django-classy-tags + # django-cms + # django-formtools + # django-fsm-2 + # django-parler + # django-sekizai + # django-treebeard +django-classy-tags==4.1.0 + # via + # -r requirements.in + # django-cms + # django-sekizai +django-cms @ https://github.com/django-cms/django-cms/tarball/main + # via djangocms-versioning +django-formtools==2.5.1 + # via django-cms +django-fsm-2==4.1.0 + # via + # -r requirements.in + # djangocms-versioning +django-parler==2.3 + # via -r requirements.in +django-sekizai==4.1.0 + # via + # -r requirements.in + # django-cms +django-treebeard==4.7.1 + # via django-cms +djangocms-versioning==2.5.0 + # via -r requirements.in +flake8==7.3.0 + # via -r requirements.in +iniconfig==2.3.0 + # via pytest +isort==7.0.0 + # via -r requirements.in +mccabe==0.7.0 + # via flake8 +packaging==25.0 + # via + # djangocms-versioning + # pytest +pluggy==1.6.0 + # via + # pytest + # pytest-cov +pycodestyle==2.14.0 + # via flake8 +pyflakes==3.4.0 + # via + # -r requirements.in + # flake8 +pygments==2.19.2 + # via pytest +pytest==8.4.2 + # via + # pytest-cov + # pytest-django +pytest-cov==7.0.0 + # via -r requirements.in +pytest-django==4.11.1 + # via -r requirements.in +soupsieve==2.8 + # via beautifulsoup4 +sqlparse==0.5.3 + # via django +typing-extensions==4.15.0 + # via beautifulsoup4 diff --git a/tests/requirements/requirements.in b/tests/requirements/requirements.in index 2599d05a..1706622b 100644 --- a/tests/requirements/requirements.in +++ b/tests/requirements/requirements.in @@ -3,11 +3,11 @@ coverage pytest-django pytest-cov django-classy-tags -django-fsm>=2.6 +django-fsm-2 django-sekizai django-parler flake8 isort pyflakes>=2.1.1 -djangocms-versioning>=2.4 +djangocms-versioning>=2.5.0 diff --git a/tests/test_toolbar.py b/tests/test_toolbar.py index 4e50b3e9..11a62233 100644 --- a/tests/test_toolbar.py +++ b/tests/test_toolbar.py @@ -218,7 +218,7 @@ def test_language_switcher_when_toolbar_object_is_alias_content(self): ) language_menu = request.toolbar.get_menu(LANGUAGE_MENU_IDENTIFIER) - self.assertEqual([item.name for item in language_menu.items], expected_result) + self.assertEqual([item.name for item in language_menu.items if not isinstance(item, Break)], expected_result) def test_language_switcher_when_toolbar_object_isnt_alias_content(self): request = self.get_page_request( @@ -231,10 +231,10 @@ def test_language_switcher_when_toolbar_object_isnt_alias_content(self): # Versioning changes the toolbar language selector and only shows # languages that have translations if is_versioning_enabled(): - expected_result = ["English"] + expected_result = ["English", "Add Translation"] # Don't change default language switcher that is used for Pages - self.assertEqual([item.name for item in language_menu.items], expected_result) + self.assertEqual([item.name for item in language_menu.items if not isinstance(item, Break)], expected_result) def test_page_toolbar_no_language_menu(self): from django.utils.translation import gettext as _ diff --git a/tox.ini b/tox.ini index b620a097..e466e6ae 100644 --- a/tox.ini +++ b/tox.ini @@ -1,8 +1,8 @@ [tox] isolated_build = true envlist = - py{311,312,313}-dj{52}-cms50-{default,versioning} - py{312,313}-dj{52,60}-cms50-{default,versioning} + py{311,312,313,314}-dj{52}-cms50-{default,versioning} + py{312,313,314}-dj{52,60}-cms50-{default,versioning} skip_missing_interpreters=True diff --git a/uv.lock b/uv.lock new file mode 100644 index 00000000..811594ce --- /dev/null +++ b/uv.lock @@ -0,0 +1,180 @@ +version = 1 +revision = 3 +requires-python = ">=3.10" + +[[package]] +name = "asgiref" +version = "3.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/46/08/4dfec9b90758a59acc6be32ac82e98d1fbfc321cb5cfa410436dbacf821c/asgiref-3.10.0.tar.gz", hash = "sha256:d89f2d8cd8b56dada7d52fa7dc8075baa08fb836560710d38c292a7a3f78c04e", size = 37483, upload-time = "2025-10-05T09:15:06.557Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/9c/fc2331f538fbf7eedba64b2052e99ccf9ba9d6888e2f41441ee28847004b/asgiref-3.10.0-py3-none-any.whl", hash = "sha256:aef8a81283a34d0ab31630c9b7dfe70c812c95eba78171367ca8745e88124734", size = 24050, upload-time = "2025-10-05T09:15:05.11Z" }, +] + +[[package]] +name = "django" +version = "5.2.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asgiref" }, + { name = "sqlparse" }, + { name = "tzdata", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/05/a2/933dbbb3dd9990494960f6e64aca2af4c0745b63b7113f59a822df92329e/django-5.2.8.tar.gz", hash = "sha256:23254866a5bb9a2cfa6004e8b809ec6246eba4b58a7589bc2772f1bcc8456c7f", size = 10849032, upload-time = "2025-11-05T14:07:32.778Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/3d/a035a4ee9b1d4d4beee2ae6e8e12fe6dee5514b21f62504e22efcbd9fb46/django-5.2.8-py3-none-any.whl", hash = "sha256:37e687f7bd73ddf043e2b6b97cfe02fcbb11f2dbb3adccc6a2b18c6daa054d7f", size = 8289692, upload-time = "2025-11-05T14:07:28.761Z" }, +] + +[[package]] +name = "django-classy-tags" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/91/7f/18da9d8fcc469fc7aa74abc526aacaa3cc7180ad2208f80d43e8b670aed6/django-classy-tags-4.1.0.tar.gz", hash = "sha256:c8d9d1aa2fa6e71c4d866df4dd11d23a69b8d25bbb750b2490a17b161774ee59", size = 24692, upload-time = "2023-07-29T09:06:18.646Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/10/13afc12b7d9657ed67f8d49c1cf0585a4331b197ed98ea654e9ed8034e79/django_classy_tags-4.1.0-py3-none-any.whl", hash = "sha256:1c784cf1bac49c20a77b8f7d1541867c64076642a160a847ff449588d4e01e55", size = 14095, upload-time = "2023-07-29T09:06:16.951Z" }, +] + +[[package]] +name = "django-cms" +version = "5.0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, + { name = "django-classy-tags" }, + { name = "django-formtools" }, + { name = "django-sekizai" }, + { name = "django-treebeard" }, + { name = "djangocms-admin-style" }, + { name = "packaging" }, + { name = "setuptools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4e/59/c260af81e775676563c53e30693c1d93dea04cb39342626b39c730afb917/django_cms-5.0.4.tar.gz", hash = "sha256:ea161ee070805af2074f308ebeb4a666832190506aa4641bc1070cbf6085488a", size = 4937514, upload-time = "2025-10-03T18:56:38.876Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/87/f0dc803adc7f6c27d5b21c78733bbf0bccad4a2a134e12b9fbc660aaa313/django_cms-5.0.4-py2.py3-none-any.whl", hash = "sha256:1d7464a5cbe928fa1c094f07fdf1aed3defef1a17baf6351823d8485bc8c7d12", size = 2888393, upload-time = "2025-10-03T18:56:36.458Z" }, +] + +[[package]] +name = "django-formtools" +version = "2.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/73/f8/bb9b228fc33230186f3612a6fc96274a81bab3509817498f2632d7aa6367/django-formtools-2.5.1.tar.gz", hash = "sha256:47cb34552c6efca088863d693284d04fc36eaaf350eb21e1a1d935e0df523c93", size = 88637, upload-time = "2023-12-19T10:30:59.78Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/63/91a107e3aaaf3987bad036494dfd8cc2675f4a66d22e65ffd6711f84ba70/django_formtools-2.5.1-py3-none-any.whl", hash = "sha256:bce9b64eda52cc1eef6961cc649cf75aacd1a707c2fff08d6c3efcbc8e7e761a", size = 170651, upload-time = "2023-12-19T10:30:02.816Z" }, +] + +[[package]] +name = "django-parler" +version = "2.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8c/2b/2423d31620efe8ab0d0390e60afab4f9cc2e62d4bf39fe0e05df0eef1b93/django-parler-2.3.tar.gz", hash = "sha256:2c8f5012ceb5e49af93b16ea3fe4d0c83d70b91b2d0f470c05d7d742b6f3083d", size = 69167, upload-time = "2021-11-18T09:32:28.959Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/38/11f1a7e3d56f3a6b74cf99e307f2554b741cadebc9b1c45b05e2ec1f35a2/django_parler-2.3-py3-none-any.whl", hash = "sha256:8f6c8061e4b5690f1ee2d8e5760940ef06bf78a5bfa033d11178377559c749cf", size = 83288, upload-time = "2021-11-18T09:32:27.193Z" }, +] + +[[package]] +name = "django-sekizai" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, + { name = "django-classy-tags" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/be/b7/399f7d84fa34c67e7c8e1da39744c9a2f83b61fa600c854cbe43bf6aab56/django-sekizai-4.1.0.tar.gz", hash = "sha256:2aca36cbae0b5c0cefed9565416ec442335767fb3145bff11e58622fc653cdad", size = 14591, upload-time = "2023-05-02T15:39:23.417Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/4f/8d1df68be504d7664cdeae7279134e77cf15babe2a5911b50f3e31d493f2/django_sekizai-4.1.0-py3-none-any.whl", hash = "sha256:aa12e66ba0335fbe726b7d74cf4e8716b89a0be99a1304a9b9e8b191229e2e4a", size = 8597, upload-time = "2023-05-02T15:39:21.655Z" }, +] + +[[package]] +name = "django-treebeard" +version = "4.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/24/eaccbce17355380cb3a8fe6ad92a85b76453dc1f0ecd04f48bfe8929065b/django-treebeard-4.7.1.tar.gz", hash = "sha256:846e462904b437155f76e04907ba4e48480716855f88b898df4122bdcfbd6e98", size = 294139, upload-time = "2024-01-31T16:35:19.751Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/79/259966820614746cc4d81762edf97a53bf1e3b8e74797c010d310c6f4a8f/django_treebeard-4.7.1-py3-none-any.whl", hash = "sha256:995c7120153ab999898fe3043bbdcd8a0fc77cc106eb94de7350e9d02c885135", size = 93210, upload-time = "2024-01-31T16:35:17.843Z" }, +] + +[[package]] +name = "djangocms-admin-style" +version = "3.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/1e/47b2d031c6d8f4ac5394b4b3dc863a8f21fd6d92aadf260ba1fc633b286f/djangocms-admin-style-3.3.1.tar.gz", hash = "sha256:da20de3831f1a1a74de33fe12bbd3865a0027a982878c02aa1d102b1c799d767", size = 319126, upload-time = "2024-02-29T22:12:45.167Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/f2/e0ed0cf8036708f7b7a26a4586a27b5e53891cf8d965f1e4751bf4f50de3/djangocms_admin_style-3.3.1-py3-none-any.whl", hash = "sha256:9b76aafda245205e0a88d57efd5097a96c1a7fcb78d7f3efa50955eb980079de", size = 408789, upload-time = "2024-02-29T22:12:42.557Z" }, +] + +[[package]] +name = "djangocms-alias" +source = { editable = "." } +dependencies = [ + { name = "django-cms" }, + { name = "django-parler" }, +] + +[package.metadata] +requires-dist = [ + { name = "django-cms", specifier = ">=5.0" }, + { name = "django-parler", specifier = ">=1.4" }, +] + +[[package]] +name = "packaging" +version = "25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, +] + +[[package]] +name = "setuptools" +version = "80.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958, upload-time = "2025-05-27T00:56:51.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" }, +] + +[[package]] +name = "sqlparse" +version = "0.5.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/40/edede8dd6977b0d3da179a342c198ed100dd2aba4be081861ee5911e4da4/sqlparse-0.5.3.tar.gz", hash = "sha256:09f67787f56a0b16ecdbde1bfc7f5d9c3371ca683cfeaa8e6ff60b4807ec9272", size = 84999, upload-time = "2024-12-10T12:05:30.728Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/5c/bfd6bd0bf979426d405cc6e71eceb8701b148b16c21d2dc3c261efc61c7b/sqlparse-0.5.3-py3-none-any.whl", hash = "sha256:cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca", size = 44415, upload-time = "2024-12-10T12:05:27.824Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, +] + +[[package]] +name = "tzdata" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380, upload-time = "2025-03-23T13:54:43.652Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload-time = "2025-03-23T13:54:41.845Z" }, +]