Spaces:
Sleeping
Sleeping
| import os, json | |
| from google.oauth2.service_account import Credentials | |
| from googleapiclient.discovery import build | |
| from googleapiclient.http import MediaFileUpload | |
| SCOPES = ["https://www.googleapis.com/auth/drive.file"] | |
| def _get_env(name: str) -> str: | |
| v = os.getenv(name, "").strip() | |
| if not v: | |
| raise RuntimeError(f"Missing env secret: {name}") | |
| return v | |
| def _get_drive_service(): | |
| creds_json = _get_env("GOOGLE_SERVICE_ACCOUNT_JSON") | |
| info = json.loads(creds_json) | |
| creds = Credentials.from_service_account_info(info, scopes=SCOPES) | |
| return build("drive", "v3", credentials=creds, cache_discovery=False) | |
| def upload_file(local_path: str, filename: str, mime_type: str): | |
| folder_id = _get_env("DRIVE_FOLDER_ID") | |
| service = _get_drive_service() | |
| file_metadata = {"name": filename, "parents": [folder_id]} | |
| media = MediaFileUpload(local_path, mimetype=mime_type, resumable=True) | |
| created = service.files().create( | |
| body=file_metadata, | |
| media_body=media, | |
| fields="id, webViewLink" | |
| ).execute() | |
| file_id = created["id"] | |
| return { | |
| "driveFileId": file_id, | |
| "webViewLink": created.get("webViewLink"), | |
| "directDownloadLink": f"https://drive.google.com/uc?id={file_id}" | |
| } | |