S3 Boto3 Stubber没有映射的下载文件?

时间:2019-12-12 11:19:32

标签: amazon-s3 aws-sdk boto3 python-3.7 botocore

当前正在编写测试并尝试利用botocore提供的Stubber

我正在尝试:

client = boto3.client("s3")
response = {'Body': 'content'}
expected_params = {'Bucket': 'a_bucket_name', 'Key': 'a_path', 'Filename': 'a_target'}

with Stubber(client) as stubber:
    stubber.add_response('download_file', response, expected_params)
    download_file(client, "a_bucket_name", "a_path", "a_target")

该下载文件是我自己的函数,仅包装客户机download_file调用。它在实践中起作用。

但是,由于发生“ OperationNotFound”错误,因此在stubber.add_response上的测试失败。我逐步使用了调试器,问题出现在存根API中:

if not hasattr(self.client, method):
    raise ValueError(
        "Client %s does not have method: %s"
        % (self.client.meta.service_model.service_name, method))

# Create a successful http response
http_response = AWSResponse(None, 200, {}, None)

operation_name = self.client.meta.method_to_api_mapping.get(method) <------- Error here
self._validate_response(operation_name, service_response)

字典中的两者之间似乎没有映射,这是存根API的失败还是我遗漏了什么?

1 个答案:

答案 0 :(得分:1)

我刚刚发现了这个问题,所以看起来好像真的是图书馆而不是我:

https://github.com/boto/botocore/issues/974

  

这是因为download_file和upload_file是boto3中的自定义项。他们大声疾呼一个或多个请求。目前,除了记录自定义使用的基本命令并将其添加到存根之外,没有什么比支持自定义更好的了。尽管我们自己不支持它,但是有一个外部库可以为您处理。