diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fa9f290..d085462 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] steps: - uses: actions/checkout@v1 diff --git a/HISTORY.rst b/HISTORY.rst index 0744ec6..4ff9aaf 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -3,6 +3,13 @@ History ======= +2.6.0 +----- + +* Drop Python 3.9 support +* Add Python 3.14 support +* Add Django 6.0 support + 2.5.0 ----- diff --git a/README.rst b/README.rst index 5a397d5..a987665 100644 --- a/README.rst +++ b/README.rst @@ -88,9 +88,9 @@ Targets & testing The codebase is targeted and tested against: -* Django 3.2.x against Python 3.8, 3.9, 3.10 -* Django 4.2.x against Python 3.8, 3.9, 3.10, 3.11, 3.12 -* Django 5.2.x against Python 3.10, 3.11, 3.12, 3.13 +* Django 4.2.x against Python 3.10, 3.11, 3.12 +* Django 5.2.x against Python 3.10, 3.11, 3.12, 3.13, 3.14 +* Django 6.0.x against Python 3.12, 3.13, 3.14 To run the tests against all target environments, install `tox `_ and then execute the command:: @@ -146,6 +146,12 @@ By default you will need to install `django-extensions` or comparable libraries if you plan on adding Django Organizations as an installed app to your Django project. See below on configuring. +Upgrading +--------- + +Upgrading django-organizations is expected to be a low-impact operation. See the Upgrading +section in the Getting Started docs for additional considerations. + Configuring ----------- @@ -268,14 +274,3 @@ License Anyone is free to use or modify this software under the terms of the BSD license. - -Sponsors -======== - -`Muster `_ is building precision advocacy software to impact policy through grassroots action. - -.. image:: https://www.muster.com/hs-fs/hubfs/muster_logo-2.png?width=600&name=muster_logo-2.png - :target: https://www.muster.com/home?utm_source=github&campaign=opensource - :width: 400 - :alt: Alternative text - diff --git a/conftest.py b/conftest.py index 21be2a6..e32eb16 100644 --- a/conftest.py +++ b/conftest.py @@ -16,6 +16,7 @@ def pytest_configure(): DATABASES={ "default": {"ENGINE": "django.db.backends.sqlite3", "NAME": "test.sqlite3"} }, + DEFAULT_AUTO_FIELD="django.db.models.AutoField", INSTALLED_APPS=[ "django.contrib.auth", "django.contrib.contenttypes", diff --git a/docs/getting_started.rst b/docs/getting_started.rst index b438037..f930d34 100644 --- a/docs/getting_started.rst +++ b/docs/getting_started.rst @@ -97,6 +97,21 @@ consistent**, including keyword arguments. Otherwise you will end up generating extraneous and possibly conflicting migrations in your own app. The SlugField must accept the `populate_from` keyword argument. +Upgrading +========= + +Updating Django from a pre-6.0 version to 6.0 or above may result in creating +new migrations for custom organization models if you do not already have +`DEFAULT_AUTO_FIELD` set in your project. This is because in Django 6.0 the +default field changed from `AutoField` (with an `IntegerField` under the hood) +to a `BigAutoField` (with a `BigIntegerField` under the hood). + +This applies to your project and your project migrations, however, so +you are free to treat this however you want, e.g. if you want to keep `IntegerFields` +as the field type, configure your project settings as much or separate the `database +and state operations `_ +in the migration (maybe not ideal but safe with regard to your database). + Users and multi-account membership ================================== diff --git a/pyproject.toml b/pyproject.toml index c22c933..c0ed58e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ authors = [ ] description = "Group accounts for Django" readme = "README.rst" -requires-python = ">=3.9" +requires-python = ">=3.10" license = {text = "BSD License"} classifiers = [ "Development Status :: 5 - Production/Stable", @@ -15,15 +15,15 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", - "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", "Programming Language :: Python :: Implementation :: CPython", ] dependencies = [ - "Django>=3.2", + "Django>=4.2", "django-extensions>=2.0.8", ] dynamic = ["version"] diff --git a/setup.cfg b/setup.cfg index 0a5719d..f4ab3f1 100644 --- a/setup.cfg +++ b/setup.cfg @@ -16,10 +16,11 @@ classifiers = License :: OSI Approved :: BSD License Operating System :: OS Independent Programming Language :: Python - 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 Programming Language :: Python :: Implementation :: CPython Development Status :: 5 - Production/Stable @@ -30,7 +31,7 @@ packages = find: package_dir= =src install_requires = - Django>=3.2.0 + Django>=4.2.0 django-extensions>=2.0.8 python_requires = >=3.8 diff --git a/src/organizations/__init__.py b/src/organizations/__init__.py index 24304d2..242d6df 100644 --- a/src/organizations/__init__.py +++ b/src/organizations/__init__.py @@ -2,4 +2,4 @@ __author__ = "Ben Lopatin" __email__ = "ben@benlopatin.com" -__version__ = "2.5.0" +__version__ = "2.6.0" diff --git a/tox.ini b/tox.ini index b4f8c91..9632302 100644 --- a/tox.ini +++ b/tox.ini @@ -1,18 +1,18 @@ [tox] envlist = flake8, - py{39,310}-django{32}, - py{39}-django{42}, + py{310}-django{32} py{310,311,312}-django{42} - py{310,311,312,313}-django{52} + py{310,311,312,313,314}-django{52} + py{312,313,314}-django{60} [gh-actions] python = - 3.9: py39 3.10: py310 3.11: py311 3.12: py312 3.13: py313 + 3.14: py314 [build-system] build-backend = "hatchling.build" @@ -24,22 +24,22 @@ setenv = PYTHONPATH = {toxinidir}:{toxinidir}/organizations commands = pytest {posargs} --cov=organizations basepython = - py39: python3.9 py310: python3.10 py311: python3.11 py312: python3.12 py313: python3.13 + py314: python3.14 deps = hatch>=1.7.0 - django32: Django>=3.2,<4 - django42: Django>=4.2,<5 - django52: Django>=5.2,<6 + django42: Django>=4.2.8,<5 # Django 4.2.8 is required for Python 3.12 support + django52: Django>=5.2.8,<6 # Django 5.2.8 is required for Python 3.14 support + django60: Django>=6.0,<6.1 extras = tests [testenv:flake8] basepython=python3 deps= - flake8==3.12.7 + flake8==7.3.0 commands= flake8 src/organizations tests