5858SUPABASE_DB_URL = os .getenv ("SUPABASE_DB_URL" )
5959
6060
61+ def parse_datetime (dt_str ):
62+ """Parse a datetime string to a timezone-aware datetime object."""
63+ dt = parser .parse (dt_str )
64+ if timezone .is_naive (dt ):
65+ dt = timezone .make_aware (dt )
66+ return dt
67+
68+
6169def is_duplicate_event (event_data ):
6270 """Check for duplicate events using title, occurrences, location, and description."""
6371
@@ -69,11 +77,13 @@ def is_duplicate_event(event_data):
6977 if not occurrences :
7078 return False
7179
72- target_start = occurrences [0 ].get ("start_utc" )
80+ target_start_str = occurrences [0 ].get ("start_utc" )
81+ target_start = parse_datetime (target_start_str )
7382 if not target_start :
7483 return False
7584
7685 try :
86+
7787 candidates = (
7888 EventDates .objects .select_related ("event" )
7989 .filter (dtstart_utc__date = target_start .date ())
@@ -266,16 +276,26 @@ def insert_event_to_db(event_data, ig_handle, source_url):
266276
267277 try :
268278 event = Events .objects .create (** create_kwargs )
269- event_dates = [
270- EventDates (
271- event = event ,
272- dtstart_utc = occ ["start_utc" ],
273- dtend_utc = occ .get ("end_utc" ),
274- duration = occ .get ("duration" ),
275- tz = occ .get ("tz" ),
279+ event_dates = []
280+
281+ for occ in occurrences :
282+ # Parse start_utc
283+ dtstart_utc = parse_datetime (occ .get ("start_utc" ))
284+ if not dtstart_utc :
285+ continue # Skip occurrences without start time
286+
287+ # Parse end_utc (can be empty string or None)
288+ dtend_utc = parse_datetime (occ .get ("end_utc" ))
289+
290+ event_dates .append (
291+ EventDates (
292+ event = event ,
293+ dtstart_utc = dtstart_utc ,
294+ dtend_utc = dtend_utc ,
295+ duration = occ .get ("duration" ) or None ,
296+ tz = occ .get ("tz" ) or None ,
297+ )
276298 )
277- for occ in occurrences
278- ]
279299
280300 EventDates .objects .bulk_create (event_dates )
281301 logger .debug (
0 commit comments