Skip to content

shpaker/epyxid

Repository files navigation

ePyXID

PyPI PyPI

Fast, globally unique, and sortable ID generator.

ePyXID is a Python wrapper around the Rust implementation of xid: xid-rs. Built with PyO3, it provides a simple and efficient way to generate unique IDs that are sortable by creation time.

The original xid implementation is rs/xid written in Go.

Features

  • Globally Unique: Each ID is unique across space and time.
  • Sortable: IDs are sortable by their creation time.
  • Fast: Implemented in Rust for maximum performance using PyO3. See performance benchmarks comparing ePyXID with other Python ID generation libraries.

Installation

Install ePyXID using pip:

pip install epyxid

Quick Start

Generate and use ePyXID in your Python projects:

from epyxid import XID

# Create a new XID
xid = XID()
print(f"{xid!r}")
# <XID: cu701mcr9ij74n2hajpg>

# Create an XID from a string
xid_str = XID("cnisffq7qo0qnbtbu5gg")
print(f"XID from string: {xid_str}")

# Create an XID from bytes
xid_bytes = XID(b'e\xe5\xc7\xbfG\xd6\x01\xab\xaf\xab\xf1a')
print(f"XID from bytes: {xid_bytes}")

# Print the XID as a string
print(f"XID: {str(xid)}")
#  or
print(f"XID: {xid.to_str()}")
# XID: cnisffq7qo0qnbtbu5gg

# Get the byte representation of the XID
print(f"Bytes: {bytes(xid)}")
# or
print(f"Bytes: {xid.as_bytes()}")
# Bytes: b'e\xe5\xc7\xbfG\xd6\x01\xab\xaf\xab\xf1a'

# Access the creation time of the XID
print(f"Creation Time: {xid.time}")
# Creation Time: 2024-12-31 23:59:59

# Compare XIDs
xid1 = XID()
xid2 = XID()
print(f"XID1 < XID2: {xid1 < xid2}")

# Use XIDs in a set
xid_set = {xid1, xid2}
print(f"XID Set: {xid_set}")

Contributing

Contributions are welcome! Please open an issue or submit a pull request on GitHub.

License

This project is licensed under the MIT License.

About

Python wrapper around Rust implementation of XID (Globally Unique ID Generator)

Topics

Resources

License

Stars

Watchers

Forks

Contributors