Closed as not planned
Description
Hello guys, recently got into a need to generate a client for my app written in fastapi 0.104.1
version.
Since version 0.99.0 FastAPI uses openapi of version 3.1.0
and they've also updated swagger-ui to match those updates - i've got into some problems(
OpenAPI Spec File
{
"openapi": "3.1.0",
"info": {
"title": "Some service",
"description": "Description of some service",
"version": "0.1.0"
},
"paths": {
"/known_issue/": {
"get": {
"tags": ["known_issue"],
"summary": "Get List",
"description": "Get list of known issues",
"operationId": "get_list_known_issue__get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"items": {
"$ref": "#/components/schemas/KnownIssueDBSchema"
},
"type": "array",
"title": "Response Get List Known Issue Get"
}
}
}
}
}
},
"post": {
"tags": ["known_issue"],
"summary": "Create",
"description": "Create new known issue item",
"operationId": "create_known_issue__post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/KnownIssueCreateSchema"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/KnownIssueDBSchema" }
}
}
},
"409": {
"description": "Entity already exists",
"content": {
"application/json": {
"example": { "message": "Entity already exists" }
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/HTTPValidationError" }
}
}
}
}
}
},
"/known_issue/{workitem_id}": {
"patch": {
"tags": ["known_issue"],
"summary": "Update",
"description": "Update a known issue",
"operationId": "update_known_issue__workitem_id__patch",
"parameters": [
{
"name": "workitem_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"maxLength": 20,
"pattern": "^\\d{6}$",
"title": "Issue ID",
"description": "Issue ID as a TFS workitem in format of #xxxxx",
"examples": ["123456"]
},
"description": "Issue ID as a TFS workitem in format of #xxxxx"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/KnownIssueUpdateSchema"
}
}
}
},
"responses": {
"202": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/KnownIssueDBSchema" }
}
}
},
"404": {
"description": "Entity not found",
"content": {
"application/json": {
"example": { "message": "Entity not found" }
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/HTTPValidationError" }
}
}
}
}
},
"delete": {
"tags": ["known_issue"],
"summary": "Delete",
"description": "Delete a known issue",
"operationId": "delete_known_issue__workitem_id__delete",
"parameters": [
{
"name": "workitem_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"maxLength": 20,
"pattern": "^\\d{6}$",
"title": "Issue ID",
"description": "Issue ID as a TFS workitem in format of #xxxxx",
"examples": ["123456"]
},
"description": "Issue ID as a TFS workitem in format of #xxxxx"
}
],
"responses": {
"204": { "description": "Successful Response" },
"404": {
"description": "Entity not found",
"content": {
"application/json": {
"example": { "message": "Entity not found" }
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": { "$ref": "#/components/schemas/HTTPValidationError" }
}
}
}
}
}
}
},
"components": {
"schemas": {
"HTTPValidationError": {
"properties": {
"detail": {
"items": { "$ref": "#/components/schemas/ValidationError" },
"type": "array",
"title": "Detail"
}
},
"type": "object",
"title": "HTTPValidationError"
},
"KnownIssueCreateSchema": {
"properties": {
"workitem_id": {
"type": "string",
"maxLength": 20,
"pattern": "^\\d{6}$",
"title": "Issue ID",
"description": "Issue ID as a TFS workitem in format of #xxxxx",
"examples": ["123456"]
},
"workitem_url": {
"type": "string",
"maxLength": 200,
"pattern": "^http(s)?:\\/\\/(.*)",
"title": "Item URL",
"description": "Entity URL",
"examples": [
"https://dev.azure.com/organization/project/_workitems/edit/123456"
]
}
},
"type": "object",
"required": ["workitem_id", "workitem_url"],
"title": "KnownIssueCreateSchema"
},
"KnownIssueDBSchema": {
"properties": {
"workitem_id": {
"type": "string",
"maxLength": 20,
"pattern": "^\\d{6}$",
"title": "Issue ID",
"description": "Issue ID as a TFS workitem in format of #xxxxx",
"examples": ["123456"]
},
"workitem_url": {
"type": "string",
"maxLength": 200,
"pattern": "^http(s)?:\\/\\/(.*)",
"title": "Item URL",
"description": "Entity URL",
"examples": [
"https://dev.azure.com/organization/project/_workitems/edit/123456"
]
}
},
"type": "object",
"required": ["workitem_id", "workitem_url"],
"title": "KnownIssueDBSchema"
},
"KnownIssueUpdateSchema": {
"properties": {
"workitem_id": {
"anyOf": [
{ "type": "string", "maxLength": 20, "pattern": "^\\d{6}$" },
{ "type": "null" }
],
"title": "Issue ID",
"description": "Issue ID as a TFS workitem in format of #xxxxx",
"examples": ["123456"]
},
"workitem_url": {
"anyOf": [
{
"type": "string",
"maxLength": 200,
"pattern": "^http(s)?:\\/\\/(.*)"
},
{ "type": "null" }
],
"title": "Item URL",
"description": "Entity URL",
"examples": [
"https://dev.azure.com/organization/project/_workitems/edit/123456" ]
}
},
"type": "object",
"title": "KnownIssueUpdateSchema"
},
"ValidationError": {
"properties": {
"loc": {
"items": { "anyOf": [{ "type": "string" }, { "type": "integer" }] },
"type": "array",
"title": "Location"
},
"msg": { "type": "string", "title": "Message" },
"type": { "type": "string", "title": "Error Type" }
},
"type": "object",
"required": ["loc", "msg", "type"],
"title": "ValidationError"
}
}
}
}
I've taken everything out except one entity from my fastapi app. So running the:
openapi-python-client generate --path ./openapi.json
Gives me
11 validation errors for OpenAPI
components.schemas.KnownIssueUpdateSchema.Reference.$ref
Field required [type=missing, input_value={'properties': {'workitem...KnownIssueUpdateSchema'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.5/v/missing
components.schemas.KnownIssueUpdateSchema.Schema.properties.workitem_id.Reference.$ref
Field required [type=missing, input_value={'anyOf': [{'type': 'stri... 'examples': ['123456']}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.5/v/missing
components.schemas.KnownIssueUpdateSchema.Schema.properties.workitem_id.Schema.anyOf.1.Reference.$ref
Field required [type=missing, input_value={'type': 'null'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.5/v/missing
components.schemas.KnownIssueUpdateSchema.Schema.properties.workitem_id.Schema.anyOf.1.Schema.type
Input should be 'string', 'number', 'integer', 'boolean', 'array' or 'object' [type=enum, input_value='null', input_type=str]
components.schemas.KnownIssueUpdateSchema.Schema.properties.workitem_url.Reference.$ref
Field required [type=missing, input_value={'anyOf': [{'type': 'stri...unCharts&runId=123456']}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.5/v/missing
components.schemas.KnownIssueUpdateSchema.Schema.properties.workitem_url.Schema.anyOf.1.Reference.$ref
Field required [type=missing, input_value={'type': 'null'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.5/v/missing
components.schemas.KnownIssueUpdateSchema.Schema.properties.workitem_url.Schema.anyOf.1.Schema.type
Input should be 'string', 'number', 'integer', 'boolean', 'array' or 'object' [type=enum, input_value='null', input_type=str]
openapi.`literal['3.0.0']`
Input should be '3.0.0' [type=literal_error, input_value='3.1.0', input_type=str]
For further information visit https://errors.pydantic.dev/2.5/v/literal_error
openapi.`literal['3.0.1']`
Input should be '3.0.1' [type=literal_error, input_value='3.1.0', input_type=str]
For further information visit https://errors.pydantic.dev/2.5/v/literal_error
openapi.`literal['3.0.2']`
Input should be '3.0.2' [type=literal_error, input_value='3.1.0', input_type=str]
For further information visit https://errors.pydantic.dev/2.5/v/literal_error
openapi.`literal['3.0.3']`
Input should be '3.0.3' [type=literal_error, input_value='3.1.0', input_type=str]
For further information visit https://errors.pydantic.dev/2.5/v/literal_error
Ofc there are more errors but they are very the same, so it is no point in providing full schema.
I'm sorry guys if i don't see the simple solution here, i really don't mind to have one).
But if the solution is "just downgrade thing" - i will consider this, but the problem will remain...
**Desktop
- OS: Linux Fedora 39
- Python Version - 3.10.13
- openapi-python-client version - 0.15.2
Additional context
Add any other context about the problem here.
Metadata
Metadata
Assignees
Labels
No labels