Доработано преобразование вложений в Pydantic модели
This commit is contained in:
parent
5bc5fb45c8
commit
3fa34079ae
@ -1,4 +1,4 @@
|
|||||||
from typing import Optional
|
from typing import Literal, Optional
|
||||||
|
|
||||||
from ...enums.attachment import AttachmentType
|
from ...enums.attachment import AttachmentType
|
||||||
|
|
||||||
@ -15,5 +15,5 @@ class Audio(Attachment):
|
|||||||
transcription (Optional[str]): Транскрипция аудио (если есть).
|
transcription (Optional[str]): Транскрипция аудио (если есть).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
type: AttachmentType = AttachmentType.AUDIO
|
type: Literal[AttachmentType.AUDIO]
|
||||||
transcription: Optional[str] = None
|
transcription: Optional[str] = None
|
@ -1,10 +1,11 @@
|
|||||||
from typing import Literal
|
from typing import Literal
|
||||||
from pydantic import BaseModel
|
|
||||||
|
|
||||||
from ..attachment import ButtonsPayload
|
from ....enums.attachment import AttachmentType
|
||||||
|
|
||||||
|
from ..attachment import Attachment
|
||||||
|
|
||||||
|
|
||||||
class AttachmentButton(BaseModel):
|
class AttachmentButton(Attachment):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Модель кнопки вложения для сообщения.
|
Модель кнопки вложения для сообщения.
|
||||||
@ -14,5 +15,4 @@ class AttachmentButton(BaseModel):
|
|||||||
payload: Полезная нагрузка кнопки (массив рядов кнопок)
|
payload: Полезная нагрузка кнопки (массив рядов кнопок)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
type: Literal['inline_keyboard'] = 'inline_keyboard'
|
type: Literal[AttachmentType.INLINE_KEYBOARD]
|
||||||
payload: ButtonsPayload
|
|
@ -1,3 +1,4 @@
|
|||||||
|
from typing import Literal
|
||||||
from ...enums.attachment import AttachmentType
|
from ...enums.attachment import AttachmentType
|
||||||
|
|
||||||
from .attachment import Attachment
|
from .attachment import Attachment
|
||||||
@ -12,4 +13,4 @@ class Contact(Attachment):
|
|||||||
type (Literal['contact']): Тип вложения, всегда 'contact'.
|
type (Literal['contact']): Тип вложения, всегда 'contact'.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
type: AttachmentType = AttachmentType.CONTACT
|
type: Literal[AttachmentType.CONTACT]
|
@ -1,4 +1,4 @@
|
|||||||
from typing import Optional
|
from typing import Literal, Optional
|
||||||
|
|
||||||
from ...enums.attachment import AttachmentType
|
from ...enums.attachment import AttachmentType
|
||||||
|
|
||||||
@ -16,6 +16,6 @@ class File(Attachment):
|
|||||||
size (Optional[int]): Размер файла в байтах.
|
size (Optional[int]): Размер файла в байтах.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
type: AttachmentType = AttachmentType.FILE
|
type: Literal[AttachmentType.FILE]
|
||||||
filename: Optional[str] = None
|
filename: Optional[str] = None
|
||||||
size: Optional[int] = None
|
size: Optional[int] = None
|
@ -1,4 +1,4 @@
|
|||||||
from typing import Optional
|
from typing import Literal, Optional
|
||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
@ -31,4 +31,4 @@ class Image(Attachment):
|
|||||||
type (Literal['image']): Тип вложения, всегда 'image'.
|
type (Literal['image']): Тип вложения, всегда 'image'.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
type: AttachmentType = AttachmentType.IMAGE
|
type: Literal[AttachmentType.IMAGE]
|
@ -1,4 +1,4 @@
|
|||||||
from typing import Optional
|
from typing import Literal, Optional
|
||||||
|
|
||||||
from ...enums.attachment import AttachmentType
|
from ...enums.attachment import AttachmentType
|
||||||
|
|
||||||
@ -16,6 +16,6 @@ class Location(Attachment):
|
|||||||
longitude (Optional[float]): Долгота.
|
longitude (Optional[float]): Долгота.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
type: AttachmentType = AttachmentType.LOCATION
|
type: Literal[AttachmentType.LOCATION]
|
||||||
latitude: Optional[float] = None
|
latitude: Optional[float] = None
|
||||||
longitude: Optional[float] = None
|
longitude: Optional[float] = None
|
@ -1,4 +1,4 @@
|
|||||||
from typing import Optional
|
from typing import Literal, Optional
|
||||||
|
|
||||||
from ...enums.attachment import AttachmentType
|
from ...enums.attachment import AttachmentType
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ class Share(Attachment):
|
|||||||
image_url (Optional[str]): URL изображения для предпросмотра.
|
image_url (Optional[str]): URL изображения для предпросмотра.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
type: AttachmentType = AttachmentType.SHARE
|
type: Literal[AttachmentType.SHARE]
|
||||||
title: Optional[str] = None
|
title: Optional[str] = None
|
||||||
description: Optional[str] = None
|
description: Optional[str] = None
|
||||||
image_url: Optional[str] = None
|
image_url: Optional[str] = None
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
from typing import Optional
|
from typing import Literal, Optional
|
||||||
|
|
||||||
from ...enums.attachment import AttachmentType
|
from ...enums.attachment import AttachmentType
|
||||||
|
|
||||||
@ -16,6 +16,6 @@ class Sticker(Attachment):
|
|||||||
height (Optional[int]): Высота стикера в пикселях.
|
height (Optional[int]): Высота стикера в пикселях.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
type: AttachmentType = AttachmentType.STICKER
|
type: Literal[AttachmentType.STICKER]
|
||||||
width: Optional[int] = None
|
width: Optional[int] = None
|
||||||
height: Optional[int] = None
|
height: Optional[int] = None
|
@ -1,4 +1,4 @@
|
|||||||
from typing import TYPE_CHECKING, Any, Optional
|
from typing import TYPE_CHECKING, Any, Literal, Optional
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
from ...enums.attachment import AttachmentType
|
from ...enums.attachment import AttachmentType
|
||||||
@ -61,7 +61,7 @@ class Video(Attachment):
|
|||||||
bot (Optional[Any]): Ссылка на экземпляр бота, не сериализуется.
|
bot (Optional[Any]): Ссылка на экземпляр бота, не сериализуется.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
type: AttachmentType = AttachmentType.VIDEO
|
type: Literal[AttachmentType.VIDEO]
|
||||||
token: Optional[str] = None
|
token: Optional[str] = None
|
||||||
urls: Optional[VideoUrl] = None
|
urls: Optional[VideoUrl] = None
|
||||||
thumbnail: VideoThumbnail
|
thumbnail: VideoThumbnail
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
from typing import Any, Optional, List, Union, TYPE_CHECKING
|
from typing import Annotated, Any, Optional, List, Union, TYPE_CHECKING
|
||||||
|
|
||||||
|
from ..types.attachments.contact import Contact
|
||||||
|
|
||||||
from ..enums.text_style import TextStyle
|
from ..enums.text_style import TextStyle
|
||||||
from ..enums.parse_mode import ParseMode
|
from ..enums.parse_mode import ParseMode
|
||||||
@ -24,6 +26,19 @@ from .users import User
|
|||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from ..bot import Bot
|
from ..bot import Bot
|
||||||
from ..types.input_media import InputMedia, InputMediaBuffer
|
from ..types.input_media import InputMedia, InputMediaBuffer
|
||||||
|
|
||||||
|
|
||||||
|
Attachments = Annotated[Union[
|
||||||
|
Audio,
|
||||||
|
Video,
|
||||||
|
File,
|
||||||
|
Image,
|
||||||
|
Sticker,
|
||||||
|
Share,
|
||||||
|
Location,
|
||||||
|
AttachmentButton,
|
||||||
|
Contact
|
||||||
|
], Field(discriminator='type')]
|
||||||
|
|
||||||
|
|
||||||
class MarkupElement(BaseModel):
|
class MarkupElement(BaseModel):
|
||||||
@ -91,18 +106,7 @@ class MessageBody(BaseModel):
|
|||||||
seq: int
|
seq: int
|
||||||
text: Optional[str] = None
|
text: Optional[str] = None
|
||||||
attachments: Optional[
|
attachments: Optional[
|
||||||
List[
|
List[Attachments]
|
||||||
Union[
|
|
||||||
AttachmentButton,
|
|
||||||
Audio,
|
|
||||||
Video,
|
|
||||||
File,
|
|
||||||
Image,
|
|
||||||
Sticker,
|
|
||||||
Share,
|
|
||||||
Location
|
|
||||||
]
|
|
||||||
]
|
|
||||||
] = Field(default_factory=list) # type: ignore
|
] = Field(default_factory=list) # type: ignore
|
||||||
|
|
||||||
markup: Optional[
|
markup: Optional[
|
||||||
|
Loading…
x
Reference in New Issue
Block a user