diff options
| author | Christian Cleberg <[email protected]> | 2026-04-09 19:45:45 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-04-09 19:45:45 -0500 |
| commit | acbff854f2da96bddcaede1385e7fefeba0fb34b (patch) | |
| tree | 48d4707cd3276d2825370f0793008a6ffcfff936 /src/srht_contrib/utils/identity.py | |
| download | hutch-stats-acbff854f2da96bddcaede1385e7fefeba0fb34b.tar.gz hutch-stats-acbff854f2da96bddcaede1385e7fefeba0fb34b.tar.bz2 hutch-stats-acbff854f2da96bddcaede1385e7fefeba0fb34b.zip | |
initial commit
Diffstat (limited to 'src/srht_contrib/utils/identity.py')
| -rw-r--r-- | src/srht_contrib/utils/identity.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/srht_contrib/utils/identity.py b/src/srht_contrib/utils/identity.py new file mode 100644 index 0000000..adc9a9d --- /dev/null +++ b/src/srht_contrib/utils/identity.py @@ -0,0 +1,27 @@ +from __future__ import annotations + +from sqlalchemy import select +from sqlalchemy.orm import Session + +from srht_contrib.models import ActorAlias + + +class ActorIdentityResolver: + def __init__(self, configured_aliases: dict[str, list[str]] | None = None) -> None: + self.configured_aliases = configured_aliases or {} + + def canonicalize(self, actor: str, db: Session | None = None) -> str: + normalized = actor.strip() + if not normalized: + return normalized + + for canonical, aliases in self.configured_aliases.items(): + if normalized == canonical or normalized in aliases: + return canonical + + if db is not None: + alias = db.scalar(select(ActorAlias).where(ActorAlias.alias == normalized)) + if alias is not None: + return alias.canonical_actor + + return normalized |
