-
named_dict — Convert a list of
{name, ...}dicts into a{name: {}}dict. -
named_dict_with_id — Like
named_dict, but each entry carries anidentifierssub-dict. -
build_identifier — Build the {key, url} sub-dict for one identifier.
-
parse_creator_roles — Split a comma-string of role names (“writer, penciler”) into a list.
-
credits_to_cb — Convert a list of credits into comicbox’s nested
creditsshape. -
named_block — Pull
{key: {name: <name>}}out of a nested {id, name} dict, or None. -
reprints_to_cb — Convert mokkari’s
reprintslist into comicbox’s ReprintSchema list.
comicbox.formats.base.online.transform_helpers¶
source module comicbox.formats.base.online.transform_helpers
Shared helpers for online-source transforms.
Both MetronApiTransform and ComicVineApiTransform need to convert list-of-dicts collections into comicbox’s SimpleNamedDictField shape ({name: {extra_fields}}), parse credit/role lists, and build identifier sub-dicts. Putting the shared logic here keeps the per- source transforms readable.
Functions
source named_dict(items: Iterable[Mapping[str, Any]] | None, *, key: str = ‘name’) → dict[str, dict]
Convert a list of {name, ...} dicts into a {name: {}} dict.
Used for SimpleNamedDictField targets: characters, teams, story arcs, locations, universes, etc.
source named_dict_with_id(items: Iterable[Mapping[str, Any]] | None, source: str, id_type: str = ‘issue’) → dict[str, dict]
Like named_dict, but each entry carries an identifiers sub-dict.
The id field of each item maps to comicbox’s IdentifiedNameSchema identifiers.<source>.{key, url}. Used where the upstream provides an id alongside the name (most named collections on Metron and CV).
source build_identifier(source: str, id_type: str, value: Any) → dict[str, str]
Build the {key, url} sub-dict for one identifier.
source parse_creator_roles(raw: str | None) → list[str]
Split a comma-string of role names (“writer, penciler”) into a list.
ComicVine returns creator roles as a comma-separated string; mokkari returns them as a list of {id, name} dicts so this is only used for the CV path. Empty / None inputs produce [].
source credits_to_cb(credits_list: Iterable[Mapping[str, Any]] | None, *, creator_key: str, role_key: str, role_is_string: bool = False, source: str | None = None, creator_id_type: str = ‘creator’) → dict[str, dict]
Convert a list of credits into comicbox’s nested credits shape.
The shape is {<creator>: {roles: {<role>: {}}, identifiers: {...}}}.
role_is_string=True means role is a comma-separated string (CV). Otherwise role is a list of {id, name} dicts (mokkari).
source and creator_id_type populate the per-creator identifiers sub-dict from the upstream creator id; pass None to skip.
source named_block(parent: Mapping[str, Any], key: str) → dict[str, str] | None
Pull {key: {name: <name>}} out of a nested {id, name} dict, or None.
Used for publisher / imprint / similar single-named blocks where the upstream returns a small {id, name} object but comicbox stores it as {name: ...} only.
source reprints_to_cb(reprints: Iterable[Mapping[str, Any]] | None, *, source: str) → list[dict]
Convert mokkari’s reprints list into comicbox’s ReprintSchema list.
mokkari Reprint has id (Metron issue id) and issue (display string like “Series Name #N”). We pass the issue string through; the metron id goes into identifiers.<source> per ReprintSchema.