Skip to content

Commit 67157b0

Browse files
🐛 Avoid processing responses more than once each.
1 parent bf1f404 commit 67157b0

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

src/lapidary/render/model/openapi_conv.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import functools
22
import logging
3-
from collections.abc import Callable, Iterable, Mapping
3+
from collections.abc import Callable, Iterable, Mapping, MutableMapping
44
from typing import Any, cast
55

66
from mimeparse import parse_media_range
@@ -39,6 +39,8 @@ def __init__(
3939
package=str(root_package),
4040
)
4141

42+
self._response_mime_maps: MutableMapping[Stack, python.MimeMap] = {}
43+
4244
def process(self) -> python.ClientModel:
4345
stack = Stack()
4446

@@ -171,19 +173,25 @@ def process_response(
171173
stack: Stack,
172174
) -> python.MimeMap:
173175
assert isinstance(value, openapi.Response)
176+
177+
if stack in self._response_mime_maps:
178+
return self._response_mime_maps[stack]
179+
174180
headers_stack = stack.push('headers')
175181

176182
headers = [self.process_header(header, headers_stack.push(name)) for name, header in value.headers.items()]
177183

178184
mime_map_body_only = self.process_content(value.content, stack.push('content'))
179-
return {
185+
mime_map = {
180186
mime_type: self._create_envelope_model(
181187
body_type=body_type,
182188
headers=headers,
183189
stack=stack,
184190
)
185191
for mime_type, body_type in mime_map_body_only.items()
186192
}
193+
self._response_mime_maps[stack] = mime_map
194+
return mime_map
187195

188196
@resolve_ref
189197
def process_header(self, value: openapi.Header, stack: Stack) -> python.ResponseHeader:

0 commit comments

Comments
 (0)