From 497533f0e33be3be8e62ba16b4c69614eb2b8229 Mon Sep 17 00:00:00 2001 From: Brian Bjarke Jensen Date: Sun, 28 Jun 2026 19:42:15 +0200 Subject: [PATCH] Fix mypy context manager typing for adapter subclasses. Return Self from __enter__ so with-blocks preserve subclass types, and align mypy python_version with the 3.12 runtime target. Co-authored-by: Cursor --- pyproject.toml | 2 +- python_repositories/adapters/minio_adapter.py | 3 ++- python_repositories/adapters/redis_adapter.py | 4 ++-- python_repositories/interfaces/context_aware_interface.py | 3 ++- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 6f1a724..b962891 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,7 +48,7 @@ url = "https://gitea.lille-vemmelund.dk/api/packages/brian/pypi/simple/" explicit = true [tool.mypy] -python_version = "3.10" +python_version = "3.12" warn_return_any = true # nudge to use stricter types warn_unused_configs = true # nudge to remove unused configs disallow_untyped_defs = true # disallow untyped function definitions diff --git a/python_repositories/adapters/minio_adapter.py b/python_repositories/adapters/minio_adapter.py index e0053e1..afcabb3 100644 --- a/python_repositories/adapters/minio_adapter.py +++ b/python_repositories/adapters/minio_adapter.py @@ -4,6 +4,7 @@ from __future__ import annotations import os from io import BytesIO from importlib.util import find_spec +from typing import Self import structlog from python_utils import check_env @@ -49,7 +50,7 @@ class MinioAdapter( self._client: minio.Minio | None = None self._bucket_name: str | None = None - def __enter__(self) -> MinioAdapter: + def __enter__(self) -> Self: """Enter the context.""" self.connect() return self diff --git a/python_repositories/adapters/redis_adapter.py b/python_repositories/adapters/redis_adapter.py index 5e0c455..56fa459 100644 --- a/python_repositories/adapters/redis_adapter.py +++ b/python_repositories/adapters/redis_adapter.py @@ -1,7 +1,7 @@ """Definition of RedisAdapter class.""" from __future__ import annotations -from typing import cast +from typing import Self, cast from importlib.util import find_spec import os import structlog @@ -42,7 +42,7 @@ class RedisAdapter( self._client: redis.Redis | None = None self.path: str = RedisPath.root_path() - def __enter__(self) -> RedisAdapter: + def __enter__(self) -> Self: """Enter the context.""" self.connect() return self diff --git a/python_repositories/interfaces/context_aware_interface.py b/python_repositories/interfaces/context_aware_interface.py index eaf5f71..7815304 100644 --- a/python_repositories/interfaces/context_aware_interface.py +++ b/python_repositories/interfaces/context_aware_interface.py @@ -3,13 +3,14 @@ from __future__ import annotations from abc import ABC, abstractmethod +from typing import Self class ContextAwareInterface(ABC): """Interface that defines context-related methods.""" @abstractmethod - def __enter__(self) -> ContextAwareInterface: + def __enter__(self) -> Self: """Enter the context.""" ...