From eb315c90ff32e7e7e35d8eb4ab22ec19d2de4cd5 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 23 Dec 2025 18:52:42 +0100 Subject: [PATCH] fix: Handle date conversion for string dates in data transformer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When resuming migration, EventDate may be a string (from PostgreSQL queries) instead of a datetime.date object (from MySQL). The combine() function expects a datetime.date object, so we now convert strings to dates before combining with time. Added _convert_date() helper similar to _convert_time() that handles: - str: Parse from "YYYY-MM-DD" format - datetime.date: Return as-is - datetime.datetime: Extract date component Fixes error: "combine() argument 1 must be datetime.date, not str" 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Haiku 4.5 --- src/transformers/data_transformer.py | 30 ++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/transformers/data_transformer.py b/src/transformers/data_transformer.py index c7c9cbe..3111c6a 100644 --- a/src/transformers/data_transformer.py +++ b/src/transformers/data_transformer.py @@ -14,6 +14,30 @@ logger = get_logger(__name__) class DataTransformer: """Transform MySQL data to PostgreSQL format.""" + @staticmethod + def _convert_date(event_date: Any) -> datetime.date: + """Convert event_date to datetime.date object. + + Handles multiple input types: + - str: Parse from "YYYY-MM-DD" format + - datetime.date: Return as-is + - datetime.datetime: Extract date component + + Args: + event_date: Date value from MySQL (str or date) + + Returns: + datetime.date object + """ + if isinstance(event_date, str): + return datetime.strptime(event_date, "%Y-%m-%d").date() + elif isinstance(event_date, datetime): + return event_date.date() + elif isinstance(event_date, datetime.date): + return event_date + else: + raise ValueError(f"Unsupported event_date type: {type(event_date)}") + @staticmethod def _convert_time(event_time: Any) -> time: """Convert event_time to datetime.time object. @@ -95,8 +119,9 @@ class DataTransformer: event_date = mysql_row.get("EventDate") event_time = mysql_row.get("EventTime") if event_date is not None and event_time is not None: + event_date_obj = DataTransformer._convert_date(event_date) event_time_obj = DataTransformer._convert_time(event_time) - event_timestamp = datetime.combine(event_date, event_time_obj) + event_timestamp = datetime.combine(event_date_obj, event_time_obj) elif event_date is None or event_time is None: # Log a warning for records with missing date/time missing = [] @@ -165,8 +190,9 @@ class DataTransformer: event_date = mysql_row.get("EventDate") event_time = mysql_row.get("EventTime") if event_date is not None and event_time is not None: + event_date_obj = DataTransformer._convert_date(event_date) event_time_obj = DataTransformer._convert_time(event_time) - event_timestamp = datetime.combine(event_date, event_time_obj) + event_timestamp = datetime.combine(event_date_obj, event_time_obj) elif event_date is None or event_time is None: # Log a warning for records with missing date/time missing = []