Skip to content

Commit 300127e

Browse files
committed
fix duration handling with clean_duration
1 parent 502d3de commit 300127e

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

backend/scraping/instagram_feed.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
from services.storage_service import upload_image_from_url
3636
from shared.constants.user_agents import USER_AGENTS
3737
from utils.embedding_utils import find_similar_events
38-
from utils.events_utils import clean_datetime
38+
from utils.events_utils import clean_datetime, clean_duration
3939

4040
MAX_POSTS = int(os.getenv("MAX_POSTS", "100"))
4141
MAX_CONSEC_OLD_POSTS = 10
@@ -127,7 +127,7 @@ def append_event_to_csv(
127127
dtend = dtend.replace(tzinfo=pytimezone.utc) if dtend else None
128128
dtstart_utc = clean_datetime(event_data.get("dtstart_utc"))
129129
dtend_utc = clean_datetime(event_data.get("dtend_utc"))
130-
duration = event_data.get("duration")
130+
duration = clean_duration(event_data.get("duration"))
131131
all_day = event_data.get("all_day")
132132
location = event_data.get("location", "")
133133
food = event_data.get("food", "")
@@ -215,7 +215,7 @@ def insert_event_to_db(event_data, ig_handle, source_url):
215215
dtend = dtend.replace(tzinfo=pytimezone.utc) if dtend else None
216216
dtstart_utc = clean_datetime(event_data.get("dtstart_utc"))
217217
dtend_utc = clean_datetime(event_data.get("dtend_utc"))
218-
duration = event_data.get("duration")
218+
duration = clean_duration(event_data.get("duration"))
219219
all_day = event_data.get("all_day")
220220
source_image_url = event_data.get("source_image_url") or ""
221221
description = event_data.get("description", "") or ""

backend/utils/events_utils.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
from dateutil import parser as dateutil_parser
2+
from datetime import timedelta
3+
import re
24

35

46
def clean_datetime(val):
@@ -10,6 +12,19 @@ def clean_datetime(val):
1012
return None
1113

1214

15+
def clean_duration(val):
16+
if not val or str(val).strip() == "":
17+
return None
18+
if isinstance(val, timedelta):
19+
return val
20+
if isinstance(val, str):
21+
match = re.match(r"^(\d{1,2}):(\d{2}):(\d{2})$", val)
22+
if match:
23+
hours, minutes, seconds = map(int, match.groups())
24+
return timedelta(hours=hours, minutes=minutes, seconds=seconds)
25+
return None
26+
27+
1328
def determine_display_handle(event):
1429
"""
1530
Determine a display handle for an event.

0 commit comments

Comments
 (0)