Skip to content

Commit 3da01f5

Browse files
committed
Simplify changes to provider.py
Signed-off-by: Judah Rand <17158624+judahrand@users.noreply.github.com>
1 parent 907394b commit 3da01f5

1 file changed

Lines changed: 16 additions & 22 deletions

File tree

oras/provider.py

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,13 @@ def download_blob(
540540
if digest == oras.defaults.blank_hash:
541541
return os.devnull
542542
raise e
543-
self._validate_blob(outfile, oras.oci.Digest(digest), size)
543+
544+
try:
545+
self._validate_blob(outfile, oras.oci.Digest(digest), size)
546+
except Exception:
547+
os.remove(outfile)
548+
raise
549+
544550
return outfile
545551

546552
def put_upload(
@@ -916,7 +922,6 @@ def pull(
916922
:type outdir: str
917923
:param target: target location to pull from
918924
:type target: str
919-
:raises ValueError: if a layer descriptor or downloaded layer is invalid
920925
"""
921926
container = self.get_container(target)
922927
self.auth.load_configs(
@@ -944,28 +949,17 @@ def pull(
944949
)
945950
continue
946951

947-
digest = layer["digest"]
948-
size = layer["size"]
949-
if not isinstance(size, int) or isinstance(size, bool) or size < 0:
950-
raise ValueError(f"Invalid OCI descriptor size for {digest}: {size!r}.")
952+
# A directory will need to be uncompressed and moved
953+
if layer["mediaType"] == oras.defaults.default_blob_dir_media_type:
954+
targz = oras.utils.get_tmpfile(suffix=".tar.gz")
955+
self.download_blob(container, layer["digest"], targz, layer["size"])
951956

952-
outfile_dir = os.path.dirname(outfile)
953-
if outfile_dir and not os.path.exists(outfile_dir):
954-
oras.utils.mkdir_p(outfile_dir)
957+
# The artifact will be extracted to the correct name
958+
oras.utils.extract_targz(targz, os.path.dirname(outfile))
955959

956-
# Keep downloaded content private until its descriptor is verified.
957-
with TemporaryDirectory(prefix=".oras-", dir=outfile_dir) as tmpdir:
958-
is_directory = (
959-
layer["mediaType"] == oras.defaults.default_blob_dir_media_type
960-
)
961-
staged = os.path.join(tmpdir, "blob.tar.gz" if is_directory else "blob")
962-
self.download_blob(container, digest, staged, size)
963-
964-
# A verified directory archive can now be safely consumed.
965-
if is_directory:
966-
oras.utils.extract_targz(staged, outfile_dir)
967-
else:
968-
os.replace(staged, outfile)
960+
# Anything else just extracted directly
961+
else:
962+
self.download_blob(container, layer["digest"], outfile, layer["size"])
969963

970964
logger.info(f"Successfully pulled {outfile}.")
971965
files.append(outfile)

0 commit comments

Comments
 (0)