Skip to main content

Mergable range object for use in Pydantic classes

Project description

Arranges

Range string fields for Pydantic BaseModels

I needed a way to parse batches of byte, row and line and other object ranges in my merge-files app, in a way that I can just drop it in as a string field type. The reason for this is so the machine-generated command line help is flat and readable by humans.

It it kinda grew into a monster so I've split it out into this separate package. It gives a couple of classes for dealing with ranges:

  • Range, a class that can be constructed from Python-style slice notation strings (e.g. "1:10", "0x00:0xff, ":"), range-likes, iterables of int-like objects. It has convenient properties lke being iterable, immutable, has a stable string representation and matching hash, it can be treated like a set and its constructor is compatible with range and slice.
  • The Ranges class is similar but supports holes in ranges - it's an ordered, mutable list of non-overlapping Range objects that simplifies as data is added.

Constraints

I made it to select lines or bytes in a stream of data, so it:

  • only supports ints;
  • does not allow negative indices, the minimum is 0 and the maximum is unbounded;
  • it's compatible with range and slice, but step is fixed to 1. This may change in the future;
  • does not support duplicate ranges. Ranges are merged together as they are added to the Ranges object;
  • it is unpydantic in that its constructors are duck-typed, which is what I need; and
  • it violates the Zen of Python by having multiple ways to do the same thing, but it's also useful.
  • Currently the interface is unstable, so lock the exact version in if you don't want breaking changes.

Installation

pip install arranges if you want to use it. You'll need Python 3.10 or above.

Dev setup

To add features etc you'll ideally need git, make, bash and something with a debugger. Config for Visual Studio Code is included.

Clone the repo and make dev to make the venv, install dependencies, then code . to open the project up in the venv with tests and debugging and all that jazz.

Type make help to see the other options, or run the one-liner scripts in the ./build dir if you want to run steps without all that fancy caching nonsense.

Usage

License

Free as in freedom from legalese; the WTFPL with a warranty clause.

Political note: I don't want to live in a world where lawyers tell me how to speak. If you don't trust me enough to use the WTFPL then you shouldn't be running my code in the first place.

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

arranges-0.0.5.tar.gz (8.2 kB view details)

Uploaded Source

Built Distribution

arranges-0.0.5-py3-none-any.whl (8.1 kB view details)

Uploaded Python 3

File details

Details for the file arranges-0.0.5.tar.gz.

File metadata

  • Download URL: arranges-0.0.5.tar.gz
  • Upload date:
  • Size: 8.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for arranges-0.0.5.tar.gz
Algorithm Hash digest
SHA256 9816d01867badf64b67ae64bfd0e32540bb8f70e1884995ac687c52f3eac8d94
MD5 02fe70ae4cd512d95f47c543d3a85d5f
BLAKE2b-256 0157005521b78295d2ecd72dcbfdf69dd1e92cb1ee1d366e5ac80abc52c42187

See more details on using hashes here.

File details

Details for the file arranges-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: arranges-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 8.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for arranges-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 aafa16c82823edc045d80938d740467a0d633ce07c0cf9b2e1ec3affc4051bf2
MD5 5243363b8ba34de67a8c5ef7762b358c
BLAKE2b-256 7429902b80b5685029449816c850513e0f4e4e8759db03346ac35ecba0f0a4cc

See more details on using hashes here.

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