Batch EPC writes in EpcPostgresRepository pass pyright strict 🟪

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Daniel Roth 2026-06-29 13:17:29 +00:00
parent 0fa1b9001c
commit f27d1e21bb
2 changed files with 15 additions and 16 deletions

View file

@ -67,9 +67,9 @@ class EpcSaveRequest:
def _col_values(model: SQLModel, exclude: frozenset[str] = frozenset()) -> dict[str, Any]: def _col_values(model: SQLModel, exclude: frozenset[str] = frozenset()) -> dict[str, Any]:
"""Extract column-keyed values from a SQLModel instance for Core INSERT.""" """Extract column-keyed values from a SQLModel instance for Core INSERT."""
return { return {
c.name: getattr(model, c.name) c.name: getattr(model, c.name) # type: ignore[union-attr]
for c in model.__table__.c # type: ignore[attr-defined] for c in model.__table__.c # type: ignore[attr-defined]
if c.name not in exclude if c.name not in exclude # type: ignore[union-attr]
} }
@ -164,8 +164,8 @@ class EpcPostgresRepository(EpcRepository):
) )
for r in requests for r in requests
] ]
returned_parents = self._session.execute( returned_parents = self._session.execute( # type: ignore[deprecated]
_sa_insert(EpcPropertyModel).returning(EpcPropertyModel.id), _sa_insert(EpcPropertyModel).returning(EpcPropertyModel.__table__.c["id"]), # type: ignore[attr-defined]
parent_rows, parent_rows,
).all() ).all()
epc_property_ids = [row[0] for row in returned_parents] epc_property_ids = [row[0] for row in returned_parents]
@ -235,19 +235,19 @@ class EpcPostgresRepository(EpcRepository):
# Bulk-insert all simple child tables (no downstream FK dependency). # Bulk-insert all simple child tables (no downstream FK dependency).
if perf_rows: if perf_rows:
self._session.execute(_sa_insert(EpcPropertyEnergyPerformanceModel), perf_rows) self._session.execute(_sa_insert(EpcPropertyEnergyPerformanceModel), perf_rows) # type: ignore[deprecated]
if heating_rows: if heating_rows:
self._session.execute(_sa_insert(EpcMainHeatingDetailModel), heating_rows) self._session.execute(_sa_insert(EpcMainHeatingDetailModel), heating_rows) # type: ignore[deprecated]
if window_rows: if window_rows:
self._session.execute(_sa_insert(EpcWindowModel), window_rows) self._session.execute(_sa_insert(EpcWindowModel), window_rows) # type: ignore[deprecated]
if pv_rows: if pv_rows:
self._session.execute(_sa_insert(EpcPhotovoltaicArrayModel), pv_rows) self._session.execute(_sa_insert(EpcPhotovoltaicArrayModel), pv_rows) # type: ignore[deprecated]
if element_rows: if element_rows:
self._session.execute(_sa_insert(EpcEnergyElementModel), element_rows) self._session.execute(_sa_insert(EpcEnergyElementModel), element_rows) # type: ignore[deprecated]
if flat_rows: if flat_rows:
self._session.execute(_sa_insert(EpcFlatDetailsModel), flat_rows) self._session.execute(_sa_insert(EpcFlatDetailsModel), flat_rows) # type: ignore[deprecated]
if rhi_rows: if rhi_rows:
self._session.execute(_sa_insert(EpcRenewableHeatIncentiveModel), rhi_rows) self._session.execute(_sa_insert(EpcRenewableHeatIncentiveModel), rhi_rows) # type: ignore[deprecated]
# Building parts: insert with RETURNING and zip positionally to resolve # Building parts: insert with RETURNING and zip positionally to resolve
# floor-dimension FKs. Do NOT key by id(part) — the same EpcPropertyData # floor-dimension FKs. Do NOT key by id(part) — the same EpcPropertyData
@ -259,8 +259,8 @@ class EpcPostgresRepository(EpcRepository):
_col_values(EpcBuildingPartModel.from_domain(part, epc_pid), frozenset({"id"})) _col_values(EpcBuildingPartModel.from_domain(part, epc_pid), frozenset({"id"}))
for part, epc_pid in parts_ordered for part, epc_pid in parts_ordered
] ]
returned_bps = self._session.execute( returned_bps = self._session.execute( # type: ignore[deprecated]
_sa_insert(EpcBuildingPartModel).returning(EpcBuildingPartModel.id), _sa_insert(EpcBuildingPartModel).returning(EpcBuildingPartModel.__table__.c["id"]), # type: ignore[attr-defined]
bp_rows, bp_rows,
).all() ).all()
floor_rows: list[dict[str, Any]] = [ floor_rows: list[dict[str, Any]] = [
@ -269,7 +269,7 @@ class EpcPostgresRepository(EpcRepository):
for dim in part.sap_floor_dimensions for dim in part.sap_floor_dimensions
] ]
if floor_rows: if floor_rows:
self._session.execute(_sa_insert(EpcFloorDimensionModel), floor_rows) self._session.execute(_sa_insert(EpcFloorDimensionModel), floor_rows) # type: ignore[deprecated]
return epc_property_ids return epc_property_ids

View file

@ -17,11 +17,10 @@ from dataclasses import replace
from pathlib import Path from pathlib import Path
from typing import Any from typing import Any
import pytest
from sqlalchemy import Engine from sqlalchemy import Engine
from sqlmodel import Session from sqlmodel import Session
from datatypes.epc.domain.epc_property_data import EpcPropertyData, SapFloorDimension from datatypes.epc.domain.epc_property_data import EpcPropertyData
from datatypes.epc.domain.mapper import EpcPropertyDataMapper from datatypes.epc.domain.mapper import EpcPropertyDataMapper
from repositories.epc.epc_postgres_repository import EpcPostgresRepository, EpcSaveRequest from repositories.epc.epc_postgres_repository import EpcPostgresRepository, EpcSaveRequest