121 lines
3.6 KiB
Python
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}")
|