2015-11-02 72 views
-1

我发现boto3的官方文档(https://boto3.readthedocs.org/en/latest/reference/services/s3.html#S3.Bucket.create)与实际返回的内容之间令人沮丧的错误匹配。Python boto3 s3库向官方文档返回不同的字典

只是为了确认,我使用的是boto3 1.2.1和botocore 1.3.2(都使用pip安装)。

我专门谈论使用boto3.Session方法创建一个水桶:

import boto3 
session = boto3.Session(region_name = 'us-west-2', \ 
        aws_access_key_id = 'AAA', \ 
        aws_secret_access_key = 'BBB') 
s3 = session.resource('s3') 
bucket = s3.Bucket('testbucket').create() 

我的文档中告知,该s3.Bucket('testbucket').create()命令返回的字典,这些看起来像

{ 
    'Location': 'string' 
} 

但我得到一个字典,看起来像:

{ 
    u'Location': '/testbucket', 
    'ResponseMetadata': { 
     'HTTPStatusCode': 200, 
     'HostId': 'alphnumericalmixed/alphanumericalmixed', 
     'RequestId': 'MIXEDUPPERANDNUMBERS123' 
    } 
} 

我得到了类似的事情,如果我试图通过调用其delete()方法,例如删除一个S3对象太:

# some initialisation as above code 
obj=bucket.put_object(Body='123', Key='456') 
print obj.delete() 

从哪里获得:中

{'ResponseMetadata': 
{'HTTPStatusCode': 204, 
'HostId': 'something/something', 
'RequestId': 'SOMETHING'}} 

代替(https://boto3.readthedocs.org/en/latest/reference/services/s3.html#S3.Object.delete):

{ 
'DeleteMarker': True|False, 
'VersionId': 'string', 
'RequestCharged': 'requester' 
} 

我知道boto3是botocore库的一个包含的包装,而我得到的dictionary中的RequestID键最终来自botocore/parsers.py。我明白了create回报它实际上有更多的信息,但我不明白的是,put_object()方法的返回不包含任何类似文件

我正在试图找出是官方文件是否对我说谎。

+0

为什么-1?至少证明它有道理。 – Mani

+2

文档没有说谎,当没有任何东西可以返回时,它们不会返回任何东西。没有版本号,所以没有版本号或删除标记。没有与请求一起发送的'RequestCharged',所以也没有。 –

+0

正确,所以+1简洁模糊的文档。 ;) – Mani

回答

0

乔丹菲利普斯说:

“的文档都没有说谎,他们只是当没有什么可以回报将不返回任何东西有没有版本,所以没有版本ID或删除标记有没有。 'RequestCharged'与请求一起发送,所以没有任何内容。“

我想这是我没想到的一件事。我认为返回字典只包含记录的值,而不是附加的值。