python-trueconf-bot 1.5.2__tar.gz → 1.5.3__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 (296) hide show
  1. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/.github/workflows/docs.yml +1 -1
  2. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/.github/workflows/release-test.yml +2 -2
  3. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/.github/workflows/release.yml +12 -3
  4. python_trueconf_bot-1.5.3/.github/workflows/test.yml +73 -0
  5. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/.gitignore +2 -4
  6. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/PKG-INFO +2 -2
  7. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/pyproject.toml +1 -1
  8. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/python_trueconf_bot.egg-info/PKG-INFO +2 -2
  9. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/python_trueconf_bot.egg-info/SOURCES.txt +3 -0
  10. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/python_trueconf_bot.egg-info/requires.txt +1 -1
  11. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/python_trueconf_bot.egg-info/scm_file_list.json +4 -1
  12. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/python_trueconf_bot.egg-info/scm_version.json +2 -2
  13. python_trueconf_bot-1.5.3/tests/test_httpx2_compat.py +70 -0
  14. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/_version.py +3 -3
  15. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/client/bot.py +6 -0
  16. python_trueconf_bot-1.5.3/uv.lock +2638 -0
  17. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/LICENSE +0 -0
  18. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/README-PyPI.md +0 -0
  19. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/README-ru.md +0 -0
  20. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/README.md +0 -0
  21. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/assets/head_en.png +0 -0
  22. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/assets/head_ru.png +0 -0
  23. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/assets/logo.svg +0 -0
  24. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/context7.json +0 -0
  25. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/context7.json +0 -0
  26. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/examples/index.md +0 -0
  27. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/features.md +0 -0
  28. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/img/head.png +0 -0
  29. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/img/router_scheme_en.svg +0 -0
  30. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/index.md +0 -0
  31. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/learn/authentication.md +0 -0
  32. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/learn/buttons.md +0 -0
  33. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/learn/enums.md +0 -0
  34. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/learn/files.md +0 -0
  35. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/learn/filters.md +0 -0
  36. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/learn/fsm.md +0 -0
  37. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/learn/getting-started.md +0 -0
  38. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/learn/middleware.md +0 -0
  39. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/learn/parse-messages.md +0 -0
  40. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/learn/restrictions.md +0 -0
  41. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/learn/send_message.md +0 -0
  42. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/learn/shortcuts.md +0 -0
  43. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/learn/types.md +0 -0
  44. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/learn/typing_indicator.md +0 -0
  45. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/reference/Bot.md +0 -0
  46. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/reference/Dispatcher.md +0 -0
  47. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/reference/Enums.md +0 -0
  48. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/reference/Exceptions.md +0 -0
  49. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/reference/Formatting.md +0 -0
  50. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/reference/Responses.md +0 -0
  51. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/reference/Router.md +0 -0
  52. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/reference/Types.md +0 -0
  53. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/reference/chat_activity.md +0 -0
  54. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/reference/index.md +0 -0
  55. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/en/release_notes.md +0 -0
  56. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/hooks/llms_txt.py +0 -0
  57. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/hooks/sitemap_dates.py +0 -0
  58. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/img/chatbot.svg +0 -0
  59. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/img/favicon.ico +0 -0
  60. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/img/logo.svg +0 -0
  61. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/overrides/main.html +0 -0
  62. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/overrides/sitemap.xml +0 -0
  63. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/examples/index.md +0 -0
  64. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/features.md +0 -0
  65. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/img/head.png +0 -0
  66. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/img/router_scheme_ru.svg +0 -0
  67. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/index.md +0 -0
  68. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/learn/authentication.md +0 -0
  69. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/learn/buttons.md +0 -0
  70. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/learn/enums.md +0 -0
  71. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/learn/files.md +0 -0
  72. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/learn/filters.md +0 -0
  73. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/learn/fsm.md +0 -0
  74. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/learn/getting-started.md +0 -0
  75. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/learn/middleware.md +0 -0
  76. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/learn/parse-messages.md +0 -0
  77. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/learn/restrictions.md +0 -0
  78. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/learn/send_message.md +0 -0
  79. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/learn/shortcuts.md +0 -0
  80. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/learn/types.md +0 -0
  81. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/learn/typing_indicator.md +0 -0
  82. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/ru/release_notes.md +0 -0
  83. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/docs/stylesheets/extra.css +0 -0
  84. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/examples/README-ru.md +0 -0
  85. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/examples/README.md +0 -0
  86. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/examples/add_big_list_users_to_channel.py +0 -0
  87. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/examples/buttons_bot.py +0 -0
  88. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/examples/contacts.py +0 -0
  89. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/examples/filters.py +0 -0
  90. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/examples/report_bot.py +0 -0
  91. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/examples/update_token.py +0 -0
  92. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/examples/webhook.py +0 -0
  93. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/justfile +0 -0
  94. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/mkdocs.yml +0 -0
  95. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/python_trueconf_bot.egg-info/dependency_links.txt +0 -0
  96. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/python_trueconf_bot.egg-info/top_level.txt +0 -0
  97. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/setup.cfg +0 -0
  98. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_answer_command.py +0 -0
  99. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_auth_via_oauth.py +0 -0
  100. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_callback_query_edit.py +0 -0
  101. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_callback_query_routing.py +0 -0
  102. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_chat_activity.py +0 -0
  103. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_download_limit.py +0 -0
  104. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_download_url_logging.py +0 -0
  105. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_event_raw_routing.py +0 -0
  106. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_formatting.py +0 -0
  107. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_fsm.py +0 -0
  108. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_inline_keyboard.py +0 -0
  109. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_last_message.py +0 -0
  110. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_message_binding.py +0 -0
  111. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_parse_update.py +0 -0
  112. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_public_contract_blockers.py +0 -0
  113. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_reply_quote.py +0 -0
  114. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_send_file_response.py +0 -0
  115. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_shutdown.py +0 -0
  116. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_split_text.py +0 -0
  117. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_system_message_routing.py +0 -0
  118. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_upload_errors.py +0 -0
  119. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_user_agent.py +0 -0
  120. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_vcard.py +0 -0
  121. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/tests/test_ws_retries.py +0 -0
  122. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/__init__.py +0 -0
  123. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/client/__init__.py +0 -0
  124. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/client/context_controller.py +0 -0
  125. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/client/session.py +0 -0
  126. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/dispatcher/__init__.py +0 -0
  127. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/dispatcher/dispatcher.py +0 -0
  128. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/dispatcher/router.py +0 -0
  129. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/enums/__init__.py +0 -0
  130. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/enums/aouth_error.py +0 -0
  131. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/enums/button.py +0 -0
  132. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/enums/chat_activity.py +0 -0
  133. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/enums/chat_participant_role.py +0 -0
  134. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/enums/chat_type.py +0 -0
  135. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/enums/command.py +0 -0
  136. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/enums/envelope_author_type.py +0 -0
  137. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/enums/file_ready_state.py +0 -0
  138. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/enums/incoming_update_method.py +0 -0
  139. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/enums/message_type.py +0 -0
  140. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/enums/parse_mode.py +0 -0
  141. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/enums/survey_type.py +0 -0
  142. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/enums/update_type.py +0 -0
  143. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/exceptions.py +0 -0
  144. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/filters/__init__.py +0 -0
  145. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/filters/base.py +0 -0
  146. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/filters/command.py +0 -0
  147. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/filters/instance_of.py +0 -0
  148. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/filters/message.py +0 -0
  149. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/filters/raw_update.py +0 -0
  150. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/fsm/__init__.py +0 -0
  151. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/fsm/context.py +0 -0
  152. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/fsm/filters.py +0 -0
  153. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/fsm/key_builder.py +0 -0
  154. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/fsm/manager.py +0 -0
  155. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/fsm/middleware.py +0 -0
  156. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/fsm/state.py +0 -0
  157. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/fsm/storage/__init__.py +0 -0
  158. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/fsm/storage/base.py +0 -0
  159. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/fsm/storage/memory.py +0 -0
  160. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/fsm/strategy.py +0 -0
  161. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/loggers.py +0 -0
  162. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/__init__.py +0 -0
  163. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/add_participant_to_chat.py +0 -0
  164. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/answer_command.py +0 -0
  165. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/auth.py +0 -0
  166. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/base.py +0 -0
  167. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/change_participant_role.py +0 -0
  168. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/clear_chat_history.py +0 -0
  169. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/create_channel.py +0 -0
  170. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/create_favorites_chat.py +0 -0
  171. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/create_group_chat.py +0 -0
  172. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/create_p2p_chat.py +0 -0
  173. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/edit_chat_avatar.py +0 -0
  174. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/edit_chat_title.py +0 -0
  175. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/edit_message.py +0 -0
  176. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/edit_survey.py +0 -0
  177. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/forward_message.py +0 -0
  178. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/get_chat_by_id.py +0 -0
  179. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/get_chat_history.py +0 -0
  180. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/get_chat_participant.py +0 -0
  181. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/get_chat_participants.py +0 -0
  182. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/get_chats.py +0 -0
  183. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/get_file_info.py +0 -0
  184. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/get_file_upload_limits.py +0 -0
  185. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/get_message_by_id.py +0 -0
  186. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/get_user_display_name.py +0 -0
  187. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/has_chat_participant.py +0 -0
  188. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/remove_chat.py +0 -0
  189. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/remove_message.py +0 -0
  190. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/remove_participant_from_chat.py +0 -0
  191. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/send_chat_activity.py +0 -0
  192. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/send_file.py +0 -0
  193. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/send_message.py +0 -0
  194. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/send_survey.py +0 -0
  195. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/subscribe_file_progress.py +0 -0
  196. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/unsubscribe_file_progress.py +0 -0
  197. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/methods/upload_file.py +0 -0
  198. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/middleware.py +0 -0
  199. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/py.typed +0 -0
  200. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/__init__.py +0 -0
  201. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/author_box.py +0 -0
  202. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/callback_query.py +0 -0
  203. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/chat.py +0 -0
  204. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/chat_participant.py +0 -0
  205. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/contact.py +0 -0
  206. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/content/__init__.py +0 -0
  207. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/content/attachment.py +0 -0
  208. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/content/base.py +0 -0
  209. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/content/chat_created.py +0 -0
  210. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/content/clear_chat_history.py +0 -0
  211. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/content/document.py +0 -0
  212. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/content/edit_chat_avatar.py +0 -0
  213. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/content/edit_chat_title.py +0 -0
  214. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/content/forward_message.py +0 -0
  215. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/content/location.py +0 -0
  216. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/content/parser.py +0 -0
  217. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/content/photo.py +0 -0
  218. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/content/remove_participant.py +0 -0
  219. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/content/sticker.py +0 -0
  220. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/content/survey.py +0 -0
  221. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/content/text.py +0 -0
  222. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/content/video.py +0 -0
  223. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/content/voice.py +0 -0
  224. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/envelope_parser.py +0 -0
  225. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/input_file.py +0 -0
  226. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/keyboard.py +0 -0
  227. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/last_message.py +0 -0
  228. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/message.py +0 -0
  229. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/parser.py +0 -0
  230. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/requests/__init__.py +0 -0
  231. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/requests/added_chat_participant.py +0 -0
  232. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/requests/changed_file_upload_limits.py +0 -0
  233. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/requests/changed_participant_role.py +0 -0
  234. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/requests/cleared_chat_history.py +0 -0
  235. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/requests/created_channel.py +0 -0
  236. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/requests/created_favorites_chat.py +0 -0
  237. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/requests/created_group_chat.py +0 -0
  238. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/requests/created_personal_chat.py +0 -0
  239. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/requests/edited_chat_avatar.py +0 -0
  240. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/requests/edited_chat_title.py +0 -0
  241. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/requests/edited_message.py +0 -0
  242. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/requests/removed_chat.py +0 -0
  243. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/requests/removed_chat_participant.py +0 -0
  244. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/requests/removed_message.py +0 -0
  245. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/requests/uploading_progress.py +0 -0
  246. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/__init__.py +0 -0
  247. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/add_chat_participant_response.py +0 -0
  248. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/answer_command_response.py +0 -0
  249. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/api_error.py +0 -0
  250. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/auth_response_payload.py +0 -0
  251. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/change_participant_role_response.py +0 -0
  252. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/clear_chat_history_response.py +0 -0
  253. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/create_channel_response.py +0 -0
  254. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/create_favorites_chat_response.py +0 -0
  255. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/create_group_chat_response.py +0 -0
  256. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/create_p2p_chat_response.py +0 -0
  257. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/edit_chat_avatar_response.py +0 -0
  258. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/edit_chat_title_response.py +0 -0
  259. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/edit_message_response.py +0 -0
  260. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/edit_survey_response.py +0 -0
  261. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/forward_message_response.py +0 -0
  262. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/get_chat_by_id_response.py +0 -0
  263. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/get_chat_history_response.py +0 -0
  264. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/get_chat_participant_response.py +0 -0
  265. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/get_chat_participants_response.py +0 -0
  266. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/get_chats_response.py +0 -0
  267. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/get_file_info_response.py +0 -0
  268. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/get_file_upload_limits_response.py +0 -0
  269. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/get_message_by_id_response.py +0 -0
  270. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/get_user_display_name_response.py +0 -0
  271. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/has_chat_participant_response.py +0 -0
  272. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/remove_chat_participant_response.py +0 -0
  273. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/remove_chat_response.py +0 -0
  274. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/remove_message_response.py +0 -0
  275. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/send_chat_activity_response.py +0 -0
  276. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/send_file_response.py +0 -0
  277. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/send_message_response.py +0 -0
  278. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/send_survey_response.py +0 -0
  279. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/subscribe_file_progress_response.py +0 -0
  280. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/unsubscribe_file_progress_response.py +0 -0
  281. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/responses/upload_file_response.py +0 -0
  282. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/system_message.py +0 -0
  283. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/types/update.py +0 -0
  284. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/utils/__init__.py +0 -0
  285. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/utils/_auth/__init__.py +0 -0
  286. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/utils/_auth/_token.py +0 -0
  287. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/utils/_generate_secret_for_survey.py +0 -0
  288. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/utils/_ssl.py +0 -0
  289. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/utils/_url.py +0 -0
  290. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/utils/_user_agent.py +0 -0
  291. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/utils/_version_checker.py +0 -0
  292. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/utils/chat_activity.py +0 -0
  293. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/utils/formatting/__init__.py +0 -0
  294. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/utils/formatting/decorations.py +0 -0
  295. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/utils/formatting/text.py +0 -0
  296. {python_trueconf_bot-1.5.2 → python_trueconf_bot-1.5.3}/trueconf/utils/split_text.py +0 -0
@@ -22,7 +22,7 @@ jobs:
22
22
  trueconf
23
23
 
24
24
  - name: Set up uv
25
- uses: astral-sh/setup-uv@v5
25
+ uses: astral-sh/setup-uv@v10.2.0
26
26
  with:
27
27
  enable-cache: true
28
28
 
@@ -17,14 +17,14 @@ jobs:
17
17
  runs-on: ubuntu-latest
18
18
  environment: testpypi
19
19
  steps:
20
- - uses: actions/checkout@v4
20
+ - uses: actions/checkout@v7
21
21
  with:
22
22
  fetch-depth: 0
23
23
  fetch-tags: true
24
24
  ref: ${{ github.event.inputs.tag }}
25
25
 
26
26
  - name: Set up Python
27
- uses: actions/setup-python@v5
27
+ uses: actions/setup-python@v7
28
28
  with:
29
29
  python-version: "3.10"
30
30
 
@@ -9,11 +9,20 @@ permissions:
9
9
  id-token: write
10
10
 
11
11
  jobs:
12
+ test:
13
+ name: Tests before release
14
+ uses: ./.github/workflows/test.yml
15
+ with:
16
+ ref: ${{ github.event.release.tag_name }}
17
+ permissions:
18
+ contents: read
19
+
12
20
  build-and-publish:
21
+ needs: test
13
22
  runs-on: ubuntu-latest
14
23
  environment: pypi
15
24
  steps:
16
- - uses: actions/checkout@v4
25
+ - uses: actions/checkout@v7
17
26
  with:
18
27
  fetch-depth: 0
19
28
  ref: ${{ github.event.release.tag_name }}
@@ -25,7 +34,7 @@ jobs:
25
34
  sed -i "s/^version = .*/version = \"${VERSION}\"/" pyproject.toml
26
35
 
27
36
  - name: Set up Python
28
- uses: actions/setup-python@v5
37
+ uses: actions/setup-python@v7
29
38
  with:
30
39
  python-version: "3.11"
31
40
 
@@ -35,7 +44,7 @@ jobs:
35
44
  python -m build
36
45
 
37
46
  - name: Upload artifacts to Actions
38
- uses: actions/upload-artifact@v4
47
+ uses: actions/upload-artifact@v7
39
48
  with:
40
49
  name: dist
41
50
  path: dist/*
@@ -0,0 +1,73 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [master]
6
+ pull_request:
7
+ workflow_call:
8
+ inputs:
9
+ ref:
10
+ description: "Git ref to check out (used when called from another workflow)"
11
+ type: string
12
+ required: false
13
+
14
+ permissions:
15
+ contents: read
16
+
17
+ jobs:
18
+ test:
19
+ name: pytest (Python ${{ matrix.python-version }})
20
+ runs-on: ubuntu-latest
21
+ strategy:
22
+ fail-fast: false
23
+ matrix:
24
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
25
+ steps:
26
+ - uses: actions/checkout@v7
27
+ with:
28
+ fetch-depth: 0
29
+ fetch-tags: true
30
+ ref: ${{ inputs.ref || github.ref }}
31
+
32
+ - name: Install uv
33
+ uses: astral-sh/setup-uv@v10.2.0
34
+ with:
35
+ python-version: ${{ matrix.python-version }}
36
+
37
+ - name: Install dependencies
38
+ run: uv sync --group test
39
+
40
+ - name: Show versions
41
+ run: |
42
+ uv run python -c "import sys, httpx2; print('python', sys.version.split()[0], '| httpx2', httpx2.__version__)"
43
+
44
+ - name: Run tests
45
+ run: uv run pytest tests/ -v
46
+
47
+ test-httpx2-floor:
48
+ name: pytest (Python 3.10, httpx2==2.7.0)
49
+ runs-on: ubuntu-latest
50
+ steps:
51
+ - uses: actions/checkout@v7
52
+ with:
53
+ fetch-depth: 0
54
+ fetch-tags: true
55
+ ref: ${{ inputs.ref || github.ref }}
56
+
57
+ - name: Install uv
58
+ uses: astral-sh/setup-uv@v10.2.0
59
+ with:
60
+ python-version: "3.10"
61
+ cache-suffix: "-httpx2-2.7.0"
62
+
63
+ - name: Create venv with httpx2 pinned to the minimum supported version
64
+ run: |
65
+ uv venv --python 3.10 --clear
66
+ uv pip install --python .venv/bin/python -e . "httpx2==2.7.0" pytest "anyio>=4.10" "trio>=0.34.0"
67
+
68
+ - name: Show versions
69
+ run: |
70
+ .venv/bin/python -c "import sys, httpx2; print('python', sys.version.split()[0], '| httpx2', httpx2.__version__)"
71
+
72
+ - name: Run tests
73
+ run: .venv/bin/python -m pytest tests/ -v
@@ -95,10 +95,8 @@ ipython_config.py
95
95
  #Pipfile.lock
96
96
 
97
97
  # UV
98
- # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99
- # This is especially recommended for binary packages to ensure reproducibility, and is more
100
- # commonly ignored for libraries.
101
- uv.lock
98
+ # uv.lock is committed to keep CI reproducible (same approach as aiogram).
99
+ # Run `uv lock` after changing dependencies in pyproject.toml.
102
100
 
103
101
  # poetry
104
102
  # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-trueconf-bot
3
- Version: 1.5.2
3
+ Version: 1.5.3
4
4
  Summary: Lightweight and powerful framework for the TrueConf Server Chatbot API
5
5
  Author-email: TrueConf LLC <info@trueconf.com>, Anton Baadzhi <baadzhianton@gmail.com>
6
6
  License-Expression: BSD-3-Clause-Clear
@@ -25,7 +25,7 @@ Requires-Python: >=3.10
25
25
  Description-Content-Type: text/markdown
26
26
  License-File: LICENSE
27
27
  Requires-Dist: websockets
28
- Requires-Dist: httpx2>=2.13.0
28
+ Requires-Dist: httpx2>=2.7.0
29
29
  Requires-Dist: mashumaro>=3.23
30
30
  Requires-Dist: aiofiles
31
31
  Requires-Dist: magic-filter
@@ -43,7 +43,7 @@ classifiers = [
43
43
 
44
44
  dependencies = [
45
45
  "websockets",
46
- "httpx2>=2.13.0",
46
+ "httpx2>=2.7.0",
47
47
  "mashumaro>=3.23",
48
48
  "aiofiles",
49
49
  "magic-filter",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-trueconf-bot
3
- Version: 1.5.2
3
+ Version: 1.5.3
4
4
  Summary: Lightweight and powerful framework for the TrueConf Server Chatbot API
5
5
  Author-email: TrueConf LLC <info@trueconf.com>, Anton Baadzhi <baadzhianton@gmail.com>
6
6
  License-Expression: BSD-3-Clause-Clear
@@ -25,7 +25,7 @@ Requires-Python: >=3.10
25
25
  Description-Content-Type: text/markdown
26
26
  License-File: LICENSE
27
27
  Requires-Dist: websockets
28
- Requires-Dist: httpx2>=2.13.0
28
+ Requires-Dist: httpx2>=2.7.0
29
29
  Requires-Dist: mashumaro>=3.23
30
30
  Requires-Dist: aiofiles
31
31
  Requires-Dist: magic-filter
@@ -7,9 +7,11 @@ context7.json
7
7
  justfile
8
8
  mkdocs.yml
9
9
  pyproject.toml
10
+ uv.lock
10
11
  .github/workflows/docs.yml
11
12
  .github/workflows/release-test.yml
12
13
  .github/workflows/release.yml
14
+ .github/workflows/test.yml
13
15
  assets/head_en.png
14
16
  assets/head_ru.png
15
17
  assets/logo.svg
@@ -98,6 +100,7 @@ tests/test_download_url_logging.py
98
100
  tests/test_event_raw_routing.py
99
101
  tests/test_formatting.py
100
102
  tests/test_fsm.py
103
+ tests/test_httpx2_compat.py
101
104
  tests/test_inline_keyboard.py
102
105
  tests/test_last_message.py
103
106
  tests/test_message_binding.py
@@ -1,5 +1,5 @@
1
1
  websockets
2
- httpx2>=2.13.0
2
+ httpx2>=2.7.0
3
3
  mashumaro>=3.23
4
4
  aiofiles
5
5
  magic-filter
@@ -3,6 +3,7 @@
3
3
  ".github/workflows/docs.yml",
4
4
  ".github/workflows/release-test.yml",
5
5
  ".github/workflows/release.yml",
6
+ ".github/workflows/test.yml",
6
7
  ".gitignore",
7
8
  "LICENSE",
8
9
  "README-PyPI.md",
@@ -93,6 +94,7 @@
93
94
  "tests/test_event_raw_routing.py",
94
95
  "tests/test_formatting.py",
95
96
  "tests/test_fsm.py",
97
+ "tests/test_httpx2_compat.py",
96
98
  "tests/test_inline_keyboard.py",
97
99
  "tests/test_last_message.py",
98
100
  "tests/test_message_binding.py",
@@ -282,6 +284,7 @@
282
284
  "trueconf/utils/formatting/__init__.py",
283
285
  "trueconf/utils/formatting/decorations.py",
284
286
  "trueconf/utils/formatting/text.py",
285
- "trueconf/utils/split_text.py"
287
+ "trueconf/utils/split_text.py",
288
+ "uv.lock"
286
289
  ]
287
290
  }
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "1.5.2",
2
+ "tag": "1.5.3",
3
3
  "distance": 0,
4
- "node": "g5abbd129f7ac79e4841b1080e8c4b9e34e42a503",
4
+ "node": "g08c15ffa9bc9da2940bc2781b5dcf5b379643bdd",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-10-06"
@@ -0,0 +1,70 @@
1
+ """Smoke tests for the public httpx2 API surface used by trueconf.
2
+
3
+ The library depends on a specific subset of httpx2's public API. These tests
4
+ import every symbol the package relies on so that a future httpx2 release
5
+ removing or renaming any of them fails fast here instead of breaking user
6
+ code at runtime.
7
+ """
8
+
9
+ import httpx2
10
+
11
+
12
+ def test_httpx2_minimum_version():
13
+ assert tuple(int(part) for part in httpx2.__version__.split(".")[:2]) >= (2, 7)
14
+
15
+
16
+ def test_package_modules_import_httpx2():
17
+ # Every trueconf module that touches httpx2 must import cleanly.
18
+ import importlib
19
+
20
+ for module_name in (
21
+ "trueconf.types.input_file",
22
+ "trueconf.utils._auth._token",
23
+ "trueconf.client.bot",
24
+ ):
25
+ importlib.import_module(module_name)
26
+
27
+
28
+ def test_symbols_used_by_bot_module():
29
+ # trueconf/client/bot.py uses these via `httpx2.<name>`
30
+ for name in ("AsyncClient", "Timeout", "TimeoutException", "RequestError", "HTTPStatusError"):
31
+ assert hasattr(httpx2, name), f"httpx2 is missing {name!r} required by trueconf.client.bot"
32
+
33
+
34
+ def test_symbols_used_by_auth_token():
35
+ # trueconf/utils/_auth/_token.py imports these directly
36
+ from httpx2 import Client, ConnectTimeout, HTTPStatusError # noqa: F401
37
+
38
+
39
+ def test_symbols_used_by_input_file():
40
+ # trueconf/types/input_file.py imports AsyncClient directly
41
+ from httpx2 import AsyncClient # noqa: F401
42
+
43
+
44
+ def test_client_constructor_signature():
45
+ # Keywords used by trueconf when creating clients
46
+ client = httpx2.Client(timeout=1.0, verify=True, headers={"User-Agent": "test"})
47
+ try:
48
+ assert client.timeout.read == 1.0
49
+ finally:
50
+ client.close()
51
+
52
+
53
+ def test_async_client_constructor_signature():
54
+ client = httpx2.AsyncClient(timeout=httpx2.Timeout(5.0), verify=True, headers={"User-Agent": "test"})
55
+ assert client.timeout.read == 5.0
56
+
57
+
58
+ def test_request_and_response_roundtrip():
59
+ request = httpx2.Request("POST", "https://example.com")
60
+ response = httpx2.Response(403, request=request)
61
+ error = httpx2.HTTPStatusError("forbidden", request=request, response=response)
62
+ assert error.response.status_code == 403
63
+ assert isinstance(error, httpx2.RequestError) is False
64
+
65
+
66
+ def test_exception_hierarchy():
67
+ # trueconf catches these exception types separately
68
+ assert issubclass(httpx2.ConnectTimeout, httpx2.TimeoutException)
69
+ assert issubclass(httpx2.TimeoutException, httpx2.RequestError)
70
+ assert issubclass(httpx2.HTTPStatusError, httpx2.HTTPError)
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.5.2'
22
- __version_tuple__ = version_tuple = (1, 5, 2)
21
+ __version__ = version = '1.5.3'
22
+ __version_tuple__ = version_tuple = (1, 5, 3)
23
23
 
24
- __commit_id__ = commit_id = 'g5abbd129f'
24
+ __commit_id__ = commit_id = 'g08c15ffa9'
@@ -1857,6 +1857,12 @@ class Bot:
1857
1857
  cancelling = getattr(current_task, "cancelling", None)
1858
1858
  if cancelling is not None and cancelling():
1859
1859
  raise
1860
+ # Python 3.10 fallback: shutdown() sets self._stop before
1861
+ # cancelling the connect task, so an unset flag means the
1862
+ # cancellation came from outside (task.cancel()) and must
1863
+ # propagate to the caller.
1864
+ if self._connect_task is not None and not self._stop:
1865
+ raise
1860
1866
 
1861
1867
  async def send_document(
1862
1868
  self,