Documentation
Cloud Storage
Import and export files from Google Drive and other cloud providers
Google Drive Integration
Connect your Google Drive account to import files directly into Aionvision or export processed results back to your cloud storage. The integration uses OAuth 2.0 for secure access without sharing your credentials.
Connecting a Provider
Initiate OAuth Flow
Start the authorization process to connect a cloud provider
from aion import AionVision
async with AionVision(api_key="aion_...") as client: # Start Google Drive OAuth auth = await client.cloud_storage.initiate_auth( provider="google_drive" )
print(f"Authorization URL: {auth.authorization_url}") print(f"State token: {auth.state}") # Save for CSRF verification # Redirect user to auth.authorization_url to grant permissionsComplete Authorization
Complete the OAuth flow after user grants permissions
# After user authorizes, complete the flow with the callback coderesult = await client.cloud_storage.complete_auth( provider="google_drive", code="auth_code_from_callback", state="state_from_initiate")
print(f"Connection ID: {result.connection.id}")print(f"Email: {result.connection.provider_email}")print(f"New connection: {result.is_new}")List Connections
View your active cloud storage connections
connections = await client.cloud_storage.list_connections( active_only=True)
print(f"Total connections: {connections.total_count}")
for conn in connections.connections: print(f" {conn.provider}: {conn.provider_email}") print(f" Active: {conn.is_active}") print(f" Connected: {conn.created_at}")Disconnect Provider
Remove a cloud storage connection
result = await client.cloud_storage.disconnect( connection_id="conn_abc123")
print(f"Success: {result.success}")print(f"Message: {result.message}")Importing Files
Start Import
Import files from your connected cloud storage into Aionvision
from aion import CloudFileInput
# Import specific files from Google Driveresult = await client.cloud_storage.start_import( connection_id="conn_abc123", files=[ CloudFileInput(id="gdrive_file_id_1", name="photo1.jpg", mime_type="image/jpeg"), CloudFileInput(id="gdrive_file_id_2", name="photo2.png", mime_type="image/png"), ], auto_describe=True, # Auto-generate AI descriptions tags=["imported", "google-drive"])
if result.is_async: # Large import runs as background job print(f"Job ID: {result.job_id}") print(f"Status: {result.status}")else: # Small import completed synchronously print(f"Imported {result.total_files} files") print(f"Image IDs: {result.image_ids}")Sync vs Async Import
Small imports (few files) are processed immediately and return image IDs. Larger imports create a background job — use wait_for_job() or the convenience method import_and_wait() to track progress.
Import and Wait
Import files and block until the job completes (convenience method)
from aion import CloudFileInput, CloudStorageJobProgressEvent
def on_progress(event: CloudStorageJobProgressEvent): print(f"Progress: {event.progress_percent:.0f}% " f"({event.job.completed_files}/{event.job.total_files})")
job = await client.cloud_storage.import_and_wait( connection_id="conn_abc123", files=[ CloudFileInput(id="gdrive_file_1", name="photo1.jpg"), CloudFileInput(id="gdrive_file_2", name="photo2.png"), ], auto_describe=True, on_progress=on_progress, timeout=300, # Max 5 minutes)
print(f"Job status: {job.status}") # "completed" or "partial"print(f"Completed: {job.completed_files}/{job.total_files}")if job.failed_files > 0: print(f"Failed: {job.failed_files}")Dict Shorthand
You can also pass plain dicts instead of CloudFileInput objects
# Dicts work too - useful when forwarding from a file pickerresult = await client.cloud_storage.start_import( connection_id="conn_abc123", files=[ {"id": "gdrive_file_id_1", "name": "photo1.jpg", "mime_type": "image/jpeg"}, {"id": "gdrive_file_id_2", "name": "photo2.png"}, ],)Exporting Files
Start Export
Upload processed files back to your cloud storage
# Export images to Google Driveresult = await client.cloud_storage.start_export( connection_id="conn_abc123", image_ids=["img_001", "img_002", "img_003"], folder_name="Aionvision Export" # Create a new folder in Drive)
if result.is_async: print(f"Export job: {result.job_id}") print(f"Status: {result.job_status}")else: print(f"Exported: {result.cloud_file_ids}") print(f"Message: {result.message}")Export and Wait
Export files and block until the job completes
job = await client.cloud_storage.export_and_wait( connection_id="conn_abc123", image_ids=["img_001", "img_002", "img_003"], folder_name="Aionvision Export", timeout=300,)
print(f"Export {job.status}: {job.completed_files}/{job.total_files} files")Job Tracking
Check Job Status
Monitor progress of async import/export operations
# Get current job statusjob = await client.cloud_storage.get_job(job_id="job_abc123")
print(f"Type: {job.type}") # "import" or "export"print(f"Status: {job.status}") # pending | in_progress | completed | partial | failedprint(f"Progress: {job.progress_percent:.0f}%")print(f"Completed: {job.completed_files}/{job.total_files}")print(f"Failed: {job.failed_files}")
if job.error: print(f"Error: {job.error}")Wait for Job Completion
Poll until a job reaches a terminal state
# If you started with start_import/start_export, wait for completionresult = await client.cloud_storage.start_import( connection_id="conn_abc123", files=files,)
if result.is_async and result.job_id: job = await client.cloud_storage.wait_for_job( result.job_id, timeout=300, # Max wait time in seconds poll_interval=2, # Check every 2 seconds ) print(f"Final status: {job.status}")Job Status Values
- pending: Job created, waiting to start
- in_progress: Files are being transferred
- completed: All files transferred successfully
- partial: Some files succeeded, some failed
- failed: Job failed completely
- cancelled: Job was cancelled by user
Error Handling
wait_for_job(), import_and_wait(), and export_and_wait() raise CloudStorageError if the job fails completely. Jobs with partial status (some files succeeded, some failed) return normally — check job.failed_files to detect partial failures.
Sync Client
All cloud storage methods are available on the sync client
from aion import SyncAionVision, CloudFileInput
with SyncAionVision(api_key="aion_...") as client: # All methods work the same, without await connections = client.cloud_storage.list_connections()
job = client.cloud_storage.import_and_wait( connection_id="conn_abc123", files=[CloudFileInput(id="gdrive_file_1", name="photo.jpg")], ) print(f"Import {job.status}: {job.completed_files} files")Supported Providers
- Google Drive (
google_drive) - Full import/export support with Google Picker integration
Additional providers (OneDrive, Dropbox) may be added in future releases.