mirror of
https://github.com/temporal-community/temporal-ai-agent.git
synced 2026-03-15 05:58:08 +01:00
* Format codebase to satisfy linters * fixing pylance and ruff-checked files * contributing md, and type and formatting fixes * setup file capitalization * test fix
65 lines
2.4 KiB
Python
65 lines
2.4 KiB
Python
import json
|
|
from datetime import datetime
|
|
from pathlib import Path
|
|
|
|
|
|
def find_events(args: dict) -> dict:
|
|
search_city = args.get("city", "").lower()
|
|
search_month = args.get("month", "").capitalize()
|
|
|
|
file_path = Path(__file__).resolve().parent / "data" / "find_events_data.json"
|
|
if not file_path.exists():
|
|
return {"error": "Data file not found."}
|
|
|
|
try:
|
|
month_number = datetime.strptime(search_month, "%B").month
|
|
except ValueError:
|
|
return {"error": "Invalid month provided."}
|
|
|
|
# Helper to wrap months into [1..12]
|
|
def get_adjacent_months(m):
|
|
prev_m = 12 if m == 1 else (m - 1)
|
|
next_m = 1 if m == 12 else (m + 1)
|
|
return [prev_m, m, next_m]
|
|
|
|
valid_months = get_adjacent_months(month_number)
|
|
|
|
matching_events = []
|
|
for city_name, events in json.load(open(file_path)).items():
|
|
if search_city and search_city not in city_name.lower():
|
|
continue
|
|
|
|
for event in events:
|
|
date_from = datetime.strptime(event["dateFrom"], "%Y-%m-%d")
|
|
date_to = datetime.strptime(event["dateTo"], "%Y-%m-%d")
|
|
|
|
# If the event's start or end month is in our valid months
|
|
if date_from.month in valid_months or date_to.month in valid_months:
|
|
# Add metadata explaining how it matches
|
|
if date_from.month == month_number or date_to.month == month_number:
|
|
month_context = "requested month"
|
|
elif (
|
|
date_from.month == valid_months[0]
|
|
or date_to.month == valid_months[0]
|
|
):
|
|
month_context = "previous month"
|
|
else:
|
|
month_context = "next month"
|
|
|
|
matching_events.append(
|
|
{
|
|
"city": city_name,
|
|
"eventName": event["eventName"],
|
|
"dateFrom": event["dateFrom"],
|
|
"dateTo": event["dateTo"],
|
|
"description": event["description"],
|
|
"month": month_context,
|
|
}
|
|
)
|
|
|
|
# Add top-level metadata if you wish
|
|
return {
|
|
"note": f"Returning events from {search_month} plus one month either side (i.e., {', '.join(datetime(2025, m, 1).strftime('%B') for m in valid_months)}).",
|
|
"events": matching_events,
|
|
}
|