- Notifications
You must be signed in to change notification settings - Fork24
ULID implementation for Python
License
mdomke/python-ulid
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
AULID
is auniversally 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 originalspecification.
Usepip
to install the library
$ pip install python-ulid
to include Pydantic support install the optional dependency like so
$ pip install python-ulid[pydantic]
Create a newULID
object from the current timestamp
>>>from ulidimportULID>>> ULID()ULID(01E75HZVW36EAZKMF1W7XNMSB4)
or use one of the named constructors
>>>import time, datetime>>>ULID.from_timestamp(time.time())ULID(01E75J1MKKWMGG0N5MBHFMRC84)>>>ULID.from_datetime(datetime.datetime.now())ULID(01E75J2XBK390V2XRH44EHC10X)
There are several options for encoding theULID
object(e.g. string, hex, int, bytes, UUID):
>>>str(ulid)'01BTGNYV6HRNK8K8VKZASZCFPE'>>> ulid.hex'015ea15f6cd1c56689a373fab3f63ece'>>>int(ulid)1820576928786795198723644692628913870>>>bytes(ulid)b'\x01^\xa1_l\xd1\xc5f\x89\xa3s\xfa\xb3\xf6>\xce'>>> ulid.to_uuid()UUID('015ea15f-6cd1-c566-89a3-73fab3f63ece')
It is also possible to directly access the timestamp component of aULID
,either in UNIX epoch or asdatetime.datetime
>>> ulid.timestamp1505945939.153>>> ulid.datetimedatetime.datetime(2017, 9, 20, 22, 18, 59, 153000, tzinfo=datetime.timezone.utc)
TheULID
class can be directly used for the popular data validation libraryPydantic like so
frompydanticimportBaseModelfromulidimportULIDclassModel(BaseModel):ulid:ULIDmodel=Model(ulid="DX89370400440532013000")# OKmodel=Model(ulid="not-a-ulid")# Raises ValidationError
The package comes with a CLI interface that can be invoked either by the script nameulid
or as python modulepython -m ulid
. The CLI allows you to generate, inspectand convert ULIDs, e.g.
$ ulid build01HASFKBN8SKZTSVVS03K5AMMS$ ulid build --from-datetime=2023-09-23T10:20:3001HB0J0F5GCKEXNSWVAD5PEAC1$ ulid show 01HASFKBN8SKZTSVVS03K5AMMSULID: 01HASFKBN8SKZTSVVS03K5AMMSHex: 018ab2f9aea8ccffacef7900e6555299Int: 2049395013039097460549394558635823769Timestamp: 1695219822.248Datetime: 2023-09-20 14:23:42.248000+00:00
There are several flags to select specific output formats for theshow
command, e.g.
$ ulid show --datetime 01HASFKBN8SKZTSVVS03K5AMMS2023-09-20 14:23:42.248000+00:00
The special character-
allows to read values fromstdin
so that they can be piped. E.g.
$echo 01HASFKBN8SKZTSVVS03K5AMMS| ulid show --uuid -018ab2f9-aea8-4cff-acef-7900e6555299$ date --iso-8601| python -m ulid build --from-datetime -01HAT9PVR02T3S13XB48S7GEHE
For a full overview of flags for thebuild
andshow
commands use the--help
option(e.g.ulid show --help
).
About
ULID implementation for Python
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors11
Uh oh!
There was an error while loading.Please reload this page.