From 2945042a33e975dcec117654b6e249ebe550caf0 Mon Sep 17 00:00:00 2001 From: Dan Moore Date: Mon, 2 Feb 2026 22:07:31 -0500 Subject: [PATCH 1/2] Add dj60 and py314, remove unsupported Django and Python --- .github/workflows/tests.yml | 16 ++++++++-------- CLAUDE.md | 14 +++++++------- README.md | 4 ++-- docs/contributing.md | 20 ++++++++++---------- docs/index.md | 4 ++-- justfile | 28 ++++++++++++++-------------- pyproject.toml | 9 ++------- 7 files changed, 45 insertions(+), 50 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a03b1df..7213b30 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -11,18 +11,18 @@ jobs: fail-fast: false matrix: include: - # Legacy: Python 3.8 + Django 3.2 - - python-version: "3.8" - test-env: legacy - # Previous: Python 3.10 + Django 4.2 + # Legacy: Python 3.10 + Django 4.2 - python-version: "3.10" - test-env: previous - # Latest: Python 3.13 + Django 5.1 + test-env: legacy + # Previous: Python 3.13 + Django 5.2 - python-version: "3.13" + test-env: previous + # Latest: Python 3.14 + Django 6.0 + - python-version: "3.14" test-env: latest - - python-version: "3.13" + - python-version: "3.14" test-env: latest-pyuca - - python-version: "3.13" + - python-version: "3.14" test-env: latest-noi18n steps: diff --git a/CLAUDE.md b/CLAUDE.md index 3192084..2deda73 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -22,17 +22,17 @@ just test quick just test [latest|previous|legacy|latest-pyuca|latest-noi18n] # Examples: -just test latest # Python 3.13 + Django 5.2 -just test previous # Python 3.10 + Django 4.2 -just test legacy # Python 3.8 + Django 3.2 +just test latest # Python 3.14 + Django 6.0 +just test previous # Python 3.13 + Django 5.2 +just test legacy # Python 3.10 + Django 4.2 just test latest-pyuca # With Unicode collation just test latest-noi18n # Without i18n # Run specific environment with custom Python version -just test [latest|previous|legacy|latest-pyuca|latest-noi18n] [3.8-3.13] +just test [latest|previous|legacy|latest-pyuca|latest-noi18n] [3.10-3.14] # Example: -just test latest 3.12 # Latest Django with Python 3.12 +just test latest 3.14 # Latest Django with Python 3.14 # Run a single test file uv run --group test pytest django_countries/tests/test_fields.py @@ -291,6 +291,6 @@ Test models are defined in `tests/models.py` and the test app is configured in ` - Translations are managed via Transifex and pulled using `just tx-pull` - Releases use `uv version` for version management and `just deploy` for publishing - Supported versions: - - Python 3.8, 3.9, 3.10, 3.11, 3.12, 3.13 - - Django 3.2 (LTS), 4.2 (LTS), 5.0, 5.1, 5.2 + - Python 3.10, 3.11, 3.12, 3.13, 3.14 + - Django 4.2 (LTS), 5.2 (LTS), 6.0 - DRF 3.11+ diff --git a/README.md b/README.md index 0929971..58c33dd 100644 --- a/README.md +++ b/README.md @@ -49,8 +49,8 @@ class Person(models.Model): ## Support -- **Python**: 3.8, 3.9, 3.10, 3.11, 3.12, 3.13 -- **Django**: 3.2 (LTS), 4.2 (LTS), 5.0, 5.1, 5.2 +- **Python**: 3.10, 3.11, 3.12, 3.13, 3.14 +- **Django**: 4.2 (LTS), 5.2 (LTS), 6.0 - **Django REST Framework**: 3.11+ ## Contributing diff --git a/docs/contributing.md b/docs/contributing.md index 5a5829e..0eaa254 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -59,7 +59,7 @@ just --list ### Testing ```bash -# Run all test environments (Python 3.8-3.13, Django 3.2-5.2) +# Run all test environments (Python 3.10-3.14, Django 4.2-6.0) just test # Quick test with current Python (no coverage matrix) @@ -69,22 +69,22 @@ just test quick just test [latest|previous|legacy|latest-pyuca|latest-noi18n] # Examples: -just test latest # Latest Django/DRF with Python 3.13 -just test previous # Django 4.2 with Python 3.10 -just test legacy # Django 3.2 with Python 3.8 +just test latest # Latest Django/DRF with Python 3.14 +just test previous # Django 5.2 with Python 3.13 +just test legacy # Django 4.2 with Python 3.10 # Run specific environment with custom Python version -just test [latest|previous|legacy|latest-pyuca|latest-noi18n] [3.8-3.13] +just test [latest|previous|legacy|latest-pyuca|latest-noi18n] [3.10-3.14] # Examples: -just test latest 3.12 # Latest Django with Python 3.12 -just test previous 3.9 # Django 4.2 with Python 3.9 +just test latest 3.14 # Latest Django with Python 3.13 +just test previous 3.13 # Django 5.2 with Python 3.13 ``` Test environments: -- **legacy**: Python 3.8 + Django 3.2 + DRF 3.11 -- **previous**: Python 3.10 + Django 4.2 + DRF 3.14 -- **latest**: Python 3.13 + Django 5.2 + DRF 3.15 +- **legacy**: Python 3.10 + Django 4.2 + DRF 3.11 +- **previous**: Python 3.13 + Django 5.2 + DRF 3.14 +- **latest**: Python 3.14 + Django 6.0 + DRF 3.15 - **latest-pyuca**: Latest + pyuca (Unicode collation) - **latest-noi18n**: Latest + i18n disabled diff --git a/docs/index.md b/docs/index.md index 1b37ac8..03ccad6 100644 --- a/docs/index.md +++ b/docs/index.md @@ -40,8 +40,8 @@ Country names are translated using Django's standard `gettext` and imported from ## Support -- **Python**: 3.8, 3.9, 3.10, 3.11, 3.12, 3.13 -- **Django**: 3.2 (LTS), 4.2 (LTS), 5.0, 5.1, 5.2 +- **Python**: 3.10, 3.11, 3.12, 3.13, 3.14 +- **Django**: 4.2 (LTS), 5.2 (LTS), 6.0 - **Django REST Framework**: 3.11+ ## License diff --git a/justfile b/justfile index 852c056..45125fa 100644 --- a/justfile +++ b/justfile @@ -9,7 +9,7 @@ default: # just test -> run all test matrices + coverage # just test quick -> quick test with current Python (no coverage) # just test [latest|previous|legacy|latest-pyuca|latest-noi18n] -> run specific env -# just test [latest|previous|legacy|latest-pyuca|latest-noi18n] [3.8-3.13] -> run specific env + python +# just test [latest|previous|legacy|latest-pyuca|latest-noi18n] [3.10-3.14] -> run specific env + python test *ARGS='': #!/usr/bin/env bash set -euo pipefail @@ -32,9 +32,9 @@ test *ARGS='': uv run --group test pytest else case "$ENV" in - legacy) PYTHON="3.8" ;; - previous) PYTHON="3.10" ;; - latest|latest-pyuca|latest-noi18n) PYTHON="3.13" ;; + legacy) PYTHON="3.10" ;; + previous) PYTHON="3.13" ;; + latest|latest-pyuca|latest-noi18n) PYTHON="3.14" ;; *) echo "Unknown environment: $ENV"; exit 1 ;; esac just _test-env "$ENV" "$PYTHON" @@ -51,11 +51,11 @@ test *ARGS='': _test-matrix: @echo "Cleaning old coverage files..." @rm -rf .coverage* htmlcov - @just _test-env legacy 3.8 - @just _test-env previous 3.10 - @just _test-env latest 3.13 - @just _test-env latest-pyuca 3.13 - @just _test-env latest-noi18n 3.13 + @just _test-env legacy 3.10 + @just _test-env previous 3.13 + @just _test-env latest 3.14 + @just _test-env latest-pyuca 3.14 + @just _test-env latest-noi18n 3.14 # Run a specific test environment (internal) _test-env ENV PYTHON: @@ -66,7 +66,7 @@ _test-env ENV PYTHON: @case "{{ ENV }}" in \ legacy) \ uv run --python {{ PYTHON }} \ - --with "Django==3.2.*" \ + --with "Django==4.2.*" \ --with "djangorestframework==3.11.*" \ --with "pyuca" \ --group test \ @@ -74,14 +74,14 @@ _test-env ENV PYTHON: ;; \ previous) \ uv run --python {{ PYTHON }} \ - --with "Django==4.2.*" \ + --with "Django==5.2.*" \ --with "djangorestframework==3.14.*" \ --group test \ coverage run -m pytest \ ;; \ latest) \ uv run --python {{ PYTHON }} \ - --with "Django==5.1.*" \ + --with "Django==6.0.*" \ --with "djangorestframework==3.15.*" \ --with "graphene-django==3.0.*" \ --group test \ @@ -89,7 +89,7 @@ _test-env ENV PYTHON: ;; \ latest-pyuca) \ uv run --python {{ PYTHON }} \ - --with "Django==5.1.*" \ + --with "Django==6.0.*" \ --with "djangorestframework==3.15.*" \ --with "graphene-django==3.0.*" \ --with "pyuca" \ @@ -99,7 +99,7 @@ _test-env ENV PYTHON: latest-noi18n) \ DJANGO_SETTINGS_MODULE=django_countries.tests.settings_noi18n \ uv run --python {{ PYTHON }} \ - --with "Django==5.1.*" \ + --with "Django==6.0.*" \ --with "djangorestframework==3.15.*" \ --with "graphene-django==3.0.*" \ --group test \ diff --git a/pyproject.toml b/pyproject.toml index 5c68784..5f56082 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,20 +18,15 @@ classifiers = [ "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Framework :: Django", - "Framework :: Django :: 3.2", - "Framework :: Django :: 4.0", - "Framework :: Django :: 4.1", "Framework :: Django :: 4.2", - "Framework :: Django :: 5.0", - "Framework :: Django :: 5.1", "Framework :: Django :: 5.2", + "Framework :: Django :: 6.0", ] requires-python = ">=3.8" dependencies = ["asgiref", "typing_extensions"] From 8c4f20fe9f11e6b94213375d30fe9d5466a1c2bd Mon Sep 17 00:00:00 2001 From: Dan Moore Date: Mon, 2 Feb 2026 22:14:33 -0500 Subject: [PATCH 2/2] DRF versions --- CLAUDE.md | 2 +- README.md | 2 +- docs/contributing.md | 6 +++--- docs/index.md | 2 +- justfile | 8 ++++---- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 2deda73..a6223c9 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -293,4 +293,4 @@ Test models are defined in `tests/models.py` and the test app is configured in ` - Supported versions: - Python 3.10, 3.11, 3.12, 3.13, 3.14 - Django 4.2 (LTS), 5.2 (LTS), 6.0 - - DRF 3.11+ + - DRF 3.13+ diff --git a/README.md b/README.md index 58c33dd..3fe93c7 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ class Person(models.Model): - **Python**: 3.10, 3.11, 3.12, 3.13, 3.14 - **Django**: 4.2 (LTS), 5.2 (LTS), 6.0 -- **Django REST Framework**: 3.11+ +- **Django REST Framework**: 3.13+ ## Contributing diff --git a/docs/contributing.md b/docs/contributing.md index 0eaa254..a22fcb0 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -82,9 +82,9 @@ just test previous 3.13 # Django 5.2 with Python 3.13 ``` Test environments: -- **legacy**: Python 3.10 + Django 4.2 + DRF 3.11 -- **previous**: Python 3.13 + Django 5.2 + DRF 3.14 -- **latest**: Python 3.14 + Django 6.0 + DRF 3.15 +- **legacy**: Python 3.10 + Django 4.2 + DRF 3.13 +- **previous**: Python 3.13 + Django 5.2 + DRF 3.16 +- **latest**: Python 3.14 + Django 6.0 + DRF 3.16 - **latest-pyuca**: Latest + pyuca (Unicode collation) - **latest-noi18n**: Latest + i18n disabled diff --git a/docs/index.md b/docs/index.md index 03ccad6..93faa29 100644 --- a/docs/index.md +++ b/docs/index.md @@ -42,7 +42,7 @@ Country names are translated using Django's standard `gettext` and imported from - **Python**: 3.10, 3.11, 3.12, 3.13, 3.14 - **Django**: 4.2 (LTS), 5.2 (LTS), 6.0 -- **Django REST Framework**: 3.11+ +- **Django REST Framework**: 3.13+ ## License diff --git a/justfile b/justfile index 45125fa..c45fd78 100644 --- a/justfile +++ b/justfile @@ -67,7 +67,7 @@ _test-env ENV PYTHON: legacy) \ uv run --python {{ PYTHON }} \ --with "Django==4.2.*" \ - --with "djangorestframework==3.11.*" \ + --with "djangorestframework==3.13.*" \ --with "pyuca" \ --group test \ coverage run -m pytest \ @@ -75,14 +75,14 @@ _test-env ENV PYTHON: previous) \ uv run --python {{ PYTHON }} \ --with "Django==5.2.*" \ - --with "djangorestframework==3.14.*" \ + --with "djangorestframework==3.16.*" \ --group test \ coverage run -m pytest \ ;; \ latest) \ uv run --python {{ PYTHON }} \ --with "Django==6.0.*" \ - --with "djangorestframework==3.15.*" \ + --with "djangorestframework==3.16.*" \ --with "graphene-django==3.0.*" \ --group test \ coverage run -m pytest \ @@ -90,7 +90,7 @@ _test-env ENV PYTHON: latest-pyuca) \ uv run --python {{ PYTHON }} \ --with "Django==6.0.*" \ - --with "djangorestframework==3.15.*" \ + --with "djangorestframework==3.16.*" \ --with "graphene-django==3.0.*" \ --with "pyuca" \ --group test \