MarneMorgan/piper_ffmpeg
0
1import os, json2from google.oauth2.service_account import Credentials3from googleapiclient.discovery import build4from googleapiclient.http import MediaFileUpload5 6SCOPES = ["https://www.googleapis.com/auth/drive.file"]7 8def _get_env(name: str) -> str:9 v = os.getenv(name, "").strip()10 if not v:11 raise RuntimeError(f"Missing env secret: {name}")12 return v13 14def _get_drive_service():15 creds_json = _get_env("GOOGLE_SERVICE_ACCOUNT_JSON")16 info = json.loads(creds_json)17 creds = Credentials.from_service_account_info(info, scopes=SCOPES)18 return build("drive", "v3", credentials=creds, cache_discovery=False)19 20def upload_file(local_path: str, filename: str, mime_type: str):21 folder_id = _get_env("DRIVE_FOLDER_ID")22 service = _get_drive_service()23 24 file_metadata = {"name": filename, "parents": [folder_id]}25 media = MediaFileUpload(local_path, mimetype=mime_type, resumable=True)26 27 created = service.files().create(28 body=file_metadata,29 media_body=media,30 fields="id, webViewLink"31 ).execute()32 33 file_id = created["id"]34 return {35 "driveFileId": file_id,36 "webViewLink": created.get("webViewLink"),37 "directDownloadLink": f"https://drive.google.com/uc?id={file_id}"38 }39 