Source code for finam.tools.inspect_helper

"""Helper functions to inspect FINAM entities."""
from ..data.tools import Info
from ..errors import FinamNoDataError
from ..interfaces import IAdapter, IComponent, IInput, IOutput, ITimeComponent

DEFAULT_INDENT = "  "


[docs] def inspect(obj): """Prints information about a component, adapter or input/output slot.""" if isinstance(obj, IComponent): return _inspect_component(obj) if isinstance(obj, IAdapter): return _inspect_slot(obj) if isinstance(obj, (IInput, IOutput)): return _inspect_slot(obj) if isinstance(obj, Info): return _inspect_info(obj) raise ValueError( f"Can only inspect FINAM components, adapters and i/o slots. Got {obj.__class__.__name__}." )
def _inspect_component(component, indent=""): s = indent + component.name if isinstance(component, ITimeComponent): s += f"\n{indent}{DEFAULT_INDENT}time: {component.time}" if len(component.inputs) > 0: s += f"\n{indent}{DEFAULT_INDENT}Inputs" for _name, inp in component.inputs.items(): s += "\n" + _inspect_slot(inp, indent + DEFAULT_INDENT + DEFAULT_INDENT) if len(component.outputs) > 0: s += f"\n{indent}{DEFAULT_INDENT}Outputs" for _name, out in component.outputs.items(): s += "\n" + _inspect_slot(out, indent + DEFAULT_INDENT + DEFAULT_INDENT) return s def _inspect_adapter(adapter, indent=""): s = indent + adapter.name return s def _inspect_slot(slot, indent=""): info = None try: info = slot.info except FinamNoDataError: pass s = indent + slot.name if slot.is_static: s += " (static)" s += f"\n{_inspect_info(info, indent+DEFAULT_INDENT)}" return s def _inspect_info(info, indent=""): s = "" if info is None: s += f"{indent}?" else: s += f"\n{indent}grid: {info.grid}" for k, v in info.meta.items(): s += f"\n{indent}{k}: {v}" return s