This repository was forked from Drive in late December 2025 and boostraped as a minimal demo of backend+caldav server+frontend integration. There is much left to do and to fix!
56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
"""
|
|
Declare and configure the signals for the calendars core application
|
|
"""
|
|
|
|
import logging
|
|
|
|
from django.conf import settings
|
|
from django.contrib.auth import get_user_model
|
|
from django.db.models.signals import post_save
|
|
from django.dispatch import receiver
|
|
|
|
from core.services.caldav_service import CalendarService
|
|
|
|
logger = logging.getLogger(__name__)
|
|
User = get_user_model()
|
|
|
|
|
|
@receiver(post_save, sender=User)
|
|
def provision_default_calendar(sender, instance, created, **kwargs):
|
|
"""
|
|
Auto-provision a default calendar when a new user is created.
|
|
"""
|
|
if not created:
|
|
return
|
|
|
|
# Check if user already has a default calendar
|
|
if instance.calendars.filter(is_default=True).exists():
|
|
return
|
|
|
|
# Skip calendar creation if DAViCal is not configured
|
|
if not getattr(settings, "DAVICAL_URL", None):
|
|
return
|
|
|
|
try:
|
|
service = CalendarService()
|
|
service.create_default_calendar(instance)
|
|
logger.info("Created default calendar for user %s", instance.email)
|
|
except Exception as e:
|
|
# In tests, DAViCal tables don't exist, so fail silently
|
|
# Check if it's a database error that suggests we're in tests
|
|
error_str = str(e).lower()
|
|
if "does not exist" in error_str or "relation" in error_str:
|
|
# Likely in test environment, fail silently
|
|
logger.debug(
|
|
"Skipped calendar creation for user %s (likely test environment): %s",
|
|
instance.email,
|
|
str(e),
|
|
)
|
|
else:
|
|
# Real error, log it
|
|
logger.error(
|
|
"Failed to create default calendar for user %s: %s",
|
|
instance.email,
|
|
str(e),
|
|
)
|