File size: 1,837 Bytes
5cac522
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import json
import os
import uuid
from datetime import datetime, timedelta


MEMORY_FILE = "calendar_memory.json"


def load_events():
    """Load all events from the JSON memory file."""
    if not os.path.exists(MEMORY_FILE):
        return []
    with open(MEMORY_FILE, "r") as f:
        return json.load(f)


def save_events(events):
    """Save all events to the JSON memory file."""
    with open(MEMORY_FILE, "w") as f:
        json.dump(events, f, indent=2)

def add_event(date, description, category="event"):
    """Add a new calendar event to memory."""
    events = load_events()
    new_event = {
        "id": str(uuid.uuid4()),
        "date": date,
        "description": description,
        "category": category,
        "created_at": datetime.now().isoformat()
    }
    events.append(new_event)
    save_events(events)
    return new_event

def search_events(start_date=None, end_date=None, keyword=None):
    """Search events by date range and/or keyword."""
    events = load_events()
    results = []

    for event in events:
        match = True

        if start_date:
            if event["date"] < start_date:
                match = False

        if end_date:
            if event["date"] > end_date:
                match = False

        if keyword:
            if keyword.lower() not in event["description"].lower():
                match = False

        if match:
            results.append(event)

    results.sort(key=lambda e: e["date"])
    return results

def get_upcoming_events(days=7):
    """Get events in the next N days for context assembly."""
    today = datetime.now().strftime("%Y-%m-%d")
    end = (datetime.now() + timedelta(days=days)).strftime("%Y-%m-%d")
    return search_events(start_date=today, end_date=end)