Skip to main content

aws/s3hash.py

1#!/usr/bin/env python3
2"""
3Get the checksum/hash of an object in S3.
4"""
6import argparse
7import hashlib
8import os
10import tqdm
12from _common import create_s3_session, parse_s3_uri
15def parse_args():
16 parser = argparse.ArgumentParser(
17 prog=os.path.basename(__file__), description="Get the hash of an object in S3"
18 )
20 parser.add_argument("S3_URI")
21 parser.add_argument(
22 "--algorithm", help="which checksum algorithm to use", default="sha256"
23 )
25 return parser.parse_args()
28if __name__ == "__main__":
29 args = parse_args()
31 s3_location = parse_s3_uri(args.S3_URI)
33 sess = create_s3_session(args.S3_URI)
35 s3_obj = sess.client("s3").get_object(
36 Bucket=s3_location["Bucket"], Key=s3_location["Path"]
37 )
39 h = hashlib.new(args.algorithm)
41 with tqdm.tqdm(total=s3_obj["ContentLength"], unit="B", unit_scale=True) as pbar:
42 while True:
43 chunk = s3_obj["Body"].read(8192)
44 pbar.update(len(chunk))
45 h.update(chunk)
47 if not chunk:
48 break
50 print(h.hexdigest(), end="")