upxo.reporting.entries module

Entry types held by a ReportSession, in append order.

Each entry is a plain dataclass with no GUI/plotting dependency of its own – ReportSession does the matplotlib/file-copy/JSON work and stores just the resulting data here. kind is a plain class attribute (not an annotated field) so it is excluded from dataclasses.asdict() – ReportSession.save() adds it back explicitly as a discriminator for load().

class upxo.reporting.entries.SectionHeader(id: int, timestamp: str, title: str)[source]

Bases: object

kind = 'section'
id: int
timestamp: str
title: str
class upxo.reporting.entries.ImageEntry(id: int, timestamp: str, title: str, image_path: str, caption: str | None = None, section: str | None = None, source_page: str | None = None, params: dict | None = None)[source]

Bases: object

kind = 'image'
id: int
timestamp: str
title: str
image_path: str
caption: str | None = None
section: str | None = None
source_page: str | None = None
params: dict | None = None
class upxo.reporting.entries.TableEntry(id: int, timestamp: str, title: str, columns: list, rows: list, caption: str | None = None, section: str | None = None, source_page: str | None = None)[source]

Bases: object

kind = 'table'
id: int
timestamp: str
title: str
columns: list
rows: list
caption: str | None = None
section: str | None = None
source_page: str | None = None
class upxo.reporting.entries.TextEntry(id: int, timestamp: str, title: str, text: str, section: str | None = None, source_page: str | None = None)[source]

Bases: object

kind = 'text'
id: int
timestamp: str
title: str
text: str
section: str | None = None
source_page: str | None = None
class upxo.reporting.entries.ParamsEntry(id: int, timestamp: str, title: str, params: dict, section: str | None = None, source_page: str | None = None)[source]

Bases: object

kind = 'params'
id: int
timestamp: str
title: str
params: dict
section: str | None = None
source_page: str | None = None