-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added compute_file_md5 and compute_file_etag to file_utils.
- Loading branch information
1 parent
d4f144e
commit 71b93ba
Showing
2 changed files
with
14 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,20 +1,31 @@ | ||
from contextlib import contextmanager | ||
import requests | ||
from typing import Optional | ||
from typing import Callable, Optional | ||
from dcicutils.tmpfile_utils import temporary_file | ||
|
||
|
||
@contextmanager | ||
def download(url: str, suffix: Optional[str] = None, binary: bool = True) -> Optional[str]: | ||
def download(url: str, suffix: Optional[str] = None, binary: bool = True, | ||
progress: Optional[Callable] = None) -> Optional[str]: | ||
""" | ||
Context manager to ownload the given URL into a temporary file and yields the file | ||
path to it. An optional file suffix may be specified. Defaults to binary file mode; | ||
if this is not desired then pass False as the binary argument. | ||
""" | ||
if not callable(progress): | ||
progress = None | ||
with temporary_file(suffix=suffix) as file: | ||
response = requests.get(url, stream=True) | ||
if progress: | ||
nbytes = 0 | ||
nbytes_total = None | ||
if isinstance(content_length := response.headers.get("Content-Length"), str) and content_length.isdigit(): | ||
nbytes_total = int(content_length) | ||
with open(file, "wb" if binary is True else "w") as f: | ||
for chunk in response.iter_content(chunk_size=8192): | ||
if chunk: | ||
f.write(chunk) | ||
if progress: | ||
nbytes += len(chunk) | ||
progress(nbytes, nbytes_total) | ||
yield file |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters