Skip to content

Commit 20a39be

Browse files
committed
update uses of extract_events_from_caption to handle list
1 parent 5e1116a commit 20a39be

File tree

2 files changed

+73
-72
lines changed

2 files changed

+73
-72
lines changed

backend/apps/events/views.py

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -475,22 +475,19 @@ def submit_event(request):
475475
status=status.HTTP_500_INTERNAL_SERVER_ERROR,
476476
)
477477

478-
# Run OpenAI extraction to build event data
479-
event_data = extract_events_from_caption(
478+
# Run OpenAI extraction to build event data (returns a list of events)
479+
extracted_list = extract_events_from_caption(
480480
caption_text=f"Event source: {source_url}",
481481
source_image_url=screenshot_url,
482482
)
483483

484+
# Choose the first event to create; store the full extracted list on submission
485+
event_data = (extracted_list or [])[:1][0] if extracted_list else {}
484486
# Ensure provenance
485-
if isinstance(event_data, dict):
486-
event_data["source_url"] = source_url
487-
event_data["source_image_url"] = event_data.get("source_image_url") or screenshot_url
488-
if other_handle:
489-
event_data["other_handle"] = other_handle
490-
else:
491-
event_data = {"source_url": source_url, "source_image_url": screenshot_url}
492-
if other_handle:
493-
event_data["other_handle"] = other_handle
487+
event_data["source_url"] = source_url
488+
event_data["source_image_url"] = event_data.get("source_image_url") or screenshot_url
489+
if other_handle:
490+
event_data["other_handle"] = other_handle
494491

495492
# Create Event immediately and link submission
496493
allowed_fields = {f.name for f in Events._meta.get_fields()}
@@ -524,7 +521,7 @@ def submit_event(request):
524521
status="pending",
525522
submitted_by=clerk_user_id,
526523
created_event=event,
527-
extracted_data=event_data,
524+
extracted_data=extracted_list or [],
528525
)
529526

530527
return Response(
@@ -575,21 +572,21 @@ def process_submission(request, submission_id):
575572
try:
576573
submission = get_object_or_404(EventSubmission, id=submission_id)
577574

578-
event_data = extract_events_from_caption(
575+
extracted_list = extract_events_from_caption(
579576
caption_text=f"Event source: {submission.source_url}",
580577
source_image_url=submission.screenshot_url,
581578
)
582579

583-
if event_data:
584-
submission.extracted_data = event_data if isinstance(event_data, dict) else {}
580+
if extracted_list:
581+
submission.extracted_data = extracted_list
585582
submission.save()
586583

587-
# Update linked event with fresh data (only known fields)
588584
event = submission.created_event
589-
if event and isinstance(event_data, dict):
585+
if event and extracted_list:
586+
first_item = extracted_list[0]
590587
for field in [f.name for f in Events._meta.get_fields()]:
591-
if field in event_data:
592-
setattr(event, field, event_data[field])
588+
if field in first_item:
589+
setattr(event, field, first_item[field])
593590
event.save()
594591

595592
return Response(

backend/scraping/instagram_feed.py

Lines changed: 57 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -444,69 +444,73 @@ def check_post_limit():
444444
source_image_url = None
445445

446446
posts_processed += 1
447-
event_data = extract_events_from_caption(
447+
extracted_list = extract_events_from_caption(
448448
post.caption, source_image_url, post.date_utc
449449
)
450-
if not event_data:
450+
if not extracted_list:
451451
logger.warning(
452-
f"[{post.shortcode}] [{post.owner_username}] AI client returned no event for post"
452+
f"[{post.shortcode}] [{post.owner_username}] AI client returned no events for post"
453453
)
454454
if check_post_limit():
455455
break
456456
continue
457457

458-
logger.debug(f"[{post.shortcode}] [{post.owner_username}] Event data: {json.dumps(event_data, ensure_ascii=False, separators=(',', ':'))}")
459458
source_url = f"https://www.instagram.com/p/{post.shortcode}/"
459+
for idx, event_data in enumerate(extracted_list):
460+
try:
461+
logger.debug(
462+
f"[{post.shortcode}] [{post.owner_username}] Event {idx+1}/{len(extracted_list)}: {json.dumps(event_data, ensure_ascii=False, separators=(',', ':'))}"
463+
)
460464

461-
if not (
462-
event_data.get("title")
463-
and event_data.get("dtstart")
464-
and event_data.get("location")
465-
):
466-
missing_fields = [
467-
key
468-
for key in ["title", "dtstart", "location"]
469-
if not event_data.get(key)
470-
]
471-
logger.warning(
472-
f"[{post.shortcode}] [{post.owner_username}] Missing required fields for event '{event_data.get('title', 'Unknown')}': {missing_fields}, skipping event"
473-
)
474-
embedding = generate_event_embedding(event_data)
475-
append_event_to_csv(
476-
event_data,
477-
post.owner_username,
478-
source_url,
479-
added_to_db="missing_fields",
480-
embedding=embedding,
481-
)
482-
if check_post_limit():
483-
break
484-
continue
485-
486-
dtstart_utc = clean_datetime(event_data.get("dtstart_utc"))
487-
now = timezone.now()
488-
if dtstart_utc < now:
489-
logger.info(
490-
f"[{post.shortcode}] [{post.owner_username}] Skipping event '{event_data.get('title')}' with past date {dtstart_utc}"
491-
)
492-
if check_post_limit():
493-
break
494-
continue
495-
496-
result = insert_event_to_db(event_data, post.owner_username, source_url)
497-
if result is True:
498-
events_added += 1
499-
logger.info(
500-
f"[{post.shortcode}] [{post.owner_username}] Successfully added event '{event_data.get('title')}'"
501-
)
502-
elif result == "duplicate":
503-
logger.warning(
504-
f"[{post.shortcode}] [{post.owner_username}] Duplicate event, not added: '{event_data.get('title')}'"
505-
)
506-
else:
507-
logger.error(
508-
f"[{post.shortcode}] [{post.owner_username}] Failed to add event '{event_data.get('title')}'"
509-
)
465+
if not (
466+
event_data.get("title")
467+
and event_data.get("dtstart")
468+
and event_data.get("location")
469+
):
470+
missing_fields = [
471+
key
472+
for key in ["title", "dtstart", "location"]
473+
if not event_data.get(key)
474+
]
475+
logger.warning(
476+
f"[{post.shortcode}] [{post.owner_username}] Missing required fields for event '{event_data.get('title', 'Unknown')}': {missing_fields}, skipping"
477+
)
478+
embedding = generate_event_embedding(event_data)
479+
append_event_to_csv(
480+
event_data,
481+
post.owner_username,
482+
source_url,
483+
added_to_db="missing_fields",
484+
embedding=embedding,
485+
)
486+
continue
487+
488+
dtstart_utc = clean_datetime(event_data.get("dtstart_utc"))
489+
now = timezone.now()
490+
if dtstart_utc < now:
491+
logger.info(
492+
f"[{post.shortcode}] [{post.owner_username}] Skipping event '{event_data.get('title')}' with past date {dtstart_utc}"
493+
)
494+
continue
495+
496+
result = insert_event_to_db(event_data, post.owner_username, source_url)
497+
if result is True:
498+
events_added += 1
499+
logger.info(
500+
f"[{post.shortcode}] [{post.owner_username}] Successfully added event '{event_data.get('title')}'"
501+
)
502+
elif result == "duplicate":
503+
logger.warning(
504+
f"[{post.shortcode}] [{post.owner_username}] Duplicate event, not added: '{event_data.get('title')}'"
505+
)
506+
else:
507+
logger.error(
508+
f"[{post.shortcode}] [{post.owner_username}] Failed to add event '{event_data.get('title')}'"
509+
)
510+
except Exception as inner_e:
511+
logger.error(
512+
f"[{post.shortcode}] [{post.owner_username}] Error handling extracted event index {idx}: {inner_e!s}"
513+
)
510514

511515
if check_post_limit():
512516
break

0 commit comments

Comments
 (0)