fix: Handle date conversion for string dates in data transformer
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 <noreply@anthropic.com>
This commit is contained in:
@@ -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 = []
|
||||
|
||||
Reference in New Issue
Block a user