Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/aminalaee/uuid-utils
Python bindings to Rust UUID
https://github.com/aminalaee/uuid-utils
python rust uuid uuid-generator uuidv7
Last synced: 3 months ago
JSON representation
Python bindings to Rust UUID
- Host: GitHub
- URL: https://github.com/aminalaee/uuid-utils
- Owner: aminalaee
- License: bsd-3-clause
- Created: 2023-03-25T18:29:26.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2023-11-06T09:30:00.000Z (8 months ago)
- Last Synced: 2024-02-16T17:04:12.153Z (4 months ago)
- Topics: python, rust, uuid, uuid-generator, uuidv7
- Language: Python
- Homepage:
- Size: 54.7 KB
- Stars: 67
- Watchers: 4
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Lists
- awesome-stars - aminalaee/uuid-utils - Python bindings to Rust UUID (Python)
README
# Python UUID Utils
---
Python UUID implementation using Rust's UUID library.
This will make `uuid4` function around 10x faster.This package can be a drop-in replacement to the standard library UUID
which implements existing UUID versions like V4 in Rust
and also adds draft UUID versions like V6.Avaialble UUID versions:
- `uuid1` - Version 1 UUIDs using a timestamp and monotonic counter.
- `uuid3` - Version 3 UUIDs based on the MD5 hash of some data.
- `uuid4` - Version 4 UUIDs with random data.
- `uuid5` - Version 5 UUIDs based on the SHA1 hash of some data.
- `uuid6` - Version 6 UUIDs using a timestamp and monotonic counter.
- `uuid7` - Version 7 UUIDs using a Unix timestamp ordered by time.
- `uuid8` - Version 8 UUIDs using user-defined data.Please note that UUID versions 6, 7 and 8 are still in draft RFC.
## Installation
```shell
$ pip install uuid-utils
```## Example
```shell
>>> import uuid_utils as uuid>>> # make a random UUID
>>> uuid.uuid4()
UUID('ffe95fcc-b818-4aca-a350-e0a35b9de6ec')>>> # make a random UUID using a Unix timestamp which is time-ordered.
>>> uuid.uuid7()
UUID('018afa4a-0d21-7e6c-b857-012bc678552b')>>> # make a UUID using a SHA-1 hash of a namespace UUID and a name
>>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org')
UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')>>> # make a UUID using an MD5 hash of a namespace UUID and a name
>>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')
```## Benchmarks
| Benchmark | Min | Max | Mean | Min (+) | Max (+) | Mean (+) |
|-----------------|---------|---------|---------|-----------------|-----------------|-----------------|
| UUID V1 | 0.058 | 0.059 | 0.058 | 0.005 (12.0x) | 0.005 (11.9x) | 0.005 (12.0x) |
| UUID V3 | 0.063 | 0.064 | 0.063 | 0.008 (7.9x) | 0.008 (8.1x) | 0.008 (8.0x) |
| UUID V4 | 0.041 | 0.041 | 0.041 | 0.004 (11.1x) | 0.004 (10.8x) | 0.004 (10.9x) |
| UUID V5 | 0.064 | 0.066 | 0.065 | 0.008 (8.1x) | 0.008 (8.1x) | 0.008 (8.1x) |
| UUID from hex | 0.024 | 0.025 | 0.024 | 0.004 (6.7x) | 0.004 (6.6x) | 0.004 (6.6x) |
| UUID from bytes | 0.024 | 0.025 | 0.024 | 0.004 (6.7x) | 0.004 (6.6x) | 0.004 (6.7x) |
| UUID from int | 0.024 | 0.025 | 0.024 | 0.004 (6.6x) | 0.004 (6.7x) | 0.004 (6.6x) |
| UUID from fields | 0.028 | 0.028 | 0.028 | 0.009 (3.1x) | 0.009 (3.1x) | 0.009 (3.1x) |## How to develop locally
```shell
$ make build
$ make test
```Or:
```shell
$ RUSTFLAGS="--cfg uuid_unstable" maturin develop --release
```