PartsCount not returned by S3 head object [feature request]
The S3 head object call should return PartsCount under some circumstances.
It's not obvious from the API docs what those circumstances are, but I've tested it in boto 3137.
PartsCount should be returned if and only if the object was a multi-part upload, and PartNumber was passed in as an argument.
Note that this is the count of all parts, it is not an echo of PartNumber.
For a single-part upload, this field is always omitted.
I haven't checked the equivalent behavior (moto or boto) of get_object.
import boto3
from pprint import pprint
from moto import mock_s3
bucket = 'telstra-energy-test'
key = 'test-single-multi-part'
mock_s3().start()
boto3.client('s3').create_bucket(
Bucket=bucket,
CreateBucketConfiguration={
'LocationConstraint': 'ap-southeast-2'
},
)
client = boto3.client('s3')
response = client.create_multipart_upload(
Bucket=bucket,
Key=key,
)
id = response['UploadId']
num_parts = 2
parts = []
for p in range(1,num_parts+1):
response = client.upload_part(
Body=b'x' * (5 * (10 ** 7 )),
Bucket=bucket,
Key=key,
PartNumber=p,
UploadId=id,
)
parts.append({
'ETag': response['ETag'],
'PartNumber': p
})
client.complete_multipart_upload(
Bucket=bucket,
Key=key,
MultipartUpload={
'Parts': parts
},
UploadId=id,
)
resp = client.head_object(Bucket=bucket, Key=key, PartNumber=1)
# these assertions pass
assert 'PartsCount' in resp
assert resp['PartsCount'] == p
assert resp['PartsCount'] != 1 # different to PartNumber arg
I'm using
boto3 1.18.55 botocore 1.21.55 moto 2.2.16
This is one of those things that are probably not that important. e.g. it's not important enough for me to write a PR. I'm just logging it so that it's known, and if someone else finds it important they can write the PR.
Thanks for raising this and providing the test case @mdavis-xyz :+1: