Source code for analyzer.postprocessing.transforms.registry
from analyzer.utils.querying import BasePattern
from typing import TypeVar
from attrs import define, field
import functools as ft
from cattrs.strategies import (
include_subclasses,
configure_tagged_union,
)
@define
@define
@define
@define
[docs]
def configureConverter(conv):
base_list_str = conv.get_structure_hook(list[str])
base_list_int = conv.get_structure_hook(list[int])
base_list_float = conv.get_structure_hook(list[float])
@conv.register_structure_hook
def _(data, t) -> list[str] | list[int] | list[float]:
if len(data) == 0:
return []
if isinstance(data, str):
return [data]
if isinstance(data[0], str):
return base_list_str(data, list[str])
elif isinstance(data[0], int):
return base_list_int(data, list[int])
else:
return base_list_float(data, list[float])
union_strategy = ft.partial(configure_tagged_union, tag_name="name")
include_subclasses(Transform, conv, union_strategy=union_strategy)