Skip to content

Omnipy

Typed dataflows for messy real-world data — continuous validation, safe interactive manipulation, and one-line conversions from nested JSON to tables.

Deep JSON flattening works for many common structures, but there are current boundaries and shape-dependent edge cases — see Tutorial 2: Nested JSON to tables for the current limits.

Why you care

  • Continuous validation while editing keeps model state valid after failed operations.
  • Declarative conversions with .to(...) reduce custom conversion glue code.
  • Dataset batch semantics apply typed parsing and transformations across many records.

Parse messy input → safe edit → pretty-printed output

>>> import omnipy as om
>>> my_integers = om.Model[list[int]]((101, '102', 103.0))
>>> my_integers
╭──────────────────╮
Model[list[int]]
                
[101, 102, 103]
╰──────────────────╯
>>> my_integers.append('invalid')
2 validation errors for Model[list[int]]
__root__ -> 3
  value is not a valid integer (type=type_error.integer)
__root__
   (type=assertion_error)
>>> my_integers
╭──────────────────╮
Model[list[int]]
                
[101, 102, 103]
╰──────────────────╯

10-minute Quickstart Tutorials

Compare

  • When requests + pandas + pydantic is enough: straightforward one-off parsing and tabular analysis pipelines.
  • When Omnipy pays off: continuous typed safety during editing, nested-to-tabular conversion paths, and dataset-level batch semantics.

Visual metaphors and story mode (coming later)

Visual metaphors and story mode (coming later). See the planned stub page: Visual metaphors and story mode.