Răsfoiți Sursa

Update write arg to writable, update test

FabioRosado 4 ani în urmă
părinte
comite
384dd649eb

+ 3 - 3
cloudbridge/interfaces/resources.py

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

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

@@ -871,10 +871,10 @@ class AWSBucketObject(BaseBucketObject):
     def delete(self):
     def delete(self):
         self._obj.delete()
         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(
         return self._provider.s3_conn.meta.client.generate_presigned_url(
             'get_object',
             '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 = self.blob_client(container_name, blob_name)
         blob_client.delete_blob(delete_snapshots)
         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()
         now = datetime.datetime.utcnow()
         expiry = now + datetime.timedelta(
         expiry = now + datetime.timedelta(
             seconds=expiry_time)
             seconds=expiry_time)
@@ -462,7 +462,7 @@ class AzureClient(object):
         )
         )
         sas = generate_blob_sas(
         sas = generate_blob_sas(
             self.storage_account, container_name, blob_name,
             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
             user_delegation_key=delegation_key
         )
         )
         url = (
         url = (

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

@@ -258,12 +258,12 @@ class AzureBucketObject(BaseBucketObject):
         """
         """
         self._blob_client.delete_blob()
         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.
         Generate a URL to this object.
         """
         """
         return self._provider.azure_client.get_blob_url(
         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):
     def refresh(self):
         pass
         pass

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

@@ -1975,7 +1975,7 @@ class GCPBucketObject(BaseBucketObject):
              .delete(bucket=self._obj['bucket'], object=self.name)
              .delete(bucket=self._obj['bucket'], object=self.name)
              .execute())
              .execute())
 
 
-    def generate_url(self, expires_in, write):
+    def generate_url(self, expires_in, writable):
         """
         """
         Generates a signed URL accessible to everyone.
         Generates a signed URL accessible to everyone.
 
 
@@ -1984,7 +1984,7 @@ class GCPBucketObject(BaseBucketObject):
         the files with the same URL.
         the files with the same URL.
 
 
         """
         """
-        http_method = "PUT" if write else "GET"
+        http_method = "PUT" if writable else "GET"
 
 
         # pylint:disable=protected-access
         # pylint:disable=protected-access
         return helpers.generate_signed_url(
         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']
                 result = result and del_res['success']
         return result
         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)
         # Set a temp url key on the object (http://bit.ly/2NBiXGD)
         temp_url_key = "cloudbridge-tmp-url-key"
         temp_url_key = "cloudbridge-tmp-url-key"
         self._provider.swift.post_account(
         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.provider import TestMockHelperMixin
 from cloudbridge.interfaces.resources import Bucket
 from cloudbridge.interfaces.resources import Bucket
 from cloudbridge.interfaces.resources import BucketObject
 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 import helpers
 from tests.helpers import ProviderTestBase
 from tests.helpers import ProviderTestBase
@@ -204,16 +206,22 @@ class CloudObjectStoreServiceTestCase(ProviderTestBase):
 
 
             with cb_helpers.cleanup_action(lambda: obj.delete()):
             with cb_helpers.cleanup_action(lambda: obj.delete()):
                 content = b"Hello World. Generate a url."
                 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):
                 if isinstance(self.provider, TestMockHelperMixin):
                     raise self.skipTest(
                     raise self.skipTest(
                         "Skipping rest of test - mock providers can't"
                         "Skipping rest of test - mock providers can't"
                         " access generated url")
                         " 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'])
     @helpers.skipIfNoService(['storage.buckets'])
     def test_upload_download_bucket_content_from_file(self):
     def test_upload_download_bucket_content_from_file(self):