| |
| |
| |
| |
| |
|
|
| 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() |
|
|
|
|
| |
| |
|
|
| |
| |
| |
|
|