in backend/model_garden/views/media_asset.py [0:0]
def delete(self, request):
"""Creates a POST request with list of asset ids to delete from s3.
Request::
{"id": [id1, id2]}
Response::
{HTTP_400_BAD_REQUEST} if id doesn't exist in db
{HTTP_200_OK} for successful deletion
"""
media_asset_serializer = MediaAssetIDSerializer(data=request.data)
media_asset_serializer.is_valid(raise_exception=True)
media_assets_to_delete = MediaAsset.objects.filter(
pk__in=media_asset_serializer.data['id'],
)
# Check if requested list of media asset ids present in db.
if len(media_assets_to_delete) != len(media_asset_serializer.data['id']):
return Response(
data={'message': "Media assets with such ids don't exist."},
status=status.HTTP_400_BAD_REQUEST,
)
bucket_map = defaultdict(list)
# Map list of media assets to particular bucket.
for asset in media_assets_to_delete:
bucket_map[asset.dataset.bucket.name].append(asset)
# Delete media assets from each bucket.
for bucket, assets in bucket_map.items():
self._delete_media_assets_from_s3(
bucket, [asset.full_path for asset in assets],
)
media_assets_to_delete.delete()
return Response(
status=status.HTTP_200_OK,
)