wandb
1import fire
2import wandb
3from wandb.proto import wandb_internal_pb2
4from wandb.sdk.internal import datastore
5
6
7def _robust_scan(ds):
8"""Attempt to scan data, handling incomplete files."""
9try:
10return ds.scan_data()
11except AssertionError as e:
12if ds.in_last_block():
13wandb.termwarn(
14f".wandb file is incomplete ({e}), be sure to sync this run again once it's finished"
15)
16return None
17else:
18raise e
19
20
21def run(wandb_file: str) -> None:
22ds = datastore.DataStore()
23try:
24ds.open_for_scan(wandb_file)
25except AssertionError as e:
26print(f".wandb file is empty ({e}), skipping: {wandb_file}")
27return
28
29# save exit for final send
30while True:
31data = _robust_scan(ds)
32if data is None:
33break
34pb = wandb_internal_pb2.Record()
35pb.ParseFromString(data)
36record_type = pb.WhichOneof("record_type")
37print(f"RECORD TYPE: {record_type}")
38print(pb)
39print()
40input()
41
42
43if __name__ == "__main__":
44fire.Fire(run)
45