Skip to content

Commit 9fda685

Browse files
committed
Refactor type annotations for improved clarity and consistency across multiple files
1 parent f018657 commit 9fda685

7 files changed

Lines changed: 38 additions & 20 deletions

File tree

.github/workflows/python-quality.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ jobs:
4444

4545
- name: Type checking with mypy
4646
run: |
47-
uv run mypy middleware/ --ignore-missing-imports --strict-optional
47+
uv run mypy middleware/
4848
continue-on-error: false
4949

5050
- name: Security check with bandit

middleware/sql_to_arc/src/middleware/sql_to_arc/builder.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from collections import defaultdict
77
from typing import Any, cast
88

9-
from arctrl import ( # type: ignore[import-untyped]
9+
from arctrl import (
1010
ARC,
1111
ArcAssay,
1212
ArcStudy,
@@ -150,7 +150,7 @@ def _add_publications_to_arc(
150150
study.Publications.append(map_publication(p_row))
151151

152152

153-
def _get_column_key(r: dict[str, Any]) -> tuple:
153+
def _get_column_key(r: dict[str, Any]) -> tuple[Any, ...]:
154154
"""Extract a unique key for a column definition."""
155155
return (
156156
r.get("column_type"),
@@ -163,7 +163,7 @@ def _get_column_key(r: dict[str, Any]) -> tuple:
163163
)
164164

165165

166-
def _build_header(key: tuple) -> CompositeHeader | None:
166+
def _build_header(key: tuple[Any, ...]) -> CompositeHeader | None:
167167
"""Build a CompositeHeader from a column key tuple."""
168168
c_type, c_io, c_val, c_ann_term, c_ann_uri, c_ann_ver, c_name = key
169169
try:
@@ -246,9 +246,9 @@ def _build_arc_table(t_name: str, rows: list[dict[str, Any]]) -> ArcTable | None
246246
if max_row_idx < 0:
247247
return None
248248

249-
col_keys: list[tuple] = []
249+
col_keys: list[tuple[Any, ...]] = []
250250
seen_keys = set()
251-
col_to_rows: dict[tuple, dict[int, dict[str, Any]]] = defaultdict(dict)
251+
col_to_rows: dict[tuple[Any, ...], dict[int, dict[str, Any]]] = defaultdict(dict)
252252

253253
for r in rows:
254254
key = _get_column_key(r)

middleware/sql_to_arc/src/middleware/sql_to_arc/mapper.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from datetime import datetime
44
from typing import Any
55

6-
from arctrl import ( # type: ignore
6+
from arctrl import (
77
ArcAssay,
88
ArcInvestigation,
99
ArcStudy,

middleware/sql_to_arc/src/middleware/sql_to_arc/processor.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ def _spawn_investigation_task(
196196
idx: int,
197197
batch_data: RelatedDataBatch,
198198
res: WorkerResources,
199-
running_tasks: set[asyncio.Task],
199+
running_tasks: set[asyncio.Task[None]],
200200
) -> None:
201201
"""Create worker context and spawn a processing task."""
202202
ctx = WorkerContext(
@@ -242,7 +242,7 @@ async def process_investigations(
242242
) as executor,
243243
trace.get_tracer(__name__).start_as_current_span("process_investigations"),
244244
):
245-
running_tasks: set[asyncio.Task] = set()
245+
running_tasks: set[asyncio.Task[None]] = set()
246246
inv_idx = 0
247247
investigation_gen = db.stream_investigations(stats=stats, limit=config.debug_limit)
248248

middleware/sql_to_arc/tests/integration/test_workflow.py

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
from unittest.mock import AsyncMock, MagicMock
99

1010
import pytest
11-
from arctrl import ARC # type: ignore[import-untyped]
11+
from arctrl import ARC
1212

13-
from middleware.api_client import ApiClient
14-
from middleware.shared.api_models.models import CreateOrUpdateArcsResponse
13+
from middleware.api_client import ApiClient, ArcMetadata, ArcResult, ArcStatus
14+
from middleware.api_client.models import ArcLifecycleStatus
1515
from middleware.shared.config.config_base import OtelConfig
1616
from middleware.sql_to_arc.config import Config
1717
from middleware.sql_to_arc.context import WorkerContext
@@ -61,11 +61,15 @@ def mock_db_connection(mock_db_cursor: AsyncMock) -> AsyncMock:
6161
def mock_api_client() -> AsyncMock:
6262
"""Mock API client."""
6363
client = AsyncMock(spec=ApiClient)
64-
client.create_or_update_arc.return_value = CreateOrUpdateArcsResponse(
65-
client_id="test",
66-
message="success",
67-
rdi="test",
68-
arcs=[],
64+
client.create_or_update_arc.return_value = ArcResult(
65+
arc_id="test",
66+
status=ArcStatus.CREATED,
67+
metadata=ArcMetadata(
68+
arc_hash="",
69+
status=ArcLifecycleStatus.ACTIVE,
70+
first_seen="2026-01-01T00:00:00Z",
71+
last_seen="2026-01-01T00:00:00Z",
72+
),
6973
)
7074
return client
7175

@@ -121,15 +125,24 @@ def __init__(self, mocker: MagicMock, mock_api_client: AsyncMock) -> None:
121125
mocker.patch("middleware.sql_to_arc.main.configure_logging")
122126

123127
# Capture ARCs on API call
124-
async def capture_arc(rdi: str, arc: Any) -> CreateOrUpdateArcsResponse:
128+
async def capture_arc(rdi: str, arc: Any) -> ArcResult:
125129
serialized_arc = arc
126130
if isinstance(arc, dict):
127131
# Convert back to ARC object for test compatibility
128132
# processor.py sends a dict, but legacy tests expect an ARC object
129133
serialized_arc = ARC.from_rocrate_json_string(json.dumps(arc))
130134

131135
self.captured_arcs.append(serialized_arc)
132-
return CreateOrUpdateArcsResponse(client_id="test", message="success", rdi=rdi, arcs=[])
136+
return ArcResult(
137+
arc_id=rdi,
138+
status=ArcStatus.CREATED,
139+
metadata=ArcMetadata(
140+
arc_hash="",
141+
status=ArcLifecycleStatus.ACTIVE,
142+
first_seen="2026-01-01T00:00:00Z",
143+
last_seen="2026-01-01T00:00:00Z",
144+
),
145+
)
133146

134147
self.api_client.create_or_update_arc.side_effect = capture_arc
135148

middleware/sql_to_arc/tests/unit/test_mapper.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import datetime
44

55
import pytest
6-
from arctrl import ( # type: ignore[import-untyped, import-not-found]
6+
from arctrl import (
77
ArcAssay,
88
ArcInvestigation,
99
ArcStudy,

pyproject.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,11 @@ exclude = [
136136
# ]
137137
# ignore_missing_imports = true
138138

139+
# arctrl has no type stubs and no py.typed marker — suppress the resulting noise
140+
[[tool.mypy.overrides]]
141+
module = ["arctrl"]
142+
ignore_missing_imports = true
143+
139144
# Docstring-Regeln aktivieren, damit es wie pylint C0114/15/16 meckert
140145
[tool.ruff.lint.pydocstyle]
141146
convention = "pep257" # oder "numpy", oder "google"

0 commit comments

Comments
 (0)