improve date handling

This commit is contained in:
Luke Harries
2025-04-05 17:50:22 +01:00
parent 036f84436d
commit f8d190f6a6
2 changed files with 26 additions and 10 deletions

View File

@@ -1,6 +1,5 @@
from typing import List, Dict, Any, Optional, Tuple from typing import List, Dict, Any, Optional
from mcp.server.fastmcp import FastMCP from mcp.server.fastmcp import FastMCP
from datetime import datetime
from whatsapp import ( from whatsapp import (
search_contacts as whatsapp_search_contacts, search_contacts as whatsapp_search_contacts,
list_messages as whatsapp_list_messages, list_messages as whatsapp_list_messages,
@@ -28,7 +27,8 @@ def search_contacts(query: str) -> List[Dict[str, Any]]:
@mcp.tool() @mcp.tool()
def list_messages( def list_messages(
date_range: Optional[Tuple[datetime, datetime]] = None, after: Optional[str] = None,
before: Optional[str] = None,
sender_phone_number: Optional[str] = None, sender_phone_number: Optional[str] = None,
chat_jid: Optional[str] = None, chat_jid: Optional[str] = None,
query: Optional[str] = None, query: Optional[str] = None,
@@ -41,7 +41,8 @@ def list_messages(
"""Get WhatsApp messages matching specified criteria with optional context. """Get WhatsApp messages matching specified criteria with optional context.
Args: Args:
date_range: Optional tuple of (start_date, end_date) to filter messages by date after: Optional ISO-8601 formatted string to only return messages after this date
before: Optional ISO-8601 formatted string to only return messages before this date
sender_phone_number: Optional phone number to filter messages by sender sender_phone_number: Optional phone number to filter messages by sender
chat_jid: Optional chat JID to filter messages by chat chat_jid: Optional chat JID to filter messages by chat
query: Optional search term to filter messages by content query: Optional search term to filter messages by content
@@ -52,7 +53,8 @@ def list_messages(
context_after: Number of messages to include after each match (default 1) context_after: Number of messages to include after each match (default 1)
""" """
messages = whatsapp_list_messages( messages = whatsapp_list_messages(
date_range=date_range, after=after,
before=before,
sender_phone_number=sender_phone_number, sender_phone_number=sender_phone_number,
chat_jid=chat_jid, chat_jid=chat_jid,
query=query, query=query,

View File

@@ -185,9 +185,9 @@ def print_recent_messages(limit=10) -> List[Message]:
if 'conn' in locals(): if 'conn' in locals():
conn.close() conn.close()
def list_messages( def list_messages(
date_range: Optional[Tuple[datetime, datetime]] = None, after: Optional[str] = None,
before: Optional[str] = None,
sender_phone_number: Optional[str] = None, sender_phone_number: Optional[str] = None,
chat_jid: Optional[str] = None, chat_jid: Optional[str] = None,
query: Optional[str] = None, query: Optional[str] = None,
@@ -209,9 +209,23 @@ def list_messages(
params = [] params = []
# Add filters # Add filters
if date_range: if after:
where_clauses.append("messages.timestamp BETWEEN ? AND ?") try:
params.extend([date_range[0].isoformat(), date_range[1].isoformat()]) after = datetime.fromisoformat(after)
except ValueError:
raise ValueError(f"Invalid date format for 'after': {after}. Please use ISO-8601 format.")
where_clauses.append("messages.timestamp > ?")
params.append(after)
if before:
try:
before = datetime.fromisoformat(before)
except ValueError:
raise ValueError(f"Invalid date format for 'before': {before}. Please use ISO-8601 format.")
where_clauses.append("messages.timestamp < ?")
params.append(before)
if sender_phone_number: if sender_phone_number:
where_clauses.append("messages.sender = ?") where_clauses.append("messages.sender = ?")