Skip to main content

python library that makes it easy to convert Excel tables into ORM-like objects

Project description

XLEA

xlea is a python library that makes it easy to convert Excel tables into ORM-like objects.

The library focised on schema-driven parsing of tabular data, where column resolution, validation and type conversion are handled explicitly and predictably.

⚠️ XLEA is a work in progress. The public API is stabilizing, and core concepts are already in place.

Features

  • Declarative schema definition

Describe tabular data using Python classes with type annotations and column descriptors.

  • Automatic column resolution

Columns are matched by name, regular expression, or custom predicate — no hard-coded indexes.

  • Type-driven value conversion

Cell values are automatically cast using schema type annotations with explicit error reporting.

  • Header-aware parsing

Support for multi-row headers and complex header layouts via schema configuration.

  • Pluggable provider architecture

File formats are handled by interchangeable providers, selected automatically by file extension.

  • Excel formats out of the box

Native support for .xlsx, .xls, and .xlsb via dedicated providers.

  • Row-level validation

Custom validators can be attached to columns to enforce domain-specific constraints.

  • Graceful handling of invalid data

Optionally skip rows with invalid values instead of failing the entire read.

Installation

pip install xlea

Example

Defining a Schema

from typing import Optional

from xlea import Schema, Column


age_name = lambda name: name.startswith("Age")
age_validator = lambda val: val.isnumeric()

@config(header_rows=2)
class Person(Schema):
    id: str = Column("ID")
    fullname: str = Column("Profile;Last Name, First Name", ignore_case=True)
    age: int = Column(age_name, validator=age_validator, skip_invalid_row=True)
    city: Optional[str] = Column("City", required=False, default="Voronezh")

Reading an Excel file

import xlea
from xlea.providers.openpyxl import OpenPyXlProvider

from schemas import Person


def main():
    persons = xlea.read(OpenPyXlProvider("test_data.xlsx"), schema=Person)
    # or with automatic provider selection
    persons = xlea.autoread("test_data.xlsx", schema=Person)

    for p in persons:
        print(p.id, p.fullname, p.age)


if __name__ == "__main__":
    main()

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

xlea-1.0.2.tar.gz (17.4 kB view details)

Uploaded Source

Built Distribution

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

xlea-1.0.2-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

File details

Details for the file xlea-1.0.2.tar.gz.

File metadata

  • Download URL: xlea-1.0.2.tar.gz
  • Upload date:
  • Size: 17.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","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 xlea-1.0.2.tar.gz
Algorithm Hash digest
SHA256 a61dc4681cb1fea43ed0f0e48e293704452977ae752883cd0f2881efc1045bd1
MD5 73eea9360bd3a76b526afd20b45baf8e
BLAKE2b-256 381236a57026cccc7187adbdd0f5dabe7f370044e21dbad7470bbb7b94510792

See more details on using hashes here.

File details

Details for the file xlea-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: xlea-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 12.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","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 xlea-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1fe2d2182aa65ee982c907593baf9090bc8f2ca4cf62ea2c52e5dd436da29a36
MD5 936814cbf126a94d00dda81d1599d79d
BLAKE2b-256 28e1b640834b49bd5b24e047137e8fc274b4e3b547d1871326b45cf7047debb8

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