Files
blechreiz-website/eventplanner_gcal/signals.py
2026-04-09 16:26:17 +02:00

121 lines
3.6 KiB
Python

"""
Django signal handlers for Google Calendar synchronization.
These handlers are currently disabled (early return) but can be enabled
to automatically sync events with Google Calendar when they are created,
updated, or deleted.
"""
import logging
from django.contrib.auth.models import User
from django.db.models.signals import post_save, pre_delete
from django.dispatch import receiver
from eventplanner.models import Event, EventParticipation
from .google_sync import (
create_gcal_event_request,
delete_gcal_event_request,
get_service_object,
on_gcal_event_created,
update_gcal_event_request,
)
logger = logging.getLogger(__name__)
# @receiver(post_save, sender=User)
# def user_changed(**kwargs):
# """Sync with Google when user information changes."""
# logger.info("Synchronizing with google - user information changed")
# sync_from_local_to_google(get_service_object())
@receiver(post_save, sender=Event)
def event_post_save_handler(sender, instance, created, **kwargs):
"""
Handle Event post_save signal.
Creates or updates the corresponding Google Calendar event.
Currently disabled - remove the early return to enable.
"""
# Disabled - remove this return statement to enable auto-sync
#return
event = instance
service = get_service_object()
if service is None:
logger.warning("No Google Calendar service available")
return
try:
if created:
logger.info(f"Creating GCal event for Event {event.id}")
request = create_gcal_event_request(service, event)
response = request.execute()
on_gcal_event_created(None, response, None)
else:
logger.info(f"Updating GCal event for Event {event.id}")
request = update_gcal_event_request(service, event)
request.execute()
except Exception as e:
logger.error(f"Error syncing event {event.id} to GCal: {e}")
@receiver(pre_delete, sender=Event)
def event_pre_delete_handler(sender, instance, **kwargs):
"""
Handle Event pre_delete signal.
Deletes the corresponding Google Calendar event.
Currently disabled - remove the early return to enable.
"""
# Disabled - remove this return statement to enable auto-sync
#return
event = instance
service = get_service_object()
if service is None:
logger.warning("No Google Calendar service available")
return
try:
logger.info(f"Deleting GCal event for Event {event.id}")
request = delete_gcal_event_request(service, event)
if request:
request.execute()
except Exception as e:
logger.error(f"Error deleting GCal event for Event {event.id}: {e}")
@receiver(post_save, sender=EventParticipation)
def participation_post_save_handler(sender, instance, **kwargs):
"""
Handle EventParticipation post_save signal.
Updates the Google Calendar event when participation changes.
Currently disabled - remove the early return to enable.
"""
# Disabled - remove this return statement to enable auto-sync
#return
participation = instance
service = get_service_object()
if service is None:
logger.warning("No Google Calendar service available")
return
try:
logger.info(
f"Participation changed for Event {participation.event.id} "
f"by User {participation.user.username}"
)
request = update_gcal_event_request(service, participation.event)
request.execute()
except Exception as e:
logger.error(f"Error updating GCal event for participation change: {e}")