krz/hutch-stats

Server-side utility for calculating contributions for sourcehut users.

clone: git clone https://gitbay.org/krz/hutch-stats.git

main: src/srht_contrib/utils/identity.py · raw

 1from __future__ import annotations
 2
 3from sqlalchemy import select
 4from sqlalchemy.orm import Session
 5
 6from srht_contrib.models import ActorAlias
 7
 8
 9class ActorIdentityResolver:
10    def __init__(self, configured_aliases: dict[str, list[str]] | None = None) -> None:
11        self.configured_aliases = configured_aliases or {}
12
13    def canonicalize(self, actor: str, db: Session | None = None) -> str:
14        normalized = actor.strip()
15        if not normalized:
16            return normalized
17
18        for canonical, aliases in self.configured_aliases.items():
19            if normalized == canonical or normalized in aliases:
20                return canonical
21
22        if db is not None:
23            alias = db.scalar(select(ActorAlias).where(ActorAlias.alias == normalized))
24            if alias is not None:
25                return alias.canonical_actor
26
27        return normalized