Заглушка AWS, не работает для вызова В другой Функции Класса Python

#python #amazon-web-services

Вопрос:

У меня возникли некоторые трудности с тем, чтобы заставить AWS Stubber фактически заглушить этот вызов в S3 для меня. Кажется простым, моя тестируемая функция вызывает другую функцию «прогнозировать», которая использует класс под названием FileClassificationDataset, который является подклассом набора данных Torch. Этот класс должен быть отключен от getitem, чтобы он не попал в S3.

Вот классы, о которых идет речь

     def predict_batch(self, file_list):     
        dataset = FileClassificationDataset(file_list)
        dataloader = DataLoader(dataset, batch_size=64, shuffle=False,
                                num_workers=int(4))
    ...
    class FileClassificationDataset(Dataset):

    def __init__(self, file_list):
        
        self.file_list = file_list
    ...
    def __getitem__(self, item):
        print("INSIDE REAL __GETITEM__")
        bucket = self.s3_objs[item]['Bucket']
        key = self.s3_objs[item]['Key']
        file_byte_string = self.readFromS3(boto3.client('s3'),bucket,key)
        file = np.array(Image.open(file_byte_string).convert('RGB'))

        return bucket   '/'   key, self.transform(file)

    def readFromS3(self,s3client,bucket,key):
        file_byte_string = s3client.get_object(Bucket=bucket, Key=key)['Body']
        return file_byte_string
 

И вот мой тестовый код, я перепробовал все способы Издевательства, магии, Исправления. Поведение насмешки __getitem__ в некоторых случаях заключается в том, что она вызывает РЕАЛЬНУЮ функцию, а затем вызывает мой макет. Что, очевидно, не сработает.
Когда я использую AWS Stubber, он, похоже, подключается к AWS и игнорирует все, что я сделал. Интересно, как мне это правильно ввести.

Тестовый код

     s3 = boto3.client('s3')
    with Stubber(s3) as stubber:
    # stubber = Stubber(s3)
        expected_params = {'Bucket': ANY, 'Key': ANY}
        response = mockGetBinaryFile()
        stubber.add_response('get_object', response, expected_params)
        stubber.add_response('get_object', response, expected_params)
        stubber.add_response('get_object', response, expected_params)
        stubber.activate()
        from predict.predictor import Predictor
        predictor = Predictor(MODEL_LOCATION)
        results = predictor.predict(keys[0:3])

        with open('mock_results.txt', 'w ') as output:
            output.write(json.dumps(results))