"""Handles outcome calls to different APIs.""" import logging import os import boto3 import requests import config def get_asset_status(filename_key): """Request asset status from ows-asset-transcoder.""" url = f'{config.OWS_ASSET_TRANSCODER_BASE_URL}/status/{filename_key}' response = requests.get(url, headers=config.default_headers()) status_data = response.json() return status_data def asset_delete(object_id, object_type, asset_type): """Delete asset request.""" response = requests.delete( f'{config.OWS_ASSET_TRANSCODER_BASE_URL}/upload', params={ 'object_id': object_id, 'object_type': object_type, 'asset_type': asset_type }, headers=config.default_headers() ) assert response.status_code == 200 def get_upload_token(): """Get upload token.""" response = requests.get(f'{config.OWS_ASSET_TRANSCODER_BASE_URL}/upload-token', headers=config.default_headers()) assert response.status_code == 200 return response.json() def put_asset_to_s3(filename, upload_token_data, object_type, object_id): """Send asset to s3 bucket.""" _, file_extension = os.path.splitext(filename) assert file_extension in ['.jpg', '.wav'] if file_extension == '.jpg': content_type = 'image/jpeg' asset_type = 'JPG' elif file_extension == '.wav': content_type = 'audio/wav' asset_type = 'WAV' else: raise ValueError(f'Unsupported file extension {file_extension}') with open(f'./assets/{filename}', 'rb') as file: content = file.read() assert len(content) > 0, 'Empty file' bucket = upload_token_data['bucket'] filename_key = upload_token_data['filename'] destination_filename = f'{filename_key}{file_extension}' credentials = upload_token_data['credentials'] metadata = { 'asset_type': asset_type, 'object_id': str(object_id), 'object_type': object_type, 'original_filename': filename, } logging.info(f'Uploading file as {destination_filename} to {bucket} bucket') s3 = boto3.client( 's3', aws_access_key_id=credentials['aws_access_key_id'], aws_secret_access_key=credentials['aws_secret_access_key'], aws_session_token=credentials['token'], ) s3.put_object( Metadata=metadata, Bucket=bucket, Key=destination_filename, Body=content, ContentType=content_type )