Source code for langchain_google_community.calendar.current_datetime
"""Get the current datetime according to the calendar timezone."""
from datetime import datetime
from typing import Optional, Type
from langchain_core.callbacks import CallbackManagerForToolRun
from pydantic import BaseModel, Field
from zoneinfo import ZoneInfo
from langchain_google_community.calendar.base import CalendarBaseTool
[docs]
class CurrentDatetimeSchema(BaseModel):
"""Input for GetCurrentDatetime."""
calendar_id: Optional[str] = Field(
default="primary", description="The calendar ID. Defaults to 'primary'."
)
[docs]
class GetCurrentDatetime(CalendarBaseTool): # type: ignore[override, override]
"""Tool that gets the current datetime according to the calendar timezone."""
name: str = "get_current_datetime"
description: str = (
"Use this tool to get the current datetime according to the calendar timezone."
"The output datetime format is 'YYYY-MM-DD HH:MM:SS'"
)
args_schema: Type[CurrentDatetimeSchema] = CurrentDatetimeSchema
[docs]
def get_timezone(self, calendar_id: Optional[str]) -> str:
"""Get the timezone of the specified calendar."""
calendars = self.api_resource.calendarList().list().execute().get("items", [])
if not calendars:
raise ValueError("No calendars found.")
if calendar_id == "primary":
return calendars[0]["timeZone"]
else:
for item in calendars:
if item["id"] == calendar_id and item["accessRole"] != "reader":
return item["timeZone"]
raise ValueError(f"Timezone not found for calendar ID: {calendar_id}")
def _run(
self,
calendar_id: Optional[str] = "primary",
run_manager: Optional[CallbackManagerForToolRun] = None,
) -> str:
"""Run the tool to create an event in Google Calendar."""
try:
timezone = self.get_timezone(calendar_id)
date_time = datetime.now(ZoneInfo(timezone)).strftime("%Y-%m-%d %H:%M:%S")
return f"Time zone: {timezone}, Date and time: {date_time}"
except Exception as error:
raise Exception(f"An error occurred: {error}") from error