From c8f0542cb69277c7e8198b155ab70a6a3b6cec6c Mon Sep 17 00:00:00 2001 From: mDuo13 Date: Thu, 2 Dec 2021 15:02:36 -0800 Subject: [PATCH] 0.14.5: fix OpenAPI parsing with current Jinja --- dactyl/target.py | 2 ++ dactyl/templates/template-openapi_data_type.md | 2 +- dactyl/templates/template-openapi_endpoint.md | 4 ++-- dactyl/version.py | 2 +- releasenotes.md | 4 ++++ 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/dactyl/target.py b/dactyl/target.py index b74bf52..124f716 100644 --- a/dactyl/target.py +++ b/dactyl/target.py @@ -215,6 +215,8 @@ def load_pages(self): [p.data["name"] for p in swagger_pages]) pages += swagger_pages except Exception as e: + import traceback + traceback.print_tb(e.__traceback__) recoverable_error("Error when parsing OpenAPI definition %s: %s" % (page_data, e), self.config.bypass_errors) # Omit the API def from the page list if an error occurred diff --git a/dactyl/templates/template-openapi_data_type.md b/dactyl/templates/template-openapi_data_type.md index ce65793..f7cfb20 100644 --- a/dactyl/templates/template-openapi_data_type.md +++ b/dactyl/templates/template-openapi_data_type.md @@ -55,7 +55,7 @@ This type can contain the following fields: | Field | Type | Required? | Description | |-------|------|-----------|-------------| {%- for name,field in properties.items() %} -| `{{name}}` | {{field.type|title}}{% if "items" in field.keys() and "title" in field["items"].keys() %} of [{{field["items"].title}}]({{type_link(field["items"].title)}}){% endif %} {% if field["title"] is defined %}([{{field.title}}]({{type_link(field.title)}})){% endif %} | {{"Required" if name in required else "Optional"}} | {{field.description}} | +| `{{name}}` | {{field.type|title}}{% if "items" in field.keys() and "title" in field["items"].keys() %} of [{{field["items"].title}}]({{type_link(field["items"].title)}}){% endif %} {% if field["title"] is defined %}([{{field.title}}]({{type_link(field.title)}})){% endif %} | {{"Required" if field.required else "Optional"}} | {{field.description}} | {%- endfor %} {% if additionalProperties is defined and additionalProperties == True %}This type MUST NOT contain any additional fields.{% endif %} diff --git a/dactyl/templates/template-openapi_endpoint.md b/dactyl/templates/template-openapi_endpoint.md index b7e7955..20163da 100644 --- a/dactyl/templates/template-openapi_endpoint.md +++ b/dactyl/templates/template-openapi_endpoint.md @@ -52,7 +52,7 @@ The request uses the following fields: | Field | Type | Required? | Description | |-------|------|-----------|-------------| {%- for name,field in thisbody.schema.properties.items() %} -| `{{name}}` | {{field.type|title}}{% if "items" in field.keys() and "title" in field["items"].keys() %} of [{{field["items"].title}}]({{type_link(field["items"].title)}}){% endif %} {% if field["title"] is defined %}([{{field.title}}]({{type_link(field.title)}})){% endif %} | {{"Required" if name in required else "May be omitted"}} | {% if field.description is defined %}{{field.description}}{% endif %} | +| `{{name}}` | {{field.type|title}}{% if "items" in field.keys() and "title" in field["items"].keys() %} of [{{field["items"].title}}]({{type_link(field["items"].title)}}){% endif %} {% if field["title"] is defined %}([{{field.title}}]({{type_link(field.title)}})){% endif %} | {{"Required" if field.required else "May be omitted"}} | {% if field.description is defined %}{{field.description}}{% endif %} | {%- endfor %} {% endif %} @@ -82,7 +82,7 @@ The response uses the following fields: | Field | Type | Required? | Description | |-------|------|-----------|-------------| {%- for name,field in thisbody.schema.properties.items() %} -| `{{name}}` | {{field.type|title}}{% if "items" in field.keys() and "title" in field["items"].keys() %} of [{{field["items"].title}}]({{type_link(field["items"].title)}}){% endif %} {% if field["title"] is defined %}([{{field.title}}]({{type_link(field.title)}})){% endif %} | {{"Required" if name in required else "May be omitted"}} | {% if field.description is defined %}{{field.description}}{% endif %} | +| `{{name}}` | {{field.type|title}}{% if "items" in field.keys() and "title" in field["items"].keys() %} of [{{field["items"].title}}]({{type_link(field["items"].title)}}){% endif %} {% if field["title"] is defined %}([{{field.title}}]({{type_link(field.title)}})){% endif %} | {{ "Required" if field.required else "May be omitted"}} | {% if field.description is defined %}{{field.description}}{% endif %} | {%- endfor %} {% endif %}{# TODO: handle allOf, etc. #} diff --git a/dactyl/version.py b/dactyl/version.py index 9b67b07..a95d4fe 100644 --- a/dactyl/version.py +++ b/dactyl/version.py @@ -1 +1 @@ -__version__ = '0.14.4' +__version__ = '0.14.5' diff --git a/releasenotes.md b/releasenotes.md index 1daabb0..540b656 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -1,3 +1,7 @@ +# v0.14.5 Release Notes + +This release fixes a bug with the OpenAPI spec parser that caused it to fail when used with Jinja 3.x. This same bug also caused some fields to show as "Optional" or "May be omitted" when they were required. + # v0.14.4 Release Notes This release fixes several bugs: