J'essaie de simuler une méthode singulière de l'objet client s3 de boto3 pour lancer une exception. Mais j'ai besoin que toutes les autres méthodes de cette classe fonctionnent normalement.
Cela me permet de tester une exception singulière lorsqu'une erreur se produit lors de l'exécution d'un test d'exception. upload_part_copy
1ère tentative
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()
Cependant, l'erreur suivante se produit :
ImportError: No module named S3
2ème tentative
Après avoir regardé le code source de botocore.client.py, j'ai trouvé qu'il faisait quelque chose d'intelligent et que la méthode upload_part_copy
n'existe pas. J'ai constaté qu'il semble appeler BaseClient._make_api_call
au lieu de cela, j'ai donc essayé de me moquer de cela
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()
Cela provoque une exception... mais sur la page get_object
ce que je veux éviter.
Avez-vous des idées sur la façon dont je peux lancer l'exception uniquement sur l'élément upload_part_copy
méthode ?