import argparse from collections import defaultdict from boto3 import client parser = argparse.ArgumentParser() parser.add_argument("--access_key_id", type=str, required=True) parser.add_argument("--secret_access_key", type=str, required=True) parser.add_argument("--bucket", type=str, required=True) parser.add_argument("--region", type=str, required=True) args = parser.parse_args() ROOT_URL = f"https://{args.bucket}.s3.{args.region}.amazonaws.com/whl" html = "\n\n\n{}\n\n" href = ' {}
' html_args = { "ContentType": "text/html", "CacheControl": "max-age=300", "ACL": "public-read", } s3 = client( "s3", aws_access_key_id=args.access_key_id, aws_secret_access_key=args.secret_access_key, ) bucket = s3.Bucket(name="nerfacc-bucket") wheels_dict = defaultdict(list) for obj in bucket.objects.filter(Prefix="whl"): if obj.key[-3:] != "whl": continue torch_version, wheel = obj.key.split("/")[-2:] wheel = f"{torch_version}/{wheel}" wheels_dict[torch_version].append(wheel) index_html = html.format( "\n".join( [ href.format(f"{torch_version}.html".replace("+", "%2B"), version) for version in wheels_dict ] ) ) with open("index.html", "w") as f: f.write(index_html) bucket.Object("whl/index.html").upload_file("index.html", html_args) for torch_version, wheel_names in wheels_dict.items(): torch_version_html = html.format( "\n".join( [ href.format( f"{ROOT_URL}/{wheel_name}".replace("+", "%2B"), wheel_name ) for wheel_name in wheel_names ] ) ) with open(f"{torch_version}.html", "w") as f: f.write(torch_version_html) bucket.Object(f"whl/{torch_version}.html").upload_file( f"{torch_version}.html", args )