From e43f8b859df3d1d5c07cafdf3e6248f3af069707 Mon Sep 17 00:00:00 2001 From: actae0n <19864268+xpcmdshell@users.noreply.github.com> Date: Fri, 16 Jan 2026 19:19:53 -0800 Subject: [PATCH 1/2] chore: run ruff hooks on commit Enable ruff and ruff-format as default pre-commit hooks while keeping mypy manual, and adjust a few isinstance checks to satisfy Ruff UP038. --- .pre-commit-config.yaml | 1 + src/py_code_mode/artifacts/file.py | 2 +- src/py_code_mode/artifacts/redis.py | 4 ++-- src/py_code_mode/execution/container/server.py | 4 ++-- src/py_code_mode/execution/protocol.py | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ca6acd7..54711de 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -16,3 +16,4 @@ repos: args: [--strict] pass_filenames: false entry: mypy src/ + stages: [manual] diff --git a/src/py_code_mode/artifacts/file.py b/src/py_code_mode/artifacts/file.py index 6902267..47b5deb 100644 --- a/src/py_code_mode/artifacts/file.py +++ b/src/py_code_mode/artifacts/file.py @@ -99,7 +99,7 @@ def save( data_type = "bytes" if isinstance(data, bytes) else "text" if isinstance(data, bytes): file_path.write_bytes(data) - elif isinstance(data, (dict, list)): + elif isinstance(data, dict | list): file_path.write_text(json.dumps(data, indent=2)) data_type = "json" else: diff --git a/src/py_code_mode/artifacts/redis.py b/src/py_code_mode/artifacts/redis.py index fca18b3..f4c53bd 100644 --- a/src/py_code_mode/artifacts/redis.py +++ b/src/py_code_mode/artifacts/redis.py @@ -70,7 +70,7 @@ def save( data_type = "bytes" if isinstance(data, bytes) else "text" if isinstance(data, bytes): self._redis.set(data_key, data) - elif isinstance(data, (dict, list)): + elif isinstance(data, dict | list): self._redis.set(data_key, json.dumps(data)) data_type = "json" else: @@ -117,7 +117,7 @@ def load(self, name: str) -> Any: data_type = None try: entry_json = self._redis.hget(self._index_key(), name) - if entry_json and isinstance(entry_json, (str, bytes)): + if entry_json and isinstance(entry_json, str | bytes): entry = json.loads(entry_json) data_type = entry.get("metadata", {}).get("_data_type") except (json.JSONDecodeError, TypeError): diff --git a/src/py_code_mode/execution/container/server.py b/src/py_code_mode/execution/container/server.py index 129e7c3..500a1df 100644 --- a/src/py_code_mode/execution/container/server.py +++ b/src/py_code_mode/execution/container/server.py @@ -76,11 +76,11 @@ def serialize_value(value: Any) -> Any: """ if value is None: return None - if isinstance(value, (str, int, float, bool)): + if isinstance(value, str | int | float | bool): return value if isinstance(value, dict): return {k: serialize_value(v) for k, v in value.items()} - if isinstance(value, (list, tuple)): + if isinstance(value, list | tuple): return [serialize_value(v) for v in value] if isinstance(value, frozenset): return list(value) diff --git a/src/py_code_mode/execution/protocol.py b/src/py_code_mode/execution/protocol.py index f0dafa2..efa4a06 100644 --- a/src/py_code_mode/execution/protocol.py +++ b/src/py_code_mode/execution/protocol.py @@ -63,7 +63,7 @@ def validate_storage_not_access(storage: Any, executor_name: str) -> None: Raises: TypeError: If storage is a StorageAccess type (old API) """ - if isinstance(storage, (FileStorageAccess, RedisStorageAccess)): + if isinstance(storage, FileStorageAccess | RedisStorageAccess): raise TypeError( f"{executor_name}.start() accepts StorageBackend, not {type(storage).__name__}. " "Pass the storage backend directly." From 1999ae2bfc842bbf0c7e5be0ecd9f90b5b64bdf2 Mon Sep 17 00:00:00 2001 From: actae0n <19864268+xpcmdshell@users.noreply.github.com> Date: Fri, 16 Jan 2026 19:27:46 -0800 Subject: [PATCH 2/2] chore: remove mypy from tooling Drop the mypy dev dependency and pre-commit hook to align with Ruff-only linting. --- .pre-commit-config.yaml | 11 ----------- pyproject.toml | 7 ------- uv.lock | 2 -- 3 files changed, 20 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 54711de..c83d99a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,14 +6,3 @@ repos: args: [--fix] - id: ruff-format - - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.13.0 - hooks: - - id: mypy - additional_dependencies: - - types-PyYAML - - types-redis - args: [--strict] - pass_filenames: false - entry: mypy src/ - stages: [manual] diff --git a/pyproject.toml b/pyproject.toml index 855c088..f4e58c2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -76,7 +76,6 @@ dev-dependencies = [ "pytest-asyncio>=0.24", "pytest-cov>=6.0", "ruff>=0.8", - "mypy>=1.13", "pre-commit>=4.0", "redis>=7.1.0", "mcp[cli]>=1.24.0", @@ -99,12 +98,6 @@ python_classes = ["Test*"] python_functions = ["test_*"] addopts = "-n auto --dist loadgroup" -[tool.mypy] -python_version = "3.12" -strict = true -warn_return_any = true -disallow_untyped_defs = true - [tool.ruff] target-version = "py312" line-length = 100 diff --git a/uv.lock b/uv.lock index 93ff406..121fca3 100644 --- a/uv.lock +++ b/uv.lock @@ -2771,7 +2771,6 @@ dev = [ { name = "fastapi" }, { name = "httpx" }, { name = "mcp", extra = ["cli"] }, - { name = "mypy" }, { name = "pre-commit" }, { name = "pytest" }, { name = "pytest-asyncio" }, @@ -2818,7 +2817,6 @@ dev = [ { name = "fastapi", specifier = ">=0.124.4" }, { name = "httpx", specifier = ">=0.28.1" }, { name = "mcp", extras = ["cli"], specifier = ">=1.24.0" }, - { name = "mypy", specifier = ">=1.13" }, { name = "pre-commit", specifier = ">=4.0" }, { name = "pytest", specifier = ">=8.0" }, { name = "pytest-asyncio", specifier = ">=0.24" },