|
1 | 1 | from copy import deepcopy
|
2 | 2 | import logging
|
3 |
| -from typing import Any, Dict, List, Optional |
| 3 | +from typing import Any, Dict, List, Optional, Union |
4 | 4 |
|
5 | 5 | from ddtrace.contrib.internal.trace_utils import _get_request_header_client_ip
|
6 | 6 | from ddtrace.internal import core
|
@@ -134,19 +134,26 @@ def asm_start_response(
|
134 | 134 | span: Span,
|
135 | 135 | status_code: str,
|
136 | 136 | event_source: _EventSource,
|
137 |
| - response: Dict[str, Any], |
| 137 | + response: Union[Dict[str, Any], str, None], |
138 | 138 | ):
|
139 | 139 | if event_source.event_type not in _http_event_types:
|
140 | 140 | return
|
141 | 141 |
|
142 |
| - headers = response.get("headers", {}) |
143 |
| - multi_value_request_headers = response.get("multiValueHeaders") |
144 |
| - if multi_value_request_headers: |
145 |
| - response_headers = _merge_single_and_multi_value_headers( |
146 |
| - headers, multi_value_request_headers |
147 |
| - ) |
| 142 | + if isinstance(response, dict) and ( |
| 143 | + "headers" in response or "multiValueHeaders" in response |
| 144 | + ): |
| 145 | + headers = response.get("headers", {}) |
| 146 | + multi_value_request_headers = response.get("multiValueHeaders") |
| 147 | + if multi_value_request_headers: |
| 148 | + response_headers = _merge_single_and_multi_value_headers( |
| 149 | + headers, multi_value_request_headers |
| 150 | + ) |
| 151 | + else: |
| 152 | + response_headers = headers |
148 | 153 | else:
|
149 |
| - response_headers = headers |
| 154 | + response_headers = { |
| 155 | + "content-type": "application/json", |
| 156 | + } |
150 | 157 |
|
151 | 158 | core.dispatch(
|
152 | 159 | "aws_lambda.start_response",
|
|
0 commit comments