Skip to content

Commit d8ede77

Browse files
committed
Batch-create json schemas
1 parent e4831c9 commit d8ede77

File tree

1 file changed

+22
-7
lines changed

1 file changed

+22
-7
lines changed

src/http_app/routes/docs_ws.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
import json
2+
import logging
23

34
import pydantic_asyncapi as pa
45
from fastapi import APIRouter
6+
from pydantic.json_schema import models_json_schema
57
from starlette.responses import HTMLResponse
68

7-
from domains.books.events import BookCreatedV1
9+
from domains.books.events import BookCreatedV1, BookUpdatedV1
810

911
message_map = {
10-
"chat_channel": [BookCreatedV1]
12+
# Use validation if receiving message, serialization if sending message
13+
"chat_channel": [(BookCreatedV1, "validation"), (BookUpdatedV1, "validation")]
1114
}
1215

1316
components_schemas = {}
@@ -16,12 +19,24 @@
1619
# Prepare some data from a map
1720
for channel, messages in message_map.items():
1821
channel_messages[channel] = {}
22+
a, b = models_json_schema(models=messages, ref_template="#/components/schemas/{model}")
23+
24+
logging.error(a)
25+
"""
26+
{(<class 'domains.books.events.BookCreatedV1'>, 'validation'): {'$ref': '#/components/schemas/BookCreatedV1'}, (<class 'domains.books.events.BookUpdatedV1'>, 'validation'): {'$ref': '#/components/schemas/BookUpdatedV1'}}
27+
"""
28+
logging.error(b)
29+
30+
components_schemas = b["$defs"]
1931
# TODO: Check for overlapping model schemas, if they are different log a warning!
2032
for message in messages:
21-
components_schemas[message.__name__] = message.model_json_schema(ref_template="#/components/schemas/{model}")
22-
components_schemas.update(message.model_json_schema(ref_template="#/components/schemas/{model}")["$defs"])
23-
channel_messages[channel][message.__name__] = pa.v3.Message(
24-
payload=pa.v3.Reference(ref=f"#/components/schemas/{message.__name__}")
33+
# components_schemas[message.__name__] = message.model_json_schema(ref_template="#/components/schemas/{model}")
34+
# components_schemas.update(message.model_json_schema(ref_template="#/components/schemas/{model}")["$defs"])
35+
# channel_messages[channel][message.__name__] = pa.v3.Message(
36+
# payload=pa.v3.Reference(ref=f"#/components/schemas/{message.__name__}")
37+
# )
38+
channel_messages[channel][message[0].__name__] = pa.v3.Message(
39+
payload=pa.v3.Reference(ref=f"#/components/schemas/{message[0].__name__}")
2540
)
2641

2742

@@ -92,7 +107,7 @@ def get_asyncapi_html(
92107
messages: bool = True,
93108
schemas: bool = True,
94109
errors: bool = True,
95-
expand_message_examples: bool = True,
110+
expand_message_examples: bool = False,
96111
title: str = "Websocket",
97112
) -> HTMLResponse:
98113

0 commit comments

Comments
 (0)