boto / botocore

The low-level, core functionality of boto3 and the AWS CLI.
Apache License 2.0
1.44k stars 1.06k forks source link

`boto3.client('wellarchitected').get_profile_template()` raises RuntimeError #3170

Closed lincheney closed 1 month ago

lincheney commented 1 month ago

Describe the bug

Running:

import boto3
boto3.client('wellarchitected').get_profile_template()

raises a RuntimeError.

I believe this may be due to incorrect parsing of the CreatedAt and/or UpdatedAt fields returned from the API, which looks like it is in milliseconds, but maybe botocore treats it as seconds.

Example:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/user/.local/lib/python3.12/site-packages/botocore/client.py", line 565, in _api_call
    return self._make_api_call(operation_name, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.12/site-packages/botocore/client.py", line 1001, in _make_api_call
    http, parsed_response = self._make_request(
                            ^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.12/site-packages/botocore/client.py", line 1027, in _make_request
    return self._endpoint.make_request(operation_model, request_dict)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.12/site-packages/botocore/endpoint.py", line 119, in make_request
    return self._send_request(request_dict, operation_model)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.12/site-packages/botocore/endpoint.py", line 199, in _send_request
    success_response, exception = self._get_response(
                                  ^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.12/site-packages/botocore/endpoint.py", line 241, in _get_response
    success_response, exception = self._do_get_response(
                                  ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.12/site-packages/botocore/endpoint.py", line 308, in _do_get_response
    parsed_response = parser.parse(
                      ^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.12/site-packages/botocore/parsers.py", line 252, in parse
    parsed = self._do_parse(response, shape)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.12/site-packages/botocore/parsers.py", line 894, in _do_parse
    self._add_modeled_parse(response, shape, final_parsed)
  File "/home/user/.local/lib/python3.12/site-packages/botocore/parsers.py", line 904, in _add_modeled_parse
    self._parse_payload(response, shape, member_shapes, final_parsed)
  File "/home/user/.local/lib/python3.12/site-packages/botocore/parsers.py", line 946, in _parse_payload
    body_parsed = self._parse_shape(shape, original_parsed)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.12/site-packages/botocore/parsers.py", line 332, in _parse_shape
    return handler(shape, node)
           ^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.12/site-packages/botocore/parsers.py", line 665, in _handle_structure
    final_parsed[member_name] = self._parse_shape(
                                ^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.12/site-packages/botocore/parsers.py", line 332, in _parse_shape
    return handler(shape, node)
           ^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.12/site-packages/botocore/parsers.py", line 665, in _handle_structure
    final_parsed[member_name] = self._parse_shape(
                                ^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.12/site-packages/botocore/parsers.py", line 332, in _parse_shape
    return handler(shape, node)
           ^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.12/site-packages/botocore/parsers.py", line 684, in _handle_timestamp
    return self._timestamp_parser(value)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/.local/lib/python3.12/site-packages/botocore/utils.py", line 1000, in parse_timestamp
    raise RuntimeError(
RuntimeError: Unable to calculate correct timezone offset for "1713769489063"

Expected Behavior

No RuntimeError is raised and a response object is returned.

Current Behavior

RuntimeError is raised as described above.

Reproduction Steps

Run:

import boto3
boto3.client('wellarchitected').get_profile_template()

Possible Solution

I believe this may be due to incorrect parsing of the CreatedAt and/or UpdatedAt fields returned from the API.

Additional Information/Context

No response

SDK version used

1.34.95

Environment details (OS name and version, etc.)

Linux

tim-finnigan commented 1 month ago

Hi @lincheney thanks for reporting this issue. I could reproduce that error. We are in contact with the Well-Architected team regarding this issue and will share updates here.

tim-finnigan commented 1 month ago

We have heard from the service team that a fix has been deployed, and should be rolled out to all regions before the end of the week. Thanks again for bringing this issue to our attention.

tim-finnigan commented 1 month ago

Can confirm that the GetProfileTemplate API response is now returning in us-west-2, will set this issue to auto-close in a few days.

github-actions[bot] commented 1 month ago

This issue is now closed. Comments on closed issues are hard for our team to see. If you need more assistance, please open a new issue that references this one.