Skip to main content

Rust-backed helpers for Artemis-style base-57 identifiers

Project description

id57

Rust-backed helpers for generating Artemis-compatible base-57 identifiers.

The project packages a Rust extension that mirrors the existing Python implementation of Artemis' identifier helpers: the ALPHABET constant plus the base57_encode, decode57, and generate_id57 functions. Identifiers preserve lexicographic ordering by concatenating an encoded timestamp (11 base-57 characters) with an encoded UUID component (22 base-57 characters).

Installation

Pre-built wheels are published to PyPI. Once available, install with:

pip install id57

If a wheel is not available for your platform the package falls back to a pure-Python implementation that matches the Rust behavior, so the same API is available everywhere.

Usage

>>> from id57 import ALPHABET, base57_encode, decode57, generate_id57
>>> ALPHABET
'23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
>>> base57_encode(999_999)
'7Qnr'
>>> decode57('7Qnr')
999999
>>> len(generate_id57())
33

The default generator encodes the current UTC timestamp in microseconds and a UUID4 into a 33 character string. You can also supply the parts explicitly:

>>> generate_id57(timestamp=1_700_000_000_123_456, uuid=0x1234)
'22HGcpYU2og22222222222222222223Sm'

Development

The repository uses uv for Python dependency management and maturin for building the Rust extension. Helpful targets are available in the Makefile:

make develop   # Build and install the extension into uv's virtual environment
make test      # Run the pytest suite
make build     # Produce wheels via maturin
make publish   # Publish wheels to PyPI (requires credentials)

The test suite exercises both the encode/decode helpers and the generate_id57 composition logic, comparing the Rust implementation against the bundled pure-Python reference for parity.

Publishing workflow

  1. Build wheels locally: make build
  2. Verify the wheel installs and the API works: pip install dist/id57-*.whl
  3. Publish to TestPyPI or PyPI: make publish
  4. Tag the release (e.g. v1.0.0) and record the changes in CHANGELOG.md

The CI workflow publishes signed wheels to PyPI whenever a commit lands on main, using the PYPI_TOKEN secret and creating a matching GitHub Release.

License

Distributed under the MIT License. See LICENSE for details.

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

id57-1.0.0.tar.gz (32.3 kB view details)

Uploaded Source

Built Distributions

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

id57-1.0.0-cp39-abi3-win_amd64.whl (138.3 kB view details)

Uploaded CPython 3.9+Windows x86-64

id57-1.0.0-cp39-abi3-manylinux_2_34_x86_64.whl (239.3 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.34+ x86-64

id57-1.0.0-cp39-abi3-macosx_11_0_arm64.whl (202.3 kB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

File details

Details for the file id57-1.0.0.tar.gz.

File metadata

  • Download URL: id57-1.0.0.tar.gz
  • Upload date:
  • Size: 32.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.9.4

File hashes

Hashes for id57-1.0.0.tar.gz
Algorithm Hash digest
SHA256 b7e174f305a16b5b25d46a957e44f8b3ec5ef3e359448978e5ae94f851f7062d
MD5 1cf476f2dc3b8a7cde9687114a94b028
BLAKE2b-256 995620501da3ca6363321bc491e1f2bab2c1cb0957b470a26f42c7aac0671084

See more details on using hashes here.

File details

Details for the file id57-1.0.0-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: id57-1.0.0-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 138.3 kB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.9.4

File hashes

Hashes for id57-1.0.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 24644043f0e7f169a3f4d9ba81b45165b8c68e8e37b773023afa2aafa716353d
MD5 3934830754251b7a3ccb11c6c16f1d81
BLAKE2b-256 8a59ed0593841b366d1a30789c6fa2454cbc91ff156bbb7524da3e6fbf748c85

See more details on using hashes here.

File details

Details for the file id57-1.0.0-cp39-abi3-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for id57-1.0.0-cp39-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 392f9436e8d2432ac1e6ea5c59609c6a2675d47a2827a5fff18d77974c88700c
MD5 746079d9960a2aa80e508a17c5b1e273
BLAKE2b-256 567afe7b07beb20afd2984f06e31823e8789ff23f3c5e8457621f5800a2c880d

See more details on using hashes here.

File details

Details for the file id57-1.0.0-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for id57-1.0.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 35ecb58df4f08134211369b8fa5db0579d06c9e95f7f9d94590bec117593cac9
MD5 657349d9b4e833720dc447306d308ca9
BLAKE2b-256 87aae37c5c4bf5d68fb95ff019c44b7a8a8d6f1e09f9e63ea7e93895066d5c51

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