--- pid: 1532856 cwd: "/home/ubuntu/transcripts" command: "cd /home/ubuntu/transcripts && source venv/bin/activate && python3 << 'PYEOF'\nimport os, time, boto3\nfrom concurrent.futures import ThreadPoolExecutor, as_completed\nfrom botocore.config import Config\nfrom dotenv import load_dotenv\n\nload_dotenv('.env')\ns3 = boto3.client('s3', endpoint_url=os.environ['R2_ENDPOINT_URL'], aws_access_key_id=os.environ['R2_ACCESS_KEY_ID'], aws_secret_access_key=os.environ['R2_SECRET_ACCESS_KEY'], region_name='auto', config=Config(max_pool_connections=16, multipart_threshold=256*1024*1024, multipart_chunksize=128*1024*1024))\n\nBUCKET = 'metafiles'\nPREFIX = 'transcripts_metadata'\n\n# Verify bucket exists\ntry:\n s3.head_bucket(Bucket=BUCKET)\n print(f\"Bucket '{BUCKET}' exists\")\nexcept Exception as e:\n print(f\"Bucket '{BUCKET}' check failed: {e}\")\n print(\"Attempting to create bucket...\")\n try:\n s3.create_bucket(Bucket=BUCKET)\n print(f\"Created bucket '{BUCKET}'\")\n except Exception as e2:\n print(f\"Create failed: {e2}\")\n raise\n\nDATA_FILES = [\n (\"data/transcription_results.parquet\", \"data\"),\n (\"data/transcription_flags.parquet\", \"data\"),\n (\"data/recover_v2_consolidated.parquet\", \"data\"),\n (\"data/recover_manifest.parquet\", \"data\"),\n (\"data/youtube_video_metadata_all.csv\", \"data\"),\n (\"data/video_tts_classification_all.csv\", \"data\"),\n (\"data/video_tts_classification_final.csv\", \"data\"),\n (\"data/video_tts_dropped_by_channel.csv\", \"data\"),\n (\"data/golden_segments.csv\", \"data\"),\n (\"data/redo_segments.csv\", \"data\"),\n (\"data/dispose_segments.csv\", \"data\"),\n (\"data/video_summary.csv\", \"data\"),\n]\n\nFINAL_DATA_FILES = [\n (\"final_data/final_cleaned_segments_with_variants_rerouted_repetition_filtered.parquet\", \"final_data\"),\n (\"final_data/final_cleaned_segments.parquet\", \"final_data\"),\n (\"final_data/transcript_variants_clean_rerouted.parquet\", \"final_data\"),\n (\"final_data/transcript_variants_merged.parquet\", \"final_data\"),\n (\"final_data/final_cleaned_excluded_videos.csv\", \"final_data\"),\n (\"final_data/final_cleaned_keep_videos.csv\", \"final_data\"),\n (\"final_data/final_cleaned_video_rollup.parquet\", \"final_data\"),\n (\"final_data/repetition_flags.parquet\", \"final_data\"),\n]\n\nALL_FILES = DATA_FILES + FINAL_DATA_FILES\n\ndef upload_one(local_path, r2_key, size_gb):\n t0 = time.time()\n print(f\" UPLOADING {local_path} ({size_gb:.1f}GB) -> s3://{BUCKET}/{r2_key}\")\n s3.upload_file(local_path, BUCKET, r2_key)\n elapsed = time.time() - t0\n print(f\" DONE {local_path} in {elapsed:.0f}s\")\n return local_path, elapsed\n\nt0 = time.time()\ntotal_bytes = 0\nfor local_rel, subfolder in ALL_FILES:\n local_path = f\"/home/ubuntu/transcripts/{local_rel}\"\n size = os.path.getsize(local_path)\n total_bytes += size\n r2_key = f\"{PREFIX}/{subfolder}/{os.path.basename(local_rel)}\"\n upload_one(local_path, r2_key, size / (1024**3))\n\nelapsed = time.time() - t0\nprint(f\"\\n=== BACKUP COMPLETE ===\")\nprint(f\"Files: {len(ALL_FILES)}\")\nprint(f\"Total: {total_bytes / (1024**3):.1f} GB\")\nprint(f\"Time: {elapsed:.0f}s\")\nPYEOF" started_at: 2026-03-14T01:11:16.522Z running_for_seconds: 0 --- Traceback (most recent call last): File "", line 7, in File "/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/botocore/config.py", line 354, in __init__ self._user_provided_options = self._record_user_provided_options( File "/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/botocore/config.py", line 402, in _record_user_provided_options raise TypeError(f"Got unexpected keyword argument '{key}'") TypeError: Got unexpected keyword argument 'multipart_threshold' --- exit_code: 1 elapsed_ms: 224 ended_at: 2026-03-14T01:11:16.746Z ---