Add support for DeepFriedMarshmallow - #328
Draft
illusional wants to merge 4 commits into
Draft
illusional wants to merge 4 commits into
illusional wants to merge 4 commits into
GitHub Actions / JUnit Report python3.12 'marshmallow>4.2.0' flask=='2.3.*' werkzeug=='2.3.*'
failed
Feb 3, 2026 in 0s
125 tests run, 122 passed, 1 skipped, 2 failed.
Annotations
Check failure on line 283 in tests/swagger_generation/test_swagger_generator.py
github-actions / JUnit Report python3.12 'marshmallow>4.2.0' flask=='2.3.*' werkzeug=='2.3.*'
test_swagger_generator.test_swagger_generators[registry8-swagger_generator8-expected_swagger8]
assert '{\n "consum...er": "2.0"\n}' == '{\n "consum...er": "2.0"\n}'
{
"consumes": [
"application/json"
],
"definitions": {
"AlbumSchema": {
"additionalProperties": false,
"description": "Album schema using DeepFriedMarshmallow's JitSchema with nested schema.",
"properties": {
"artist": {
"$ref": "#/definitions/ArtistSchema"
},
"release_date": {
"format": "date",
"type": "string"
},
"title": {
"type": "string"
}
},
"title": "AlbumSchema",
"type": "object"
},
"AlbumUpdateSchema": {
"additionalProperties": false,
"description": "Schema for updating album - partial fields.",
"properties": {
"title": {
"type": "string"
}
},
"title": "AlbumUpdateSchema",
"type": "object"
},
"ArtistSchema": {
"additionalProperties": false,
"description": "Artist schema using DeepFriedMarshmallow's JitSchema.",
"properties": {
"name": {
"type": "string"
}
},
"title": "ArtistSchema",
"type": "object"
},
"CompressedSheetText": {
"additionalProperties": false,
"description": "Schema with List field to test deepcopy recursion fix.",
"properties": {
"frame": {
"items": {
"type": "number"
},
"type": "array"
},
"sheet": {
"format": "uuid",
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
- "frame",
"sheet",
- "text"
+ "text",
? +
+ "frame"
],
"title": "CompressedSheetText",
"type": "object"
},
"Error": {
"additionalProperties": false,
"properties": {
"errors": {
"type": "object"
},
"message": {
"type": "string"
}
},
"required": [
"message"
],
"title": "Error",
"type": "object"
}
},
"host": "localhost",
"info": {
"description": "",
"title": "My API",
"version": "1.0.0"
},
"paths": {
"/albums/{album_uid}": {
"get": {
"description": "Get an album by UID",
"operationId": "get_album",
"parameters": [
{
"in": "header",
"name": "X-UserId",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "Album schema using DeepFriedMarshmallow's JitSchema with nested schema.",
"schema": {
"$ref": "#/definitions/AlbumSchema"
}
},
"default": {
"description": "Error",
"schema": {
"$ref": "#/definitions/Error"
}
}
}
},
"parameters": [
{
"in": "path",
"name": "album_uid",
"required": true,
"type": "string"
}
],
"patch": {
"description": "Update an album",
"operationId": "update_album",
"parameters": [
{
"in": "body",
"name": "AlbumUpdateSchema",
"required": true,
"schema": {
"$ref": "#/definitions/AlbumUpdateSchema"
}
}
],
"responses": {
"200": {
"description": "Album schema using DeepFriedMarshmallow's JitSchema with nested schema.",
"schema": {
"$ref": "#/definitions/AlbumSchema"
}
},
"default": {
"description": "Error",
"schema": {
"$ref": "#/definitions/Error"
}
}
},
"security": [
{
"sharedSecret": []
}
]
}
},
"/artists/{artist_uid}": {
"get": {
"description": "Get an artist by UID",
"operationId": "get_artist",
"responses": {
"200": {
"description": "Artist schema using DeepFriedMarshmallow's JitSchema.",
"schema": {
"$ref": "#/definitions/ArtistSchema"
}
},
"default": {
"description": "Error",
"schema": {
"$ref": "#/definitions/Error"
}
}
},
"security": []
},
"parameters": [
{
"in": "path",
"name": "artist_uid",
"required": true,
"type": "string"
}
]
},
"/sheets": {
"get": {
"description": "Get multiple sheets - tests List field with many=True",
"operationId": "get_sheets",
"responses": {
"200": {
"description": "Schema with List field to test deepcopy recursion fix.",
"schema": {
"items": {
"$ref": "#/definitions/CompressedSheetText"
},
"type": "array"
}
},
"default": {
"description": "Error",
"schema": {
"$ref": "#/definitions/Error"
}
}
}
}
}
},
"produces": [
"application/json"
],
"schemes": [],
"security": [
{
"default": []
}
],
"securityDefinitions": {
"default": {
"in": "header",
"name": "x-another",
"type": "apiKey"
},
"sharedSecret": {
"in": "header",
"name": "x-auth",
"type": "apiKey"
}
},
"swagger": "2.0"
}
Raw output
registry = <flask_rebar.rebar.HandlerRegistry object at 0x7f053a4b71a0>
swagger_generator = <flask_rebar.swagger_generation.swagger_generator_v2.SwaggerV2Generator object at 0x7f053a4b7a10>
expected_swagger = {'consumes': ['application/json'], 'definitions': {'AlbumSchema': {'additionalProperties': False, 'description': "Albu...et', 'text'], ...}, ...}, 'host': 'localhost', 'info': {'description': '', 'title': 'My API', 'version': '1.0.0'}, ...}
@pytest.mark.parametrize(
"registry, swagger_generator, expected_swagger",
[
(legacy.registry, legacy.swagger_v2_generator, legacy.EXPECTED_SWAGGER_V2),
(legacy.registry, legacy.swagger_v3_generator, legacy.EXPECTED_SWAGGER_V3),
(
exploded_query_string.registry,
exploded_query_string.swagger_v2_generator,
exploded_query_string.EXPECTED_SWAGGER_V2,
),
(
exploded_query_string.registry,
exploded_query_string.swagger_v3_generator,
exploded_query_string.EXPECTED_SWAGGER_V3,
),
(
multiple_authenticators.registry,
multiple_authenticators.swagger_v2_generator,
multiple_authenticators.EXPECTED_SWAGGER_V2,
),
(
multiple_authenticators.registry,
multiple_authenticators.swagger_v3_generator,
multiple_authenticators.EXPECTED_SWAGGER_V3,
),
(
marshmallow_objects.registry,
marshmallow_objects.swagger_v2_generator,
marshmallow_objects.EXPECTED_SWAGGER_V2,
),
(
marshmallow_objects.registry,
marshmallow_objects.swagger_v3_generator,
marshmallow_objects.EXPECTED_SWAGGER_V3,
),
(
deepfried_marshmallow.registry,
deepfried_marshmallow.swagger_v2_generator,
deepfried_marshmallow.EXPECTED_SWAGGER_V2,
),
(
deepfried_marshmallow.registry,
deepfried_marshmallow.swagger_v3_generator,
deepfried_marshmallow.EXPECTED_SWAGGER_V3,
),
],
)
def test_swagger_generators(registry, swagger_generator, expected_swagger):
open_api_version = swagger_generator.get_open_api_version()
if open_api_version == "2.0":
swagger_jsonschema = SWAGGER_V2_JSONSCHEMA
elif open_api_version == "3.1.0":
swagger_jsonschema = SWAGGER_V3_JSONSCHEMA
else:
raise ValueError(f"Unknown swagger_version: {open_api_version}")
validate_swagger(expected_swagger, schema=swagger_jsonschema)
swagger = swagger_generator.generate(registry)
result = json.dumps(swagger, indent=2, sort_keys=True)
expected = json.dumps(expected_swagger, indent=2, sort_keys=True)
> assert result == expected
E assert '{\n "consum...er": "2.0"\n}' == '{\n "consum...er": "2.0"\n}'
E {
E "consumes": [
E "application/json"
E ],
E "definitions": {
E "AlbumSchema": {
E "additionalProperties": false,
E "description": "Album schema using DeepFriedMarshmallow's JitSchema with nested schema.",
E "properties": {
E "artist": {
E "$ref": "#/definitions/ArtistSchema"
E },
E "release_date": {
E "format": "date",
E "type": "string"
E },
E "title": {
E "type": "string"
E }
E },
E "title": "AlbumSchema",
E "type": "object"
E },
E "AlbumUpdateSchema": {
E "additionalProperties": false,
E "description": "Schema for updating album - partial fields.",
E "properties": {
E "title": {
E "type": "string"
E }
E },
E "title": "AlbumUpdateSchema",
E "type": "object"
E },
E "ArtistSchema": {
E "additionalProperties": false,
E "description": "Artist schema using DeepFriedMarshmallow's JitSchema.",
E "properties": {
E "name": {
E "type": "string"
E }
E },
E "title": "ArtistSchema",
E "type": "object"
E },
E "CompressedSheetText": {
E "additionalProperties": false,
E "description": "Schema with List field to test deepcopy recursion fix.",
E "properties": {
E "frame": {
E "items": {
E "type": "number"
E },
E "type": "array"
E },
E "sheet": {
E "format": "uuid",
E "type": "string"
E },
E "text": {
E "type": "string"
E }
E },
E "required": [
E - "frame",
E "sheet",
E - "text"
E + "text",
E ? +
E + "frame"
E ],
E "title": "CompressedSheetText",
E "type": "object"
E },
E "Error": {
E "additionalProperties": false,
E "properties": {
E "errors": {
E "type": "object"
E },
E "message": {
E "type": "string"
E }
E },
E "required": [
E "message"
E ],
E "title": "Error",
E "type": "object"
E }
E },
E "host": "localhost",
E "info": {
E "description": "",
E "title": "My API",
E "version": "1.0.0"
E },
E "paths": {
E "/albums/{album_uid}": {
E "get": {
E "description": "Get an album by UID",
E "operationId": "get_album",
E "parameters": [
E {
E "in": "header",
E "name": "X-UserId",
E "required": true,
E "type": "string"
E }
E ],
E "responses": {
E "200": {
E "description": "Album schema using DeepFriedMarshmallow's JitSchema with nested schema.",
E "schema": {
E "$ref": "#/definitions/AlbumSchema"
E }
E },
E "default": {
E "description": "Error",
E "schema": {
E "$ref": "#/definitions/Error"
E }
E }
E }
E },
E "parameters": [
E {
E "in": "path",
E "name": "album_uid",
E "required": true,
E "type": "string"
E }
E ],
E "patch": {
E "description": "Update an album",
E "operationId": "update_album",
E "parameters": [
E {
E "in": "body",
E "name": "AlbumUpdateSchema",
E "required": true,
E "schema": {
E "$ref": "#/definitions/AlbumUpdateSchema"
E }
E }
E ],
E "responses": {
E "200": {
E "description": "Album schema using DeepFriedMarshmallow's JitSchema with nested schema.",
E "schema": {
E "$ref": "#/definitions/AlbumSchema"
E }
E },
E "default": {
E "description": "Error",
E "schema": {
E "$ref": "#/definitions/Error"
E }
E }
E },
E "security": [
E {
E "sharedSecret": []
E }
E ]
E }
E },
E "/artists/{artist_uid}": {
E "get": {
E "description": "Get an artist by UID",
E "operationId": "get_artist",
E "responses": {
E "200": {
E "description": "Artist schema using DeepFriedMarshmallow's JitSchema.",
E "schema": {
E "$ref": "#/definitions/ArtistSchema"
E }
E },
E "default": {
E "description": "Error",
E "schema": {
E "$ref": "#/definitions/Error"
E }
E }
E },
E "security": []
E },
E "parameters": [
E {
E "in": "path",
E "name": "artist_uid",
E "required": true,
E "type": "string"
E }
E ]
E },
E "/sheets": {
E "get": {
E "description": "Get multiple sheets - tests List field with many=True",
E "operationId": "get_sheets",
E "responses": {
E "200": {
E "description": "Schema with List field to test deepcopy recursion fix.",
E "schema": {
E "items": {
E "$ref": "#/definitions/CompressedSheetText"
E },
E "type": "array"
E }
E },
E "default": {
E "description": "Error",
E "schema": {
E "$ref": "#/definitions/Error"
E }
E }
E }
E }
E }
E },
E "produces": [
E "application/json"
E ],
E "schemes": [],
E "security": [
E {
E "default": []
E }
E ],
E "securityDefinitions": {
E "default": {
E "in": "header",
E "name": "x-another",
E "type": "apiKey"
E },
E "sharedSecret": {
E "in": "header",
E "name": "x-auth",
E "type": "apiKey"
E }
E },
E "swagger": "2.0"
E }
tests/swagger_generation/test_swagger_generator.py:283: AssertionError
Check failure on line 283 in tests/swagger_generation/test_swagger_generator.py
github-actions / JUnit Report python3.12 'marshmallow>4.2.0' flask=='2.3.*' werkzeug=='2.3.*'
test_swagger_generator.test_swagger_generators[registry9-swagger_generator9-expected_swagger9]
assert '{\n "compon... }\n ]\n}' == '{\n "compon... }\n ]\n}'
{
"components": {
"schemas": {
"AlbumSchema": {
"additionalProperties": false,
"description": "Album schema using DeepFriedMarshmallow's JitSchema with nested schema.",
"properties": {
"artist": {
"$ref": "#/components/schemas/ArtistSchema"
},
"release_date": {
"format": "date",
"type": "string"
},
"title": {
"type": "string"
}
},
"title": "AlbumSchema",
"type": "object"
},
"AlbumUpdateSchema": {
"additionalProperties": false,
"description": "Schema for updating album - partial fields.",
"properties": {
"title": {
"type": "string"
}
},
"title": "AlbumUpdateSchema",
"type": "object"
},
"ArtistSchema": {
"additionalProperties": false,
"description": "Artist schema using DeepFriedMarshmallow's JitSchema.",
"properties": {
"name": {
"type": "string"
}
},
"title": "ArtistSchema",
"type": "object"
},
"CompressedSheetText": {
"additionalProperties": false,
"description": "Schema with List field to test deepcopy recursion fix.",
"properties": {
"frame": {
"items": {
"type": "number"
},
"type": "array"
},
"sheet": {
"format": "uuid",
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
- "frame",
"sheet",
- "text"
+ "text",
? +
+ "frame"
],
"title": "CompressedSheetText",
"type": "object"
},
"Error": {
"additionalProperties": false,
"properties": {
"errors": {
"type": "object"
},
"message": {
"type": "string"
}
},
"required": [
"message"
],
"title": "Error",
"type": "object"
}
},
"securitySchemes": {
"default": {
"in": "header",
"name": "x-another",
"type": "apiKey"
},
"sharedSecret": {
"in": "header",
"name": "x-auth",
"type": "apiKey"
}
}
},
"info": {
"description": "",
"title": "My API",
"version": "1.0.0"
},
"openapi": "3.1.0",
"paths": {
"/albums/{album_uid}": {
"get": {
"description": "Get an album by UID",
"operationId": "get_album",
"parameters": [
{
"in": "header",
"name": "X-UserId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AlbumSchema"
}
}
},
"description": "Album schema using DeepFriedMarshmallow's JitSchema with nested schema."
},
"default": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
},
"description": "Error"
}
}
},
"parameters": [
{
"in": "path",
"name": "album_uid",
"required": true,
"schema": {
"type": "string"
},
"style": "simple"
}
],
"patch": {
"description": "Update an album",
"operationId": "update_album",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AlbumUpdateSchema"
}
}
},
"required": true
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AlbumSchema"
}
}
},
"description": "Album schema using DeepFriedMarshmallow's JitSchema with nested schema."
},
"default": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
},
"description": "Error"
}
},
"security": [
{
"sharedSecret": []
}
]
}
},
"/artists/{artist_uid}": {
"get": {
"description": "Get an artist by UID",
"operationId": "get_artist",
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ArtistSchema"
}
}
},
"description": "Artist schema using DeepFriedMarshmallow's JitSchema."
},
"default": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
},
"description": "Error"
}
},
"security": []
},
"parameters": [
{
"in": "path",
"name": "artist_uid",
"required": true,
"schema": {
"type": "string"
},
"style": "simple"
}
]
},
"/sheets": {
"get": {
"description": "Get multiple sheets - tests List field with many=True",
"operationId": "get_sheets",
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"items": {
"$ref": "#/components/schemas/CompressedSheetText"
},
"type": "array"
}
}
},
"description": "Schema with List field to test deepcopy recursion fix."
},
"default": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
},
"description": "Error"
}
}
}
}
},
"security": [
{
"default": []
}
]
}
Raw output
registry = <flask_rebar.rebar.HandlerRegistry object at 0x7f053a4b71a0>
swagger_generator = <flask_rebar.swagger_generation.swagger_generator_v3.SwaggerV3Generator object at 0x7f053a4b6ae0>
expected_swagger = {'components': {'schemas': {'AlbumSchema': {'additionalProperties': False, 'description': "Album schema using DeepFrie...hema with List field to test deepcopy recursion fix.'}, 'default': {'content': {...}, 'description': 'Error'}}}}}, ...}
@pytest.mark.parametrize(
"registry, swagger_generator, expected_swagger",
[
(legacy.registry, legacy.swagger_v2_generator, legacy.EXPECTED_SWAGGER_V2),
(legacy.registry, legacy.swagger_v3_generator, legacy.EXPECTED_SWAGGER_V3),
(
exploded_query_string.registry,
exploded_query_string.swagger_v2_generator,
exploded_query_string.EXPECTED_SWAGGER_V2,
),
(
exploded_query_string.registry,
exploded_query_string.swagger_v3_generator,
exploded_query_string.EXPECTED_SWAGGER_V3,
),
(
multiple_authenticators.registry,
multiple_authenticators.swagger_v2_generator,
multiple_authenticators.EXPECTED_SWAGGER_V2,
),
(
multiple_authenticators.registry,
multiple_authenticators.swagger_v3_generator,
multiple_authenticators.EXPECTED_SWAGGER_V3,
),
(
marshmallow_objects.registry,
marshmallow_objects.swagger_v2_generator,
marshmallow_objects.EXPECTED_SWAGGER_V2,
),
(
marshmallow_objects.registry,
marshmallow_objects.swagger_v3_generator,
marshmallow_objects.EXPECTED_SWAGGER_V3,
),
(
deepfried_marshmallow.registry,
deepfried_marshmallow.swagger_v2_generator,
deepfried_marshmallow.EXPECTED_SWAGGER_V2,
),
(
deepfried_marshmallow.registry,
deepfried_marshmallow.swagger_v3_generator,
deepfried_marshmallow.EXPECTED_SWAGGER_V3,
),
],
)
def test_swagger_generators(registry, swagger_generator, expected_swagger):
open_api_version = swagger_generator.get_open_api_version()
if open_api_version == "2.0":
swagger_jsonschema = SWAGGER_V2_JSONSCHEMA
elif open_api_version == "3.1.0":
swagger_jsonschema = SWAGGER_V3_JSONSCHEMA
else:
raise ValueError(f"Unknown swagger_version: {open_api_version}")
validate_swagger(expected_swagger, schema=swagger_jsonschema)
swagger = swagger_generator.generate(registry)
result = json.dumps(swagger, indent=2, sort_keys=True)
expected = json.dumps(expected_swagger, indent=2, sort_keys=True)
> assert result == expected
E assert '{\n "compon... }\n ]\n}' == '{\n "compon... }\n ]\n}'
E {
E "components": {
E "schemas": {
E "AlbumSchema": {
E "additionalProperties": false,
E "description": "Album schema using DeepFriedMarshmallow's JitSchema with nested schema.",
E "properties": {
E "artist": {
E "$ref": "#/components/schemas/ArtistSchema"
E },
E "release_date": {
E "format": "date",
E "type": "string"
E },
E "title": {
E "type": "string"
E }
E },
E "title": "AlbumSchema",
E "type": "object"
E },
E "AlbumUpdateSchema": {
E "additionalProperties": false,
E "description": "Schema for updating album - partial fields.",
E "properties": {
E "title": {
E "type": "string"
E }
E },
E "title": "AlbumUpdateSchema",
E "type": "object"
E },
E "ArtistSchema": {
E "additionalProperties": false,
E "description": "Artist schema using DeepFriedMarshmallow's JitSchema.",
E "properties": {
E "name": {
E "type": "string"
E }
E },
E "title": "ArtistSchema",
E "type": "object"
E },
E "CompressedSheetText": {
E "additionalProperties": false,
E "description": "Schema with List field to test deepcopy recursion fix.",
E "properties": {
E "frame": {
E "items": {
E "type": "number"
E },
E "type": "array"
E },
E "sheet": {
E "format": "uuid",
E "type": "string"
E },
E "text": {
E "type": "string"
E }
E },
E "required": [
E - "frame",
E "sheet",
E - "text"
E + "text",
E ? +
E + "frame"
E ],
E "title": "CompressedSheetText",
E "type": "object"
E },
E "Error": {
E "additionalProperties": false,
E "properties": {
E "errors": {
E "type": "object"
E },
E "message": {
E "type": "string"
E }
E },
E "required": [
E "message"
E ],
E "title": "Error",
E "type": "object"
E }
E },
E "securitySchemes": {
E "default": {
E "in": "header",
E "name": "x-another",
E "type": "apiKey"
E },
E "sharedSecret": {
E "in": "header",
E "name": "x-auth",
E "type": "apiKey"
E }
E }
E },
E "info": {
E "description": "",
E "title": "My API",
E "version": "1.0.0"
E },
E "openapi": "3.1.0",
E "paths": {
E "/albums/{album_uid}": {
E "get": {
E "description": "Get an album by UID",
E "operationId": "get_album",
E "parameters": [
E {
E "in": "header",
E "name": "X-UserId",
E "required": true,
E "schema": {
E "type": "string"
E }
E }
E ],
E "responses": {
E "200": {
E "content": {
E "application/json": {
E "schema": {
E "$ref": "#/components/schemas/AlbumSchema"
E }
E }
E },
E "description": "Album schema using DeepFriedMarshmallow's JitSchema with nested schema."
E },
E "default": {
E "content": {
E "application/json": {
E "schema": {
E "$ref": "#/components/schemas/Error"
E }
E }
E },
E "description": "Error"
E }
E }
E },
E "parameters": [
E {
E "in": "path",
E "name": "album_uid",
E "required": true,
E "schema": {
E "type": "string"
E },
E "style": "simple"
E }
E ],
E "patch": {
E "description": "Update an album",
E "operationId": "update_album",
E "requestBody": {
E "content": {
E "application/json": {
E "schema": {
E "$ref": "#/components/schemas/AlbumUpdateSchema"
E }
E }
E },
E "required": true
E },
E "responses": {
E "200": {
E "content": {
E "application/json": {
E "schema": {
E "$ref": "#/components/schemas/AlbumSchema"
E }
E }
E },
E "description": "Album schema using DeepFriedMarshmallow's JitSchema with nested schema."
E },
E "default": {
E "content": {
E "application/json": {
E "schema": {
E "$ref": "#/components/schemas/Error"
E }
E }
E },
E "description": "Error"
E }
E },
E "security": [
E {
E "sharedSecret": []
E }
E ]
E }
E },
E "/artists/{artist_uid}": {
E "get": {
E "description": "Get an artist by UID",
E "operationId": "get_artist",
E "responses": {
E "200": {
E "content": {
E "application/json": {
E "schema": {
E "$ref": "#/components/schemas/ArtistSchema"
E }
E }
E },
E "description": "Artist schema using DeepFriedMarshmallow's JitSchema."
E },
E "default": {
E "content": {
E "application/json": {
E "schema": {
E "$ref": "#/components/schemas/Error"
E }
E }
E },
E "description": "Error"
E }
E },
E "security": []
E },
E "parameters": [
E {
E "in": "path",
E "name": "artist_uid",
E "required": true,
E "schema": {
E "type": "string"
E },
E "style": "simple"
E }
E ]
E },
E "/sheets": {
E "get": {
E "description": "Get multiple sheets - tests List field with many=True",
E "operationId": "get_sheets",
E "responses": {
E "200": {
E "content": {
E "application/json": {
E "schema": {
E "items": {
E "$ref": "#/components/schemas/CompressedSheetText"
E },
E "type": "array"
E }
E }
E },
E "description": "Schema with List field to test deepcopy recursion fix."
E },
E "default": {
E "content": {
E "application/json": {
E "schema": {
E "$ref": "#/components/schemas/Error"
E }
E }
E },
E "description": "Error"
E }
E }
E }
E }
E },
E "security": [
E {
E "default": []
E }
E ]
E }
tests/swagger_generation/test_swagger_generator.py:283: AssertionError
Loading