Skip to main content

UUID-compatible Typed IDs with prefixes

Project description

UUID-compatible Typed IDs with prefixes

Documentation

typid is a python library that allows to create specific id types much like stripe uses them across their platform to distinguish different data models from their id already. typeid is compatible to the UUID library and as such can act as a drop-in replacement.

A type id has the following string representation:

user_nnv5rr3rfk3hgry6xrygr
└──┘ └───────────────────┘
type    uuid (base58)

How to use typeid

First generate the Types using generate(...), then use them like so:

from uuid_extensions import uuid7
from typeid import generate

typeids = generate("sk", "pk", "user", "apikey")

# Now they can be used with SkId, PkId, UserId, and ApikeyId
assert str(typeids.SkId(uuid7().hex)).startswith("sk_")
assert str(typeids.PkId(uuid7().hex)).startswith("pk_")
assert str(typeids.UserId(uuid7().hex)).startswith("user_")
assert str(typeids.ApikeyId(uuid7().hex)).startswith("apikey_")

# Obviously, loading a prefixed type id in the correct Type works just fine
assert (typeids.UserId("user_nnv5rr3rfk3hgry6xrygr").hex == "0664c4135ed83faabd4bc0dc33839c9f")

# Use custom suffixes, just in case you need them
other_ids.generate("admin", suffix="IdUseWithCare")
assert str(other_ids.AdminIdUseWithCare(uuid7().hex)).startswith("admin_")

SqlAlchemy Support

The library also allows to create classes specifically for the use with sqlalchemy.

Example

from typeid import generate

typeids = generate("user")

class User(Base):
    __tablename__ = "user"

    # use typeids.UserId in the Mapper[]
    id: Mapped[typeids.UserId] = mapped_column(
        # use typeids.UserId in the mapped_column!
        typeids.UserId, primary_key=True, default=uuid.uuid4
    )

    name: str = Column(String(128), unique=True)

user = User(name="John Doe")
(db,) = get_session()
db.add(user)
db.commit()
db.refresh(user)
print(type(user.id))
# <class 'typeid.UserId'>

print((user.id))
# user_qvnrsem3skqho2hgni2mfk

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

typeid-1.0.0.tar.gz (4.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

typeid-1.0.0-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file typeid-1.0.0.tar.gz.

File metadata

  • Download URL: typeid-1.0.0.tar.gz
  • Upload date:
  • Size: 4.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.5 Linux/6.10.6-arch1-1

File hashes

Hashes for typeid-1.0.0.tar.gz
Algorithm Hash digest
SHA256 f23b9def9805b3bcf4c23d2624060ee1d202db3c297896538b1d3012491cff89
MD5 bc3719d8d4a00813dd3cef98b9ab53f4
BLAKE2b-256 3167fca92b4902d9b6317486116845422a8024db0c112a2e0cf7cef18573e099

See more details on using hashes here.

File details

Details for the file typeid-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: typeid-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 5.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.5 Linux/6.10.6-arch1-1

File hashes

Hashes for typeid-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d99aa4cdd805c8d52cfb58cffff20ae45b6c6fc128316729a0de542feab2e893
MD5 d049f75c46142a18f76b51939d6b0bfb
BLAKE2b-256 503b02245193ebb8621b38bb715c5cdce72f76b35298f327a258b934ea4d398a

See more details on using hashes here.

Supported by

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