Skip to main content

Type-safe, ergonomic table operations, with the speed of Polars.

Project description

Portabellas

PyPI Main codecov Documentation Status

Type-safe, ergonomic table operations, with the speed of Polars.

Installation

pip install portabellas

Why Portabellas?

Portabellas is built on Polars, so you get the same query optimization and parallelization, with these improvements on top:

  • Early validation: Catch type and name errors directly where they occur, with negligible runtime overhead.

    # Portabellas
    from portabellas import Table
    
    data = Table({"name": ["Alice", "Bob"], "age": [25, 30]})
    data = data.add_computed_column("result", lambda row: row["age"].struct.get("name"))
    #                                                     ^^^^^^^^^^^^^^^^^
    #
    # ColumnTypeError: Expected struct type, got i64
    
    # Polars — same mistake, but error is deferred and misleading
    import polars as pl
    
    data = pl.LazyFrame({"name": ["Alice", "Bob"], "age": [25, 30]})
    data = data.with_columns(result=pl.col("age").struct.field("name"))  # No error
    data = data.collect()
    #      ^^^^^^^^^^^^^^
    #
    # StructFieldNotFoundError: name
    
  • No lazy/eager split: No need to manually switch between lazy and eager mode. Lazy evaluation is active whenever possible. Operations that require eager mode handle it automatically.

  • Familiar abstractions: Work with Table, Column, Row, and Cell — names that match how you think about data, not how the library stores it.

Fun fact: "Portabellas" is an anagram of "Polars table". And, as for any proper Python package, it starts with P.

For Developers

Project Setup

  1. Install uv.
  2. Run uv sync to generate a venv and install the dependencies.
  3. Activate your venv by running source .venv/bin/activate.

(Optional) Pre-Commit Hooks

We use pre-commit hooks for linting and formatting. Install the commit hooks locally via:

pre-commit install

The configuration can be adapted in .pre-commit-config.yaml.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

portabellas-0.3.0.tar.gz (51.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

portabellas-0.3.0-py3-none-any.whl (78.7 kB view details)

Uploaded Python 3

File details

Details for the file portabellas-0.3.0.tar.gz.

File metadata

  • Download URL: portabellas-0.3.0.tar.gz
  • Upload date:
  • Size: 51.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.12 {"installer":{"name":"uv","version":"0.11.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for portabellas-0.3.0.tar.gz
Algorithm Hash digest
SHA256 c5975fb7ad7a54f7d42c9edf1c05496b6753cf9d8bf2c0a82f05bedbb5eecb61
MD5 207b7afbec90640646ef4a227692096b
BLAKE2b-256 731fad68cd161561ce20ac8b42c065afb5bef07db428e3720eb3afe97807d042

See more details on using hashes here.

File details

Details for the file portabellas-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: portabellas-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 78.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.12 {"installer":{"name":"uv","version":"0.11.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for portabellas-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 36182e4086bc054c7a2122e2e53e5db19423d9a20293ad0aff3c921531f99ac2
MD5 39a8895497cc686de1ff6f3f8934dc92
BLAKE2b-256 02b478fb6b83a718d9a4d9b2b700b0f481669282cc2cad3b6f606d84d4029a08

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page