Использование Boto3 с freezegun приводит к 403 - PullRequest
2 голосов
/ 01 мая 2019

Я использую boto3 для загрузки файла из корзины AWS S3.Который работает нормально.Однако для моих юнит-тестов я звоню freeze_time, а затем функция возвращает ошибку: botocore.exceptions.ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden.

Есть ли решение, которое позволяет мне продолжать использовать freeze_time и которое будет извлекать файл из S3?

Код работает без @freeze_time("2019-01-30") и не работает при добавлении.

import boto3
from freezegun import freeze_time
import io

bucket = 'bucket'
key = 'key'

@freeze_time("2019-01-30")
def test_x():
    s3 = boto3.client('s3')
    f = io.BytesIO()
    s3.download_fileobj(bucket, key, f)

test_x()

1 Ответ

0 голосов
/ 06 июня 2019

Нет - вы не можете использовать freeze_time.Вам нужно будет найти другой подход.

API-вызовы AWS требуют времени, чтобы согласовать «в пределах разумного» между клиентом и сервером.Клиент, который говорит, что январь, а на самом деле май, не считается «разумным».Согласно информации на сайте aws.amazon.com, максимально допустимое отклонение часов составляет 15 минут.

Для некоторых SDK Amazon внедряет автоматическую коррекцию отклонения часов.Это позволяет завершить вызовы, но может не дать ожидаемого времени.

...