|
|
|
|
|
|
|
|
|
|
|
|
|
import subprocess |
|
from pathlib import Path |
|
from typing import List |
|
|
|
|
|
dest = "s3://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/" |
|
|
|
output = Path("output") |
|
|
|
|
|
def aws_s3_cmd(args) -> List[str]: |
|
""" |
|
This function returns the full args for subprocess to do a command |
|
with aws. |
|
""" |
|
cmd_args = ["aws", "s3", "--profile", "saml"] + args |
|
return cmd_args |
|
|
|
|
|
def fs3_exists(path) -> bool: |
|
""" |
|
Returns True if the path exists inside dest on S3. |
|
In fact, will also return True if there is a file which has the given |
|
path as a prefix, but we are careful about this. |
|
""" |
|
out = subprocess.check_output(aws_s3_cmd(["ls", path])) |
|
return len(out) != 0 |
|
|
|
|
|
def get_html_wrappers() -> None: |
|
for directory in sorted(output.iterdir()): |
|
output_wrapper = directory / "download.html" |
|
assert not output_wrapper.exists() |
|
dest_wrapper = dest + directory.name + "/download.html" |
|
if fs3_exists(dest_wrapper): |
|
subprocess.check_call(aws_s3_cmd(["cp", dest_wrapper, str(output_wrapper)])) |
|
|
|
|
|
def write_html_wrappers() -> None: |
|
html = """ |
|
<a href="$">$</a><br> |
|
""" |
|
|
|
for directory in sorted(output.iterdir()): |
|
files = list(directory.glob("*.whl")) |
|
assert len(files) == 1, files |
|
[wheel] = files |
|
|
|
this_html = html.replace("$", wheel.name) |
|
output_wrapper = directory / "download.html" |
|
if output_wrapper.exists(): |
|
contents = output_wrapper.read_text() |
|
if this_html not in contents: |
|
with open(output_wrapper, "a") as f: |
|
f.write(this_html) |
|
else: |
|
output_wrapper.write_text(this_html) |
|
|
|
|
|
def to_aws() -> None: |
|
for directory in output.iterdir(): |
|
for file in directory.iterdir(): |
|
print(file) |
|
subprocess.check_call( |
|
aws_s3_cmd(["cp", str(file), dest + str(file.relative_to(output))]) |
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
|
|
write_html_wrappers() |
|
to_aws() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|