| |
| """Minimal authenticated GCS access for the Waymo bucket using the existing gcloud |
| legacy ADC refresh token (no gcloud/gsutil/google-cloud libs needed; requests only).""" |
| import json, os, urllib.parse, glob, requests |
|
|
| BUCKET = "waymo_open_dataset_v_1_4_3" |
| PREFIX = "individual_files/training/" |
|
|
|
|
| def _adc_path(): |
| cands = glob.glob(os.path.expanduser("~/.config/gcloud/legacy_credentials/*/adc.json")) |
| cands += [os.path.expanduser("~/.config/gcloud/application_default_credentials.json")] |
| for c in cands: |
| if os.path.exists(c): |
| return c |
| raise FileNotFoundError("no ADC json found") |
|
|
|
|
| def access_token(): |
| d = json.load(open(_adc_path())) |
| r = requests.post("https://oauth2.googleapis.com/token", data={ |
| "client_id": d["client_id"], "client_secret": d["client_secret"], |
| "refresh_token": d["refresh_token"], "grant_type": "refresh_token"}, timeout=30) |
| r.raise_for_status() |
| return r.json()["access_token"] |
|
|
|
|
| def list_training_tfrecords(tok): |
| names, page = [], None |
| while True: |
| params = {"prefix": PREFIX, "maxResults": 1000} |
| if page: |
| params["pageToken"] = page |
| r = requests.get(f"https://storage.googleapis.com/storage/v1/b/{BUCKET}/o", |
| headers={"Authorization": f"Bearer {tok}"}, params=params, timeout=60) |
| r.raise_for_status() |
| j = r.json() |
| names += [it["name"] for it in j.get("items", []) if it["name"].endswith(".tfrecord")] |
| page = j.get("nextPageToken") |
| if not page: |
| break |
| return sorted(names) |
|
|
|
|
| def download(tok, name, dst): |
| os.makedirs(os.path.dirname(dst), exist_ok=True) |
| url = (f"https://storage.googleapis.com/storage/v1/b/{BUCKET}/o/" |
| f"{urllib.parse.quote(name, safe='')}?alt=media") |
| with requests.get(url, headers={"Authorization": f"Bearer {tok}"}, stream=True, timeout=600) as r: |
| r.raise_for_status() |
| with open(dst, "wb") as f: |
| for chunk in r.iter_content(chunk_size=1 << 22): |
| f.write(chunk) |
| return dst |
|
|
|
|
| if __name__ == "__main__": |
| tok = access_token() |
| print("got access token:", tok[:12], "...") |
| segs = list_training_tfrecords(tok) |
| print("training tfrecords in bucket:", len(segs)) |
| for s in segs[:3]: |
| print(" ", s) |
|
|