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
from typing import Dict, List, Optional, Any, Union
load_dotenv()
notion_integration_secret = os.getenv("NOTION_INTEGRATION_SECRET")
class UpdateTaskTool(BaseTool):
"""
Tool for updating an existing task (page) in Notion.
This tool allows modifying task properties such as title, status, priority, due date, and assignments.
Note that this tool only updates properties, not the content blocks of the page.
"""
# Add example_field with a default value to satisfy BaseTool validation
example_field: str = Field(
default="notion_update_task",
description="Identifier for this tool. Can be left at its default value.",
)
page_id: str = Field(
...,
description="The ID of the Notion page (task) to update. This is a required field.",
)
title: str = Field(
default=None,
description="The new title of the task.",
)
task_description: str = Field(
default=None,
description="The new text description of the task.",
)
status: str = Field(
default=None,
description="New status of the task. Options: Backlog, In Progress, Testing, Completed.",
)
priority: str = Field(
default=None,
description="New priority of the task. Options: High, Medium, Low.",
)
due_date: str = Field(
default=None,
description="New due date of the task in YYYY-MM-DD format. Use 'null' to remove the date.",
)
def run(self):
"""
Update an existing Notion page (task) with the specified properties.
Returns:
dict: The JSON response from the Notion API containing the updated page.
"""
import requests
# Set up the API endpoint
url = f"https://api.notion.com/v1/pages/{self.page_id}"
# 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 = {"properties": self._build_properties()}
# Make the request (PATCH method for updates)
response = requests.patch(url, headers=headers, json=data)
# Return the JSON response
return response.json()
def _build_properties(self) -> Dict[str, Any]:
"""
Build the properties object based on provided parameters.
Only includes properties that were specified for update.
Returns:
dict: A dictionary containing the page properties to update in Notion API format.
"""
properties = {}
# Add title if provided
if self.title is not None:
properties["Task Name"] = {
"title": [{"type": "text", "text": {"content": self.title}}]
}
# Add task description if provided
if self.task_description is not None:
properties["Task Description"] = {
"rich_text": [
{"type": "text", "text": {"content": self.task_description}}
]
}
# Add status if provided
if self.status is not None:
properties["Status"] = {"status": {"name": self.status}}
# Add priority if provided
if self.priority is not None:
properties["Priority"] = {"select": {"name": self.priority}}
# Add due date if provided
if self.due_date is not None:
# Check if we're clearing the date
if self.due_date.lower() == "null":
properties["Due Date"] = {"date": None}
else:
properties["Due Date"] = {"date": {"start": self.due_date}}
# Add assigned people if provided
# if self.assigned_to is not None:
# properties["Assigned to"] = {
# "people": [{"id": user_id} for user_id in self.assigned_to]
# }
return properties