Metadata database tracks all uploads with project, package, tag, and timestamp queryable via API
This commit is contained in:
@@ -202,6 +202,9 @@ class StorageResult(NamedTuple):
|
||||
md5: Optional[str] = None
|
||||
sha1: Optional[str] = None
|
||||
s3_etag: Optional[str] = None
|
||||
already_existed: bool = (
|
||||
False # True if artifact was deduplicated (S3 object already existed)
|
||||
)
|
||||
|
||||
|
||||
class S3StorageUnavailableError(StorageError):
|
||||
@@ -354,6 +357,7 @@ class S3Storage:
|
||||
md5=md5_hash,
|
||||
sha1=sha1_hash,
|
||||
s3_etag=s3_etag,
|
||||
already_existed=exists,
|
||||
)
|
||||
|
||||
def _store_multipart(self, file: BinaryIO, content_length: int) -> StorageResult:
|
||||
@@ -433,6 +437,7 @@ class S3Storage:
|
||||
md5=md5_hash,
|
||||
sha1=sha1_hash,
|
||||
s3_etag=s3_etag,
|
||||
already_existed=True,
|
||||
)
|
||||
|
||||
# Seek back to start for upload
|
||||
@@ -486,6 +491,7 @@ class S3Storage:
|
||||
md5=md5_hash,
|
||||
sha1=sha1_hash,
|
||||
s3_etag=s3_etag,
|
||||
already_existed=False,
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
@@ -535,6 +541,7 @@ class S3Storage:
|
||||
md5=md5_hash,
|
||||
sha1=sha1_hash,
|
||||
s3_etag=s3_etag,
|
||||
already_existed=True,
|
||||
)
|
||||
|
||||
# Upload based on size
|
||||
@@ -615,6 +622,7 @@ class S3Storage:
|
||||
md5=md5_hash,
|
||||
sha1=sha1_hash,
|
||||
s3_etag=s3_etag,
|
||||
already_existed=False,
|
||||
)
|
||||
|
||||
def initiate_resumable_upload(self, expected_hash: str) -> Dict[str, Any]:
|
||||
|
||||
Reference in New Issue
Block a user