Universally Unique Lexicographically Sortable Identifier
What is this?
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.
$ pip install python-ulid
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)
>>> ulid.to_uuid() UUID('015ea15f-6cd1-c566-89a3-73fab3f63ece')
- Dropped support for Python 2. Only Python 3.6+ is supported.
- Added type annotations
- Added the named constructors
- The named constructor
ULID.newhas been removed. Use one of the specifc named constructors instead. For a new
ULIDcreated 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())
ULID.intmethods have been removed in favour of the more Pythonic special dunder-methods. Use
- Added the property
ULID.hexthat returns a hex representation of the
>>> ULID().hex '0171caa5459a8631a6894d072c8550a8'
- Equality checks and ordering now also work with
- The package now has no external dependencies.
- The test-coverage has been raised to 100%.
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Hashes for python_ulid-1.1.0-py3-none-any.whl