mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-22 10:31:09 -05:00
Extend state machine module with callback infrastructure including: - Pre/post/error transition callbacks with registry - Signal-based transition notifications - Callback configuration and monitoring support - Helper functions for callback registration - Improved park ride count updates with FSM integration
172 lines
5.4 KiB
Python
172 lines
5.4 KiB
Python
import logging
|
|
|
|
from django.apps import AppConfig
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class ModerationConfig(AppConfig):
|
|
default_auto_field = "django.db.models.BigAutoField"
|
|
name = "apps.moderation"
|
|
verbose_name = "Content Moderation"
|
|
|
|
def ready(self):
|
|
"""Initialize state machines and callbacks for all moderation models."""
|
|
self._apply_state_machines()
|
|
self._register_callbacks()
|
|
self._register_signal_handlers()
|
|
|
|
def _apply_state_machines(self):
|
|
"""Apply FSM to all moderation models."""
|
|
from apps.core.state_machine import apply_state_machine
|
|
from .models import (
|
|
EditSubmission,
|
|
ModerationReport,
|
|
ModerationQueue,
|
|
BulkOperation,
|
|
PhotoSubmission,
|
|
)
|
|
|
|
# Apply FSM to all models with their respective choice groups
|
|
apply_state_machine(
|
|
EditSubmission,
|
|
field_name="status",
|
|
choice_group="edit_submission_statuses",
|
|
domain="moderation",
|
|
)
|
|
apply_state_machine(
|
|
ModerationReport,
|
|
field_name="status",
|
|
choice_group="moderation_report_statuses",
|
|
domain="moderation",
|
|
)
|
|
apply_state_machine(
|
|
ModerationQueue,
|
|
field_name="status",
|
|
choice_group="moderation_queue_statuses",
|
|
domain="moderation",
|
|
)
|
|
apply_state_machine(
|
|
BulkOperation,
|
|
field_name="status",
|
|
choice_group="bulk_operation_statuses",
|
|
domain="moderation",
|
|
)
|
|
apply_state_machine(
|
|
PhotoSubmission,
|
|
field_name="status",
|
|
choice_group="photo_submission_statuses",
|
|
domain="moderation",
|
|
)
|
|
|
|
def _register_callbacks(self):
|
|
"""Register FSM transition callbacks for moderation models."""
|
|
from apps.core.state_machine.registry import register_callback
|
|
from apps.core.state_machine.callbacks.notifications import (
|
|
SubmissionApprovedNotification,
|
|
SubmissionRejectedNotification,
|
|
SubmissionEscalatedNotification,
|
|
ModerationNotificationCallback,
|
|
)
|
|
from apps.core.state_machine.callbacks.cache import (
|
|
ModerationCacheInvalidation,
|
|
)
|
|
from .models import (
|
|
EditSubmission,
|
|
ModerationReport,
|
|
ModerationQueue,
|
|
BulkOperation,
|
|
PhotoSubmission,
|
|
)
|
|
|
|
# EditSubmission callbacks
|
|
register_callback(
|
|
EditSubmission, 'status', 'PENDING', 'APPROVED',
|
|
SubmissionApprovedNotification()
|
|
)
|
|
register_callback(
|
|
EditSubmission, 'status', 'PENDING', 'APPROVED',
|
|
ModerationCacheInvalidation()
|
|
)
|
|
register_callback(
|
|
EditSubmission, 'status', 'PENDING', 'REJECTED',
|
|
SubmissionRejectedNotification()
|
|
)
|
|
register_callback(
|
|
EditSubmission, 'status', 'PENDING', 'REJECTED',
|
|
ModerationCacheInvalidation()
|
|
)
|
|
register_callback(
|
|
EditSubmission, 'status', 'PENDING', 'ESCALATED',
|
|
SubmissionEscalatedNotification()
|
|
)
|
|
register_callback(
|
|
EditSubmission, 'status', 'PENDING', 'ESCALATED',
|
|
ModerationCacheInvalidation()
|
|
)
|
|
|
|
# PhotoSubmission callbacks
|
|
register_callback(
|
|
PhotoSubmission, 'status', 'PENDING', 'APPROVED',
|
|
SubmissionApprovedNotification()
|
|
)
|
|
register_callback(
|
|
PhotoSubmission, 'status', 'PENDING', 'APPROVED',
|
|
ModerationCacheInvalidation()
|
|
)
|
|
register_callback(
|
|
PhotoSubmission, 'status', 'PENDING', 'REJECTED',
|
|
SubmissionRejectedNotification()
|
|
)
|
|
register_callback(
|
|
PhotoSubmission, 'status', 'PENDING', 'REJECTED',
|
|
ModerationCacheInvalidation()
|
|
)
|
|
register_callback(
|
|
PhotoSubmission, 'status', 'PENDING', 'ESCALATED',
|
|
SubmissionEscalatedNotification()
|
|
)
|
|
|
|
# ModerationReport callbacks
|
|
register_callback(
|
|
ModerationReport, 'status', '*', '*',
|
|
ModerationNotificationCallback()
|
|
)
|
|
register_callback(
|
|
ModerationReport, 'status', '*', '*',
|
|
ModerationCacheInvalidation()
|
|
)
|
|
|
|
# ModerationQueue callbacks
|
|
register_callback(
|
|
ModerationQueue, 'status', '*', '*',
|
|
ModerationNotificationCallback()
|
|
)
|
|
register_callback(
|
|
ModerationQueue, 'status', '*', '*',
|
|
ModerationCacheInvalidation()
|
|
)
|
|
|
|
# BulkOperation callbacks
|
|
register_callback(
|
|
BulkOperation, 'status', '*', '*',
|
|
ModerationNotificationCallback()
|
|
)
|
|
register_callback(
|
|
BulkOperation, 'status', '*', '*',
|
|
ModerationCacheInvalidation()
|
|
)
|
|
|
|
logger.debug("Registered moderation transition callbacks")
|
|
|
|
def _register_signal_handlers(self):
|
|
"""Register signal handlers for moderation transitions."""
|
|
from .signals import register_moderation_signal_handlers
|
|
|
|
try:
|
|
register_moderation_signal_handlers()
|
|
logger.debug("Registered moderation signal handlers")
|
|
except Exception as e:
|
|
logger.warning(f"Could not register moderation signal handlers: {e}")
|