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()