Pydantic Models for Redis
Project description
Pydantic Models for Redis
Typed Redis provides strongly typed, Pydantic-based models for Redis with built-in validation and serialization.
It offers an async, ORM-like API for creating, retrieving, updating, and deleting data stored in Redis.
Installation
Install with pip
pip install typed_redis
Features
- Add a schema to Redis models with validation and serialization
- Async support
- ORM-like syntax
Example
from typing import Annotated
from typed_redis import Store, RedisPrimaryKey
from redis.asyncio import Redis
redis = Redis(...)
class User(Store(redis), model_name="user"):
"""User model."""
id: Annotated[int, RedisPrimaryKey]
name: str
user = User(id=1, name="Charlie")
await user.create() # Store user object in Redis
# Later:
user = await User.get(1) # Look up by primary key value
print(user.name) # "Charlie"
Documentation
Create Store
The Store function takes in your Redis instance and returns back a base class with the ORM operations.
Create a Store:
store.py
from redis.asyncio import Redis
from typed_redis import Store as _Store
redis = Redis(...)
Store = _Store(redis)
Create Model
Using your Store object created earlier, inherit from it and set a model_name class argument to prefix your Redis keys for this model.
Annotate one field as the primary key using RedisPrimaryKey. This field value will be used as the value for the Redis key.
Note: The Redis key is derived using the model name and field value.
user.py
from .store import Store
class User(Store, model_name="user"):
"""User model."""
id: Annotated[int, RedisPrimaryKey]
name: str
Use Your Model
Now you can use your model:
from .user import User
# Get existing user by primary key value
user = await User.get(1)
# Create new user (idempotent)
new_user = User(id=2, name="Bob")
await new_user() # Same as calling await user.create(...)
# Update user:
await new_user.update(name="Bob Smith")
Supported Operations
| Operation | Method | Example | Notes |
|---|---|---|---|
| Create | await instance.create(**kwargs) or await instance(**kwargs) |
await user.create(ex=60) or await user(ex=60) |
Serializes with model_dump_json() and stores in Redis. Optional kwargs are passed to Redis. |
| Update | await instance.update(**changes) |
await user.update(name="Charlie Brown") |
Validates via Pydantic then persists to Redis. |
| Get | await Model.get(primary_key) |
user = await User.get(1) |
Key is derived as <model_name>:<pk>. Parses JSON using model_validate_json(...) and returns the model. |
| Delete | await instance.delete() |
await user.delete() |
Removes the model from Redis. No further operations are allowed after this is called. |
Notes
- Annotate exactly one field with
RedisPrimaryKey. - Bind a Redis client via
Store(redis_client)and inherit from it; otherwise, operations raise aRuntimeError. - Set the model name using the
model_nameclass argument, e.g.,class User(Store, model_name="user"):. This determines the Redis key prefix.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file typed_redis-0.0.6.tar.gz.
File metadata
- Download URL: typed_redis-0.0.6.tar.gz
- Upload date:
- Size: 4.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82c6a0ee7bbeb9a880f7e793fa3358a6076bc4c679127a7cbe3483ccca816b8b
|
|
| MD5 |
5b38b6cf8d2562cb298b49eebf381160
|
|
| BLAKE2b-256 |
d80ff9ff6a81d7c8cda3dbb9812c134a752c42cefc78e8dee1d87247ddbddcaa
|
Provenance
The following attestation bundles were made for typed_redis-0.0.6.tar.gz:
Publisher:
publish-to-pypi.yml on krystal-compute/typed-redis
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
typed_redis-0.0.6.tar.gz -
Subject digest:
82c6a0ee7bbeb9a880f7e793fa3358a6076bc4c679127a7cbe3483ccca816b8b - Sigstore transparency entry: 375001074
- Sigstore integration time:
-
Permalink:
krystal-compute/typed-redis@033b5311c46e676f126cb490aa0bf52157209c70 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/krystal-compute
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@033b5311c46e676f126cb490aa0bf52157209c70 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file typed_redis-0.0.6-py3-none-any.whl.
File metadata
- Download URL: typed_redis-0.0.6-py3-none-any.whl
- Upload date:
- Size: 5.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
43e943ac7d82ebd0056821edc372baf0101e585484817ecd917daef05881499f
|
|
| MD5 |
f5eda91c68fc774d2f3fe3ef8df35449
|
|
| BLAKE2b-256 |
dc5a97476875435c21bca6c3ba5096ff8e69a2b385d8cb5dcd06e7ea6000d591
|
Provenance
The following attestation bundles were made for typed_redis-0.0.6-py3-none-any.whl:
Publisher:
publish-to-pypi.yml on krystal-compute/typed-redis
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
typed_redis-0.0.6-py3-none-any.whl -
Subject digest:
43e943ac7d82ebd0056821edc372baf0101e585484817ecd917daef05881499f - Sigstore transparency entry: 375001112
- Sigstore integration time:
-
Permalink:
krystal-compute/typed-redis@033b5311c46e676f126cb490aa0bf52157209c70 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/krystal-compute
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@033b5311c46e676f126cb490aa0bf52157209c70 -
Trigger Event:
workflow_dispatch
-
Statement type: