From a139abcf22d94c24e0f7af078a5783c099dda640 Mon Sep 17 00:00:00 2001 From: Matt Seymour Date: Fri, 9 May 2025 11:12:06 +0100 Subject: [PATCH 1/9] Update project dependencies Adds typing_extensions --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 8a14fdb..4697ad6 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ long_description=readme, long_description_content_type="text/x-rst", packages=["dj_database_url"], - install_requires=["Django>=4.2"], + install_requires=["Django>=4.2", "typing_extensions>=4.0.0"], include_package_data=True, package_data={ "dj_database_url": ["py.typed"], From 4977c7d0d6aeca44ad419ebe7753433c2034654c Mon Sep 17 00:00:00 2001 From: Matt Seymour Date: Fri, 9 May 2025 10:30:51 +0100 Subject: [PATCH 2/9] Update package version to 3.0.0 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 4697ad6..ec6c768 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ setup( name="dj-database-url", - version="2.3.0", + version="3.0.0", url="https://github.com/jazzband/dj-database-url", license="BSD", author="Original Author: Kenneth Reitz, Maintained by: JazzBand Community", From 3e8b69aafc23164df81c87dd272e6d772d6926bf Mon Sep 17 00:00:00 2001 From: Matt Seymour Date: Fri, 20 Jun 2025 20:19:31 +0100 Subject: [PATCH 3/9] Update python supported version Pre-empt python 3.14 support. --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index ec6c768..75ed8e7 100644 --- a/setup.py +++ b/setup.py @@ -45,5 +45,6 @@ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", ], ) From 7c476490533b77c44b80cecc75629f8c9a35fb9f Mon Sep 17 00:00:00 2001 From: Matt Seymour Date: Mon, 23 Jun 2025 08:54:54 +0100 Subject: [PATCH 4/9] Update CHANGELOG.md --- CHANGELOG.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e085db..a895b33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,10 @@ # CHANGELOG -## Unreleased - -* Drop dependency on `typing_extensions`. +## v3.0.0 (2025-05-18) +> Bumping to version 3; changes to code do break some API compatability. +* Implement a new decorator registry pattern to impement checks on database connection string. + * You can now support and implement your own database strings by extending the @register functionality. +* Update supported python versions and django versions. ## v2.3.0 (2024-10-23) * Remove Python 3.8 support. From ae2fabf95ec176115a89e5a2d4156a1cfc459a1f Mon Sep 17 00:00:00 2001 From: Ed Morley <501702+edmorley@users.noreply.github.com> Date: Tue, 1 Jul 2025 18:53:01 +0100 Subject: [PATCH 5/9] Re-drop dependency on `typing_extensions` (#269) Since it was only being used for `TypedDict`, which was added in Python 3.8 and `dj-database-url` v2.3.0+ only supports Python 3.9+. See: https://docs.python.org/3.12/library/typing.html#typing.TypedDict https://github.com/jazzband/dj-database-url/blob/master/CHANGELOG.md#v230-2024-10-23 Note: This is a repeat of #257, since that PR was lost as part of merges that occurred during the release of 3.0.0: https://github.com/jazzband/dj-database-url/pull/257#issuecomment-3023857093 --- CHANGELOG.md | 4 ++++ dj_database_url/__init__.py | 4 +--- setup.py | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a895b33..a0f11fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # CHANGELOG +## Unreleased + +* Drop dependency on `typing_extensions`. + ## v3.0.0 (2025-05-18) > Bumping to version 3; changes to code do break some API compatability. * Implement a new decorator registry pattern to impement checks on database connection string. diff --git a/dj_database_url/__init__.py b/dj_database_url/__init__.py index 3918ab7..8e9fa27 100644 --- a/dj_database_url/__init__.py +++ b/dj_database_url/__init__.py @@ -1,9 +1,7 @@ import logging import os import urllib.parse as urlparse -from typing import Any, Callable, Dict, List, Optional, Union - -from typing_extensions import TypedDict +from typing import Any, Callable, Dict, List, Optional, TypedDict, Union DEFAULT_ENV = "DATABASE_URL" ENGINE_SCHEMES: Dict[str, "Engine"] = {} diff --git a/setup.py b/setup.py index 75ed8e7..a6b34cb 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ long_description=readme, long_description_content_type="text/x-rst", packages=["dj_database_url"], - install_requires=["Django>=4.2", "typing_extensions>=4.0.0"], + install_requires=["Django>=4.2"], include_package_data=True, package_data={ "dj_database_url": ["py.typed"], From 7d47e451a0a5fc03e2cdbc517c6584d73b845708 Mon Sep 17 00:00:00 2001 From: Matt Seymour Date: Wed, 2 Jul 2025 10:28:00 +0100 Subject: [PATCH 6/9] Update CHANGELOG.md --- CHANGELOG.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a0f11fd..a21c0a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,6 @@ # CHANGELOG -## Unreleased - +## v3.0.1 (2025-07-01) * Drop dependency on `typing_extensions`. ## v3.0.0 (2025-05-18) From ab20a3aebda9f59f2d2cb92d6b0069e04982037c Mon Sep 17 00:00:00 2001 From: Matt Seymour Date: Wed, 2 Jul 2025 10:28:15 +0100 Subject: [PATCH 7/9] Update setup.py --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a6b34cb..9e16d04 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ setup( name="dj-database-url", - version="3.0.0", + version="3.0.1", url="https://github.com/jazzband/dj-database-url", license="BSD", author="Original Author: Kenneth Reitz, Maintained by: JazzBand Community", From 34170b5aefa918cdfcf93bccb7db1aae95cd07d5 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 11 Jul 2025 16:22:42 +0100 Subject: [PATCH 8/9] [pre-commit.ci] pre-commit autoupdate (#268) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pycqa/flake8: 7.2.0 → 7.3.0](https://github.com/pycqa/flake8/compare/7.2.0...7.3.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a412573..6d8eb91 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -18,6 +18,6 @@ repos: args: [--target-version=py38] - repo: https://github.com/pycqa/flake8 - rev: '7.2.0' + rev: '7.3.0' hooks: - id: flake8 From 08199576769318285cea08e69911d088b0347f18 Mon Sep 17 00:00:00 2001 From: Matt Seymour Date: Fri, 11 Jul 2025 17:15:05 +0100 Subject: [PATCH 9/9] Allow `conn_max_age` to accept `None` for flexibility in configuration --- dj_database_url/__init__.py | 6 +++--- tests/test_dj_database_url.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dj_database_url/__init__.py b/dj_database_url/__init__.py index 8e9fa27..e93712c 100644 --- a/dj_database_url/__init__.py +++ b/dj_database_url/__init__.py @@ -127,7 +127,7 @@ def config( env: str = DEFAULT_ENV, default: Optional[str] = None, engine: Optional[str] = None, - conn_max_age: int = 0, + conn_max_age: Optional[int] = 0, conn_health_checks: bool = False, disable_server_side_cursors: bool = False, ssl_require: bool = False, @@ -158,7 +158,7 @@ def config( def parse( url: str, engine: Optional[str] = None, - conn_max_age: int = 0, + conn_max_age: Optional[int] = 0, conn_health_checks: bool = False, disable_server_side_cursors: bool = False, ssl_require: bool = False, @@ -231,7 +231,7 @@ def _parse_value(value: str) -> OptionType: def _convert_to_settings( engine: Optional[str], - conn_max_age: int, + conn_max_age: Optional[int], conn_health_checks: bool, disable_server_side_cursors: bool, ssl_require: bool, diff --git a/tests/test_dj_database_url.py b/tests/test_dj_database_url.py index f498796..7ab1398 100644 --- a/tests/test_dj_database_url.py +++ b/tests/test_dj_database_url.py @@ -266,8 +266,8 @@ def test_parse_conn_max_age_setting(self) -> None: assert url["CONN_MAX_AGE"] == conn_max_age - def test_config_conn_max_age_setting(self) -> None: - conn_max_age = 600 + def test_config_conn_max_age_setting_none(self) -> None: + conn_max_age = None with mock.patch.dict( os.environ, {