Je trouve un désaccord frustrant entre la documentation officielle de boto3 (https://boto3.readthedocs.org/en/latest/reference/services/s3.html#S3.Bucket.create) et ce qui est retourné en pratique. Pour être sûr, j'utilise boto3 1.2.1 et botocore 1.3.2 (tous deux installés avec pip).La bibliothèque Python boto3 s3 renvoie différents dictionnaires à la documentation officielle
Je parle en particulier sur la création d'un seau à l'aide de la méthode 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()
On me dit dans la documentation que la commande s3.Bucket('testbucket').create()
retourne un dictionnaire qui ressemble
{
'Location': 'string'
}
mais à la place, je reçois un dictionnaire qui ressemble à:
{
u'Location': '/testbucket',
'ResponseMetadata': {
'HTTPStatusCode': 200,
'HostId': 'alphnumericalmixed/alphanumericalmixed',
'RequestId': 'MIXEDUPPERANDNUMBERS123'
}
}
je reçois une chose similaire si je tente de supprimer un objet S3 trop en invoquant sa méthode delete()
, par exemple:
# some initialisation as above code
obj=bucket.put_object(Body='123', Key='456')
print obj.delete()
où je reçois:
{'ResponseMetadata':
{'HTTPStatusCode': 204,
'HostId': 'something/something',
'RequestId': 'SOMETHING'}}
au lieu de (https://boto3.readthedocs.org/en/latest/reference/services/s3.html#S3.Object.delete):
{
'DeleteMarker': True|False,
'VersionId': 'string',
'RequestCharged': 'requester'
}
Je sais que boto3 est un wrapper impliqué de la bibliothèque botocore, et la clé RequestID
dans le dictionnaire que je reçois retour vient finalement de botocore/parsers.py
. Je comprends le retour create
comme il l'a fait plus d'informations, mais ce que je ne comprends pas est que le retour de la méthode put_object()
ne contient aucune similaire à la documentation
Ce que je suis en train de travailler est si la documentation officielle me ment.
Pourquoi le -1? Au moins le justifier. – Mani
Les docs ne mentent pas, ils ne renvoient rien quand il n'y a rien à retourner. Il n'y avait pas de versionnage, donc pas d'identifiant de version ou de marqueur de suppression. Il n'y avait pas de 'RequestCharged' envoyé avec la demande, donc rien là non plus. –
À droite, donc +1 pour une documentation ambiguë alors. ;) – Mani