Skip to content
Snippets Groups Projects
Commit 7ca18e55 authored by Morian Sonnet's avatar Morian Sonnet
Browse files

Reduce code duplication

parent 60d60211
Branches
Tags
1 merge request!23Add support for custom progress callbacks for RDSS3 storage
......@@ -665,7 +665,8 @@ class Resource:
self,
path: str,
handle: BinaryIO,
progress: Callable[[int], None] | None = None
progress: Callable[[int], None] | None = None,
use_put: bool = False
):
"""
Uploads a file-like object to a resource in Coscine.
......@@ -705,7 +706,10 @@ class Resource:
progress_callback(progress_bar, mon.bytes_read, progress)
)
headers = {"Content-Type": monitor.content_type}
self.client.post(uri, data=monitor, headers=headers)
if use_put:
self.client.put(uri, data=monitor, headers=headers)
else:
self.client.post(uri, data=monitor, headers=headers)
def _upload_blob_s3(self, path: str, handle: BinaryIO) -> None:
"""
......@@ -1201,27 +1205,11 @@ class FileObject:
handle = handle.encode("utf-8")
if isinstance(handle, bytes):
handle = BytesIO(handle)
uri = self.client.uri(
"projects", self.resource.project.id,
"resources", self.resource.id,
"blobs", self.path
)
files = {
"file": (self.path, handle, "application/octect-stream")
}
encoder = MultipartEncoder(fields=files)
progress_bar = tqdm(
desc=self.path, total=encoder.len,
unit="B", unit_scale=True, ascii=True,
disable=not self.client.verbose
)
monitor = MultipartEncoderMonitor(
encoder,
lambda mon:
progress_callback(progress_bar, mon.bytes_read, progress)
)
headers = {"Content-Type": monitor.content_type}
self.client.put(uri, data=monitor, headers=headers)
if self.type.general_type == "rdss3" and self.client.native:
self.resource._upload_blob_s3(self.path, handle, progress)
else:
self.resource._upload_blob(self.path, handle, progress, use_put = True)
def update_metadata(self, metadata: MetadataForm | dict | rdflib.Graph) -> None:
"""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment