From 9cb5e56c6d2bc5050697a13625103f9b79081465 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Dec 2025 15:38:34 +0000 Subject: [PATCH 1/5] chore(deps-dev): bump the dev-dependencies group across 1 directory with 5 updates Updates the requirements on [coverage[toml]](https://github.com/nedbat/coveragepy), [ipython](https://github.com/ipython/ipython), [ruff](https://github.com/astral-sh/ruff), [tblib](https://github.com/ionelmc/python-tblib) and [coverage](https://github.com/nedbat/coveragepy) to permit the latest version. Updates `coverage[toml]` from 6.3.2 to 7.11.0 - [Release notes](https://github.com/nedbat/coveragepy/releases) - [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst) - [Commits](https://github.com/nedbat/coveragepy/compare/6.3.2...7.11.0) Updates `ipython` to 9.6.0 - [Release notes](https://github.com/ipython/ipython/releases) - [Commits](https://github.com/ipython/ipython/compare/7.0.0...9.6.0) Updates `ruff` to 0.14.3 - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.1.2...0.14.3) Updates `tblib` to 3.2.1 - [Release notes](https://github.com/ionelmc/python-tblib/releases) - [Changelog](https://github.com/ionelmc/python-tblib/blob/master/CHANGELOG.rst) - [Commits](https://github.com/ionelmc/python-tblib/compare/v1.6.0...v3.2.1) Updates `coverage` from 7.10.2 to 7.11.0 - [Release notes](https://github.com/nedbat/coveragepy/releases) - [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst) - [Commits](https://github.com/nedbat/coveragepy/compare/7.10.2...7.11.0) --- updated-dependencies: - dependency-name: coverage[toml] dependency-version: 7.11.0 dependency-type: direct:development update-type: version-update:semver-major dependency-group: dev-dependencies - dependency-name: ipython dependency-version: 9.6.0 dependency-type: direct:development dependency-group: dev-dependencies - dependency-name: ruff dependency-version: 0.14.3 dependency-type: direct:development dependency-group: dev-dependencies - dependency-name: tblib dependency-version: 3.2.1 dependency-type: direct:development dependency-group: dev-dependencies - dependency-name: coverage dependency-version: 7.11.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-dependencies ... Signed-off-by: dependabot[bot] --- example/requirements-dev.txt | 2 +- pyproject.toml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/example/requirements-dev.txt b/example/requirements-dev.txt index dc0ba34..99afb56 100644 --- a/example/requirements-dev.txt +++ b/example/requirements-dev.txt @@ -1 +1 @@ -coverage==7.10.2 +coverage==7.13.0 diff --git a/pyproject.toml b/pyproject.toml index b2019e7..5022ba2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,13 +37,13 @@ classifiers = [ dev = [ "bandit>=1.7.4", "bumpversion~=0.5", - "coverage[toml]==6.3.2", - "ipython~=7.0", + "coverage[toml]==7.13.0", + "ipython>=7,<10", "oauth2==1.9.0.post1", "pyyaml~=6.0", - "ruff~=0.1.2", + "ruff>=0.1.2,<0.15.0", "sphinx_rtd_theme==3.0.2", - "tblib~=1.6.0", + "tblib>=1.6,<3.3", ] [tool.ruff] From e6091cb2b221512b938dbddd7d54419c3853d2b6 Mon Sep 17 00:00:00 2001 From: Bob Grant Date: Fri, 12 Dec 2025 11:22:46 -0500 Subject: [PATCH 2/5] Resolve ruff check warning warning: The top-level linter settings are deprecated in favour of their counterparts in the `lint` section. Please update the following options in `pyproject.toml`: - 'extend-select' -> 'lint.extend-select' --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 5022ba2..aa6a67a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,7 +48,7 @@ dev = [ [tool.ruff] extend-exclude = [".heroku"] -extend-select = ["C901"] +lint.extend-select = ["C901"] [tool.coverage.run] omit = ["*/tests/*", "*/management/*", "*/migrations/*"] From cbbe6f7f0fb9a64905df16d56a69a174092461e3 Mon Sep 17 00:00:00 2001 From: Bob Grant Date: Fri, 12 Dec 2025 11:24:51 -0500 Subject: [PATCH 3/5] Resolve ruff check errors --- django_declarative_apis/machinery/__init__.py | 2 +- django_declarative_apis/machinery/attributes.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/django_declarative_apis/machinery/__init__.py b/django_declarative_apis/machinery/__init__.py index 5abd05e..aa042e6 100644 --- a/django_declarative_apis/machinery/__init__.py +++ b/django_declarative_apis/machinery/__init__.py @@ -111,7 +111,7 @@ def get_instance_value(self, owner_instance, owner_class): message = "Resource instance not found" raise errors.ClientErrorNotFound(message) - if value.__class__ == dict: + if value.__class__ is dict: return value if not getattr(value, "_api_filter", False): diff --git a/django_declarative_apis/machinery/attributes.py b/django_declarative_apis/machinery/attributes.py index cfcf605..e0a7954 100644 --- a/django_declarative_apis/machinery/attributes.py +++ b/django_declarative_apis/machinery/attributes.py @@ -143,7 +143,7 @@ def coerce_value_to_type(self, raw_value): return None try: - if self.field_type == bool: + if self.field_type is bool: if isinstance(raw_value, bool): return raw_value if isinstance(raw_value, str): From 1e9029706616bbd6c1aede60b136d8bec8425dab Mon Sep 17 00:00:00 2001 From: Bob Grant Date: Fri, 12 Dec 2025 11:33:32 -0500 Subject: [PATCH 4/5] autoformat --- django_declarative_apis/adapters.py | 12 ++++---- .../machinery/attributes.py | 30 +++++++++---------- django_declarative_apis/machinery/tasks.py | 6 ++-- example/example/urls.py | 1 + tests/machinery/test_base.py | 14 ++++++--- tests/test_filters.py | 9 +++--- tests/testutils.py | 7 ++--- 7 files changed, 42 insertions(+), 37 deletions(-) diff --git a/django_declarative_apis/adapters.py b/django_declarative_apis/adapters.py index f0ed6d2..f38cdf7 100644 --- a/django_declarative_apis/adapters.py +++ b/django_declarative_apis/adapters.py @@ -47,13 +47,13 @@ def __init__(self, **kwargs): ) if isinstance(handler, (list, tuple)): - self.method_handlers[ - method.upper() - ] = BehavioralEndpointDefinitionRouter(*handler) + self.method_handlers[method.upper()] = ( + BehavioralEndpointDefinitionRouter(*handler) + ) else: - self.method_handlers[ - method.upper() - ] = BehavioralEndpointDefinitionRouter(handler) + self.method_handlers[method.upper()] = ( + BehavioralEndpointDefinitionRouter(handler) + ) self.allowed_methods = self.method_handlers.keys() diff --git a/django_declarative_apis/machinery/attributes.py b/django_declarative_apis/machinery/attributes.py index e0a7954..aecf892 100644 --- a/django_declarative_apis/machinery/attributes.py +++ b/django_declarative_apis/machinery/attributes.py @@ -558,9 +558,9 @@ def _run_task(self, owner_instance): self.task_runner(owner_instance) def run(self, owner_instance): - assert ( - self.task_state != EndpointTask.STATE_RUNNING - ), "Circular task reference detected!" + assert self.task_state != EndpointTask.STATE_RUNNING, ( + "Circular task reference detected!" + ) try: self.task_state = EndpointTask.STATE_RUNNING @@ -569,9 +569,9 @@ def run(self, owner_instance): depends_on = getattr(owner_instance, depends_on) if depends_on and (depends_on.task_state != EndpointTask.STATE_COMPLETED): - assert not isinstance( - depends_on, DeferrableEndpointTask - ), "DeferredEndpointTask cannot be used as depends_on arg" + assert not isinstance(depends_on, DeferrableEndpointTask), ( + "DeferredEndpointTask cannot be used as depends_on arg" + ) depends_on.run(owner_instance) self._run_task(owner_instance) @@ -708,9 +708,9 @@ def __init__( if execute_unless: assert callable(execute_unless), "execute_unless MUST be callable" - assert ( - inspect.getfullargspec(execute_unless).args == ["self"] - ), "execute_unless MUST be an instance method that takes only the 'self' argument" + assert inspect.getfullargspec(execute_unless).args == ["self"], ( + "execute_unless MUST be an instance method that takes only the 'self' argument" + ) self.execute_unless = execute_unless @@ -733,9 +733,9 @@ def _run_task(self, owner_instance): resource = owner_instance.resource - assert isinstance( - resource, django_models.Model - ), "resource must be an instance of django.db.models.Model to run as deferred task" + assert isinstance(resource, django_models.Model), ( + "resource must be an instance of django.db.models.Model to run as deferred task" + ) delay = self._resolve_maybe_callable(owner_instance, self.delay) or 0 always_defer = self._resolve_maybe_callable(owner_instance, self.always_defer) @@ -788,9 +788,9 @@ def __init__( **kwargs, ): super().__init__(**kwargs) - assert ( - task_args_packer is not None - ), "task_args_packer required for DeferrableGenericEndpointTask" + assert task_args_packer is not None, ( + "task_args_packer required for DeferrableGenericEndpointTask" + ) self.task_args_packer = task_args_packer def _run_task(self, owner_instance): diff --git a/django_declarative_apis/machinery/tasks.py b/django_declarative_apis/machinery/tasks.py index ffad31c..eee62dd 100644 --- a/django_declarative_apis/machinery/tasks.py +++ b/django_declarative_apis/machinery/tasks.py @@ -447,9 +447,9 @@ def schedule_resource_task_runner( delay=0, ): resource = resource_bound_method.__self__ - assert isinstance( - resource, django.db.models.Model - ), "resource must be an instance of django.db.models.Model to run as deferred task" + assert isinstance(resource, django.db.models.Model), ( + "resource must be an instance of django.db.models.Model to run as deferred task" + ) resource_class_name = "{0}.{1}".format( resource.__module__, resource.__class__.__name__ diff --git a/example/example/urls.py b/example/example/urls.py index cbf8b37..e192f9f 100644 --- a/example/example/urls.py +++ b/example/example/urls.py @@ -20,6 +20,7 @@ 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ + from django.conf.urls import url, include import myapp.urls diff --git a/tests/machinery/test_base.py b/tests/machinery/test_base.py index bcd1a81..6c32f7d 100644 --- a/tests/machinery/test_base.py +++ b/tests/machinery/test_base.py @@ -723,8 +723,11 @@ def test_filter_cache_reduces_queries(self): filtering.apply_filters_to_object(root, filters.INEFFICIENT_FILTERS) root = models.InefficientRoot.objects.get(id=self.root_id) - with self.assertNumQueries(3), override_settings( - DDA_FILTER_MODEL_CACHING_ENABLED=True, DDA_FILTER_CACHE_DEBUG_LOG=True + with ( + self.assertNumQueries(3), + override_settings( + DDA_FILTER_MODEL_CACHING_ENABLED=True, DDA_FILTER_CACHE_DEBUG_LOG=True + ), ): filtering.apply_filters_to_object(root, filters.INEFFICIENT_FILTERS) @@ -736,8 +739,11 @@ def test_model_cache_reduces_queries(self): ) root = models.InefficientRoot.objects.get(id=self.root_id) - with self.assertNumQueries(3), override_settings( - DDA_FILTER_MODEL_CACHING_ENABLED=True, DDA_FILTER_CACHE_DEBUG_LOG=True + with ( + self.assertNumQueries(3), + override_settings( + DDA_FILTER_MODEL_CACHING_ENABLED=True, DDA_FILTER_CACHE_DEBUG_LOG=True + ), ): filtering.apply_filters_to_object( root, filters.INEFFICIENT_FUNCTION_FILTERS diff --git a/tests/test_filters.py b/tests/test_filters.py index 40cbc7d..b10de80 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -165,11 +165,10 @@ def test_expandable_properties(self): self.assertTrue("expandable_dict" in filtered["__expandable__"]) self.assertTrue("expandable_string" in filtered["__expandable__"]) - with mock.patch( - "tests.models.TestModel.expandable_dict" - ) as dict_mock, mock.patch( - "tests.models.TestModel.expandable_string" - ) as str_mock: + with ( + mock.patch("tests.models.TestModel.expandable_dict") as dict_mock, + mock.patch("tests.models.TestModel.expandable_string") as str_mock, + ): filtered = filtering.apply_filters_to_object( self.test_model, filters.DEFAULT_FILTERS ) diff --git a/tests/testutils.py b/tests/testutils.py index 113057a..c3c068a 100644 --- a/tests/testutils.py +++ b/tests/testutils.py @@ -33,7 +33,6 @@ class NoLoggingTestRunner(DiscoverRunner): - """Don't log during tests.""" def run_tests(self, test_labels, extra_tests=None, **kwargs): @@ -144,9 +143,9 @@ def _build_request(cls, request): body=all_request_parameters, ) - oauth_signature_data[ - "oauth_signature" - ] = oauth1_client.get_oauth_signature(oauth_request) + oauth_signature_data["oauth_signature"] = ( + oauth1_client.get_oauth_signature(oauth_request) + ) else: # use HMAC-SHA1 signature method oauth_signature_data.update({"oauth_signature_method": "HMAC-SHA1"}) From d86cf01e2da70c219aa9a63ff4a45e0d644bd15a Mon Sep 17 00:00:00 2001 From: Bob Grant Date: Fri, 12 Dec 2025 11:57:46 -0500 Subject: [PATCH 5/5] Drop ipython dependency It's causing problems --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index aa6a67a..6a9fbc0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,6 @@ dev = [ "bandit>=1.7.4", "bumpversion~=0.5", "coverage[toml]==7.13.0", - "ipython>=7,<10", "oauth2==1.9.0.post1", "pyyaml~=6.0", "ruff>=0.1.2,<0.15.0",