From 4b24bece0555f2b07d47101d2e8878cb62b90f83 Mon Sep 17 00:00:00 2001 From: Xiao Gui Date: Mon, 27 Nov 2023 11:19:08 +0100 Subject: [PATCH] fix: do not mutate kwarg doc: add doc on how to add custom headers --- README.md | 10 +++++++++- ebrains_drive/client.py | 3 +++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c9f1170e50..016da65ad0 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,15 @@ Example Usage: fh.seek(0) bucket.upload(fh, "test/foobar2.txt") - # it seems newly uplaoded file will **NOT** be available immediately. Sleep for x seconds? + # Advanced: specify headers to optimise the stored objects + import gzip + from io import BytesIO + fh = BytesIO(gzip.compress(b"foo bar")) + fh.seek(0) + # Most HTTP libraries can handle Content-Encoding header + bucket.upload(fh, "test/foobar2_gzipped.txt", headers={"Content-Encoding": "gzip"}) + + # it seems newly uploaded file will **NOT** be available immediately. Sleep for x seconds? from time import sleep sleep(1) diff --git a/ebrains_drive/client.py b/ebrains_drive/client.py index 036a6164ee..4db8c0301c 100644 --- a/ebrains_drive/client.py +++ b/ebrains_drive/client.py @@ -4,6 +4,7 @@ import base64 import json import time +from copy import deepcopy from ebrains_drive.utils import urljoin, on_401_raise_unauthorized from ebrains_drive.exceptions import ClientHttpError, TokenExpired from ebrains_drive.repos import Repos @@ -74,6 +75,8 @@ def send_request(self, method: str, url: str, *args, **kwargs): # - accounts for if url was provided with leading slashes url = self.server.rstrip('/') + '/' + url.lstrip('/') + # deepcopy the kwargs so do not mutate the original kwargs + kwargs = deepcopy(kwargs) headers = kwargs.get('headers', {}) headers.setdefault('Authorization', 'Bearer ' + self._token) kwargs['headers'] = headers