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. The main feature is a pair of classes that can represent ranges:
- ⛓️
Segmentis a class that can be treated like asetand its constructor is compatible withrangeandslice. It is derived fromstrso is easy to compare and serializes nicely. It is immutable, hashable and has a stable string representation. - 🏔️
Rangesis an orderedtupleofSegments. It is also immutable and derived fromstrlike the above. It can be constructed from comma-separated Python-style slice notation strings (e.g."1:10, 20:","0x00:0xffand":"), integers,slices,ranges, integers and (nested) iterables of the above. - ♾️ An
infsingleton that is afloatwith a value ofmath.infbut has an__index__that returnssys.maxsizeand compares equal to infinity andmaxsize, and its string representation is"inf".
The range class is designed to be used as fields in Pydantic BaseModels,
but can be used anywhere you need a range. They are not designed with speed in
mind, and comparisons usually use the canonical string form by converting other
things into Ranges objects. Their preferred pronoun is they/them.
📦 Installation
pip install arranges if you want to use them. You'll need Python 3.10 or
above.
📖 Docs
See the tests for executable documentation
🔗 Links
⚠️ Constraints
I made them to select lines or bytes in a stream of data, so they:
- 🔢 only support
ints; - ≮ do not allow negative indices, the minimum is 0 and the maximum is unbounded;
- ✅ are compatible with
rangeandslice, butstepis fixed to1. If you pass something with a step into its constructor it'll be converted to a list ofints (range(0, 10, 2)becomes"0,2,4,6,8"); - ∪ do not support duplicate ranges. Ranges are merged together as they are
added to the
Rangesobject; - 🐍 they are unpydantic in that its constructors are duck-typed, which is what I need;
- ☣️ they violate the Zen of Python by having multiple ways to do the same thing, but I found that useful; and
- ⚠️ Currently the interface is unstable, so lock the exact version in if you don't want breaking changes.
👨💻 Hacking
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.
⚖️ License
Free as in freedom from legalese; the WTFPL with a warranty clause.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file arranges-0.2.0.tar.gz.
File metadata
- Download URL: arranges-0.2.0.tar.gz
- Upload date:
- Size: 9.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea8186afc7770c1b24977a34ecffeacd3ac8cfc3099ff4943250117809947cc0
|
|
| MD5 |
ba00fc6987b81c3230d96cb9950fc4d6
|
|
| BLAKE2b-256 |
346a54a4b4887cf0c5abd59774fba782f4e10f41e31a7c5967774b0d93a41c6a
|
File details
Details for the file arranges-0.2.0-py3-none-any.whl.
File metadata
- Download URL: arranges-0.2.0-py3-none-any.whl
- Upload date:
- Size: 9.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
959e0a7ea001c2d53a812aa8d9bbce92fe7a614ed1936b16f8ccbc4333b7caad
|
|
| MD5 |
06610940439c3d674fbe249efeffdb74
|
|
| BLAKE2b-256 |
129d8797d4e6fb4787a3ac649f0cdd8cbc5d92a0cfd3893c904a7c7f79a194ee
|