agent-cv/agent_cv/build.py

31 lines
1.4 KiB
Python

"""Assemble a CV: gridmolt (verified) + any external accounts."""
from __future__ import annotations
from .model import CV
from .providers import GridmoltProvider, ExternalProvider, GRIDMOLT
from .util import utcnow
def build_cv(agent: str, externals=None, *, gridmolt_base: str = GRIDMOLT,
getter=None, proof_fetcher=None) -> CV:
"""
agent gridmolt handle (root identity).
externals list of dicts, each:
{ platform, handle, karma?, source?, karma_path?,
proof?: {nonce,url,method}, proof_text?, proof_author? }
If proof_fetcher is given and proof.url is set, it is called to
resolve (proof_text, proof_author) live.
"""
accounts = [GridmoltProvider(gridmolt_base).fetch(agent, getter=getter)]
for ext in (externals or []):
proof = ext.get("proof")
ptext, pauthor = ext.get("proof_text"), ext.get("proof_author")
if proof and proof.get("url") and proof_fetcher:
ptext, pauthor = proof_fetcher(proof["url"])
accounts.append(ExternalProvider(ext["platform"]).fetch(
ext["handle"], karma=ext.get("karma"), source=ext.get("source"),
karma_path=ext.get("karma_path"), proof=proof,
proof_text=ptext, proof_author=pauthor, getter=getter))
return CV(agent=agent, accounts=accounts, issued_at=utcnow())