Add CRC32 to DynamoDB responses (#3677)
* Add CRC32 to DynamoDB responses * Change test assertion * CRC32 - Align Py2/Py3 behaviour Co-authored-by: Bert Blommers <info@bertblommers.nl>
This commit is contained in:
parent
b60de10c79
commit
676d61bf5b
@ -227,10 +227,14 @@ def gen_amz_crc32(response, headerdict=None):
|
||||
if not isinstance(response, bytes):
|
||||
response = response.encode()
|
||||
|
||||
crc = str(binascii.crc32(response))
|
||||
crc = binascii.crc32(response)
|
||||
if six.PY2:
|
||||
# https://python.readthedocs.io/en/v2.7.2/library/binascii.html
|
||||
# TLDR: Use bitshift to match Py3 behaviour
|
||||
crc = crc & 0xFFFFFFFF
|
||||
|
||||
if headerdict is not None and isinstance(headerdict, dict):
|
||||
headerdict.update({"x-amz-crc32": crc})
|
||||
headerdict.update({"x-amz-crc32": str(crc)})
|
||||
|
||||
return crc
|
||||
|
||||
|
@ -8,7 +8,7 @@ import itertools
|
||||
import six
|
||||
|
||||
from moto.core.responses import BaseResponse
|
||||
from moto.core.utils import camelcase_to_underscores, amzn_request_id
|
||||
from moto.core.utils import camelcase_to_underscores, amz_crc32, amzn_request_id
|
||||
from .exceptions import (
|
||||
InvalidIndexNameError,
|
||||
ItemSizeTooLarge,
|
||||
@ -80,6 +80,7 @@ class DynamoHandler(BaseResponse):
|
||||
"""
|
||||
return dynamodb_backends[self.region]
|
||||
|
||||
@amz_crc32
|
||||
@amzn_request_id
|
||||
def call_action(self):
|
||||
self.body = json.loads(self.body or "{}")
|
||||
|
@ -17,3 +17,4 @@ def test_table_list():
|
||||
headers = {"X-Amz-Target": "TestTable.ListTables"}
|
||||
res = test_client.get("/", headers=headers)
|
||||
res.data.should.contain(b"TableNames")
|
||||
res.headers.should.have.key("X-Amz-Crc32")
|
||||
|
Loading…
Reference in New Issue
Block a user