essentials-openapi 1.1.0__tar.gz → 1.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/.gitignore +1 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/CHANGELOG.md +18 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/PKG-INFO +1 -1
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/__init__.py +1 -1
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/__init__.py +37 -5
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_markdown/partial/servers.html +1 -1
- essentials_openapi-1.2.0/openapidocs/v3.py +947 -0
- essentials_openapi-1.1.0/openapidocs/v3.py +0 -364
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/LICENSE +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/README.md +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/commands/__init__.py +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/commands/docs.py +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/common.py +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/logs.py +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/main.py +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/__init__.py +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/common.py +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/contents.py +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/generate.py +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/jinja.py +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/md.py +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/texts.py +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/examples.py +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_markdown/README.md +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_markdown/__init__.py +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_markdown/layout.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_markdown/partial/components-parameters.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_markdown/partial/components-responses.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_markdown/partial/components-schemas.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_markdown/partial/components-security-schemes.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_markdown/partial/content-examples.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_markdown/partial/external-docs.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_markdown/partial/info.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_markdown/partial/path-items.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_markdown/partial/request-auth.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_markdown/partial/request-body.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_markdown/partial/request-parameters.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_markdown/partial/request-responses.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_markdown/partial/schema-repr.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_markdown/partial/tags.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_markdown/partial/type.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_mkdocs/README.md +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_mkdocs/__init__.py +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_mkdocs/layout.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_mkdocs/partial/components-parameters.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_mkdocs/partial/components-responses.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_mkdocs/partial/components-schemas.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_mkdocs/partial/components-security-schemes.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_mkdocs/partial/content-examples.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_mkdocs/partial/external-docs.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_mkdocs/partial/info.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_mkdocs/partial/path-items.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_mkdocs/partial/request-auth.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_mkdocs/partial/request-body.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_mkdocs/partial/request-parameters.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_mkdocs/partial/request-responses.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_mkdocs/partial/schema-repr.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_mkdocs/partial/servers.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_mkdocs/partial/tags.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_mkdocs/partial/type.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_plantuml_api/README.md +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_plantuml_api/layout.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_plantuml_api/partial/schema-repr.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_plantuml_schemas/README.md +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_plantuml_schemas/layout.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/mk/v3/views_plantuml_schemas/partial/schema-repr.html +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/utils/__init__.py +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/utils/source.py +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/utils/web.py +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/openapidocs/v2.py +0 -0
- {essentials_openapi-1.1.0 → essentials_openapi-1.2.0}/pyproject.toml +0 -0
|
@@ -5,6 +5,24 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.2.0] - 2025-04-27
|
|
9
|
+
|
|
10
|
+
- Update objects to the OpenAPI Specification v3.1, by @tyzhnenko.
|
|
11
|
+
- Add docstrings to all `v3` classes.
|
|
12
|
+
- Upgrade the `v3.OpenAPI` class from OpenAPI version `3.0.3` to `3.1.0`.
|
|
13
|
+
|
|
14
|
+
## [1.1.1] - 2025-03-20
|
|
15
|
+
|
|
16
|
+
- Fix bug in `MARKDOWN` view for `servers` (displaying twice the `description`
|
|
17
|
+
instead of `description` and `url`).
|
|
18
|
+
- Fix bug happening when a `path item` includes properties that are not of kind
|
|
19
|
+
`operation item` (https://github.com/Neoteroi/mkdocs-plugins/issues/5).
|
|
20
|
+
- Add support for handling `parameters` defined on `path items` (common
|
|
21
|
+
parameters for all operation under a certain path).
|
|
22
|
+
Refer to the [`Path Item` specification](https://swagger.io/specification/#path-item-object).
|
|
23
|
+
- Fix bug happening when a parameter has a non-str `name` property.
|
|
24
|
+
- Add Python 3.13 to the build matrix.
|
|
25
|
+
|
|
8
26
|
## [1.1.0] - 2025-01-18
|
|
9
27
|
|
|
10
28
|
- Add additionalProperties to Schema object, by @tyzhnenko.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: essentials-openapi
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2.0
|
|
4
4
|
Summary: Classes to generate OpenAPI Documentation v3 and v2, in JSON and YAML.
|
|
5
5
|
Project-URL: Homepage, https://github.com/Neoteroi/essentials-openapi
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/Neoteroi/essentials-openapi/issues
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
__version__ = "1.
|
|
1
|
+
__version__ = "1.2.0"
|
|
2
2
|
VERSION = __version__
|
|
@@ -178,6 +178,8 @@ class OpenAPIV3DocumentationHandler:
|
|
|
178
178
|
paths = data["paths"]
|
|
179
179
|
|
|
180
180
|
for path, path_item in paths.items():
|
|
181
|
+
if not isinstance(path_item, dict):
|
|
182
|
+
continue
|
|
181
183
|
tag = self.get_tag(path_item) or ""
|
|
182
184
|
|
|
183
185
|
for operation in path_item.values():
|
|
@@ -186,11 +188,32 @@ class OpenAPIV3DocumentationHandler:
|
|
|
186
188
|
operation["requestBody"] = self._resolve_opt_ref(
|
|
187
189
|
operation["requestBody"]
|
|
188
190
|
)
|
|
189
|
-
|
|
190
|
-
groups[tag].append((path, path_item))
|
|
191
|
+
groups[tag].append((path, self._keep_operations(path_item)))
|
|
191
192
|
|
|
192
193
|
return groups
|
|
193
194
|
|
|
195
|
+
def _keep_operations(self, path_item):
|
|
196
|
+
# discard dictionary keys that are not of dict type
|
|
197
|
+
|
|
198
|
+
# if the path item defines common parameters, merge them into each operation:
|
|
199
|
+
# https://swagger.io/specification/#path-item-object
|
|
200
|
+
common_parameters = path_item.get("parameters", [])
|
|
201
|
+
# Note: we don't need to resolve $ref here, because they are resolved in
|
|
202
|
+
# get_parameters
|
|
203
|
+
|
|
204
|
+
return {
|
|
205
|
+
key: self._merge_common_parameters(value, common_parameters)
|
|
206
|
+
for key, value in path_item.items()
|
|
207
|
+
if isinstance(value, dict)
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
def _merge_common_parameters(self, operation, common_parameters):
|
|
211
|
+
if not common_parameters:
|
|
212
|
+
return operation
|
|
213
|
+
data = copy.deepcopy(operation)
|
|
214
|
+
data["parameters"] = common_parameters + data.get("parameters", [])
|
|
215
|
+
return data
|
|
216
|
+
|
|
194
217
|
def get_schemas(self):
|
|
195
218
|
schemas = read_dict(self.doc, "components", "schemas")
|
|
196
219
|
|
|
@@ -215,8 +238,12 @@ class OpenAPIV3DocumentationHandler:
|
|
|
215
238
|
"""
|
|
216
239
|
single_tag: Optional[str] = None
|
|
217
240
|
|
|
218
|
-
for
|
|
219
|
-
|
|
241
|
+
for prop in path_item.values():
|
|
242
|
+
if not isinstance(prop, dict):
|
|
243
|
+
# This property is not an operation; in this context we ignore it.
|
|
244
|
+
# See Path Item Object here: https://swagger.io/specification/
|
|
245
|
+
continue
|
|
246
|
+
tags = prop.get("tags")
|
|
220
247
|
|
|
221
248
|
if not tags:
|
|
222
249
|
continue
|
|
@@ -383,6 +410,11 @@ class OpenAPIV3DocumentationHandler:
|
|
|
383
410
|
return self.resolve_reference(obj)
|
|
384
411
|
return obj
|
|
385
412
|
|
|
413
|
+
def _lower(self, obj):
|
|
414
|
+
if isinstance(obj, str):
|
|
415
|
+
return obj.lower()
|
|
416
|
+
return str(obj)
|
|
417
|
+
|
|
386
418
|
def get_parameters(self, operation) -> List[dict]:
|
|
387
419
|
"""
|
|
388
420
|
Returns a list of objects describing the input parameters for a given operation.
|
|
@@ -397,7 +429,7 @@ class OpenAPIV3DocumentationHandler:
|
|
|
397
429
|
param
|
|
398
430
|
for param in sorted(
|
|
399
431
|
parameters,
|
|
400
|
-
key=lambda x: x["name"]
|
|
432
|
+
key=lambda x: self._lower(x["name"]) if (x and "name" in x) else "",
|
|
401
433
|
)
|
|
402
434
|
if param
|
|
403
435
|
]
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
{% with rows = [[texts.description, texts.url]] %}
|
|
5
5
|
{%- for server in servers -%}
|
|
6
|
-
{%- set _ = rows.append([server.description, server.
|
|
6
|
+
{%- set _ = rows.append([server.description, server.url]) -%}
|
|
7
7
|
{%- endfor -%}
|
|
8
8
|
{{ rows | table }}
|
|
9
9
|
{%- endwith -%}
|