diff --git a/CHANGELOG.md b/CHANGELOG.md index b024216..6f155cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 fragment), reported by @mbklein. - Fix [#55](https://github.com/Neoteroi/essentials-openapi/issues/55): `jsonSchemaDialect` is not required and should not have a default value. +- Fix [#60](https://github.com/Neoteroi/essentials-openapi/issues/60): resolve `$ref` + values in response headers pointing to `#/components/headers/...` to avoid + `UndefinedError` when rendering response tables, reported by @copiousfreetime. ## [1.3.0] - 2025-11-19 diff --git a/openapidocs/mk/v3/__init__.py b/openapidocs/mk/v3/__init__.py index 04419b2..322a2b0 100644 --- a/openapidocs/mk/v3/__init__.py +++ b/openapidocs/mk/v3/__init__.py @@ -607,6 +607,19 @@ def get_parameters(self, operation) -> List[dict]: return results + def get_response_headers(self, response_definition: dict) -> dict: + """ + Returns the headers of a response definition, resolving any $ref values + so that the template can access fields like schema and description directly. + """ + headers = response_definition.get("headers") + if not headers: + return {} + return { + name: self._resolve_opt_ref(header_def) + for name, header_def in headers.items() + } + def write(self) -> str: return self._writer.write( self.doc, diff --git a/openapidocs/mk/v3/views_markdown/partial/request-responses.html b/openapidocs/mk/v3/views_markdown/partial/request-responses.html index 8e60bbf..09035a7 100644 --- a/openapidocs/mk/v3/views_markdown/partial/request-responses.html +++ b/openapidocs/mk/v3/views_markdown/partial/request-responses.html @@ -25,7 +25,7 @@ {%- if definition.headers %} {% with rows = [[texts.name, texts.description, texts.schema]] %} -{%- for header_name, header_definition in definition.headers.items() -%} +{%- for header_name, header_definition in handler.get_response_headers(definition).items() -%} {%- set _ = rows.append([header_name, header_definition.description, header_definition.schema.type]) -%} {%- endfor -%} {{ rows | table }} diff --git a/openapidocs/mk/v3/views_mkdocs/partial/request-responses.html b/openapidocs/mk/v3/views_mkdocs/partial/request-responses.html index e3a1503..b239511 100644 --- a/openapidocs/mk/v3/views_mkdocs/partial/request-responses.html +++ b/openapidocs/mk/v3/views_mkdocs/partial/request-responses.html @@ -32,7 +32,7 @@
- {%- for header_name, header_definition in definition.headers.items() %} + {%- for header_name, header_definition in handler.get_response_headers(definition).items() %}{{header_name}}