Skip to main content

HashID based ID Toolkit.

Project description


.. image::
:alt: Build Status

.. image::
:alt: Github Repo

.. image::
:alt: Pypi Version

.. image::
:alt: Pypi License

.. image::
:alt: Pypi Wheel

.. image::
:alt: Pypi Versions


Joe Black | | `github <>`_


HashID tools/components for async ID generation. Example: ``k62K3zOn4Y5Kkxmg7pWOAqPyd8NVjrmX`` Designed for async data model ID generation for persisting objects to a graph DB such as ZODB. ZCA means it's simple to customize and override without editing any code.

Comes with

* Customizable Generator/encoder/decoder utility
* Type class (experimental)
* Persistent, 2x BTree-powered IntID/Ref Manager
* Custom fields for ``zope.schema`` and ``attrs``\ , with default factory functions, validation, etc.


* Random seed integer is just under 64bits.
* Derive seed integer at any time by casting type as an int.


.. code-block:: shell

pip3 install hashidtools



.. code-block:: python

>>> from hashidtools import HashIDGenerator
>>> gen = HashIDGenerator(salt='my random salt', min_length=32)

>>> gen.seed()
>>> gen
HashIDGenerator(salt='my random salt', min_length=32)
>>> gen.decode(

HashID Type

.. code-block:: python

>>> from hashidtools import HashID
... HashID()
>>> HashID('8nKqkABjlYB5A7430M917zAJao1Me4mN')

Hashid IntID Indexing & Event System

.. code-block:: python

>>> intid = HashIDManager()
... intid
... intid.generateId()

>>> from zc.intid.interfaces import AddedEvent, RemovedEvent
... import zope.event.classhandler
>>> @zope.event.classhandler.handler(AddedEvent)
... def handler(event):
... print(, event.object, event.idmanager)
... @zope.event.classhandler.handler(RemovedEvent)
... def handler(event):
... print(, event.object, event.idmanager)

>>> import attr
... Test = attr.make_class(
... 'Test', {'id': fields.hashid(init=False),
... 'name': attr.ib(default='default-name')})

>>> t = Test()
... intid.register(t)

... id = intid.getId(t)
... intid.getObject(id)
Test(id='...', name='default-name')

>>> intid.unregister(t)

Retrieving the utilities through the ZCA Registry

.. code-block:: python

>>> from zope.component import queryUtility
... from hashidtools.interfaces import IHashIDGenerator, IIntIds
... queryUtility(IHashIDGenerator)
HashIDGenerator(salt='$2a$12$AAAAAAAAAAAAAACgpDEPGQ', min_length=32)

>>> queryUtility(IIntIds)

Extending this Package

This package uses Zope Component Architecture for the ultimate in pluggable extendibility.

Quick example of customizing the HashID Generator:

.. code-block:: python

# Note: you can also create your own Generator class that implements the
# IHashIDGenerator interface and register it.
from zope.component import provideUtility

from hashidtools import HashIDGenerator
from hashidtools.interfaces import IHashIDGenerator

generator = HashIDGenerator(**custom_options)
provideUtility(generator, IHashIDGenerator)

Note: the following would preferrably be done using your project's ZCML directives.



Project details

Download files

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

Files for hashidtools, version 1.0.2
Filename, size File type Python version Upload date Hashes
Filename, size hashidtools-1.0.2-py2.py3-none-any.whl (11.4 kB) File type Wheel Python version py2.py3 Upload date Hashes View
Filename, size hashidtools-1.0.2.tar.gz (9.9 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page