Pārlūkot izejas kodu

Update write arg to writable, update test

FabioRosado 4 gadi atpakaļ
vecāks
revīzija
384dd649eb

+ 3 - 3
cloudbridge/interfaces/resources.py

@@ -2204,7 +2204,7 @@ class BucketObject(CloudResource):
         pass
 
     @abstractmethod
-    def generate_url(self, expires_in, write=False):
+    def generate_url(self, expires_in, writable=False):
         """
         Generate a signed URL to this object.
 
@@ -2214,8 +2214,8 @@ class BucketObject(CloudResource):
 
         :type expires_in: ``int``
         :param expires_in: Time to live of the generated URL in seconds.
-        :type write: ``bool``
-        :param write: Write permission for this signed URL. Users with the URL
+        :type writable: ``bool``
+        :param writable: Write permission for this signed URL. Users with the URL
             will be able to upload to this object, but they will NOT be able to
             read from it.
 

+ 4 - 4
cloudbridge/providers/aws/resources.py

@@ -871,10 +871,10 @@ class AWSBucketObject(BaseBucketObject):
     def delete(self):
         self._obj.delete()
 
-    def generate_url(self, expires_in, write):
-        if write:
-            return self._provider.s3_conn.meta.client.create_presigned_post(
-                self._obj.bucket_name, self.id, expiration=expires_in
+    def generate_url(self, expires_in, writable):
+        if writable:
+            return self._provider.s3_conn.meta.client.generate_presigned_post(
+                self._obj.bucket_name, self.id, ExpiresIn=expires_in
             )
         return self._provider.s3_conn.meta.client.generate_presigned_url(
             'get_object',

+ 2 - 2
cloudbridge/providers/azure/azure_client.py

@@ -451,7 +451,7 @@ class AzureClient(object):
         blob_client = self.blob_client(container_name, blob_name)
         blob_client.delete_blob(delete_snapshots)
 
-    def get_blob_url(self, container_name, blob_name, expiry_time, write):
+    def get_blob_url(self, container_name, blob_name, expiry_time, writable):
         now = datetime.datetime.utcnow()
         expiry = now + datetime.timedelta(
             seconds=expiry_time)
@@ -462,7 +462,7 @@ class AzureClient(object):
         )
         sas = generate_blob_sas(
             self.storage_account, container_name, blob_name,
-            permission=BlobSasPermissions(read=True, write=write), expiry=expiry,
+            permission=BlobSasPermissions(read=True, write=writable), expiry=expiry,
             user_delegation_key=delegation_key
         )
         url = (

+ 2 - 2
cloudbridge/providers/azure/resources.py

@@ -258,12 +258,12 @@ class AzureBucketObject(BaseBucketObject):
         """
         self._blob_client.delete_blob()
 
-    def generate_url(self, expires_in, write):
+    def generate_url(self, expires_in, writable):
         """
         Generate a URL to this object.
         """
         return self._provider.azure_client.get_blob_url(
-            self._container, self.name, expires_in, write)
+            self._container, self.name, expires_in, writable)
 
     def refresh(self):
         pass

+ 2 - 2
cloudbridge/providers/gcp/resources.py

@@ -1975,7 +1975,7 @@ class GCPBucketObject(BaseBucketObject):
              .delete(bucket=self._obj['bucket'], object=self.name)
              .execute())
 
-    def generate_url(self, expires_in, write):
+    def generate_url(self, expires_in, writable):
         """
         Generates a signed URL accessible to everyone.
 
@@ -1984,7 +1984,7 @@ class GCPBucketObject(BaseBucketObject):
         the files with the same URL.
 
         """
-        http_method = "PUT" if write else "GET"
+        http_method = "PUT" if writable else "GET"
 
         # pylint:disable=protected-access
         return helpers.generate_signed_url(

+ 2 - 2
cloudbridge/providers/openstack/resources.py

@@ -1316,8 +1316,8 @@ class OpenStackBucketObject(BaseBucketObject):
                 result = result and del_res['success']
         return result
 
-    def generate_url(self, expires_in, write):
-        http_method = "POST" if write else "GET"
+    def generate_url(self, expires_in, writable):
+        http_method = "POST" if writable else "GET"
         # Set a temp url key on the object (http://bit.ly/2NBiXGD)
         temp_url_key = "cloudbridge-tmp-url-key"
         self._provider.swift.post_account(

+ 13 - 5
tests/test_object_store_service.py

@@ -12,6 +12,8 @@ from cloudbridge.interfaces.exceptions import DuplicateResourceException
 from cloudbridge.interfaces.provider import TestMockHelperMixin
 from cloudbridge.interfaces.resources import Bucket
 from cloudbridge.interfaces.resources import BucketObject
+from cloudbridge.providers.aws.provider import AWSCloudProvider
+from cloudbridge.providers.gcp import GCPCloudProvider
 
 from tests import helpers
 from tests.helpers import ProviderTestBase
@@ -204,16 +206,22 @@ class CloudObjectStoreServiceTestCase(ProviderTestBase):
 
             with cb_helpers.cleanup_action(lambda: obj.delete()):
                 content = b"Hello World. Generate a url."
-                obj.upload(content)
-                target_stream = BytesIO()
-                obj.save_content(target_stream)
 
-                url = obj.generate_url(100, write=True)
+                url = obj.generate_url(100, writable=True)
                 if isinstance(self.provider, TestMockHelperMixin):
                     raise self.skipTest(
                         "Skipping rest of test - mock providers can't"
                         " access generated url")
-                self.assertEqual(requests.post(url).content, content)
+                elif isinstance(self.provider, GCPCloudProvider):
+                    requests.put(url, data=content)
+                elif isinstance(self.provider, AWSCloudProvider):
+                    requests.put(url['url'], data=url['fields'], files={"file": (obj_name, content)})
+                else:
+                    requests.post(url, data=content)
+                
+                obj = test_bucket.objects.get(obj_name)
+                obj_content = [content for content in obj.iter_content()]
+                self.assertEqual(obj_content[0], content)
 
     @helpers.skipIfNoService(['storage.buckets'])
     def test_upload_download_bucket_content_from_file(self):