pybotx 0.77.0__tar.gz → 0.77.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. pybotx-0.77.2/.gitlab-ci.yml +56 -0
  2. pybotx-0.77.0/README.md → pybotx-0.77.2/PKG-INFO +57 -14
  3. pybotx-0.77.0/PKG-INFO → pybotx-0.77.2/README.md +38 -33
  4. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/__init__.py +12 -1
  5. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/bot.py +246 -88
  6. pybotx-0.77.2/pybotx/bot/bot_account_provider.py +64 -0
  7. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/bot_accounts_storage.py +69 -13
  8. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/contextvars.py +3 -0
  9. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/exceptions.py +9 -0
  10. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/handler_collector.py +14 -1
  11. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/events_api/reply_event.py +28 -3
  12. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/bot_account.py +10 -0
  13. {pybotx-0.77.0 → pybotx-0.77.2}/pyproject.toml +6 -5
  14. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/events_api/test_reply_event.py +75 -9
  15. {pybotx-0.77.0 → pybotx-0.77.2}/tests/deprecated/test_verify_request_v1.py +10 -3
  16. pybotx-0.77.2/tests/test_bot_account_provider.py +641 -0
  17. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_verify_request.py +49 -2
  18. {pybotx-0.77.0 → pybotx-0.77.2}/uv.lock +1 -1
  19. {pybotx-0.77.0 → pybotx-0.77.2}/.github/dependabot.yml +0 -0
  20. {pybotx-0.77.0 → pybotx-0.77.2}/.github/pull_request_template.md +0 -0
  21. {pybotx-0.77.0 → pybotx-0.77.2}/.github/workflows/publish-pypi.yml +0 -0
  22. {pybotx-0.77.0 → pybotx-0.77.2}/.github/workflows/python-app.yml +0 -0
  23. {pybotx-0.77.0 → pybotx-0.77.2}/.gitignore +0 -0
  24. {pybotx-0.77.0 → pybotx-0.77.2}/LICENSE +0 -0
  25. {pybotx-0.77.0 → pybotx-0.77.2}/docs/production_presets.md +0 -0
  26. {pybotx-0.77.0 → pybotx-0.77.2}/docs/retry_safety.md +0 -0
  27. {pybotx-0.77.0 → pybotx-0.77.2}/docs/widgets/WIDGETS.md +0 -0
  28. {pybotx-0.77.0 → pybotx-0.77.2}/docs/widgets/img.png +0 -0
  29. {pybotx-0.77.0 → pybotx-0.77.2}/docs/widgets/img_1.png +0 -0
  30. {pybotx-0.77.0 → pybotx-0.77.2}/docs/widgets/img_10.png +0 -0
  31. {pybotx-0.77.0 → pybotx-0.77.2}/docs/widgets/img_11.png +0 -0
  32. {pybotx-0.77.0 → pybotx-0.77.2}/docs/widgets/img_12.png +0 -0
  33. {pybotx-0.77.0 → pybotx-0.77.2}/docs/widgets/img_13.png +0 -0
  34. {pybotx-0.77.0 → pybotx-0.77.2}/docs/widgets/img_14.png +0 -0
  35. {pybotx-0.77.0 → pybotx-0.77.2}/docs/widgets/img_15.png +0 -0
  36. {pybotx-0.77.0 → pybotx-0.77.2}/docs/widgets/img_2.png +0 -0
  37. {pybotx-0.77.0 → pybotx-0.77.2}/docs/widgets/img_3.png +0 -0
  38. {pybotx-0.77.0 → pybotx-0.77.2}/docs/widgets/img_4.png +0 -0
  39. {pybotx-0.77.0 → pybotx-0.77.2}/docs/widgets/img_5.png +0 -0
  40. {pybotx-0.77.0 → pybotx-0.77.2}/docs/widgets/img_6.png +0 -0
  41. {pybotx-0.77.0 → pybotx-0.77.2}/docs/widgets/img_7.png +0 -0
  42. {pybotx-0.77.0 → pybotx-0.77.2}/docs/widgets/img_8.png +0 -0
  43. {pybotx-0.77.0 → pybotx-0.77.2}/docs/widgets/img_9.png +0 -0
  44. {pybotx-0.77.0 → pybotx-0.77.2}/example/__init__.py +0 -0
  45. {pybotx-0.77.0 → pybotx-0.77.2}/example/main.py +0 -0
  46. {pybotx-0.77.0 → pybotx-0.77.2}/mkdocs.yml +0 -0
  47. {pybotx-0.77.0 → pybotx-0.77.2}/poetry.lock +0 -0
  48. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/async_buffer.py +0 -0
  49. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/auth.py +0 -0
  50. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/__init__.py +0 -0
  51. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/api/__init__.py +0 -0
  52. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/api/exceptions.py +0 -0
  53. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/api/responses/__init__.py +0 -0
  54. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/api/responses/bot_disabled.py +0 -0
  55. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/api/responses/command_accepted.py +0 -0
  56. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/api/responses/unverified_request.py +0 -0
  57. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/callbacks/__init__.py +0 -0
  58. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/callbacks/callback_manager.py +0 -0
  59. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/callbacks/callback_memory_repo.py +0 -0
  60. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/callbacks/callback_repo_proto.py +0 -0
  61. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/command_processing.py +0 -0
  62. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/handler.py +0 -0
  63. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/healthcheck.py +0 -0
  64. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/ingress_observability.py +0 -0
  65. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/middlewares/__init__.py +0 -0
  66. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/middlewares/exception_middleware.py +0 -0
  67. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/bot/testing.py +0 -0
  68. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/cli.py +0 -0
  69. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/__init__.py +0 -0
  70. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/authorized_botx_method.py +0 -0
  71. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/bots_api/__init__.py +0 -0
  72. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/bots_api/bot_catalog.py +0 -0
  73. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/bots_api/get_token.py +0 -0
  74. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/botx_method.py +0 -0
  75. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/chats_api/__init__.py +0 -0
  76. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/chats_api/add_admin.py +0 -0
  77. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/chats_api/add_user.py +0 -0
  78. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/chats_api/chat_info.py +0 -0
  79. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/chats_api/create_chat.py +0 -0
  80. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/chats_api/create_chat_link.py +0 -0
  81. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/chats_api/create_thread.py +0 -0
  82. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/chats_api/disable_stealth.py +0 -0
  83. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/chats_api/list_chats.py +0 -0
  84. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/chats_api/personal_chat.py +0 -0
  85. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/chats_api/pin_message.py +0 -0
  86. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/chats_api/remove_user.py +0 -0
  87. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/chats_api/set_stealth.py +0 -0
  88. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/chats_api/unpin_message.py +0 -0
  89. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/events_api/__init__.py +0 -0
  90. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/events_api/delete_event.py +0 -0
  91. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/events_api/edit_event.py +0 -0
  92. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/events_api/message_status_event.py +0 -0
  93. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/events_api/stop_typing_event.py +0 -0
  94. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/events_api/typing_event.py +0 -0
  95. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/exceptions/__init__.py +0 -0
  96. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/exceptions/base.py +0 -0
  97. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/exceptions/callbacks.py +0 -0
  98. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/exceptions/chats.py +0 -0
  99. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/exceptions/common.py +0 -0
  100. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/exceptions/event.py +0 -0
  101. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/exceptions/files.py +0 -0
  102. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/exceptions/http.py +0 -0
  103. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/exceptions/message.py +0 -0
  104. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/exceptions/notifications.py +0 -0
  105. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/exceptions/users.py +0 -0
  106. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/files_api/__init__.py +0 -0
  107. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/files_api/download_file.py +0 -0
  108. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/files_api/upload_file.py +0 -0
  109. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/get_token.py +0 -0
  110. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/http_config.py +0 -0
  111. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/mertics_api/__init__.py +0 -0
  112. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/mertics_api/collect_bot_function.py +0 -0
  113. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/notifications_api/__init__.py +0 -0
  114. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/notifications_api/direct_notification.py +0 -0
  115. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/notifications_api/internal_bot_notification.py +0 -0
  116. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/observability.py +0 -0
  117. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/openid_api/__init__.py +0 -0
  118. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/openid_api/refresh_access_token.py +0 -0
  119. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/smartapps_api/__init__.py +0 -0
  120. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/smartapps_api/exceptions.py +0 -0
  121. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/smartapps_api/smartapp_custom_notification.py +0 -0
  122. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/smartapps_api/smartapp_event.py +0 -0
  123. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/smartapps_api/smartapp_manifest.py +0 -0
  124. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/smartapps_api/smartapp_notification.py +0 -0
  125. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/smartapps_api/smartapp_unread_counter.py +0 -0
  126. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/smartapps_api/smartapps_list.py +0 -0
  127. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/smartapps_api/upload_file.py +0 -0
  128. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/stickers_api/__init__.py +0 -0
  129. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/stickers_api/add_sticker.py +0 -0
  130. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/stickers_api/create_sticker_pack.py +0 -0
  131. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/stickers_api/delete_sticker.py +0 -0
  132. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/stickers_api/delete_sticker_pack.py +0 -0
  133. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/stickers_api/edit_sticker_pack.py +0 -0
  134. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/stickers_api/exceptions.py +0 -0
  135. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/stickers_api/get_sticker.py +0 -0
  136. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/stickers_api/get_sticker_pack.py +0 -0
  137. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/stickers_api/get_sticker_packs.py +0 -0
  138. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/stickers_api/sticker_pack.py +0 -0
  139. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/users_api/__init__.py +0 -0
  140. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/users_api/search_user_by_email.py +0 -0
  141. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/users_api/search_user_by_emails.py +0 -0
  142. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/users_api/search_user_by_huid.py +0 -0
  143. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/users_api/search_user_by_login.py +0 -0
  144. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/users_api/search_user_by_other_id.py +0 -0
  145. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/users_api/trusted_search.py +0 -0
  146. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/users_api/update_user_profile.py +0 -0
  147. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/users_api/user_from_csv.py +0 -0
  148. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/users_api/user_from_search.py +0 -0
  149. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/users_api/users_as_csv.py +0 -0
  150. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/voex_api/__init__.py +0 -0
  151. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/voex_api/exceptions.py +0 -0
  152. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/voex_api/get_call.py +0 -0
  153. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/client/voex_api/get_conference.py +0 -0
  154. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/constants.py +0 -0
  155. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/converters.py +0 -0
  156. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/image_validators.py +0 -0
  157. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/integrations/__init__.py +0 -0
  158. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/integrations/fastapi.py +0 -0
  159. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/logger.py +0 -0
  160. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/missing.py +0 -0
  161. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/__init__.py +0 -0
  162. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/api_base.py +0 -0
  163. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/async_files.py +0 -0
  164. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/attachments.py +0 -0
  165. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/base_command.py +0 -0
  166. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/bot_catalog.py +0 -0
  167. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/bot_sender.py +0 -0
  168. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/call.py +0 -0
  169. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/chats.py +0 -0
  170. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/commands.py +0 -0
  171. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/conference.py +0 -0
  172. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/enums.py +0 -0
  173. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/message/__init__.py +0 -0
  174. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/message/edit_message.py +0 -0
  175. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/message/forward.py +0 -0
  176. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/message/incoming_message.py +0 -0
  177. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/message/markup.py +0 -0
  178. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/message/mentions.py +0 -0
  179. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/message/message_status.py +0 -0
  180. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/message/outgoing_message.py +0 -0
  181. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/message/reply.py +0 -0
  182. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/message/reply_message.py +0 -0
  183. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/method_callbacks.py +0 -0
  184. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/smartapps.py +0 -0
  185. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/status.py +0 -0
  186. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/stickers.py +0 -0
  187. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/sync_smartapp_event.py +0 -0
  188. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/system_events/__init__.py +0 -0
  189. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/system_events/added_to_chat.py +0 -0
  190. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/system_events/chat_created.py +0 -0
  191. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/system_events/chat_deleted_by_user.py +0 -0
  192. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/system_events/conference_changed.py +0 -0
  193. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/system_events/conference_created.py +0 -0
  194. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/system_events/conference_deleted.py +0 -0
  195. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/system_events/cts_login.py +0 -0
  196. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/system_events/cts_logout.py +0 -0
  197. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/system_events/deleted_from_chat.py +0 -0
  198. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/system_events/event_delete.py +0 -0
  199. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/system_events/event_edit.py +0 -0
  200. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/system_events/internal_bot_notification.py +0 -0
  201. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/system_events/left_from_chat.py +0 -0
  202. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/system_events/smartapp_event.py +0 -0
  203. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/system_events/user_joined_to_chat.py +0 -0
  204. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/models/users.py +0 -0
  205. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/presets.py +0 -0
  206. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/py.typed +0 -0
  207. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/scaffold/__init__.py +0 -0
  208. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/scaffold/_shared.py +0 -0
  209. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/scaffold/command.py +0 -0
  210. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/scaffold/fsm_flow.py +0 -0
  211. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/scaffold/manifest.py +0 -0
  212. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/scaffold/port.py +0 -0
  213. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/scaffold/project.py +0 -0
  214. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/scaffold/repository.py +0 -0
  215. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/scaffold/service.py +0 -0
  216. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/scaffold/templates.py +0 -0
  217. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/scaffold/widget.py +0 -0
  218. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/scaffold/widget_flow.py +0 -0
  219. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/__init__.py +0 -0
  220. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/approval.py +0 -0
  221. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/async_job.py +0 -0
  222. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/base.py +0 -0
  223. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/calendar.py +0 -0
  224. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/carousel.py +0 -0
  225. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/checklist.py +0 -0
  226. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/checktable.py +0 -0
  227. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/confirm.py +0 -0
  228. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/date_range.py +0 -0
  229. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/factory.py +0 -0
  230. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/file_batch.py +0 -0
  231. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/form_wizard.py +0 -0
  232. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/markup.py +0 -0
  233. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/messages_pager.py +0 -0
  234. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/multi_select.py +0 -0
  235. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/observability.py +0 -0
  236. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/pagination.py +0 -0
  237. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/presets.py +0 -0
  238. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/range.py +0 -0
  239. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/runner.py +0 -0
  240. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/search_select.py +0 -0
  241. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/select.py +0 -0
  242. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/service.py +0 -0
  243. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/strings.py +0 -0
  244. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/table.py +0 -0
  245. {pybotx-0.77.0 → pybotx-0.77.2}/pybotx/widgets/undefined.py +0 -0
  246. {pybotx-0.77.0 → pybotx-0.77.2}/scripts/docs-lint +0 -0
  247. {pybotx-0.77.0 → pybotx-0.77.2}/scripts/format +0 -0
  248. {pybotx-0.77.0 → pybotx-0.77.2}/scripts/lint +0 -0
  249. {pybotx-0.77.0 → pybotx-0.77.2}/scripts/test +0 -0
  250. {pybotx-0.77.0 → pybotx-0.77.2}/scripts/wip-marks +0 -0
  251. {pybotx-0.77.0 → pybotx-0.77.2}/setup.cfg +0 -0
  252. {pybotx-0.77.0 → pybotx-0.77.2}/tests/__init__.py +0 -0
  253. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/__init__.py +0 -0
  254. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/bots_api/__init__.py +0 -0
  255. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/bots_api/test_bots_list.py +0 -0
  256. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/bots_api/test_get_token.py +0 -0
  257. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/chats_api/__init__.py +0 -0
  258. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/chats_api/factories.py +0 -0
  259. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/chats_api/test_add_admin.py +0 -0
  260. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/chats_api/test_add_user.py +0 -0
  261. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/chats_api/test_chat_info.py +0 -0
  262. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/chats_api/test_chat_info_validation.py +0 -0
  263. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/chats_api/test_create_chat.py +0 -0
  264. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/chats_api/test_create_chat_link.py +0 -0
  265. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/chats_api/test_create_thread.py +0 -0
  266. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/chats_api/test_disable_stealth.py +0 -0
  267. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/chats_api/test_list_chats.py +0 -0
  268. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/chats_api/test_list_chats_validation.py +0 -0
  269. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/chats_api/test_personal_chat.py +0 -0
  270. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/chats_api/test_personal_chat_additional.py +0 -0
  271. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/chats_api/test_pin_message.py +0 -0
  272. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/chats_api/test_remove_user.py +0 -0
  273. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/chats_api/test_set_stealth.py +0 -0
  274. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/chats_api/test_unpin_message.py +0 -0
  275. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/events_api/__init__.py +0 -0
  276. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/events_api/test_delete_event.py +0 -0
  277. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/events_api/test_edit_event.py +0 -0
  278. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/events_api/test_message_status_event.py +0 -0
  279. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/events_api/test_stop_typing_event.py +0 -0
  280. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/events_api/test_typing_event.py +0 -0
  281. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/exceptions/test_callbacks.py +0 -0
  282. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/exceptions/test_http.py +0 -0
  283. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/files_api/__init__.py +0 -0
  284. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/files_api/test_download_file.py +0 -0
  285. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/files_api/test_upload_file.py +0 -0
  286. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/notifications_api/__init__.py +0 -0
  287. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/notifications_api/test_direct_notification.py +0 -0
  288. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/notifications_api/test_direct_notification_sync.py +0 -0
  289. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/notifications_api/test_internal_bot_notification.py +0 -0
  290. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/notifications_api/test_markup.py +0 -0
  291. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/openid_api/__init__.py +0 -0
  292. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/openid_api/test_resfesh_access_token.py +0 -0
  293. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/smartapps_api/__init__.py +0 -0
  294. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/smartapps_api/test_smartapp_custom_notification.py +0 -0
  295. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/smartapps_api/test_smartapp_event.py +0 -0
  296. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/smartapps_api/test_smartapp_manifest.py +0 -0
  297. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/smartapps_api/test_smartapp_notification.py +0 -0
  298. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/smartapps_api/test_smartapp_unread_counter.py +0 -0
  299. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/smartapps_api/test_smartapp_upload_file.py +0 -0
  300. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/smartapps_api/test_smartapps_list.py +0 -0
  301. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/stickers_api/__init__.py +0 -0
  302. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/stickers_api/test_add_sticker.py +0 -0
  303. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/stickers_api/test_create_sticker_pack.py +0 -0
  304. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/stickers_api/test_delete_sticker.py +0 -0
  305. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/stickers_api/test_delete_sticker_pack.py +0 -0
  306. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/stickers_api/test_edit_sticker_pack.py +0 -0
  307. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/stickers_api/test_get_sticker.py +0 -0
  308. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/stickers_api/test_get_sticker_pack.py +0 -0
  309. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/stickers_api/test_get_sticker_packs.py +0 -0
  310. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/test_authorized_botx_method.py +0 -0
  311. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/test_botx_method.py +0 -0
  312. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/test_botx_method_callback.py +0 -0
  313. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/test_botx_method_stream.py +0 -0
  314. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/test_botx_method_undefined_cleaned.py +0 -0
  315. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/test_http_config.py +0 -0
  316. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/test_metrics_api/__init__.py +0 -0
  317. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/test_metrics_api/test_collect_metric.py +0 -0
  318. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/test_open_telemetry_tracing_collector.py +0 -0
  319. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/test_prometheus_metrics_collector.py +0 -0
  320. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/users_api/__init__.py +0 -0
  321. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/users_api/conftest.py +0 -0
  322. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/users_api/convert_to_datetime.py +0 -0
  323. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/users_api/test_search_user_by_email_post.py +0 -0
  324. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/users_api/test_search_user_by_emails.py +0 -0
  325. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/users_api/test_search_user_by_huid.py +0 -0
  326. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/users_api/test_search_user_by_login.py +0 -0
  327. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/users_api/test_search_user_by_other_id.py +0 -0
  328. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/users_api/test_trusted_search.py +0 -0
  329. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/users_api/test_update_user_profile.py +0 -0
  330. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/users_api/test_users_as_csv.py +0 -0
  331. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/voex_api/__init__.py +0 -0
  332. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/voex_api/test_call.py +0 -0
  333. {pybotx-0.77.0 → pybotx-0.77.2}/tests/client/voex_api/test_conference.py +0 -0
  334. {pybotx-0.77.0 → pybotx-0.77.2}/tests/conftest.py +0 -0
  335. {pybotx-0.77.0 → pybotx-0.77.2}/tests/deprecated/test_authorized_botx_method_v1.py +0 -0
  336. {pybotx-0.77.0 → pybotx-0.77.2}/tests/deprecated/test_lifespan_v1.py +0 -0
  337. {pybotx-0.77.0 → pybotx-0.77.2}/tests/deprecated/test_search_user_by_email_get.py +0 -0
  338. {pybotx-0.77.0 → pybotx-0.77.2}/tests/fixtures/users_api.py +0 -0
  339. {pybotx-0.77.0 → pybotx-0.77.2}/tests/models/__init__.py +0 -0
  340. {pybotx-0.77.0 → pybotx-0.77.2}/tests/models/test_api_base_property.py +0 -0
  341. {pybotx-0.77.0 → pybotx-0.77.2}/tests/models/test_bot_account.py +0 -0
  342. {pybotx-0.77.0 → pybotx-0.77.2}/tests/models/test_bot_account_with_secret.py +0 -0
  343. {pybotx-0.77.0 → pybotx-0.77.2}/tests/models/test_botx_api_markup.py +0 -0
  344. {pybotx-0.77.0 → pybotx-0.77.2}/tests/models/test_enums.py +0 -0
  345. {pybotx-0.77.0 → pybotx-0.77.2}/tests/models/test_enums_property.py +0 -0
  346. {pybotx-0.77.0 → pybotx-0.77.2}/tests/models/test_incoming_message.py +0 -0
  347. {pybotx-0.77.0 → pybotx-0.77.2}/tests/models/test_incoming_message_validation.py +0 -0
  348. {pybotx-0.77.0 → pybotx-0.77.2}/tests/models/test_markup.py +0 -0
  349. {pybotx-0.77.0 → pybotx-0.77.2}/tests/models/test_mentions_list.py +0 -0
  350. {pybotx-0.77.0 → pybotx-0.77.2}/tests/models/test_status_recipient.py +0 -0
  351. {pybotx-0.77.0 → pybotx-0.77.2}/tests/models/test_sync_smartapp_event.py +0 -0
  352. {pybotx-0.77.0 → pybotx-0.77.2}/tests/models/test_users.py +0 -0
  353. {pybotx-0.77.0 → pybotx-0.77.2}/tests/system_events/factories.py +0 -0
  354. {pybotx-0.77.0 → pybotx-0.77.2}/tests/system_events/test_added_to_chat.py +0 -0
  355. {pybotx-0.77.0 → pybotx-0.77.2}/tests/system_events/test_chat_created.py +0 -0
  356. {pybotx-0.77.0 → pybotx-0.77.2}/tests/system_events/test_chat_deleted_by_user.py +0 -0
  357. {pybotx-0.77.0 → pybotx-0.77.2}/tests/system_events/test_conference_changed.py +0 -0
  358. {pybotx-0.77.0 → pybotx-0.77.2}/tests/system_events/test_conference_created.py +0 -0
  359. {pybotx-0.77.0 → pybotx-0.77.2}/tests/system_events/test_conference_deleted.py +0 -0
  360. {pybotx-0.77.0 → pybotx-0.77.2}/tests/system_events/test_cts_login.py +0 -0
  361. {pybotx-0.77.0 → pybotx-0.77.2}/tests/system_events/test_cts_logout.py +0 -0
  362. {pybotx-0.77.0 → pybotx-0.77.2}/tests/system_events/test_deleted_from_chat.py +0 -0
  363. {pybotx-0.77.0 → pybotx-0.77.2}/tests/system_events/test_event_delete.py +0 -0
  364. {pybotx-0.77.0 → pybotx-0.77.2}/tests/system_events/test_event_edit.py +0 -0
  365. {pybotx-0.77.0 → pybotx-0.77.2}/tests/system_events/test_internal_bot_notification.py +0 -0
  366. {pybotx-0.77.0 → pybotx-0.77.2}/tests/system_events/test_join_to_chat.py +0 -0
  367. {pybotx-0.77.0 → pybotx-0.77.2}/tests/system_events/test_left_from_chat.py +0 -0
  368. {pybotx-0.77.0 → pybotx-0.77.2}/tests/system_events/test_smartapp_event.py +0 -0
  369. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_async_buffer.py +0 -0
  370. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_attachments.py +0 -0
  371. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_base_command.py +0 -0
  372. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_bot_constructing.py +0 -0
  373. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_bot_edge_cases.py +0 -0
  374. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_command_processing.py +0 -0
  375. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_end_to_end.py +0 -0
  376. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_exception_middleware.py +0 -0
  377. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_fastapi_adapter.py +0 -0
  378. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_files.py +0 -0
  379. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_handler_collector.py +0 -0
  380. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_healthcheck.py +0 -0
  381. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_incoming_message.py +0 -0
  382. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_ingress_observability.py +0 -0
  383. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_lifespan.py +0 -0
  384. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_logger.py +0 -0
  385. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_logs.py +0 -0
  386. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_middlewares.py +0 -0
  387. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_personal_chat_ensure.py +0 -0
  388. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_presets.py +0 -0
  389. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_scaffold.py +0 -0
  390. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_scaffold_edge_cases.py +0 -0
  391. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_state.py +0 -0
  392. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_status.py +0 -0
  393. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_stickers.py +0 -0
  394. {pybotx-0.77.0 → pybotx-0.77.2}/tests/test_system_events_routing.py +0 -0
  395. {pybotx-0.77.0 → pybotx-0.77.2}/tests/testkit/__init__.py +0 -0
  396. {pybotx-0.77.0 → pybotx-0.77.2}/tests/testkit/botx.py +0 -0
  397. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_approval.py +0 -0
  398. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_async_job.py +0 -0
  399. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_base.py +0 -0
  400. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_calendar.py +0 -0
  401. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_carousel.py +0 -0
  402. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_checklist.py +0 -0
  403. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_checktable.py +0 -0
  404. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_confirm.py +0 -0
  405. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_date_range.py +0 -0
  406. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_factory.py +0 -0
  407. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_file_batch.py +0 -0
  408. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_form_wizard.py +0 -0
  409. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_markup.py +0 -0
  410. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_messages_pager.py +0 -0
  411. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_module.py +0 -0
  412. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_multi_select.py +0 -0
  413. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_observability.py +0 -0
  414. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_pagination.py +0 -0
  415. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_presets.py +0 -0
  416. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_range.py +0 -0
  417. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_runner.py +0 -0
  418. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_search_select.py +0 -0
  419. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_select.py +0 -0
  420. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_service.py +0 -0
  421. {pybotx-0.77.0 → pybotx-0.77.2}/tests/widgets/test_table.py +0 -0
@@ -0,0 +1,56 @@
1
+ workflow:
2
+ rules:
3
+ - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
4
+ - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
5
+ when: never
6
+ - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH'
7
+
8
+ stages:
9
+ - check
10
+ - package
11
+
12
+ variables:
13
+ PYTHON_VERSION: "3.13"
14
+
15
+ default:
16
+ image: "python:${PYTHON_VERSION}-bookworm"
17
+ tags:
18
+ - docker
19
+ before_script:
20
+ - python -m pip install uv
21
+ - uv sync --locked --dev
22
+
23
+ test:
24
+ stage: check
25
+ parallel:
26
+ matrix:
27
+ - PYTHON_VERSION: ["3.10", "3.11", "3.12", "3.13", "3.14"]
28
+ script:
29
+ - >-
30
+ uv run --no-sync ./scripts/test -n 4 --cov-report=xml
31
+ --junitxml=junit.xml --junit-prefix="py${PYTHON_VERSION}"
32
+ coverage: '/^TOTAL\s+.*\s+([0-9]+(?:\.[0-9]+)?%)\s*$/'
33
+ artifacts:
34
+ reports:
35
+ junit: junit.xml
36
+ coverage_report:
37
+ coverage_format: cobertura
38
+ path: coverage.xml
39
+
40
+ lint:
41
+ stage: check
42
+ script:
43
+ - uv run --no-sync ./scripts/lint
44
+
45
+ docs-lint:
46
+ stage: check
47
+ script:
48
+ - uv run --no-sync bash ./scripts/docs-lint
49
+
50
+ package:
51
+ stage: package
52
+ script:
53
+ - uv build
54
+ artifacts:
55
+ paths:
56
+ - dist/
@@ -1,3 +1,22 @@
1
+ Metadata-Version: 2.5
2
+ Name: pybotx
3
+ Version: 0.77.2
4
+ Summary: A python library for interacting with eXpress BotX API
5
+ Project-URL: Repository, https://github.com/ExpressApp/pybotx
6
+ Author: Sidnev Nikolay, Maxim Gorbachev, Alexander Samoylenko, Arseniy Zhiltsov, Aleksandr Osovskii
7
+ License-File: LICENSE
8
+ Requires-Python: <4.0,>=3.10
9
+ Requires-Dist: aiocsv<2,>=1.4.0
10
+ Requires-Dist: aiofiles<26,>=25.1.0
11
+ Requires-Dist: httpcore<2,>=1.0.9
12
+ Requires-Dist: httpx<0.29,>=0.28.1
13
+ Requires-Dist: loguru<0.8,>=0.7.3
14
+ Requires-Dist: mypy-extensions<2,>=1.1.0
15
+ Requires-Dist: pydantic<3,>=2.12.5
16
+ Requires-Dist: pyjwt<3,>=2.11.0
17
+ Requires-Dist: tenacity<10,>=9.1.2
18
+ Description-Content-Type: text/markdown
19
+
1
20
  # pybotx
2
21
 
3
22
  *Библиотека для создания чат-ботов и SmartApps для мессенджера eXpress*
@@ -122,20 +141,6 @@ uv run pybotx create widget-flow deployment-approval --project-dir my-bot --kind
122
141
  - `src/<package>/domain/` - доменные модели и контракты, включая `domain/ports/`
123
142
  - `src/<package>/infrastructure/` - config, repository/adapters, внешние интеграции
124
143
 
125
- **Предупреждение:** Данный проект находится в активной разработке (`0.y.z`) и
126
- его API может быть изменён при повышении минорной версии.
127
-
128
- ## Документация по виджетам
129
-
130
- Подробное и исчерпывающее руководство по всем виджетам и API раннера:
131
-
132
- - `/Users/aleksandrosovskii/PycharmProjects/pybotx_stable/WIDGETS.md`
133
-
134
- Демо-бот с примерами всех виджетов:
135
-
136
- - `/Users/aleksandrosovskii/PycharmProjects/pybotx_stable/example/README.md`
137
-
138
-
139
144
  ## Информация о мессенджере eXpress и платформе BotX
140
145
 
141
146
  Документацию по мессенджеру (включая руководство пользователя и администратора)
@@ -217,6 +222,44 @@ app: FastAPI = create_fastapi_bot_app(
217
222
  - опционально `GET /metrics`
218
223
  - healthcheck routes через `setup_healthcheck(...)`
219
224
 
225
+ ### Динамические account-ы и несколько CTS
226
+
227
+ Если credentials появляются во время работы процесса, передайте
228
+ `account_provider` вместо `bot_accounts`. Provider является синхронным
229
+ read-side контрактом: он не должен выполнять сетевой или database I/O в
230
+ обработчике команды. Для динамического хранилища используйте локальный
231
+ snapshot, обновляемый приложением после регистрации или через invalidation.
232
+
233
+ ```python
234
+ from uuid import UUID
235
+
236
+ from pybotx import Bot, BotAccountKey, BotAccountProvider, HandlerCollector
237
+
238
+ collector = HandlerCollector()
239
+
240
+
241
+ def create_bot(registration_account_provider: BotAccountProvider) -> Bot:
242
+ return Bot(
243
+ collectors=[collector],
244
+ account_provider=registration_account_provider,
245
+ )
246
+
247
+ # В background-задаче CTS выбирается явно.
248
+ async def send_registration_confirmation(
249
+ bot: Bot, *, bot_id: UUID, chat_id: UUID
250
+ ) -> None:
251
+ with bot.account_scope(BotAccountKey(server_id="cts-001", bot_id=bot_id)):
252
+ await bot.send_message(bot_id=bot_id, chat_id=chat_id, body="Готово")
253
+ ```
254
+
255
+ Входящие команды связываются с `BotAccountKey` provider-ом до вызова handler;
256
+ JWT v1 cache изолирован ключом account-а и его `revision`. Если вызов производится
257
+ вне handler и один `bot_id` зарегистрирован на нескольких CTS, provider обязан
258
+ поднять `AmbiguousBotAccountError`, а не выбрать произвольный credential.
259
+
260
+ Полный контракт и требования к adapter-у описаны в
261
+ [`docs/dynamic_accounts.md`](docs/dynamic_accounts.md).
262
+
220
263
  Если у вас уже есть свой `FastAPI()` объект, можно не создавать новый app, а
221
264
  подключить `pybotx` в существующий:
222
265
 
@@ -1,22 +1,3 @@
1
- Metadata-Version: 2.5
2
- Name: pybotx
3
- Version: 0.77.0
4
- Summary: A python library for interacting with eXpress BotX API
5
- Project-URL: Repository, https://github.com/ExpressApp/pybotx
6
- Author-email: Sidnev Nikolay <nsidnev@ccsteam.ru>, Maxim Gorbachev <mgorbachev@ccsteam.ru>, Alexander Samoylenko <alexandr.samojlenko@ccsteam.ru>, Arseniy Zhiltsov <arseniy.zhiltsov@ccsteam.ru>
7
- License-File: LICENSE
8
- Requires-Python: <4.0,>=3.10
9
- Requires-Dist: aiocsv<2,>=1.4.0
10
- Requires-Dist: aiofiles<26,>=25.1.0
11
- Requires-Dist: httpcore<2,>=1.0.9
12
- Requires-Dist: httpx<0.29,>=0.28.1
13
- Requires-Dist: loguru<0.8,>=0.7.3
14
- Requires-Dist: mypy-extensions<2,>=1.1.0
15
- Requires-Dist: pydantic<3,>=2.12.5
16
- Requires-Dist: pyjwt<3,>=2.11.0
17
- Requires-Dist: tenacity<10,>=9.1.2
18
- Description-Content-Type: text/markdown
19
-
20
1
  # pybotx
21
2
 
22
3
  *Библиотека для создания чат-ботов и SmartApps для мессенджера eXpress*
@@ -141,20 +122,6 @@ uv run pybotx create widget-flow deployment-approval --project-dir my-bot --kind
141
122
  - `src/<package>/domain/` - доменные модели и контракты, включая `domain/ports/`
142
123
  - `src/<package>/infrastructure/` - config, repository/adapters, внешние интеграции
143
124
 
144
- **Предупреждение:** Данный проект находится в активной разработке (`0.y.z`) и
145
- его API может быть изменён при повышении минорной версии.
146
-
147
- ## Документация по виджетам
148
-
149
- Подробное и исчерпывающее руководство по всем виджетам и API раннера:
150
-
151
- - `/Users/aleksandrosovskii/PycharmProjects/pybotx_stable/WIDGETS.md`
152
-
153
- Демо-бот с примерами всех виджетов:
154
-
155
- - `/Users/aleksandrosovskii/PycharmProjects/pybotx_stable/example/README.md`
156
-
157
-
158
125
  ## Информация о мессенджере eXpress и платформе BotX
159
126
 
160
127
  Документацию по мессенджеру (включая руководство пользователя и администратора)
@@ -236,6 +203,44 @@ app: FastAPI = create_fastapi_bot_app(
236
203
  - опционально `GET /metrics`
237
204
  - healthcheck routes через `setup_healthcheck(...)`
238
205
 
206
+ ### Динамические account-ы и несколько CTS
207
+
208
+ Если credentials появляются во время работы процесса, передайте
209
+ `account_provider` вместо `bot_accounts`. Provider является синхронным
210
+ read-side контрактом: он не должен выполнять сетевой или database I/O в
211
+ обработчике команды. Для динамического хранилища используйте локальный
212
+ snapshot, обновляемый приложением после регистрации или через invalidation.
213
+
214
+ ```python
215
+ from uuid import UUID
216
+
217
+ from pybotx import Bot, BotAccountKey, BotAccountProvider, HandlerCollector
218
+
219
+ collector = HandlerCollector()
220
+
221
+
222
+ def create_bot(registration_account_provider: BotAccountProvider) -> Bot:
223
+ return Bot(
224
+ collectors=[collector],
225
+ account_provider=registration_account_provider,
226
+ )
227
+
228
+ # В background-задаче CTS выбирается явно.
229
+ async def send_registration_confirmation(
230
+ bot: Bot, *, bot_id: UUID, chat_id: UUID
231
+ ) -> None:
232
+ with bot.account_scope(BotAccountKey(server_id="cts-001", bot_id=bot_id)):
233
+ await bot.send_message(bot_id=bot_id, chat_id=chat_id, body="Готово")
234
+ ```
235
+
236
+ Входящие команды связываются с `BotAccountKey` provider-ом до вызова handler;
237
+ JWT v1 cache изолирован ключом account-а и его `revision`. Если вызов производится
238
+ вне handler и один `bot_id` зарегистрирован на нескольких CTS, provider обязан
239
+ поднять `AmbiguousBotAccountError`, а не выбрать произвольный credential.
240
+
241
+ Полный контракт и требования к adapter-у описаны в
242
+ [`docs/dynamic_accounts.md`](docs/dynamic_accounts.md).
243
+
239
244
  Если у вас уже есть свой `FastAPI()` объект, можно не создавать новый app, а
240
245
  подключить `pybotx` в существующий:
241
246
 
@@ -15,6 +15,10 @@ from pybotx.bot.api.responses.unverified_request import (
15
15
  )
16
16
  from pybotx.auth import BotXAuthVersion
17
17
  from pybotx.bot.bot import Bot
18
+ from pybotx.bot.bot_account_provider import (
19
+ BotAccountProvider,
20
+ StaticBotAccountProvider,
21
+ )
18
22
  from pybotx.bot.command_processing import (
19
23
  BotCommandOverloadAction,
20
24
  BotCommandOverloadStrategy,
@@ -152,7 +156,11 @@ from pybotx.models.attachments import (
152
156
  AttachmentVoice,
153
157
  OutgoingAttachment,
154
158
  )
155
- from pybotx.models.bot_account import BotAccount, BotAccountWithSecret
159
+ from pybotx.models.bot_account import (
160
+ BotAccount,
161
+ BotAccountKey,
162
+ BotAccountWithSecret,
163
+ )
156
164
  from pybotx.models.bot_catalog import BotsListItem
157
165
  from pybotx.models.bot_sender import BotSender
158
166
  from pybotx.models.chats import (
@@ -242,6 +250,8 @@ __all__ = (
242
250
  "AttachmentVideo",
243
251
  "AttachmentVoice",
244
252
  "Bot",
253
+ "BotAccountKey",
254
+ "BotAccountProvider",
245
255
  "BotAPIBotDisabledErrorData",
246
256
  "BotAPIBotDisabledResponse",
247
257
  "BotAPIMethodFailedCallback",
@@ -385,6 +395,7 @@ __all__ = (
385
395
  "SmartappManifestWebLayoutChoices",
386
396
  "SmartappManifestWebParams",
387
397
  "StatusRecipient",
398
+ "StaticBotAccountProvider",
388
399
  "StealthModeDisabledError",
389
400
  "Sticker",
390
401
  "StickerPack",