2323import jwt
2424from aiocsv .readers import AsyncDictReader
2525from aiofiles .tempfile import NamedTemporaryFile , TemporaryDirectory
26- from pydantic import ValidationError , parse_obj_as
2726
2827from pybotx .async_buffer import AsyncBufferReadable , AsyncBufferWritable
2928from pybotx .bot .bot_accounts_storage import BotAccountsStorage
3029from pybotx .bot .callbacks .callback_manager import CallbackManager
30+ from pydantic import TypeAdapter
3131from pybotx .bot .callbacks .callback_memory_repo import CallbackMemoryRepo
3232from pybotx .bot .callbacks .callback_repo_proto import CallbackRepoProto
3333from pybotx .bot .contextvars import bot_id_var , chat_id_var
234234from pybotx .models .bot_account import BotAccountWithSecret
235235from pybotx .models .bot_catalog import BotsListItem
236236from pybotx .models .chats import ChatInfo , ChatListItem
237- from pybotx .models .commands import BotAPICommand , BotCommand
238- from pybotx .models .enums import ChatTypes
237+ from pybotx .models .commands import (
238+ BotAPICommand ,
239+ BotAPISystemEvent ,
240+ BotAPIIncomingMessage ,
241+ BotCommand ,
242+ )
243+ from pybotx .models .enums import BotAPICommandTypes , ChatTypes
239244from pybotx .models .message .edit_message import EditMessage
240245from pybotx .models .message .markup import BubbleMarkup , KeyboardMarkup
241246from pybotx .models .message .message_status import MessageStatus
256261)
257262from pybotx .models .system_events .smartapp_event import SmartAppEvent
258263from pybotx .models .users import UserFromCSV , UserFromSearch
264+ from pydantic import ValidationError
259265
260266MissingOptionalAttachment = MissingOptional [
261267 Union [IncomingFileAttachment , OutgoingAttachment ]
@@ -312,11 +318,11 @@ def async_execute_raw_bot_command(
312318 self ._verify_request (request_headers , trusted_issuers = trusted_issuers )
313319
314320 try :
315- bot_api_command : BotAPICommand = parse_obj_as (
316- # Same ignore as in pydantic
317- BotAPICommand , # type: ignore[arg-type]
318- raw_bot_command ,
319- )
321+ command_type = raw_bot_command . get ( "command" , {}). get ( "command_type" )
322+ if command_type == BotAPICommandTypes . USER :
323+ bot_api_command = BotAPIIncomingMessage . model_validate ( raw_bot_command )
324+ else :
325+ bot_api_command = TypeAdapter ( BotAPISystemEvent ). validate_python ( raw_bot_command )
320326 except ValidationError as validation_exc :
321327 raise ValueError ("Bot command validation error" ) from validation_exc
322328
@@ -350,9 +356,8 @@ async def sync_execute_raw_smartapp_event(
350356 self ._verify_request (request_headers , trusted_issuers = trusted_issuers )
351357
352358 try :
353- bot_api_smartapp_event : BotAPISyncSmartAppEvent = parse_obj_as (
354- BotAPISyncSmartAppEvent ,
355- raw_smartapp_event ,
359+ bot_api_smartapp_event = BotAPISyncSmartAppEvent .model_validate (
360+ raw_smartapp_event
356361 )
357362 except ValidationError as validation_exc :
358363 raise ValueError (
@@ -388,7 +393,7 @@ async def raw_get_status(
388393 self ._verify_request (request_headers , trusted_issuers = trusted_issuers )
389394
390395 try :
391- bot_api_status_recipient = BotAPIStatusRecipient .parse_obj (query_params )
396+ bot_api_status_recipient = BotAPIStatusRecipient .model_validate (query_params )
392397 except ValidationError as exc :
393398 raise ValueError ("Status request validation error" ) from exc
394399
@@ -415,9 +420,7 @@ async def set_raw_botx_method_result(
415420 if verify_request :
416421 self ._verify_request (request_headers , trusted_issuers = trusted_issuers )
417422
418- callback : BotXMethodCallback = parse_obj_as (
419- # Same ignore as in pydantic
420- BotXMethodCallback , # type: ignore[arg-type]
423+ callback = TypeAdapter (BotXMethodCallback ).validate_python (
421424 raw_botx_method_result ,
422425 )
423426
0 commit comments