python-ulid

ULID implementation for Python

Popularity
3.4
Stable
Activity
7.0
Declining
540
2
27

Description

This is a port of the original JavaScript ULID implementation to Python.

A ULID is a universally unique lexicographically sortable identifier. It is

Programming language: Python
License: MIT License
Latest version: v1.1.0

python-ulid alternatives and similar packages

Based on the "Random Generator" category.
Alternatively, view python-ulid alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of python-ulid or a related project?

Add another 'Random Generator' Package

README

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 and from_hex.
  • The named constructor ULID.new has been removed. Use one of the specifc named constructors instead. For a new ULID 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 and ULID.int methods have been removed in favour of the more Pythonic special dunder-methods. Use str(ulid) and int(ulid) instead.
  • Added the property ULID.hex that returns a hex representation of the ULID.
 >>> 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%.

Do not miss the trending, packages, news and articles with our weekly report.

Awesome Python is part of the LibHunt network. Terms. Privacy Policy.

(CC)
BY-SA
We recommend Spin The Wheel Of Names for a cryptographically secure random name picker.

AltStyle によって変換されたページ (->オリジナル) /