SUAD_Park / src /cloud_storage /google_cloud_storage.py
Léo Bourrel
remove dependency
687f595
from google.cloud import storage
from google.oauth2 import service_account
from .base_storage import BaseStorage
class GoogleCloudStorage(BaseStorage):
def __init__(self, service_account_path: str | None = None):
if service_account_path:
credentials = service_account.Credentials.from_service_account_file(
service_account_path
)
self.client = storage.Client(credentials=credentials)
else:
self.client = storage.Client.create_anonymous_client()
def upload_file_from_content(
self, bucket_name: str, bucket_file_path: str, file_content: bytes
) -> str:
"""Uploads a file to a Google Cloud Storage bucket
Args:
bucket_name (str): Bucket name
bucket_file_path (str): Path to the file to be uploaded
file_content (bytes): Path to the file to be uploaded
Returns:
str: URL of the uploaded file
"""
print(f"gs://{bucket_name}/{bucket_file_path}")
bucket = self.client.get_bucket(bucket_name)
blob = bucket.blob(f"{bucket_file_path}")
blob.upload_from_string(file_content)
print(f"File uploaded to gs://{bucket_name}/{bucket_file_path}")
return f"gs://{bucket_name}/{bucket_file_path}"
def download_blob(self, bucket_name: str, source_blob_name: str) -> bytes:
"""Downloads a blob from the bucket
Args:
bucket_name (str): Bucket name
source_blob_name (str): Name of the blob to download
Returns:
bytes: Content of the blob
"""
bucket = self.client.bucket(bucket_name)
source_blob_name = source_blob_name.replace(f"gs://{bucket_name}/", "")
blob = bucket.blob(source_blob_name)
return blob.download_as_bytes()