joaomorossini's picture
Add new agents and tools for Devid and BrowsingAgent; remove obsolete ResearchAndReportAgent
670dd87
import os
from dotenv import load_dotenv
from agency_swarm.tools import BaseTool
from pydantic import Field
load_dotenv()
notion_integration_secret = os.getenv("NOTION_INTEGRATION_SECRET")
notion_database_id = os.getenv("NOTION_DATABASE_ID")
class GetTasksTool(BaseTool):
"""
Tool for retrieving tasks from a Notion database.
This tool allows querying tasks with optional filtering and sorting capabilities
based on properties like Due Date, Status, Priority, and Task Name.
"""
# Add example_field with a default value to satisfy BaseTool validation
example_field: str = Field(
default="notion_tasks",
description="Identifier for this tool. Can be left at its default value.",
)
status: str = Field(
default=None,
description="Filter tasks by status. Options: Backlog, In Progress, Testing, Completed.",
)
priority: str = Field(
default=None,
description="Filter tasks by priority. Options: High, Medium, Low.",
)
due_date_before: str = Field(
default=None,
description="Filter tasks due before this date (format: YYYY-MM-DD).",
)
due_date_after: str = Field(
default=None,
description="Filter tasks due after this date (format: YYYY-MM-DD).",
)
sort_by: str = Field(
default="Due Date",
description="Property to sort by. Options: Due Date, Status, Priority, Task Name.",
)
sort_direction: str = Field(
default="ascending",
description="Sort direction. Options: ascending, descending.",
)
def run(self):
"""
Query a Notion database for tasks with optional filtering and sorting.
Returns:
dict: The JSON response from the Notion API containing the tasks.
"""
import requests
# Use the database ID from the environment variable
database_id = os.getenv("NOTION_DATABASE_ID")
# Set up the API endpoint
url = f"https://api.notion.com/v1/databases/{database_id}/query"
# Set up the headers
headers = {
"Authorization": f"Bearer {os.getenv('NOTION_INTEGRATION_SECRET')}",
"Notion-Version": "2022-06-28",
"Content-Type": "application/json",
}
# Prepare the request body
data = {}
# Build filter
filters = []
if self.status:
filters.append({"property": "Status", "status": {"equals": self.status}})
if self.priority:
filters.append(
{"property": "Priority", "select": {"equals": self.priority}}
)
if self.due_date_before:
filters.append(
{"property": "Due Date", "date": {"before": self.due_date_before}}
)
if self.due_date_after:
filters.append(
{"property": "Due Date", "date": {"after": self.due_date_after}}
)
if filters:
if len(filters) > 1:
data["filter"] = {"and": filters}
else:
data["filter"] = filters[0]
# Add sorting
if self.sort_by:
data["sorts"] = [
{"property": self.sort_by, "direction": self.sort_direction}
]
# Make the request
response = requests.post(url, headers=headers, json=data)
# Return the JSON response
return response.json()