31 lines
1.4 KiB
Python
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())
|