"""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())