Browse hub, series rename, full-prediction dropdown + a DRY pass (7 sweeps) #90

Merged
bvandeusen merged 10 commits from dev into main 2026-06-10 00:24:01 -04:00
Showing only changes of commit f1a664e5a7 - Show all commits
+1 -4
View File
@@ -15,16 +15,13 @@ sync/async boundary; the importer one stays as the lone sync consumer.
from __future__ import annotations from __future__ import annotations
from collections.abc import Awaitable, Callable from collections.abc import Awaitable, Callable
from typing import TypeVar
from sqlalchemy import Select from sqlalchemy import Select
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
T = TypeVar("T")
async def get_or_create[T](
async def get_or_create(
session: AsyncSession, session: AsyncSession,
select_stmt: Select, select_stmt: Select,
factory: Callable[[], Awaitable[T]], factory: Callable[[], Awaitable[T]],