Coverage for src / graphable / registry.py: 100%
24 statements
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-16 21:32 +0000
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-16 21:32 +0000
1from __future__ import annotations
3from typing import TYPE_CHECKING, Any, Callable
5if TYPE_CHECKING:
6 from .graph import Graph
8# Define types for parsers and exporters
9ParserFnc = Callable[..., "Graph[Any]"]
10ExporterFnc = Callable[["Graph[Any]", Any], None]
11CreatorFnc = Callable[["Graph[Any]", Any], str]
13# Registry for parsers (extension -> function)
14PARSERS: dict[str, ParserFnc] = {}
16# Registry for exporters (extension -> function)
17EXPORTERS: dict[str, ExporterFnc] = {}
19# Registry for creators (function that returns string instead of writing to file)
20# Maps an export function to its corresponding create function
21CREATOR_MAP: dict[ExporterFnc, CreatorFnc] = {}
24def register_parser(extension: str | list[str]):
25 def decorator(fnc: ParserFnc):
26 exts = [extension] if isinstance(extension, str) else extension
27 for ext in exts:
28 PARSERS[ext.lower()] = fnc
29 return fnc
31 return decorator
34def register_view(extension: str | list[str], creator_fnc: CreatorFnc | None = None):
35 def decorator(fnc: ExporterFnc):
36 exts = [extension] if isinstance(extension, str) else extension
37 for ext in exts:
38 EXPORTERS[ext.lower()] = fnc
39 if creator_fnc:
40 CREATOR_MAP[fnc] = creator_fnc
41 return fnc
43 return decorator