|
1 | 1 | import json
|
| 2 | +import logging |
2 | 3 |
|
3 | 4 | import pydantic_asyncapi as pa
|
4 | 5 | from fastapi import APIRouter
|
| 6 | +from pydantic.json_schema import models_json_schema |
5 | 7 | from starlette.responses import HTMLResponse
|
6 | 8 |
|
7 |
| -from domains.books.events import BookCreatedV1 |
| 9 | +from domains.books.events import BookCreatedV1, BookUpdatedV1 |
8 | 10 |
|
9 | 11 | message_map = {
|
10 |
| - "chat_channel": [BookCreatedV1] |
| 12 | + # Use validation if receiving message, serialization if sending message |
| 13 | + "chat_channel": [(BookCreatedV1, "validation"), (BookUpdatedV1, "validation")] |
11 | 14 | }
|
12 | 15 |
|
13 | 16 | components_schemas = {}
|
|
16 | 19 | # Prepare some data from a map
|
17 | 20 | for channel, messages in message_map.items():
|
18 | 21 | 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"] |
19 | 31 | # TODO: Check for overlapping model schemas, if they are different log a warning!
|
20 | 32 | 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__}") |
25 | 40 | )
|
26 | 41 |
|
27 | 42 |
|
@@ -92,7 +107,7 @@ def get_asyncapi_html(
|
92 | 107 | messages: bool = True,
|
93 | 108 | schemas: bool = True,
|
94 | 109 | errors: bool = True,
|
95 |
| - expand_message_examples: bool = True, |
| 110 | + expand_message_examples: bool = False, |
96 | 111 | title: str = "Websocket",
|
97 | 112 | ) -> HTMLResponse:
|
98 | 113 |
|
|
0 commit comments