From 10712e2d5310c13068e771c8e44c3309ac35f5e3 Mon Sep 17 00:00:00 2001 From: Mayank Jain Date: Thu, 20 Dec 2018 17:07:11 +0530 Subject: [PATCH 1/3] adding publicRead ACL when using write method --- AUTHORS | 1 + storages/backends/gcloud.py | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/AUTHORS b/AUTHORS index a0baffc83..b9bcf3a4a 100644 --- a/AUTHORS +++ b/AUTHORS @@ -36,6 +36,7 @@ By order of apparition, thanks: * Alex Watt (Google Cloud Storage patch) * Jumpei Yoshimura (S3 docs) * Jon Dufresne + * Mayank Jain (Blob ACL setting on write) diff --git a/storages/backends/gcloud.py b/storages/backends/gcloud.py index b9aa55274..cd48dc08b 100644 --- a/storages/backends/gcloud.py +++ b/storages/backends/gcloud.py @@ -32,6 +32,7 @@ def __init__(self, name, mode, storage): self.blob = storage.bucket.get_blob(name) if not self.blob and 'w' in mode: self.blob = Blob(self.name, storage.bucket) + self.blob.acl.save_predefined(storage.default_acl) self._file = None self._is_dirty = False @@ -75,8 +76,10 @@ def write(self, content): def close(self): if self._file is not None: if self._is_dirty: - self.blob.upload_from_file(self.file, rewind=True, - content_type=self.mime_type) + self.blob.upload_from_file( + self.file, rewind=True, content_type=self.mime_type) + if self._storage.default_acl == 'publicRead': + self.blob.acl.save_predefined(self._storage.default_acl) self._file.close() self._file = None From 5cffb1e213ab563e54edebdb6839d69bab54dea3 Mon Sep 17 00:00:00 2001 From: Mayank Jain Date: Thu, 20 Dec 2018 17:12:26 +0530 Subject: [PATCH 2/3] minor change --- storages/backends/gcloud.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storages/backends/gcloud.py b/storages/backends/gcloud.py index cd48dc08b..7e6a4df98 100644 --- a/storages/backends/gcloud.py +++ b/storages/backends/gcloud.py @@ -78,7 +78,7 @@ def close(self): if self._is_dirty: self.blob.upload_from_file( self.file, rewind=True, content_type=self.mime_type) - if self._storage.default_acl == 'publicRead': + if self._storage.default_acl: self.blob.acl.save_predefined(self._storage.default_acl) self._file.close() self._file = None From b98e524f9f5887ea1b6381282cdb72826b217ff8 Mon Sep 17 00:00:00 2001 From: Mayank Jain Date: Fri, 21 Dec 2018 11:44:14 +0530 Subject: [PATCH 3/3] addition for handling acl changes made outside storages, only affecting newly created blobs --- storages/backends/gcloud.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/storages/backends/gcloud.py b/storages/backends/gcloud.py index 7e6a4df98..9fdf41a82 100644 --- a/storages/backends/gcloud.py +++ b/storages/backends/gcloud.py @@ -30,9 +30,10 @@ def __init__(self, name, mode, storage): self._mode = mode self._storage = storage self.blob = storage.bucket.get_blob(name) + self._create = False if not self.blob and 'w' in mode: self.blob = Blob(self.name, storage.bucket) - self.blob.acl.save_predefined(storage.default_acl) + self._create = True self._file = None self._is_dirty = False @@ -78,7 +79,7 @@ def close(self): if self._is_dirty: self.blob.upload_from_file( self.file, rewind=True, content_type=self.mime_type) - if self._storage.default_acl: + if self._storage.default_acl and self._create: self.blob.acl.save_predefined(self._storage.default_acl) self._file.close() self._file = None