arcade-mcp/toolkits/google_drive/conftest.py
Eric Gustin 07c52100f3
Split and rename multiple toolkits (#438)
# PR Description
## Split toolkits

This PR splits the `Microsoft`, `Google`, and `Search` toolkits into
multiple toolkits each.
 * `Microsoft` --> `OutlookCalendar`, `OutlookMail`.
* `Google` -----> `GoogleCalendar`, `GoogleContacts`, `GoogleDocs`,
`GoogleDrive`, `Gmail`, `GoogleSheets`
* `Search` -----> `GoogleFinance`, `GoogleFlights`, `GoogleHotels`,
`GoogleJobs`, `GoogleMaps`, `GoogleNews`, `GoogleSearch`,
`GoogleShopping`, `Walmart`, `Youtube`

> The original monolithic toolkits (`Microsoft`, `Google`, `Search`) are
not removed in this PR. The plan is to keep those toolkits around while
we
> 1. Stop documenting the toolkits, 
> 2. Stop displaying the toolkits in the dashboard, and 
> 3. Help customers migrate over to the new split toolkits.

## Rename toolkits
This PR renames the following toolkits 
* `Web` ------------> `Firecrawl`
* `CodeSandbox` ---> `E2B`

> The `Web` and `CodeSandbox` toolkits are not removed in this PR. The
plan is to keep them around while we
> 1. Stop documenting the toolkits, 
> 2. Stop displaying the toolkits in the dashboard, and 
> 3. Help customers migrate over to the new renamed toolkits.

## Rename tools
Since toolkit names were changed, this called for some tools to be
renamed as well.
* `GoogleSearch.SearchGoogle` ----------------> `GoogleSearch.Search`
* `GoogleShopping.SearchShoppingProducts` --->
`GoogleShopping.SearchProducts`
* `Walmart.SearchWalmartProducts` ------------> `Walmart.SearchProducts`
* `Walmart.GetWalmartProductDetails` --------->
`Walmart.GetProductDetails`
* `Youtube.SearchYoutubeVideos` -------------->
`Youtube.SearchForVideos`

## Google File Picker
Improvements to the Google File Picker experience were also added in
this PR.

The following tools will ALWAYS provide llm_instructions in their
response to "let the end-user know that they have the option to select
more files via the file picker url if they want to":
* `GoogleDocs.SearchDocuments`
* `GoogleDocs.SearchAndRetrieveDocuments`
* `GoogleDrive.GetFileTreeStructure`

The following tools will only provide the file picker URL if a 404 or
403 from the Google API:
* `GoogleDocs.InsertTextAtEndOfDocument`
* `GoogleDocs.GetDocumentById`
* `GoogleSheets.GetSpreadsheet`
* `GoogleSheets.WriteToCell`

Also, a standalone `GoogleDrive.GenerateGoogleFilePickerUrl` tool
exists.

## Other
* The `SearchDocuments` and `SearchAndRetrieveDocuments` tools used to
be organized within the Drive portion of the Google toolkit, but I moved
these into the new GoogleDocs toolkit because they are specific to Docs.

# Progress

- [x] `OutlookCalendar`
- [x] `OutlookMail`
- [x] `GoogleFinance`
- [x] `GoogleFlights`
- [x] `GoogleHotels`
- [x] `GoogleJobs`
- [x] `GoogleMaps`
- [x] `GoogleNews`
- [x] `GoogleSearch`
- [x] `GoogleShopping`
- [x] `Walmart`
- [x] `Youtube`
- [x] `GoogleCalendar`
- [x] `GoogleContacts`
- [x] `GoogleDocs`
- [x] `GoogleDrive`
- [x] `Gmail`
- [x] `GoogleSheets`
- [x] `Firecrawl`
- [x] `E2B`
- [x] File picker

# Discussion
* Repeated code is a consequence of splitting toolkits that use the same
provider. I am open to any ideas that would allow multiple toolkits to
reference common code. Comment your ideas in this PR.
2025-07-09 16:00:09 -07:00

197 lines
8.4 KiB
Python

import pytest
@pytest.fixture
def sample_drive_file_tree_request_responses() -> tuple[dict, list]:
files_list = {
"files": [
# Shared Drive 1 files and folders
{
"id": "19WVyQndQsc0AxxfdrIt5CvDQd6r-BvpqnB8bWZoL7Xk",
"name": "shared-1-folder-1-doc-1",
"mimeType": "application/vnd.google-apps.document",
"parents": ["1dCOCdPxhTqiB3j3bWrIWM692ZbL8dyjt"],
"createdTime": "2025-02-26T00:28:20.571Z",
"modifiedTime": "2025-02-26T00:28:30.773Z",
"driveId": "0AFqcR6obkydtUk9PVA",
"size": "1024",
},
{
"id": "1dCOCdPxhTqiB3j3bWrIWM692ZbL8dyjt",
"name": "shared-1-folder-1",
"mimeType": "application/vnd.google-apps.folder",
"parents": ["0AFqcR6obkydtUk9PVA"],
"createdTime": "2025-02-26T00:27:45.526Z",
"modifiedTime": "2025-02-26T00:27:45.526Z",
"driveId": "0AFqcR6obkydtUk9PVA",
},
{
"id": "1didt_h-tDjuJ-dmYtHUSyOCPci30K_kSszvg0G3tKBM",
"name": "shared-1-doc-1",
"mimeType": "application/vnd.google-apps.document",
"parents": ["0AFqcR6obkydtUk9PVA"],
"createdTime": "2025-02-26T00:27:19.287Z",
"modifiedTime": "2025-02-26T00:27:26.079Z",
"driveId": "0AFqcR6obkydtUk9PVA",
"size": "1024",
},
# My Drive files and folders
{
"id": "1vB6sv0MD0hYSraYvWU_fcci3GN_-Jf4g-LfyXdG8ZMo",
"name": "The Birth of MX Engineering",
"mimeType": "application/vnd.google-apps.document",
"parents": ["0AIbBwO2hjeHqUk9PVA"],
"createdTime": "2025-01-24T06:34:22.305Z",
"modifiedTime": "2025-02-25T21:54:30.632Z",
"owners": [
{
"kind": "drive#user",
"displayName": "one_new_tool_everyday",
"photoLink": "https://lh3.googleusercontent.com/a-/photo.png",
"me": True,
"permissionId": "00356981722324419750",
"emailAddress": "one_new_tool_everyday@arcade.dev",
}
],
"size": "6634",
},
{
"id": "1wv2dmYo0skJTI59ZIcwH9vm-wt7psMwXTvihuEGeHeI",
"name": "test document 1.1.1",
"mimeType": "application/vnd.google-apps.document",
"parents": ["1J92V9yvVWm_uNHq3CCY4wyG1H9B6iiwO"],
"createdTime": "2025-02-25T17:59:03.325Z",
"modifiedTime": "2025-02-25T17:59:11.445Z",
"owners": [
{
"kind": "drive#user",
"displayName": "one_new_tool_everyday",
"photoLink": "https://lh3.googleusercontent.com/a-/photo.png",
"me": True,
"permissionId": "00356981722324419750",
"emailAddress": "one_new_tool_everyday@arcade.dev",
}
],
"size": "1024",
},
{
"id": "1J92V9yvVWm_uNHq3CCY4wyG1H9B6iiwO",
"name": "test folder 1.1",
"mimeType": "application/vnd.google-apps.folder",
"parents": ["1gqioaHG53jPVeJN5gBpHoO-GWtwiJcLo"],
"createdTime": "2025-02-25T17:58:58.987Z",
"modifiedTime": "2025-02-25T17:58:58.987Z",
"owners": [
{
"kind": "drive#user",
"displayName": "one_new_tool_everyday",
"photoLink": "https://lh3.googleusercontent.com/a-/photo.png",
"me": True,
"permissionId": "00356981722324419750",
"emailAddress": "one_new_tool_everyday@arcade.dev",
}
],
},
{
"id": "1DSmL7d07kjT6b6L-t4JIT06ElUbZ1q0K6_gEpn_UGZ8",
"name": "test document 1.2",
"mimeType": "application/vnd.google-apps.document",
"parents": ["1gqioaHG53jPVeJN5gBpHoO-GWtwiJcLo"],
"createdTime": "2025-02-25T17:58:38.628Z",
"modifiedTime": "2025-02-25T17:58:46.713Z",
"owners": [
{
"kind": "drive#user",
"displayName": "one_new_tool_everyday",
"photoLink": "https://lh3.googleusercontent.com/a-/photo.png",
"me": True,
"permissionId": "00356981722324419750",
"emailAddress": "one_new_tool_everyday@arcade.dev",
}
],
"size": "1024",
},
{
"id": "1Fcxz7HsyO2Zyc-5DTD3zBQnaVrZwD29BP9KD9rPnYfE",
"name": "test document 1.1",
"mimeType": "application/vnd.google-apps.document",
"parents": ["1gqioaHG53jPVeJN5gBpHoO-GWtwiJcLo"],
"createdTime": "2025-02-25T17:57:53.850Z",
"modifiedTime": "2025-02-25T17:58:28.745Z",
"owners": [
{
"kind": "drive#user",
"displayName": "one_new_tool_everyday",
"photoLink": "https://lh3.googleusercontent.com/a-/photo.png",
"me": True,
"permissionId": "00356981722324419750",
"emailAddress": "one_new_tool_everyday@arcade.dev",
}
],
"size": "1024",
},
{
"id": "1gqioaHG53jPVeJN5gBpHoO-GWtwiJcLo",
"name": "test folder 1",
"mimeType": "application/vnd.google-apps.folder",
"parents": ["0AIbBwO2hjeHqUk9PVA"],
"createdTime": "2025-02-25T17:57:46.036Z",
"modifiedTime": "2025-02-25T17:57:46.036Z",
"owners": [
{
"kind": "drive#user",
"displayName": "one_new_tool_everyday",
"photoLink": "https://lh3.googleusercontent.com/a-/photo.png",
"me": True,
"permissionId": "00356981722324419750",
"emailAddress": "one_new_tool_everyday@arcade.dev",
}
],
},
{
"id": "16PUe97yGQeOjQgrgd54iCoxzid4SEvu_J33P_ELd5r8",
"name": "Hello world presentation",
"mimeType": "application/vnd.google-apps.presentation",
"createdTime": "2025-02-18T20:48:52.786Z",
"modifiedTime": "2025-02-19T23:31:20.483Z",
"owners": [
{
"kind": "drive#user",
"displayName": "john.doe",
"photoLink": "https://lh3.googleusercontent.com/a-/photo.png",
"me": False,
"permissionId": "06420661154928749996",
"emailAddress": "john.doe@arcade.dev",
}
],
"size": "15774558",
},
{
"id": "1nG7lSvIyK05N9METPczVJa4iGgE7uoo-A6zpqjpUsDY",
"name": "Shared doc 1",
"mimeType": "application/vnd.google-apps.document",
"createdTime": "2025-02-19T18:51:44.622Z",
"modifiedTime": "2025-02-19T19:30:39.773Z",
"owners": [
{
"kind": "drive#user",
"displayName": "theboss",
"photoLink": "https://lh3.googleusercontent.com/a-/photo.png",
"me": False,
"permissionId": "11571864250637401873",
"emailAddress": "theboss@arcade.dev",
}
],
"size": "2700",
},
],
}
drives_get = [
{
"id": "0AFqcR6obkydtUk9PVA",
"name": "Shared Drive 1",
}
]
return files_list, drives_get