stable-diffusion-aws-extension/middleware_api/lambda/models/delete_models.py

57 lines
1.4 KiB
Python

import json
import logging
import os
from dataclasses import dataclass
import boto3
from common.response import no_content
logger = logging.getLogger(__name__)
logger.setLevel(os.environ.get('LOG_LEVEL') or logging.ERROR)
dynamodb = boto3.resource('dynamodb')
models_table = dynamodb.Table(os.environ.get('MODELS_TABLE'))
s3_bucket_name = os.environ.get('S3_BUCKET_NAME')
s3 = boto3.resource('s3')
bucket = s3.Bucket(s3_bucket_name)
@dataclass
class DeleteModelsEvent:
model_id_list: [str]
def handler(event, ctx):
logger.info(f'event: {event}')
logger.info(f'ctx: {ctx}')
body = DeleteModelsEvent(**json.loads(event['body']))
# unique list for preventing duplicate delete
model_id_list = list(set(body.model_id_list))
for model_id in model_id_list:
model = models_table.get_item(Key={'id': model_id})
if 'Item' not in model:
continue
model = model['Item']
logger.info(f'model: {model}')
if 'output_s3_location' in model:
output_s3_location = model['output_s3_location']
prefix = output_s3_location.replace(f"s3://{s3_bucket_name}/", "")
logger.info(f'delete prefix: {prefix}')
response = bucket.objects.filter(Prefix=prefix).delete()
logger.info(f'delete response: {response}')
models_table.delete_item(Key={'id': model_id})
return no_content(message='models deleted')