Easy async ORM for Python, built with relations in mind
Model lifecycle event system that allows registering custom handlers for model save and delete operations. Signals provide hooks to execute custom logic before or after these operations.
Decorators for registering signal handlers on model lifecycle events.
from tortoise.signals import pre_save, post_save, pre_delete, post_delete
@pre_save(*senders):
"""
Register models pre_save signal handler.
Args:
*senders: Model classes to listen for
Returns:
Function decorator for signal handler
"""
@post_save(*senders):
"""
Register models post_save signal handler.
Args:
*senders: Model classes to listen for
Returns:
Function decorator for signal handler
"""
@pre_delete(*senders):
"""
Register models pre_delete signal handler.
Args:
*senders: Model classes to listen for
Returns:
Function decorator for signal handler
"""
@post_delete(*senders):
"""
Register models post_delete signal handler.
Args:
*senders: Model classes to listen for
Returns:
Function decorator for signal handler
"""from tortoise.signals import Signals
class Signals(Enum):
"""Enumeration of available signal types."""
pre_save = "pre_save"
post_save = "post_save"
pre_delete = "pre_delete"
post_delete = "post_delete"from tortoise.signals import pre_save, post_save
from myapp.models import User
@pre_save(User)
async def user_pre_save(sender, instance, **kwargs):
"""Called before user is saved."""
print(f"About to save user: {instance.name}")
@post_save(User)
async def user_post_save(sender, instance, created, **kwargs):
"""Called after user is saved."""
if created:
print(f"Created new user: {instance.name}")
else:
print(f"Updated user: {instance.name}")from tortoise.signals import post_delete
from myapp.models import User, Profile
@post_delete(User, Profile)
async def cleanup_after_delete(sender, instance, **kwargs):
"""Called after user or profile deletion."""
print(f"Deleted {sender.__name__}: {instance}")Signal handlers receive the following parameters:
save() method executionsave() method executiondelete() method executiondelete() method executionSignals are executed synchronously during the model operation and can affect the operation's outcome if they raise exceptions.
Install with Tessl CLI
npx tessl i tessl/pypi-tortoise-orm