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 = []