@require_optional_import(
[
"googleapiclient",
],
"google-api",
)
def list_files_and_folders(service: Any, page_size: int, folder_id: Optional[str]) -> list[GoogleFileInfo]:
kwargs = {
"pageSize": page_size,
"fields": "nextPageToken, files(id, name, mimeType)",
}
if folder_id:
kwargs["q"] = f"'{folder_id}' in parents and trashed=false" # Search for files in the folder
response = service.files().list(**kwargs).execute()
result = response.get("files", [])
if not isinstance(result, list):
raise ValueError(f"Expected a list of files, but got {result}")
result = [GoogleFileInfo(**file_info) for file_info in result]
return result