diff --git a/surfsense_backend/app/tasks/connector_indexers/base.py b/surfsense_backend/app/tasks/connector_indexers/base.py index 311fda996..b801b67d6 100644 --- a/surfsense_backend/app/tasks/connector_indexers/base.py +++ b/surfsense_backend/app/tasks/connector_indexers/base.py @@ -28,6 +28,34 @@ def get_current_timestamp() -> datetime: return datetime.now(UTC) +def parse_date_flexible(date_str: str) -> datetime: + """ + Parse date from multiple common formats. + + Args: + date_str: Date string to parse + + Returns: + Parsed datetime object + + Raises: + ValueError: If unable to parse the date string + """ + formats = ["%Y-%m-%d", "%Y-%m-%dT%H:%M:%S"] + + for fmt in formats: + try: + return datetime.strptime(date_str.rstrip("Z"), fmt) + except ValueError: + continue + + # Try ISO format as fallback + try: + return datetime.fromisoformat(date_str.replace("Z", "+00:00")) + except ValueError: + raise ValueError(f"Unable to parse date: {date_str}") + + async def check_duplicate_document_by_hash( session: AsyncSession, content_hash: str ) -> Document | None: @@ -168,7 +196,13 @@ def calculate_date_range( "adjusting end date to next day to ensure valid date range" ) # Parse end_date and add 1 day - end_dt = datetime.strptime(end_date_str, "%Y-%m-%d") + try: + end_dt = parse_date_flexible(end_date_str) + except ValueError: + logger.warning( + f"Could not parse end_date '{end_date_str}', using current date" + ) + end_dt = datetime.now() end_dt = end_dt + timedelta(days=1) end_date_str = end_dt.strftime("%Y-%m-%d") logger.info(f"Adjusted end date to {end_date_str}") diff --git a/surfsense_backend/app/tasks/connector_indexers/google_calendar_indexer.py b/surfsense_backend/app/tasks/connector_indexers/google_calendar_indexer.py index 1d8ea32f2..3e1a81356 100644 --- a/surfsense_backend/app/tasks/connector_indexers/google_calendar_indexer.py +++ b/surfsense_backend/app/tasks/connector_indexers/google_calendar_indexer.py @@ -27,6 +27,7 @@ from .base import ( get_connector_by_id, get_current_timestamp, logger, + parse_date_flexible, update_connector_last_indexed, ) @@ -226,7 +227,13 @@ async def index_google_calendar_events( "adjusting end date to next day to ensure valid date range" ) # Parse end_date and add 1 day - end_dt = datetime.strptime(end_date_str, "%Y-%m-%d") + try: + end_dt = parse_date_flexible(end_date_str) + except ValueError: + logger.warning( + f"Could not parse end_date '{end_date_str}', using current date" + ) + end_dt = datetime.now() end_dt = end_dt + timedelta(days=1) end_date_str = end_dt.strftime("%Y-%m-%d") logger.info(f"Adjusted end date to {end_date_str}")