Skip to main content

A package for managing Django model signals.

This project has been archived.

The maintainers of this project have marked this project as archived. No new releases are expected.

Project description

Django Signal Manager Framework

This package provides a base class, SignalManager, for simplifying the managing of Django model signals. It streamlines the process of responding to pre_save, post_save, pre_delete, and post_delete signals by categorizing them into more specific methods.

Installation

You can install this framework using pip:

pip install django-signal-manager

Usage

Create a subclass of SignalManager:

import logging
from django.db.models import Model
from signal_manager import SignalManager
from your_app.models import MyModel

logger = logging.getLogger(__name__)

class MyModelSignalManager(SignalManager):
    def on_pre_create(self, instance: Model, **kwargs: Any) -> None:
        logger.info(f"Pre-create: {instance}")
        # Add your logic here

    def on_post_create(self, instance: Model, **kwargs: Any) -> None:
        logger.info(f"Post-create: {instance}")
        # Add your logic here

    def on_pre_update(self, instance: Model, **kwargs: Any) -> None:
        logger.info(f"Pre-update: {instance}")
        # Add your logic here

    def on_post_update(self, instance: Model, **kwargs: Any) -> None:
        logger.info(f"Post-update: {instance}")
        # Add your logic here

    def on_pre_delete(self, instance: Model, **kwargs: Any) -> None:
        logger.info(f"Pre-delete: {instance}")
        # Add your logic here

    def on_post_delete(self, instance: Model, **kwargs: Any) -> None:
        logger.info(f"Post-delete: {instance}")
        # Add your logic here

Connect the signal manager to your model:

from django.db.models.signals import pre_save, post_save, pre_delete, post_delete
from django.dispatch import receiver
from your_app.models import MyModel
from .signal_managers import MyModelSignalManager

manager = MyModelSignalManager()

@receiver(pre_save, sender=MyModel)
@receiver(post_save, sender=MyModel)
@receiver(pre_delete, sender=MyModel)
@receiver(post_delete, sender=MyModel)
def my_model_signals(sender, instance, **kwargs):
    manager.run(sender, instance, **kwargs)

Class Overview

SignalManager

  • run(sender: type, instance: Model, **kwargs: Any) -> None:
    • Determines the signal type and dispatches to the appropriate manager method.
  • on_pre_create(instance: Model, **kwargs: Any) -> None:
    • manager for pre_save when a new instance is being created.
  • on_post_create(instance: Model, **kwargs: Any) -> None:
    • manager for post_save when a new instance is created.
  • on_pre_update(instance: Model, **kwargs: Any) -> None:
    • manager for pre_save when an existing instance is being updated.
  • on_post_update(instance: Model, **kwargs: Any) -> None:
    • manager for post_save when an existing instance is updated.
  • on_pre_delete(instance: Model, **kwargs: Any) -> None:
    • manager for pre_delete.
  • on_post_delete(instance: Model, **kwargs: Any) -> None:
    • manager for post_delete.

Benefits

  • Organization: Separates signal managing logic into distinct methods, improving code readability and maintainability.
  • Clarity: Makes it clear which signal is being managed (create vs. update).
  • Reusability: The base class can be extended for different models, reducing code duplication.
  • Logging: Includes basic logging for unknown or missing signals.

Contributing

Contributions are welcome! Please feel free to submit pull requests or open issues.

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

django_signal_manager-0.1.6.tar.gz (4.6 kB view details)

Uploaded Source

Built Distribution

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

django_signal_manager-0.1.6-py3-none-any.whl (4.5 kB view details)

Uploaded Python 3

File details

Details for the file django_signal_manager-0.1.6.tar.gz.

File metadata

  • Download URL: django_signal_manager-0.1.6.tar.gz
  • Upload date:
  • Size: 4.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for django_signal_manager-0.1.6.tar.gz
Algorithm Hash digest
SHA256 4b5ccb642d84bbb0919c7e3127de8e44b644f6e0abdb5fdb55f3a574f24e85fd
MD5 750df384f56b26d28ad08c2355df926a
BLAKE2b-256 edc0951ccc4e7436f27c6fe945ecab29b32bb04af8f3edfafaced03943ff1a2c

See more details on using hashes here.

File details

Details for the file django_signal_manager-0.1.6-py3-none-any.whl.

File metadata

File hashes

Hashes for django_signal_manager-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 aa7d25da372f602264bea4f68327ec136990e51cbdea86ae67952181e0eff5da
MD5 b58f4d392afaa75c303024c96d4f807f
BLAKE2b-256 c2ada6276b418544fd0848ed82807623722def72b245eed420e64504fdd5918d

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