CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-tortoise-orm

Easy async ORM for Python, built with relations in mind

Overview
Eval results
Files

signals.mddocs/

Signals and Event Handling

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.

Capabilities

Signal Decorators

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
    """

Signal Types

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"

Usage Examples

Basic Signal Handler

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}")

Multiple Model Handler

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 Handler Parameters

Signal handlers receive the following parameters:

  • sender: The model class that triggered the signal
  • instance: The model instance being saved/deleted
  • created: (post_save only) Boolean indicating if instance was created
  • kwargs: Additional keyword arguments

Signal Execution

  • pre_save: Called before save() method execution
  • post_save: Called after successful save() method execution
  • pre_delete: Called before delete() method execution
  • post_delete: Called after successful delete() method execution

Signals 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

docs

database.md

exceptions.md

functions.md

index.md

integration.md

models.md

querying.md

signals.md

transactions.md

validators.md

tile.json