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 collections.abc import Awaitable, Callable
from typing import TypeVar
from sqlalchemy import Select
from sqlalchemy.exc import IntegrityError
from sqlalchemy.ext.asyncio import AsyncSession
T = TypeVar("T")
async def get_or_create(
async def get_or_create[T](
session: AsyncSession,
select_stmt: Select,
factory: Callable[[], Awaitable[T]],