|
1 | 1 | import functools |
2 | 2 | import logging |
3 | | -from collections.abc import Callable, Iterable, Mapping |
| 3 | +from collections.abc import Callable, Iterable, Mapping, MutableMapping |
4 | 4 | from typing import Any, cast |
5 | 5 |
|
6 | 6 | from mimeparse import parse_media_range |
@@ -39,6 +39,8 @@ def __init__( |
39 | 39 | package=str(root_package), |
40 | 40 | ) |
41 | 41 |
|
| 42 | + self._response_mime_maps: MutableMapping[Stack, python.MimeMap] = {} |
| 43 | + |
42 | 44 | def process(self) -> python.ClientModel: |
43 | 45 | stack = Stack() |
44 | 46 |
|
@@ -171,19 +173,25 @@ def process_response( |
171 | 173 | stack: Stack, |
172 | 174 | ) -> python.MimeMap: |
173 | 175 | assert isinstance(value, openapi.Response) |
| 176 | + |
| 177 | + if stack in self._response_mime_maps: |
| 178 | + return self._response_mime_maps[stack] |
| 179 | + |
174 | 180 | headers_stack = stack.push('headers') |
175 | 181 |
|
176 | 182 | headers = [self.process_header(header, headers_stack.push(name)) for name, header in value.headers.items()] |
177 | 183 |
|
178 | 184 | mime_map_body_only = self.process_content(value.content, stack.push('content')) |
179 | | - return { |
| 185 | + mime_map = { |
180 | 186 | mime_type: self._create_envelope_model( |
181 | 187 | body_type=body_type, |
182 | 188 | headers=headers, |
183 | 189 | stack=stack, |
184 | 190 | ) |
185 | 191 | for mime_type, body_type in mime_map_body_only.items() |
186 | 192 | } |
| 193 | + self._response_mime_maps[stack] = mime_map |
| 194 | + return mime_map |
187 | 195 |
|
188 | 196 | @resolve_ref |
189 | 197 | def process_header(self, value: openapi.Header, stack: Stack) -> python.ResponseHeader: |
|
0 commit comments