70 lines
1.9 KiB
Python
70 lines
1.9 KiB
Python
from zoneinfo import available_timezones
|
|
|
|
from arcade.sdk.errors import RetryableToolError
|
|
|
|
|
|
class GoogleToolError(Exception):
|
|
"""Base exception for Google tool errors."""
|
|
|
|
def __init__(self, message: str, developer_message: str | None = None):
|
|
self.message = message
|
|
self.developer_message = developer_message
|
|
super().__init__(self.message)
|
|
|
|
def __str__(self) -> str:
|
|
base_message = self.message
|
|
if self.developer_message:
|
|
return f"{base_message} (Developer: {self.developer_message})"
|
|
return base_message
|
|
|
|
|
|
class RetryableGoogleToolError(RetryableToolError):
|
|
"""Raised when there's an error in a Google tool that can be retried."""
|
|
|
|
pass
|
|
|
|
|
|
class GoogleServiceError(GoogleToolError):
|
|
"""Raised when there's an error building or using the Google service."""
|
|
|
|
pass
|
|
|
|
|
|
class GmailToolError(GoogleToolError):
|
|
"""Raised when there's an error in the Gmail tools."""
|
|
|
|
pass
|
|
|
|
|
|
class GoogleCalendarToolError(GoogleToolError):
|
|
"""Raised when there's an error in the Google Calendar tools."""
|
|
|
|
pass
|
|
|
|
|
|
class InvalidTimezoneError(RetryableGoogleToolError):
|
|
"""Raised when a timezone is provided that is not supported by Python's zoneinfo."""
|
|
|
|
def __init__(self, timezone_str: str):
|
|
self.timezone_str = timezone_str
|
|
available_timezones_msg = (
|
|
"Here is a list of valid timezones (from Python's zoneinfo.available_timezones()): "
|
|
f"{available_timezones()}"
|
|
)
|
|
super().__init__(
|
|
f"Invalid timezone: '{timezone_str}'",
|
|
developer_message=available_timezones_msg,
|
|
additional_prompt_content=available_timezones_msg,
|
|
)
|
|
|
|
|
|
class GoogleDriveToolError(GoogleToolError):
|
|
"""Raised when there's an error in the Google Drive tools."""
|
|
|
|
pass
|
|
|
|
|
|
class GoogleDocsToolError(GoogleToolError):
|
|
"""Raised when there's an error in the Google Docs tools."""
|
|
|
|
pass
|