Skip to content

Formatter

Convert device responses to different output formats (table, JSON, CSV, TSV, etc.). ResponseView provides two perspectives of the data (nested and flattened), and ResponseFormatter outputs them in your chosen format.


Architecture

Class Diagram

classDiagram
    class DeviceResponse {
        +type: str
        +status: str
        +received_us: int
        +...dynamic_fields: Any
    }

    class ResponseView {
        -raw: DeviceResponse
        -flat: DeviceResponse
        +__init__(response: DeviceResponse)
    }

    class ResponseFormatter {
        -supported_formats: list
        +display(response: DeviceResponse, format: str)
        -_format_table(response: DeviceResponse) str
        -_format_json(response: DeviceResponse) str
        -_format_jsonl(response: DeviceResponse) str
        -_format_csv(response: DeviceResponse) str
        -_format_ssv(response: DeviceResponse) str
        -_format_tsv(response: DeviceResponse) str
        -_format_ltsv(response: DeviceResponse) str
    }

    ResponseView --> DeviceResponse: uses (raw)
    ResponseView --> DeviceResponse: uses (flat)
    ResponseFormatter --> DeviceResponse: formats

Response Perspective Transformation

flowchart LR
    A["DeviceResponse<br/>(nested structure)"] --> B["ResponseView"]
    B --> C["raw perspective<br/>(original nested)"]
    B --> D["flat perspective<br/>(underscore-separated keys)"]
    C --> E["ResponseFormatter"]
    D --> E
    E --> F["Output Format<br/>table/json/csv/etc"]

    style A fill:#e1f5ff
    style C fill:#fff3e0
    style D fill:#f3e5f5
    style F fill:#e8f5e9

Supported Output Formats

graph TD
    A["ResponseFormatter"] --> B["table"]
    A --> C["json"]
    A --> D["jsonl"]
    A --> E["csv"]
    A --> F["ssv<br/>space-separated"]
    A --> G["tsv<br/>tab-separated"]
    A --> H["ltsv<br/>labeled tsv"]

    style B fill:#fff3e0
    style C fill:#f3e5f5
    style D fill:#e3f2fd
    style E fill:#e8f5e9
    style F fill:#fce4ec
    style G fill:#f1f8e9
    style H fill:#ede7f6

ResponseView

::: kazunoko.formatter.ResponseView options: show_root_heading: true show_source: true


ResponseFormatter

::: kazunoko.formatter.ResponseFormatter options: show_root_heading: true show_source: true