Skip to main content

Base64 encoded uuid v4 slugs

Project description

https://tools.taskcluster.net/lib/assets/taskcluster-120.png

Build Status Coverage Status License pypi Version Downloads

A python module for generating v4 UUIDs and encoding them into 22 character URL-safe base64 slug representation (see RFC 4648 sec. 5).

Slugs are url-safe base64 encoded v4 uuids, stripped of base64 = padding.

There are two methods for generating slugs - slugid.v4() and slugid.nice().

The slugid.v4() method returns a slug from a randomly generated v4 uuid. The slugid.nice() method returns a v4 slug which conforms to a set of “nice” properties. At the moment the only “nice” property is that the slug starts with [A-Za-f], which in turn implies that the first (most significant) but of its associated uuid is set to 0.

The purpose of the slugid.nice() method is to support having slugids which can be used in more contexts safely. Regular slugids can safely be used in urls, and for example in AMQP routing keys. However, slugs beginning with - may cause problems when used as command line parameters.

In contrast, slugids generated by the slugid.nice() method can safely be used as command line parameters. This comes at a cost to entropy (121 bits vs 122 bits for regular v4 slugs).

Slug consumers should consider carefully which of these two slug generation methods to call. Is it more important to have maximum entropy, or to have slugids that do not need special treatment when used as command line parameters? This is especially important if you are providing a service which supplies slugs to unexpecting tool developers downstream, who may not realise the risks of using your regular v4 slugs as command line parameters, especially since this would arise only as an intermittent issue (one time in 64).

Generated slugs take the form [A-Za-z0-9_-]{22}, or more precisely:

  • slugid.v4() slugs conform to [A-Za-z0-9_-]{8}[Q-T][A-Za-z0-9_-][CGKOSWaeimquy26-][A-Za-z0-9_-]{10}[AQgw]

  • slugid.nice() slugs conform to [A-Za-f][A-Za-z0-9_-]{7}[Q-T][A-Za-z0-9_-][CGKOSWaeimquy26-][A-Za-z0-9_-]{10}[AQgw]

RFC 4122 defines the setting of 6 bits of the v4 UUID which determines these regular expressions.

import slugid

# Generate "nice" URL-safe base64 encoded UUID version 4 (random)
slug = slugid.nice()  # a8_YezW8T7e1jLxG7evy-A

Encode / Decode

import slugid

# Generate URL-safe base64 encoded UUID version 4 (random)
slug = slugid.v4()

# Get UUID on the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
uuid = slugid.decode(slug)

# Compress to slug again
assert(slug == slugid.encode(uuid))

License

The slugid library is released on the MIT license, see the LICENSE for complete license.

Publishing

To republish this library to pypi.python.org, update the version number in slugid/__init__.py, commit it, push to github, and then run:

python setup.py sdist upload --sign

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

slugid-1.0.3.tar.gz (4.3 kB view details)

Uploaded Source

File details

Details for the file slugid-1.0.3.tar.gz.

File metadata

  • Download URL: slugid-1.0.3.tar.gz
  • Upload date:
  • Size: 4.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for slugid-1.0.3.tar.gz
Algorithm Hash digest
SHA256 77d431d820ef48c7b59aaf07b510b32ab94959c87775a58795e1e81832b54a49
MD5 0e0d7a863bde2d8bd913862f4480a987
BLAKE2b-256 c9e28e957ca4f5bbb96f44da4cb28ccf1d9ccdfc97dc08bf3148e7e6bc692855

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page