Mocking boto3 S3-Client-Methode Python

Ich versuche, eine Singluar-Methode aus dem boto3 s3-Clientobjekt zu verspotten, um eine Ausnahme auszulösen. Aber ich brauche alle anderen Methoden, damit diese Klasse wie gewohnt funktioniert.

Dies ist, damit ich einen einzelnen Ausnahmetest testen kann, wenn ein Fehler beim Ausführen eines @ auftrit upload_part_copy

1. Versuch

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()

Dies gibt jedoch den folgenden Fehler:

ImportError: No module named S3

2. Versuch

achdem ich mir den Quellcode von botocore.client.py angesehen hatte, stellte ich fest, dass es etwas Kluges tut und die Methoupload_part_copy ist nicht vorhanden. Ich fand, dass es @ zu nennen scheiBaseClient._make_api_call stattdessen habe ich versucht, das zu verspotten

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()

Dies löst eine Ausnahme aus ... aber auf demget_object was ich vermeiden möchte.

Irgendwelche Ideen, wie ich die Ausnahme nur auf das @ werfen kaupload_part_copy Methode

Antworten auf die Frage(10)

Ihre Antwort auf die Frage