diff --git a/pyinfra/storage/adapters/azure.py b/pyinfra/storage/adapters/azure.py index 9f451ec..f954e38 100644 --- a/pyinfra/storage/adapters/azure.py +++ b/pyinfra/storage/adapters/azure.py @@ -37,6 +37,11 @@ class AzureStorageAdapter(object): blob_client = container_client.get_blob_client(object_name) blob_client.upload_blob(data, overwrite=True) + def exists(self, bucket_name, object_name): + container_client = self.__provide_container_client(bucket_name) + blob_client = container_client.get_blob_client(object_name) + return blob_client.exists() + @retry(tries=3, delay=5, jitter=(1, 3)) def get_object(self, bucket_name, object_name): logger.debug(f"Downloading '{object_name}'...") diff --git a/pyinfra/storage/adapters/s3.py b/pyinfra/storage/adapters/s3.py index 0dc430f..16e20ae 100644 --- a/pyinfra/storage/adapters/s3.py +++ b/pyinfra/storage/adapters/s3.py @@ -42,6 +42,13 @@ class S3StorageAdapter(object): data = io.BytesIO(data) self._client.put_object(bucket_name, object_name, data, length=data.getbuffer().nbytes) + def exists(self, bucket_name, object_name): + try: + self._client.stat_object(bucket_name, object_name) + return True + except Exception: + return False + @retry(tries=3, delay=5, jitter=(1, 3)) def get_object(self, bucket_name, object_name): logger.debug(f"Downloading '{object_name}'...")