Universally Unique Lexicographically Sortable Identifier
Project description
What is this?
This is a port of the original JavaScript ULID implementation to Python.
A ULID is a universally unique lexicographically sortable identifier. It is
- 128-bit compatible with UUID
- 1.21e+24 unique ULIDs per millisecond
- Lexicographically sortable!
- Canonically encoded as a 26 character string, as opposed to the 36 character UUID
- Uses Crockford's base32 for better efficiency and readability (5 bits per character)
- Case insensitive
- No special characters (URL safe)
In general the structure of a ULID is as follows:
01AN4Z07BY 79KA1307SR9X4MV3
|----------| |----------------|
Timestamp Randomness
48bits 80bits
For more information have a look at the original specification.
Installation
$ pip install python-ulid
Basic Usage
Create a new ULID
on from the current timestamp
>>> from ulid import ULID
>>> ulid = ULID()
Encode in different formats
>>> str(ulid)
'01BTGNYV6HRNK8K8VKZASZCFPE'
>>> ulid.hex
'015ea15f6cd1c56689a373fab3f63ece'
>>> int(ulid)
1820576928786795198723644692628913870
>>> ulid.bytes
b'\x01^\xa1_l\xd1\xc5f\x89\xa3s\xfa\xb3\xf6>\xce'
Access timestamp attribute
>>> ulid.timestamp
1505945939.153
>>> ulid.milliseconds
1505945939153
>>> ulid.datetime
datetime.datetime(2017, 9, 20, 22, 18, 59, 153000, tzinfo=datetime.timezone.utc)
Convert to UUID
>>> ulid.to_uuid()
UUID('015ea15f-6cd1-c566-89a3-73fab3f63ece')
Other implementations
Changelog
Version 1.0.0
- Dropped support for Python 2. Only Python 3.6+ is supported.
- Added type annotations
- Added the named constructors
ULID.from_datetime
,ULID.from_timestamp
andfrom_hex
. - The named constructor
ULID.new
has been removed. Use one of the specifc named constructors instead. For a newULID
created from the current timestamp use the standard constructor.
# old
ulid = ULID.new()
ulid = ULID.new(time.time())
ulid = ULID.new(datetime.now())
# new
ulid = ULID()
ulid = ULID.from_timestamp(time.time())
ulid = ULID.from_datetime(datetime.now())
- The
ULID.str
andULID.int
methods have been removed in favour of the more Pythonic special dunder-methods. Usestr(ulid)
andint(ulid)
instead. - Added the property
ULID.hex
that returns a hex representation of theULID
.
>>> ULID().hex
'0171caa5459a8631a6894d072c8550a8'
- Equality checks and ordering now also work with
str
-instances. - The package now has no external dependencies.
- The test-coverage has been raised to 100%.
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
python-ulid-1.1.0.tar.gz
(20.0 kB
view details)
Built Distribution
File details
Details for the file python-ulid-1.1.0.tar.gz
.
File metadata
- Download URL: python-ulid-1.1.0.tar.gz
- Upload date:
- Size: 20.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5fb5e4a91db8ca93e8938a613360b3def299b60d41f847279a8c39c9b2e9c65e |
|
MD5 | 2d748e851309ccdcc05fd00f1b692682 |
|
BLAKE2b-256 | e88b0580d8ee0a73a3f3869488856737c429cbaa08b63c3506275f383c4771a8 |
Provenance
File details
Details for the file python_ulid-1.1.0-py3-none-any.whl
.
File metadata
- Download URL: python_ulid-1.1.0-py3-none-any.whl
- Upload date:
- Size: 9.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 88c952f6be133dbede19c907d72d26717d2691ec8421512b573144794d891e24 |
|
MD5 | 60022d542c3062551ffbc2787a875639 |
|
BLAKE2b-256 | 898ec30b08ee9b8dc9b4a10e782c2a7fd5de55388201ddebfe0f7ab99dfbb349 |