fix: resolve all mypy type errors across service modules

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Justin Visser 2026-02-27 15:49:27 +01:00
parent f11947aad2
commit 74249fa24c
10 changed files with 39 additions and 31 deletions

View file

@ -2,6 +2,7 @@ from __future__ import annotations
from dataclasses import dataclass
from datetime import UTC, datetime, timedelta
from typing import Any
from sqlalchemy import Select, and_, func, literal, or_, select, union_all
from sqlalchemy.ext.asyncio import AsyncSession
@ -43,7 +44,7 @@ def _retry_item_label(display_name: str | None, scholar_id: str | None) -> str:
def _retry_item_from_publication(
publication: Publication,
*,
link_row: tuple | None,
link_row: Any | None,
) -> PublicationListItem:
if link_row is None:
scholar_profile_id = 0
@ -270,7 +271,7 @@ class PdfQueueListItem:
display_identifier: DisplayIdentifier | None = None
def _queue_item_from_row(row: tuple) -> PdfQueueListItem:
def _queue_item_from_row(row: Any) -> PdfQueueListItem:
return PdfQueueListItem(
publication_id=int(row[0]),
title=str(row[1] or ""),
@ -292,7 +293,7 @@ def _queue_item_from_row(row: tuple) -> PdfQueueListItem:
async def _hydrated_queue_items(
db_session: AsyncSession,
*,
rows: list[tuple],
rows: list[Any],
) -> list[PdfQueueListItem]:
items = [_queue_item_from_row(row) for row in rows]
return await identifier_service.overlay_pdf_queue_items_with_display_identifiers(

View file

@ -1,8 +1,9 @@
from __future__ import annotations
from datetime import datetime
from typing import Any
from sqlalchemy import Select, case, func, select
from sqlalchemy import Select, case, false as sa_false, func, select
from sqlalchemy.ext.asyncio import AsyncSession
from app.db.models import (
@ -124,7 +125,7 @@ def publications_query(
stmt = stmt.where(ScholarPublication.is_read.is_(False))
if mode == MODE_LATEST:
if latest_run_id is None:
return stmt.where(False)
return stmt.where(sa_false())
stmt = stmt.where(ScholarPublication.first_seen_run_id == latest_run_id)
if snapshot_before is not None:
stmt = stmt.where(ScholarPublication.created_at <= snapshot_before)
@ -195,7 +196,7 @@ async def get_publication_item_for_user(
def publication_list_item_from_row(
row: tuple,
row: Any,
*,
latest_run_id: int | None,
) -> PublicationListItem:
@ -232,7 +233,7 @@ def publication_list_item_from_row(
)
def unread_item_from_row(row: tuple) -> UnreadPublicationItem:
def unread_item_from_row(row: Any) -> UnreadPublicationItem:
(
publication_id,
scholar_profile_id,

View file

@ -1,6 +1,8 @@
from __future__ import annotations
from sqlalchemy import select, tuple_, update
from typing import Any
from sqlalchemy import CursorResult, select, tuple_, update
from sqlalchemy.ext.asyncio import AsyncSession
from app.db.models import ScholarProfile, ScholarPublication
@ -34,7 +36,7 @@ async def mark_all_unread_as_read_for_user(
)
.values(is_read=True)
)
result = await db_session.execute(stmt)
result: CursorResult[Any] = await db_session.execute(stmt) # type: ignore[assignment]
await db_session.commit()
return int(result.rowcount or 0)
@ -62,7 +64,7 @@ async def mark_selected_as_read_for_user(
)
.values(is_read=True)
)
result = await db_session.execute(stmt)
result: CursorResult[Any] = await db_session.execute(stmt) # type: ignore[assignment]
await db_session.commit()
return int(result.rowcount or 0)
@ -85,6 +87,6 @@ async def set_publication_favorite_for_user(
)
.values(is_favorite=bool(is_favorite))
)
result = await db_session.execute(stmt)
result: CursorResult[Any] = await db_session.execute(stmt) # type: ignore[assignment]
await db_session.commit()
return int(result.rowcount or 0)