Burlándose del método del cliente boto3 S3 Python

Estoy tratando de burlarme de un método singular del objeto cliente boto3 s3 para lanzar una excepción. Pero necesito todos los demás métodos para que esta clase funcione normalmente.

Esto es para que pueda probar una prueba de excepción singular cuando se produce un error al realizar unupload_part_copy

1er intento

import boto3
from mock import patch

with patch('botocore.client.S3.upload_part_copy', side_effect=Exception('Error Uploading')) as mock:
    client = boto3.client('s3')
    # Should return actual result
    o = client.get_object(Bucket='my-bucket', Key='my-key')
    # Should return mocked exception
    e = client.upload_part_copy()

Sin embargo, esto da el siguiente error:

ImportError: No module named S3

2º intento

Después de mirar el código fuente botocore.client.py descubrí que está haciendo algo inteligente y el métodoupload_part_copy no existe. Descubrí que parece llamarBaseClient._make_api_call en su lugar, traté de burlarme de eso

import boto3
from mock import patch

with patch('botocore.client.BaseClient._make_api_call', side_effect=Exception('Error Uploading')) as mock:
    client = boto3.client('s3')
    # Should return actual result
    o = client.get_object(Bucket='my-bucket', Key='my-key')
    # Should return mocked exception
    e = client.upload_part_copy()

Esto arroja una excepción ... pero en elget_object que quiero evitar

Alguna idea sobre cómo solo puedo lanzar la excepción en elupload_part_copy ¿método?

Respuestas a la pregunta(5)

Su respuesta a la pregunta