From 717985763c665d30b48eab9d418f49a067b7c47e Mon Sep 17 00:00:00 2001 From: Peter Bieringer Date: Fri, 10 Apr 2026 07:46:40 +0200 Subject: [PATCH] hook/email: add support for date-only DTSTART/DTEND --- radicale/hook/email/__init__.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/radicale/hook/email/__init__.py b/radicale/hook/email/__init__.py index aaf53a98..d46f0e9b 100644 --- a/radicale/hook/email/__init__.py +++ b/radicale/hook/email/__init__.py @@ -21,13 +21,13 @@ import json import re import smtplib import ssl -from datetime import datetime, timedelta +from datetime import date, datetime, timedelta from email.encoders import encode_base64 from email.mime.base import MIMEBase from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.utils import formatdate -from typing import Any, Dict, List, Optional, Sequence, Tuple +from typing import Any, Dict, List, Optional, Sequence, Tuple, Union import vobject @@ -991,9 +991,14 @@ class Hook(BaseHook): email_event_end_time = email_event_event.datetime_end # type: ignore # Skip notification if the event end time is more than 1 minute in the past. if email_event_end_time and email_event_end_time.time: - event_end = email_event_end_time.time # type: ignore - now = datetime.now( - event_end.tzinfo) if event_end.tzinfo else datetime.now() # Handle timezone-aware datetime + event_end = email_event_end_time.time + now: Union[datetime, date] + if hasattr(event_end, "tzinfo"): + now = datetime.now( + event_end.tzinfo) if event_end.tzinfo else datetime.now() # Handle timezone-aware datetime + else: + now = date.today() + logger.trace("event_end=%r now=%r", event_end, now) if event_end < (now - timedelta(minutes=1)): logger.warning("Event end time is in the past, skipping notification for event: %s", email_event_event.uid)