Spaces:
Runtime error
Runtime error
| import os | |
| from pathlib import Path | |
| from datetime import timedelta | |
| from google.cloud import storage | |
| from huggingface_hub import hf_hub_download | |
| from google.cloud.storage import transfer_manager | |
| def download_credentials() -> None: | |
| """ | |
| Downloads the GCP credentials from Hugging Face Hub | |
| :return: None | |
| """ | |
| os.makedirs('assets', exist_ok=True) | |
| hf_hub_download( | |
| repo_id=os.environ.get('DATA'), repo_type='dataset', filename="credentials.json", | |
| token=os.environ.get('HUB_TOKEN'), local_dir="assets" | |
| ) | |
| return | |
| def upload_folder(client_name: str, source_directory: str) -> None: | |
| """ | |
| Uploads the given source directory to the GCP bucket. | |
| :param client_name: name of the client, used as name of the main folder | |
| :param source_directory: directory with all the sub-folders and files to upload | |
| :return: None | |
| """ | |
| # Filter so the list only includes files, not directories themselves. | |
| string_paths = [ | |
| str(path.relative_to(source_directory)).replace("\\", "/") for path in Path(source_directory).rglob("*") | |
| if path.is_file() | |
| ] | |
| # Path where the files in the source directory will be saved | |
| delimiter = source_directory.find(client_name) | |
| destination_directory = source_directory[delimiter:] + "/" | |
| # Start the upload. Threads was used instead of process because Gradio was rebooted with the second one. | |
| bucket = STORAGE_CLIENT.bucket('clients-bella') | |
| _ = transfer_manager.upload_many_from_filenames( | |
| bucket, filenames=string_paths, source_directory=source_directory, max_workers=1, | |
| blob_name_prefix=destination_directory, worker_type=transfer_manager.THREAD | |
| ) | |
| return | |
| def get_link_file(client_name: str, type_media: str, media_name: str) -> str: | |
| """ | |
| Gets a public link during 15 minutes to a given file in GCP | |
| :param client_name: name of the client (name of the main folder) | |
| :param type_media: if it is audio or video | |
| :param media_name: name of the desired media file | |
| :return: public link to the file | |
| """ | |
| if media_name == 'waiting.wav': | |
| bucket = STORAGE_CLIENT.bucket('audios_bella') | |
| blob = bucket.blob('waiting.wav') | |
| else: | |
| bucket = STORAGE_CLIENT.bucket('clients-bella') | |
| blobs = bucket.list_blobs(prefix=f'{client_name}/media/{type_media}/{media_name}') | |
| blob = next(blobs) | |
| signed_url = blob.generate_signed_url(expiration=timedelta(minutes=15)) | |
| return signed_url | |
| download_credentials() | |
| STORAGE_CLIENT = storage.Client.from_service_account_json(os.getenv('GOOGLE_APPLICATION_CREDENTIALS')) | |