docusaurus-openapi-docs
docusaurus-openapi-docs copied to clipboard
Unable to render example from schema when using anyOf or other multiple responses
Describe the bug
I noticed that it can't render the example from the schema when using anyof. It does know that there are two possible responses, but not what the schema is. I do know each one is correct because they are being used elsewhere and that renders.
"EnvironmentsResponse": {
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"description": "A collection of environment information.",
"anyOf": [
{
"type": "array",
"items": {
"$ref": "#/components/schemas/Environment"
}
},
{
"type": "array",
"items": {
"$ref": "#/components/schemas/EnvironmentSummary"
}
}
]
}
}
},
Expected behavior
It should render each response.
Current behavior
Doesn't render each response. Instead returns
{
"data": [
null
]
}
Possible solution
Steps to reproduce
https://preview-docs.coalesce.io/docs/api/coalesce/get-environments (no schema example) https://preview-docs.coalesce.io/docs/api/coalesce/get-environment (Schema example working)
They both share the Environment Component.
Every endpoint that has multiple responses doesn't render an example. List Nodes Get Node List Workspace Nodes
It does work in Swagger Editor.
Context
Not able to provide response examples when there are multiple options.
Your Environment
"@docusaurus/core": "^3.5.2",
"@docusaurus/preset-classic": "^3.5.2",
"docusaurus-plugin-openapi-docs": "^4.0.1",
"docusaurus-theme-openapi-docs": "^4.0.1",
- Version used: 4.0.1
- Environment name and version (e.g. Chrome 59, node.js 5.4, python 3.7.3): Chrome Version 127.0.6533.120 (Official Build) (arm64).
- Node v20.11.0
- Operating System and version (desktop or mobile): Mac Sonoma 14.6.1.
- Link to your project: https://preview-docs.coalesce.io/docs/api/coalesce/get-environments (no schema example) https://preview-docs.coalesce.io/docs/api/coalesce/get-environment (Schema example working)
I can pop over the file, it's big so I didn't attach it
Related to #617
I wrote a python script to remove the empty responses from the mdx file output. I am using a JSON spec to generate my API files. But someone might find it helpful. It ignores other response examples.
import os
import re
def remove_tab_item(content):
pattern = re.compile(r'(<TabItem\s+label={"Example \(from schema\)"}\s+value={"Example \(from schema\)"}.*?</TabItem>)', re.DOTALL)
matches = pattern.findall(content)
new_content = pattern.sub('', content)
return new_content, matches
def process_file(file_path, log_file):
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
new_content, matches = remove_tab_item(content)
if matches:
with open(log_file, 'a', encoding='utf-8') as log:
log.write(f"File: {file_path}\n")
for match in matches:
log.write("Found TabItem:\n")
log.write(match)
log.write("\n\n")
with open(file_path, 'w', encoding='utf-8') as file:
file.write(new_content)
print(f"Updated and logged: {file_path}")
else:
print(f"No changes: {file_path}")
def process_directory(directory, log_file):
for root, dirs, files in os.walk(directory):
for file in files:
file_path = os.path.join(root, file)
process_file(file_path, log_file)
# Specify the directory to start from and the log file
start_directory = "docs/api"
log_file_path = "tab_item_log.txt"
# Clear the log file if it exists
open(log_file_path, 'w').close()
# Run the script
process_directory(start_directory, log_file_path)
print(f"Log file created: {log_file_path}")
Does #944 help to fix this issue?
@robbieaverill looks like it should