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