Coverage for faststream / specification / asyncapi / v2_6_0 / schema / message.py: 79%
24 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-08 01:48 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-08 01:48 +0000
1from typing import Any
3from pydantic import BaseModel
4from typing_extensions import Self
6from faststream._internal._compat import PYDANTIC_V2
7from faststream.specification.asyncapi.v2_6_0.schema.tag import Tag
8from faststream.specification.schema.message import Message as SpecMessage
11class CorrelationId(BaseModel):
12 """A class to represent a correlation ID.
14 Attributes:
15 description : optional description of the correlation ID
16 location : location of the correlation ID
18 Configurations:
19 extra : allows extra fields in the correlation ID model
20 """
22 location: str
23 description: str | None = None
25 if PYDANTIC_V2: 25 ↛ 30line 25 didn't jump to line 30 because the condition on line 25 was always true
26 model_config = {"extra": "allow"}
28 else:
30 class Config:
31 extra = "allow"
34class Message(BaseModel):
35 """A class to represent a message.
37 Attributes:
38 title : title of the message
39 name : name of the message
40 summary : summary of the message
41 description : description of the message
42 messageId : ID of the message
43 correlationId : correlation ID of the message
44 contentType : content type of the message
45 payload : dictionary representing the payload of the message
46 tags : list of tags associated with the message
47 """
49 title: str | None = None
50 name: str | None = None
51 summary: str | None = None
52 description: str | None = None
53 messageId: str | None = None
54 correlationId: CorrelationId | None = None
55 contentType: str | None = None
57 payload: dict[str, Any]
58 # TODO:
59 # headers
60 # schemaFormat
61 # bindings
62 # examples
63 # traits
65 tags: list[Tag | dict[str, Any]] | None = None
67 if PYDANTIC_V2: 67 ↛ 72line 67 didn't jump to line 72 because the condition on line 67 was always true
68 model_config = {"extra": "allow"}
70 else:
72 class Config:
73 extra = "allow"
75 @classmethod
76 def from_spec(cls, message: SpecMessage) -> Self:
77 return cls(
78 title=message.title,
79 payload=message.payload,
80 correlationId=CorrelationId(
81 description=None,
82 location="$message.header#/correlation_id",
83 ),
84 name=None,
85 summary=None,
86 description=None,
87 messageId=None,
88 contentType=None,
89 tags=None,
90 )