Skip to main content

Parse variable length delimited lines

Project description

xlineparse

Python library to parse variable length delimited lines.

Usage

pip install xlineparse
import datetime as dt
from decimal import Decimal
from typing import Annotated, Literal

import xlineparse as xlp

FooLine = tuple[
    Literal["foo"],
    int,
    Decimal,
    Decimal | None,
    Annotated[bool, xlp.BoolField(true_value="Y", false_value="F")],
    Annotated[dt.date, xlp.DateField(format="%Y-%m-%d")],
    Annotated[dt.time, xlp.TimeField(format="%H%M%s")],
]
BarLine = tuple[
    Literal["bar"],
    int,
]
schema = xlp.Schema.from_type(
    delimiter="|",
    quote_str=None,
    trailing_delimiter=False,
    lines=FooLine | BarLine,
)

schema.parse_line("foo|1|3.14||Y|2012-01-02|123200")

#  Will return:

(
    "foo",
    1,
    Decimal("3.14"),
    None,
    True,
    dt.date(2012, 1, 2),
    dt.time(12, 32, 0),
)

Or directly construct Fields:

schema = xlp.Schema(
    delimiter="|",
    quote_str=None,
    trailing_delimiter=False,
    lines=[
        xlp.Line(
            name="a",
            fields=[
                xlp.DecimalField(
                    required=True,
                    round_decimal_places=None,
                    min_value=Decimal("2.0"),
                    max_value=None,
                )
            ],
        )
    ],
)
assert schema.parse_line("a|2.0")

#  Will return:

("a", Decimal("2.0"))

TODO:

  • Maybe the big decimals are just floats?
  • Allow delimiters to be escaped.
  • Can we make enums quicker by moving to Rust?

Install/Develop

uv pip install -e '.[dev]'
maturin develop

Make release

  • Add pypi token and user = __token__ to settings (do this once).
  • Upversion pyproject.toml.
git tag -a v0.0.x head -m v0.0.x
git push origin v0.0.x

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

xlineparse-0.0.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (657.8 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

xlineparse-0.0.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (652.1 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

xlineparse-0.0.6-cp312-cp312-macosx_11_0_arm64.whl (488.9 kB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

xlineparse-0.0.6-cp312-cp312-macosx_10_12_x86_64.whl (488.2 kB view hashes)

Uploaded CPython 3.12 macOS 10.12+ x86-64

xlineparse-0.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (658.7 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

xlineparse-0.0.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (652.7 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

xlineparse-0.0.6-cp311-cp311-macosx_11_0_arm64.whl (489.4 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

xlineparse-0.0.6-cp311-cp311-macosx_10_12_x86_64.whl (488.7 kB view hashes)

Uploaded CPython 3.11 macOS 10.12+ x86-64

xlineparse-0.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (658.6 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

xlineparse-0.0.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (652.5 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

xlineparse-0.0.6-cp310-cp310-macosx_11_0_arm64.whl (489.5 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

xlineparse-0.0.6-cp310-cp310-macosx_10_12_x86_64.whl (488.7 kB view hashes)

Uploaded CPython 3.10 macOS 10.12+ x86-64

Supported by

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