▶ running per-file parallel test suite via run_tests_parallel.py (TZ=UTC LANG=C.UTF-8 PYTHONHASHSEED=0; clean env) Discovered 1204 test files (26162 tests) under ['tests', 'plugins']; running with -j 32 [ 0.1% | 19/26162 | ✓19 | ✗ 0] ✓ plugins/model-providers/bedrock/tests/test_bedrock_transport.py (19✓, 1.5s) [ 0.1% | 21/26162 | ✓21 | ✗ 0] ✓ plugins/model-providers/bedrock/tests/test_bedrock_1m_context.py (2✓, 1.5s) [ 0.1% | 31/26162 | ✓31 | ✗ 0] ✓ plugins/hermes-achievements/tests/test_achievement_engine.py (10✓, 1.6s) [ 0.2% | 47/26162 | ✓47 | ✗ 0] ✓ plugins/model-providers/azure-foundry/tests/test_azure_foundry_entra.py (16✓, 1.7s) [ 0.2% | 52/26162 | ✓52 | ✗ 0] ✓ plugins/model-providers/anthropic/tests/test_anthropic_ctx_halving.py (5✓, 2.2s) [ 0.2% | 54/26162 | ✓54 | ✗ 0] ✓ plugins/platforms/discord/tests/test_discord_lazy_install_views.py (2✓, 2.3s) [ 0.3% | 66/26162 | ✓66 | ✗ 0] ✓ plugins/model-providers/anthropic/tests/test_anthropic_keychain.py (12✓, 2.3s) [ 0.3% | 83/26162 | ✓83 | ✗ 0] ✓ plugins/model-providers/anthropic/tests/test_kimi_coding_anthropic_thinking.py (17✓, 2.4s) [ 0.4% | 92/26162 | ✓92 | ✗ 0] ✓ plugins/model-providers/anthropic/tests/test_deepseek_anthropic_thinking.py (9✓, 2.6s) [ 0.4% | 94/26162 | ✓94 | ✗ 0] ✓ plugins/model-providers/anthropic/tests/test_anthropic_oauth_pkce.py (2✓, 2.7s) [ 0.4% | 95/26162 | ✓95 | ✗ 0] ✓ plugins/model-providers/anthropic/tests/test_anthropic_timeouts.py (1✓, 2.8s) [ 0.5% | 134/26162 | ✓134 | ✗ 0] ✓ plugins/model-providers/azure-foundry/tests/test_azure_identity_adapter.py (39✓, 2.9s) [ 0.6% | 150/26162 | ✓150 | ✗ 0] ✓ plugins/model-providers/anthropic/tests/test_anthropic_transport.py (16✓, 2.9s) [ 0.6% | 161/26162 | ✓161 | ✗ 0] ✓ plugins/model-providers/anthropic/tests/test_anthropic_mcp_prefix_strip.py (11✓, 3.0s) [ 0.6% | 163/26162 | ✓163 | ✗ 0] ✓ plugins/model-providers/anthropic/tests/test_anthropic_auth_commands.py (2✓, 3.0s) [ 0.6% | 166/26162 | ✓166 | ✗ 0] ✓ plugins/model-providers/anthropic/tests/test_anthropic_custom_endpoint.py (3✓, 3.1s) [ 0.6% | 169/26162 | ✓169 | ✗ 0] ✓ plugins/model-providers/anthropic/tests/test_anthropic_computer_use.py (3✓, 3.5s) [ 0.7% | 186/26162 | ✓186 | ✗ 0] ✓ plugins/model-providers/anthropic/tests/test_anthropic_fast_command.py (17✓, 3.7s) [ 0.7% | 193/26162 | ✓193 | ✗ 0] ✓ plugins/platforms/matrix/tests/test_matrix_voice.py (7✓, 1.4s) [ 0.8% | 199/26162 | ✓199 | ✗ 0] ✓ plugins/model-providers/anthropic/tests/test_anthropic_model_flow_stale_oauth.py (6✓, 3.8s) [ 0.8% | 208/26162 | ✓208 | ✗ 0] ✓ plugins/model-providers/azure-foundry/tests/test_auxiliary_client_azure_foundry.py (9✓, 3.9s) [ 1.2% | 326/26162 | ✓326 | ✗ 0] ✓ plugins/model-providers/bedrock/tests/test_bedrock_adapter.py (118✓, 4.1s) [ 1.3% | 328/26162 | ✓328 | ✗ 0] ✓ plugins/platforms/matrix/tests/test_matrix_exec_approval.py (2✓, 1.9s) [ 1.3% | 339/26162 | ✓339 | ✗ 0] ✓ plugins/platforms/slack/tests/test_slack_channel_skills.py (11✓, 1.7s) [ 1.4% | 362/26162 | ✓362 | ✗ 0] ✓ plugins/platforms/slack/tests/test_slack_approval_buttons.py (23✓, 2.4s) [ 1.6% | 414/26162 | ✓414 | ✗ 0] ✓ plugins/platforms/matrix/tests/test_matrix_mention.py (52✓, 2.9s) [ 1.6% | 417/26162 | ✓414 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_channel_posts.py (3e, 1.8s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_channel_posts.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ║ specs = ║ ║ def _get_plugin_specs_as_list( ║ specs: None | types.ModuleType | str | Sequence[str], ║ ) -> list[str]: ║ """Parse a plugins specification into a list of plugin names.""" ║ # None means empty. ║ if specs is None: ║ return [] ║ # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". ║ if isinstance(specs, types.ModuleType): ║ return [] ║ # Comma-separated list. ║ if isinstance(specs, str): ║ return specs.split(",") if specs else [] ║ # Direct specification. ║ if isinstance(specs, collections.abc.Sequence): ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_channel_posts.py::test_build_message_event_uses_channel_identity_for_channel_posts ║ ERROR plugins/platforms/telegram/tests/test_telegram_channel_posts.py::test_text_handler_uses_effective_message_for_channel_post ║ ERROR plugins/platforms/telegram/tests/test_telegram_channel_posts.py::test_command_handler_uses_effective_message_for_channel_post ║ ============================== 3 errors in 0.82s =============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_channel_posts.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 1.6% | 422/26162 | ✓414 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_audio_vs_voice.py (5e, 2.4s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_audio_vs_voice.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ║ def _get_plugin_specs_as_list( ║ specs: None | types.ModuleType | str | Sequence[str], ║ ) -> list[str]: ║ """Parse a plugins specification into a list of plugin names.""" ║ # None means empty. ║ if specs is None: ║ return [] ║ # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". ║ if isinstance(specs, types.ModuleType): ║ return [] ║ # Comma-separated list. ║ if isinstance(specs, str): ║ return specs.split(",") if specs else [] ║ # Direct specification. ║ if isinstance(specs, collections.abc.Sequence): ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_audio_vs_voice.py::test_voice_message_still_transcribed ║ ERROR plugins/platforms/telegram/tests/test_telegram_audio_vs_voice.py::test_audio_attachment_skips_stt ║ ERROR plugins/platforms/telegram/tests/test_telegram_audio_vs_voice.py::test_audio_attachment_context_note_format ║ ERROR plugins/platforms/telegram/tests/test_telegram_audio_vs_voice.py::test_audio_attachment_skips_stt_when_stt_disabled ║ ERROR plugins/platforms/telegram/tests/test_telegram_audio_vs_voice.py::test_telegram_media_type_detection_audio_vs_voice ║ ============================== 5 errors in 1.71s =============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_audio_vs_voice.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 1.6% | 427/26162 | ✓414 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_callback_auth_fail_closed.py (5e, 2.5s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_callback_auth_fail_closed.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ║ def _get_plugin_specs_as_list( ║ specs: None | types.ModuleType | str | Sequence[str], ║ ) -> list[str]: ║ """Parse a plugins specification into a list of plugin names.""" ║ # None means empty. ║ if specs is None: ║ return [] ║ # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". ║ if isinstance(specs, types.ModuleType): ║ return [] ║ # Comma-separated list. ║ if isinstance(specs, str): ║ return specs.split(",") if specs else [] ║ # Direct specification. ║ if isinstance(specs, collections.abc.Sequence): ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_callback_auth_fail_closed.py::TestCallbackAuthFailClosed::test_no_allowlist_no_allow_all_denies ║ ERROR plugins/platforms/telegram/tests/test_telegram_callback_auth_fail_closed.py::TestCallbackAuthFailClosed::test_no_allowlist_with_global_allow_all_permits ║ ERROR plugins/platforms/telegram/tests/test_telegram_callback_auth_fail_closed.py::TestCallbackAuthFailClosed::test_allowlist_with_matching_user_permits ║ ERROR plugins/platforms/telegram/tests/test_telegram_callback_auth_fail_closed.py::TestCallbackAuthFailClosed::test_allowlist_without_matching_user_denies ║ ERROR plugins/platforms/telegram/tests/test_telegram_callback_auth_fail_closed.py::TestCallbackAuthFailClosed::test_allowlist_wildcard_permits ║ ============================== 5 errors in 1.73s =============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_callback_auth_fail_closed.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 1.9% | 495/26162 | ✓414 | ✗ 0] ✗ plugins/platforms/dingtalk/tests/test_dingtalk.py (68e, 5.7s) ╔╍ Failed: plugins/platforms/dingtalk/tests/test_dingtalk.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestAllowedUsersGate::test_rejects_unknown_user ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestAllowedUsersGate::test_env_var_csv_populates_allowlist ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestMentionPatterns::test_empty_patterns_list ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestMentionPatterns::test_pattern_matches_text ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestMentionPatterns::test_pattern_is_case_insensitive ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestMentionPatterns::test_invalid_regex_is_skipped_not_raised ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestMentionPatterns::test_env_var_json_populates_patterns ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestMentionPatterns::test_env_var_newline_fallback_when_not_json ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestShouldProcessMessage::test_dm_always_accepted ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestShouldProcessMessage::test_group_rejected_when_require_mention_and_no_trigger ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestShouldProcessMessage::test_group_accepted_when_require_mention_disabled ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestShouldProcessMessage::test_group_accepted_when_bot_is_mentioned ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestShouldProcessMessage::test_group_accepted_when_text_matches_wake_word ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestShouldProcessMessage::test_group_accepted_when_chat_in_free_response_list ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestIncomingHandlerProcess::test_process_extracts_session_webhook ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestIncomingHandlerProcess::test_process_fallback_session_webhook_when_from_dict_misses_it ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestIncomingHandlerProcess::test_process_returns_ack_immediately ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestExtractTextMentions::test_preserves_at_mentions_in_text ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestExtractTextMentions::test_dingtalk_in_platform_enum ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestMessageContextIsolation::test_contexts_keyed_by_chat_id ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestCardLifecycle::test_final_reply_finalizes_card ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestCardLifecycle::test_intermediate_send_stays_streaming ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestCardLifecycle::test_done_fires_only_when_reply_to_is_set ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestCardLifecycle::test_edit_message_finalize_fires_done ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestCardLifecycle::test_edit_message_finalize_false_tracks_sibling ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestCardLifecycle::test_next_send_auto_closes_sibling_streaming_cards ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestCardLifecycle::test_edit_message_requires_message_id ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestCardLifecycle::test_fire_done_reaction_is_idempotent ║ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestDingTalkAdapterAICards::test_send_uses_ai_card_if_configured ║ ============================== 68 errors in 4.96s ============================== ║ ║ Repro: python -m pytest plugins/platforms/dingtalk/tests/test_dingtalk.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 1.9% | 498/26162 | ✓414 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_max_doc_bytes.py (3e, 1.7s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_max_doc_bytes.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ║ specs = ║ ║ def _get_plugin_specs_as_list( ║ specs: None | types.ModuleType | str | Sequence[str], ║ ) -> list[str]: ║ """Parse a plugins specification into a list of plugin names.""" ║ # None means empty. ║ if specs is None: ║ return [] ║ # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". ║ if isinstance(specs, types.ModuleType): ║ return [] ║ # Comma-separated list. ║ if isinstance(specs, str): ║ return specs.split(",") if specs else [] ║ # Direct specification. ║ if isinstance(specs, collections.abc.Sequence): ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_max_doc_bytes.py::test_max_doc_bytes_defaults_to_20mb_without_base_url ║ ERROR plugins/platforms/telegram/tests/test_telegram_max_doc_bytes.py::test_max_doc_bytes_raised_to_2gb_when_base_url_set ║ ERROR plugins/platforms/telegram/tests/test_telegram_max_doc_bytes.py::test_max_doc_bytes_empty_base_url_keeps_default ║ ============================== 3 errors in 0.98s =============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_max_doc_bytes.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 1.9% | 503/26162 | ✓414 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_forum_commands.py (5e, 2.1s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_forum_commands.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ║ def _get_plugin_specs_as_list( ║ specs: None | types.ModuleType | str | Sequence[str], ║ ) -> list[str]: ║ """Parse a plugins specification into a list of plugin names.""" ║ # None means empty. ║ if specs is None: ║ return [] ║ # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". ║ if isinstance(specs, types.ModuleType): ║ return [] ║ # Comma-separated list. ║ if isinstance(specs, str): ║ return specs.split(",") if specs else [] ║ # Direct specification. ║ if isinstance(specs, collections.abc.Sequence): ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_forum_commands.py::test_ensure_forum_commands_skips_non_forum ║ ERROR plugins/platforms/telegram/tests/test_telegram_forum_commands.py::test_ensure_forum_commands_skips_already_registered ║ ERROR plugins/platforms/telegram/tests/test_telegram_forum_commands.py::test_ensure_forum_commands_registers_once ║ ERROR plugins/platforms/telegram/tests/test_telegram_forum_commands.py::test_ensure_forum_commands_handles_set_failure ║ ERROR plugins/platforms/telegram/tests/test_telegram_forum_commands.py::test_ensure_forum_commands_race_safety ║ ============================== 5 errors in 1.36s =============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_forum_commands.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 2.0% | 524/26162 | ✓435 | ✗ 0] ✓ plugins/model-providers/bedrock/tests/test_bedrock_model_picker.py (21✓, 6.6s) [ 2.0% | 530/26162 | ✓435 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_conflict.py (6e, 2.9s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_conflict.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ def _get_plugin_specs_as_list( ║ specs: None | types.ModuleType | str | Sequence[str], ║ ) -> list[str]: ║ """Parse a plugins specification into a list of plugin names.""" ║ # None means empty. ║ if specs is None: ║ return [] ║ # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". ║ if isinstance(specs, types.ModuleType): ║ return [] ║ # Comma-separated list. ║ if isinstance(specs, str): ║ return specs.split(",") if specs else [] ║ # Direct specification. ║ if isinstance(specs, collections.abc.Sequence): ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_conflict.py::test_connect_rejects_same_host_token_lock ║ ERROR plugins/platforms/telegram/tests/test_telegram_conflict.py::test_polling_conflict_retries_before_fatal ║ ERROR plugins/platforms/telegram/tests/test_telegram_conflict.py::test_polling_conflict_becomes_fatal_after_retries ║ ERROR plugins/platforms/telegram/tests/test_telegram_conflict.py::test_connect_marks_retryable_fatal_error_for_startup_network_failure ║ ERROR plugins/platforms/telegram/tests/test_telegram_conflict.py::test_connect_clears_webhook_before_polling ║ ERROR plugins/platforms/telegram/tests/test_telegram_conflict.py::test_disconnect_skips_inactive_updater_and_app ║ ============================== 6 errors in 2.26s =============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_conflict.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 2.6% | 683/26162 | ✓588 | ✗ 0] ✓ plugins/model-providers/anthropic/tests/test_anthropic_adapter.py (153✓, 7.0s) [ 2.7% | 696/26162 | ✓588 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_caption_merge.py (13e, 4.9s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_caption_merge.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". ║ if isinstance(specs, types.ModuleType): ║ return [] ║ # Comma-separated list. ║ if isinstance(specs, str): ║ return specs.split(",") if specs else [] ║ # Direct specification. ║ if isinstance(specs, collections.abc.Sequence): ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionBasic::test_no_existing_text ║ ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionBasic::test_empty_existing_text ║ ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionBasic::test_exact_duplicate_dropped ║ ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionBasic::test_different_captions_merged ║ ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionSubstringBug::test_shorter_caption_not_dropped_when_substring ║ ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionSubstringBug::test_longer_caption_not_dropped_when_contains_existing ║ ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionSubstringBug::test_prefix_caption_not_dropped ║ ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionWhitespace::test_trailing_space_treated_as_duplicate ║ ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionWhitespace::test_leading_space_treated_as_duplicate ║ ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionWhitespace::test_whitespace_only_new_text_not_added ║ ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionMultipleItems::test_three_unique_captions_all_present ║ ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionMultipleItems::test_duplicate_in_middle_dropped ║ ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionMultipleItems::test_album_scenario_revenue_profit ║ ============================== 13 errors in 4.49s ============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_caption_merge.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 2.7% | 700/26162 | ✓588 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_model_picker.py (4e, 3.0s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_model_picker.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ specs = ║ ║ def _get_plugin_specs_as_list( ║ specs: None | types.ModuleType | str | Sequence[str], ║ ) -> list[str]: ║ """Parse a plugins specification into a list of plugin names.""" ║ # None means empty. ║ if specs is None: ║ return [] ║ # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". ║ if isinstance(specs, types.ModuleType): ║ return [] ║ # Comma-separated list. ║ if isinstance(specs, str): ║ return specs.split(",") if specs else [] ║ # Direct specification. ║ if isinstance(specs, collections.abc.Sequence): ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_model_picker.py::TestTelegramModelPicker::test_send_model_picker_escapes_dynamic_provider_label ║ ERROR plugins/platforms/telegram/tests/test_telegram_model_picker.py::TestTelegramModelPicker::test_back_button_escapes_dynamic_provider_label ║ ERROR plugins/platforms/telegram/tests/test_telegram_model_picker.py::TestTelegramModelPicker::test_model_selected_edits_message_on_success ║ ERROR plugins/platforms/telegram/tests/test_telegram_model_picker.py::TestTelegramModelPicker::test_retries_without_thread_when_thread_not_found ║ ============================== 4 errors in 2.08s =============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_model_picker.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 2.7% | 704/26162 | ✓588 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_reply_quote.py (4e, 2.0s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_reply_quote.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ specs = ║ ║ def _get_plugin_specs_as_list( ║ specs: None | types.ModuleType | str | Sequence[str], ║ ) -> list[str]: ║ """Parse a plugins specification into a list of plugin names.""" ║ # None means empty. ║ if specs is None: ║ return [] ║ # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". ║ if isinstance(specs, types.ModuleType): ║ return [] ║ # Comma-separated list. ║ if isinstance(specs, str): ║ return specs.split(",") if specs else [] ║ # Direct specification. ║ if isinstance(specs, collections.abc.Sequence): ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_quote.py::test_native_partial_quote_used_as_reply_to_text ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_quote.py::test_full_reply_text_used_when_no_native_quote ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_quote.py::test_caption_fallback_when_no_quote_and_no_text ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_quote.py::test_empty_quote_text_falls_back_to_full_reply ║ ============================== 4 errors in 1.33s =============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_reply_quote.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 2.7% | 707/26162 | ✓588 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_send_path_health.py (3e, 2.1s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_send_path_health.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ║ specs = ║ ║ def _get_plugin_specs_as_list( ║ specs: None | types.ModuleType | str | Sequence[str], ║ ) -> list[str]: ║ """Parse a plugins specification into a list of plugin names.""" ║ # None means empty. ║ if specs is None: ║ return [] ║ # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". ║ if isinstance(specs, types.ModuleType): ║ return [] ║ # Comma-separated list. ║ if isinstance(specs, str): ║ return specs.split(",") if specs else [] ║ # Direct specification. ║ if isinstance(specs, collections.abc.Sequence): ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_send_path_health.py::test_send_succeeds_when_path_healthy ║ ERROR plugins/platforms/telegram/tests/test_telegram_send_path_health.py::test_send_short_circuits_when_path_degraded ║ ERROR plugins/platforms/telegram/tests/test_telegram_send_path_health.py::test_reconnect_storm_sets_and_heartbeat_clears_flag ║ ============================== 3 errors in 1.36s =============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_send_path_health.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 2.7% | 719/26162 | ✓588 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py (12e, 5.7s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ return [] ║ # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". ║ if isinstance(specs, types.ModuleType): ║ return [] ║ # Comma-separated list. ║ if isinstance(specs, str): ║ return specs.split(",") if specs else [] ║ # Direct specification. ║ if isinstance(specs, collections.abc.Sequence): ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramSendClarify::test_multi_choice_renders_buttons_and_other ║ ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramSendClarify::test_open_ended_no_keyboard ║ ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramSendClarify::test_not_connected ║ ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramSendClarify::test_long_choice_rendered_in_body_not_truncated ║ ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramSendClarify::test_html_escapes_question ║ ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramClarifyCallback::test_numeric_choice_resolves_with_choice_text ║ ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramClarifyCallback::test_other_button_flips_to_text_mode ║ ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramClarifyCallback::test_already_resolved ║ ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramClarifyCallback::test_unauthorized_user_rejected ║ ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramClarifyCallback::test_invalid_choice_token ║ ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestBaseAdapterClarifyFallback::test_numbered_text_fallback ║ ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestBaseAdapterClarifyFallback::test_open_ended_fallback_renders_question_only ║ ============================== 12 errors in 4.49s ============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 2.9% | 749/26162 | ✓618 | ✗ 0] ✓ plugins/platforms/feishu/tests/test_feishu_comment_rules.py (30✓, 8.6s) [ 2.9% | 769/26162 | ✓618 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_approval_buttons.py (20e, 7.3s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_approval_buttons.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ if isinstance(specs, collections.abc.Sequence): ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramExecApproval::test_sends_inline_keyboard ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramExecApproval::test_stores_approval_state ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramExecApproval::test_sends_in_thread ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramExecApproval::test_retries_without_thread_when_thread_not_found ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramExecApproval::test_not_connected ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramExecApproval::test_disable_link_previews_sets_preview_kwargs ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramExecApproval::test_send_update_prompt_escapes_dynamic_prompt ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramExecApproval::test_truncates_long_command ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_resolves_approval_on_click ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_resume_typing_after_inline_approval ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_typing_stays_paused_when_resolve_returns_zero ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_approval_callback_escapes_dynamic_user_name ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_deny_button ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_approval_callback_rejects_user_blocked_by_global_allowlist ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_already_resolved ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_model_picker_callback_not_affected ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_update_prompt_callback_not_affected ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_update_prompt_callback_rejects_unauthorized_user ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_update_prompt_callback_rejects_user_blocked_by_global_allowlist ║ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_update_prompt_callback_allows_authorized_user ║ ============================== 20 errors in 5.93s ============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_approval_buttons.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 3.0% | 796/26162 | ✓645 | ✗ 0] ✓ plugins/platforms/feishu/tests/test_feishu_onboard.py (27✓, 8.7s) [ 3.1% | 799/26162 | ✓645 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_slash_confirm.py (3e, 2.3s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_slash_confirm.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ║ specs = ║ ║ def _get_plugin_specs_as_list( ║ specs: None | types.ModuleType | str | Sequence[str], ║ ) -> list[str]: ║ """Parse a plugins specification into a list of plugin names.""" ║ # None means empty. ║ if specs is None: ║ return [] ║ # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". ║ if isinstance(specs, types.ModuleType): ║ return [] ║ # Comma-separated list. ║ if isinstance(specs, str): ║ return specs.split(",") if specs else [] ║ # Direct specification. ║ if isinstance(specs, collections.abc.Sequence): ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_slash_confirm.py::TestSendSlashConfirm::test_uses_markdown_v2_and_escapes_special_chars ║ ERROR plugins/platforms/telegram/tests/test_telegram_slash_confirm.py::TestSendSlashConfirm::test_stores_slash_confirm_state ║ ERROR plugins/platforms/telegram/tests/test_telegram_slash_confirm.py::TestSendSlashConfirm::test_not_connected_returns_failure ║ ============================== 3 errors in 1.18s =============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_slash_confirm.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 3.1% | 804/26162 | ✓645 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_status_update.py (5e, 2.0s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_status_update.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ║ def _get_plugin_specs_as_list( ║ specs: None | types.ModuleType | str | Sequence[str], ║ ) -> list[str]: ║ """Parse a plugins specification into a list of plugin names.""" ║ # None means empty. ║ if specs is None: ║ return [] ║ # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". ║ if isinstance(specs, types.ModuleType): ║ return [] ║ # Comma-separated list. ║ if isinstance(specs, str): ║ return specs.split(",") if specs else [] ║ # Direct specification. ║ if isinstance(specs, collections.abc.Sequence): ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_status_update.py::test_first_call_sends_and_caches_message_id ║ ERROR plugins/platforms/telegram/tests/test_telegram_status_update.py::test_second_call_edits_in_place ║ ERROR plugins/platforms/telegram/tests/test_telegram_status_update.py::test_edit_failure_falls_back_to_fresh_send ║ ERROR plugins/platforms/telegram/tests/test_telegram_status_update.py::test_distinct_status_keys_do_not_collide ║ ERROR plugins/platforms/telegram/tests/test_telegram_status_update.py::test_distinct_chat_ids_do_not_collide ║ ============================== 5 errors in 1.52s =============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_status_update.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 3.1% | 819/26162 | ✓645 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_network_reconnect.py (15e, 5.2s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_network_reconnect.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ return [] ║ # Comma-separated list. ║ if isinstance(specs, str): ║ return specs.split(",") if specs else [] ║ # Direct specification. ║ if isinstance(specs, collections.abc.Sequence): ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_reconnect_self_schedules_on_start_polling_failure ║ ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_reconnect_does_not_self_schedule_when_fatal_error_set ║ ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_reconnect_success_resets_error_count ║ ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_reconnect_triggers_fatal_after_max_retries ║ ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_reconnect_drains_polling_request_only ║ ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_reconnect_continues_if_drain_fails ║ ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_initialize_still_runs_when_shutdown_fails ║ ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_conflict_retry_also_drains_polling_connections ║ ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_drain_helper_noop_without_app ║ ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_heartbeat_probe_no_op_when_polling_healthy ║ ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_heartbeat_probe_reenters_ladder_when_updater_not_running ║ ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_heartbeat_probe_reenters_ladder_when_get_me_times_out ║ ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_heartbeat_probe_reenters_ladder_on_get_me_network_error ║ ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_heartbeat_probe_skips_when_already_fatal ║ ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_reconnect_schedules_heartbeat_probe_on_success ║ ============================== 15 errors in 4.70s ============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_network_reconnect.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 3.4% | 879/26162 | ✓705 | ✗ 0] ✓ plugins/platforms/feishu/tests/test_feishu_bot_admission.py (60✓, 10.7s) [ 3.5% | 914/26162 | ✓725 | ✗ 0] ✗ plugins/platforms/feishu/tests/test_feishu_approval_buttons.py (20✓ 15e, 10.9s) ╔╍ Failed: plugins/platforms/feishu/tests/test_feishu_approval_buttons.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ .venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:26 ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:26: DeprecationWarning: There is no current event loop ║ loop = asyncio.get_event_loop() ║ ║ .venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67 ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated ║ def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): ║ ║ .venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6 ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions ║ warnings.warn( # deprecated in 14.0 - 2024-11-09 ║ ║ -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_drops_action_when_loop_not_ready ║ ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_returns_card_for_approve_action ║ ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_returns_card_for_deny_action ║ ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_ignores_missing_approval_id ║ ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_no_card_for_non_approval_action ║ ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_falls_back_to_open_id_when_name_not_cached ║ ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_ignores_expired_cached_name ║ ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_rejects_approval_click_from_unauthorized_user ║ ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_rejects_approval_click_when_callback_chat_mismatches ║ ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_returns_card_for_update_prompt_yes ║ ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_returns_card_for_update_prompt_no ║ ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_ignores_missing_update_prompt_id ║ ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_already_resolved_update_prompt_returns_no_card ║ ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_update_prompt_schedule_failure_returns_no_card ║ ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_update_prompt_unauthorized_operator_returns_no_card ║ ================== 20 passed, 4 warnings, 15 errors in 7.91s =================== ║ ║ Repro: python -m pytest plugins/platforms/feishu/tests/test_feishu_approval_buttons.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 3.5% | 928/26162 | ✓739 | ✗ 0] ✓ plugins/platforms/feishu/tests/test_setup_feishu.py (14✓, 9.4s) [ 3.6% | 948/26162 | ✓759 | ✗ 0] ✓ plugins/platforms/feishu/tests/test_feishu_comment.py (20✓, 9.6s) [ 3.6% | 953/26162 | ✓759 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_text_batching.py (5e, 2.3s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_text_batching.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ║ def _get_plugin_specs_as_list( ║ specs: None | types.ModuleType | str | Sequence[str], ║ ) -> list[str]: ║ """Parse a plugins specification into a list of plugin names.""" ║ # None means empty. ║ if specs is None: ║ return [] ║ # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". ║ if isinstance(specs, types.ModuleType): ║ return [] ║ # Comma-separated list. ║ if isinstance(specs, str): ║ return specs.split(",") if specs else [] ║ # Direct specification. ║ if isinstance(specs, collections.abc.Sequence): ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_text_batching.py::TestTextBatching::test_single_message_dispatched_after_delay ║ ERROR plugins/platforms/telegram/tests/test_telegram_text_batching.py::TestTextBatching::test_split_messages_aggregated ║ ERROR plugins/platforms/telegram/tests/test_telegram_text_batching.py::TestTextBatching::test_three_way_split_aggregated ║ ERROR plugins/platforms/telegram/tests/test_telegram_text_batching.py::TestTextBatching::test_different_chats_not_merged ║ ERROR plugins/platforms/telegram/tests/test_telegram_text_batching.py::TestTextBatching::test_batch_cleans_up_after_flush ║ ============================== 5 errors in 1.59s =============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_text_batching.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 3.7% | 979/26162 | ✓759 | ✗ 0] ✗ plugins/stt/tests/test_transcription.py (26e, 1.2s) ╔╍ Failed: plugins/stt/tests/test_transcription.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ║ /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:293 ║ =========================== short test summary info ============================ ║ ERROR plugins/stt/tests/test_transcription.py::TestGetProvider::test_local_when_available ║ ERROR plugins/stt/tests/test_transcription.py::TestGetProvider::test_explicit_local_no_cloud_fallback ║ ERROR plugins/stt/tests/test_transcription.py::TestGetProvider::test_local_nothing_available ║ ERROR plugins/stt/tests/test_transcription.py::TestGetProvider::test_openai_when_key_set ║ ERROR plugins/stt/tests/test_transcription.py::TestGetProvider::test_explicit_openai_no_key_returns_none ║ ERROR plugins/stt/tests/test_transcription.py::TestGetProvider::test_default_provider_is_local ║ ERROR plugins/stt/tests/test_transcription.py::TestGetProvider::test_disabled_config_returns_none ║ ERROR plugins/stt/tests/test_transcription.py::TestValidateAudioFile::test_missing_file ║ ERROR plugins/stt/tests/test_transcription.py::TestValidateAudioFile::test_unsupported_format ║ ERROR plugins/stt/tests/test_transcription.py::TestValidateAudioFile::test_valid_file_returns_none ║ ERROR plugins/stt/tests/test_transcription.py::TestValidateAudioFile::test_too_large ║ ERROR plugins/stt/tests/test_transcription.py::TestTranscribeLocal::test_successful_transcription ║ ERROR plugins/stt/tests/test_transcription.py::TestTranscribeLocal::test_not_installed ║ ERROR plugins/stt/tests/test_transcription.py::TestTranscribeOpenAI::test_no_key ║ ERROR plugins/stt/tests/test_transcription.py::TestTranscribeOpenAI::test_successful_transcription ║ ERROR plugins/stt/tests/test_transcription.py::TestTranscribeAudio::test_dispatches_to_local ║ ERROR plugins/stt/tests/test_transcription.py::TestTranscribeAudio::test_dispatches_to_openai ║ ERROR plugins/stt/tests/test_transcription.py::TestTranscribeAudio::test_no_provider_returns_error ║ ERROR plugins/stt/tests/test_transcription.py::TestTranscribeAudio::test_disabled_config_returns_disabled_error ║ ERROR plugins/stt/tests/test_transcription.py::TestTranscribeAudio::test_invalid_file_returns_error ║ ERROR plugins/stt/tests/test_transcription.py::TestNormalizeLocalModel::test_openai_model_name_maps_to_default ║ ERROR plugins/stt/tests/test_transcription.py::TestNormalizeLocalModel::test_groq_model_name_maps_to_default ║ ERROR plugins/stt/tests/test_transcription.py::TestNormalizeLocalModel::test_valid_local_model_preserved ║ ERROR plugins/stt/tests/test_transcription.py::TestNormalizeLocalModel::test_none_maps_to_default ║ ERROR plugins/stt/tests/test_transcription.py::TestNormalizeLocalModel::test_warning_emitted_for_cloud_model ║ ERROR plugins/stt/tests/test_transcription.py::TestNormalizeLocalModel::test_local_transcribe_normalises_model ║ ============================== 26 errors in 0.62s ============================== ║ ║ Repro: python -m pytest plugins/stt/tests/test_transcription.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 3.8% | 998/26162 | ✓759 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py (19e, 7.1s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ # Direct specification. ║ if isinstance(specs, collections.abc.Sequence): ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestRealMentionsAreDetected::test_mention_at_start_of_message ║ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestRealMentionsAreDetected::test_mention_mid_sentence ║ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestRealMentionsAreDetected::test_mention_at_end_of_message ║ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestRealMentionsAreDetected::test_mention_in_caption ║ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestRealMentionsAreDetected::test_text_mention_entity_targets_bot ║ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestSubstringFalsePositivesAreRejected::test_email_like_substring ║ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestSubstringFalsePositivesAreRejected::test_hostname_substring ║ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestSubstringFalsePositivesAreRejected::test_superstring_username ║ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestSubstringFalsePositivesAreRejected::test_underscore_suffix_substring ║ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestSubstringFalsePositivesAreRejected::test_substring_inside_url_without_entity ║ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestSubstringFalsePositivesAreRejected::test_substring_inside_code_block_without_entity ║ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestSubstringFalsePositivesAreRejected::test_plain_text_with_no_at_sign ║ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestSubstringFalsePositivesAreRejected::test_email_substring_in_caption ║ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestEntityEdgeCases::test_mention_entity_for_different_username ║ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestEntityEdgeCases::test_text_mention_entity_for_different_user ║ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestEntityEdgeCases::test_malformed_entity_with_negative_offset ║ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestEntityEdgeCases::test_malformed_entity_with_zero_length ║ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestCaseInsensitivity::test_uppercase_mention ║ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestCaseInsensitivity::test_mixed_case_mention ║ ============================== 19 errors in 5.98s ============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 3.9% | 1008/26162 | ✓769 | ✗ 0] ✓ plugins/tts/tests/test_tts_kittentts.py (10✓, 1.4s) [ 4.2% | 1104/26162 | ✓769 | ✗ 0] ✗ plugins/stt/tests/test_transcription_tools.py (96e, 2.5s) ╔╍ Failed: plugins/stt/tests/test_transcription_tools.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderMistral::test_mistral_explicit_no_sdk_returns_none ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderMistral::test_auto_detect_skips_mistral ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderMistral::test_auto_detect_openai_preferred_over_mistral ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderMistral::test_auto_detect_groq_preferred_over_mistral ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderMistral::test_auto_detect_skips_mistral_without_sdk ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioMistralDispatch::test_dispatches_to_mistral ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioMistralDispatch::test_config_mistral_model_used ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioMistralDispatch::test_model_override_passed_to_mistral ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_no_key ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_successful_transcription ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_whitespace_stripped ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_api_error_returns_failure ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_empty_transcript_returns_failure ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_permission_error ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_network_error_returns_failure ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_sends_language_and_format ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_custom_base_url ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_diarize_sent_when_configured ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderXAI::test_xai_when_key_set ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderXAI::test_xai_explicit_no_key_returns_none ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderXAI::test_auto_detect_xai_after_mistral ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderXAI::test_auto_detect_mistral_skipped_xai_wins ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderXAI::test_auto_detect_no_key_returns_none ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioXAIDispatch::test_dispatches_to_xai ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioXAIDispatch::test_model_default_is_grok_stt ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioXAIDispatch::test_model_override_passed_to_xai ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestShellSafety::test_auto_detected_template_is_shlex_safe ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestShellSafety::test_env_var_template_uses_shell_path ║ ERROR plugins/stt/tests/test_transcription_tools.py::TestShellSafety::test_no_env_var_uses_list_mode ║ ============================== 96 errors in 1.74s ============================== ║ ║ Repro: python -m pytest plugins/stt/tests/test_transcription_tools.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 4.3% | 1120/26162 | ✓785 | ✗ 0] ✓ plugins/tts/tests/test_tts_mistral.py (16✓, 1.4s) [ 4.3% | 1125/26162 | ✓785 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_webhook_secret.py (5e, 3.2s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_webhook_secret.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ║ def _get_plugin_specs_as_list( ║ specs: None | types.ModuleType | str | Sequence[str], ║ ) -> list[str]: ║ """Parse a plugins specification into a list of plugin names.""" ║ # None means empty. ║ if specs is None: ║ return [] ║ # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". ║ if isinstance(specs, types.ModuleType): ║ return [] ║ # Comma-separated list. ║ if isinstance(specs, str): ║ return specs.split(",") if specs else [] ║ # Direct specification. ║ if isinstance(specs, collections.abc.Sequence): ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_webhook_secret.py::TestTelegramWebhookSecretRequired::test_webhook_branch_checks_secret ║ ERROR plugins/platforms/telegram/tests/test_telegram_webhook_secret.py::TestTelegramWebhookSecretRequired::test_guard_raises_runtime_error ║ ERROR plugins/platforms/telegram/tests/test_telegram_webhook_secret.py::TestTelegramWebhookSecretRequired::test_guard_message_includes_advisory_link ║ ERROR plugins/platforms/telegram/tests/test_telegram_webhook_secret.py::TestTelegramWebhookSecretRequired::test_guard_message_explains_remediation ║ ERROR plugins/platforms/telegram/tests/test_telegram_webhook_secret.py::TestTelegramWebhookSecretRequired::test_polling_branch_has_no_secret_guard ║ ============================== 5 errors in 2.17s =============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_webhook_secret.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 4.3% | 1137/26162 | ✓785 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py (12e, 4.7s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ return [] ║ # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". ║ if isinstance(specs, types.ModuleType): ║ return [] ║ # Comma-separated list. ║ if isinstance(specs, str): ║ return specs.split(",") if specs else [] ║ # Direct specification. ║ if isinstance(specs, collections.abc.Sequence): ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestEnvFloatClamped::test_default_when_unset ║ ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestEnvFloatClamped::test_parses_valid_value ║ ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestEnvFloatClamped::test_falls_back_to_default_on_garbage ║ ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestEnvFloatClamped::test_rejects_nan ║ ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestEnvFloatClamped::test_rejects_inf ║ ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestEnvFloatClamped::test_clamps_below_min ║ ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestEnvFloatClamped::test_clamps_above_max ║ ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestAdaptiveTextBatchTiers::test_class_constants_are_sensible ║ ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestAdaptiveTextBatchTiers::test_fast_tier_uses_min_with_configured_cap ║ ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestAdaptiveTextBatchTiers::test_short_tier_uses_min_with_configured_cap ║ ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestAdaptiveTextBatchTiers::test_long_message_uses_full_cap ║ ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestAdaptiveTextBatchTiers::test_split_threshold_takes_priority_over_fast_tier ║ ============================== 12 errors in 4.07s ============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 4.4% | 1153/26162 | ✓801 | ✗ 0] ✓ plugins/tts/tests/test_tts_piper.py (16✓, 1.2s) [ 4.6% | 1195/26162 | ✓843 | ✗ 0] ✓ plugins/model-providers/anthropic/tests/test_minimax_provider.py (42✓, 13.9s) [ 4.6% | 1199/26162 | ✓847 | ✗ 0] ✓ plugins/tts/tests/test_tts_path_traversal.py (4✓, 1.8s) [ 4.7% | 1226/26162 | ✓874 | ✗ 0] ✓ plugins/tts/tests/test_tts_max_text_length.py (27✓, 2.5s) [ 4.8% | 1245/26162 | ✓893 | ✗ 0] ✓ plugins/tts/tests/test_tts_speed.py (19✓, 1.3s) [ 4.8% | 1250/26162 | ✓898 | ✗ 0] ✓ plugins/tts/tests/test_tts_xai_speech_tags.py (5✓, 1.7s) [ 4.8% | 1257/26162 | ✓905 | ✗ 0] ✓ tests/acp/test_approval_isolation.py (7✓, 1.4s) [ 4.9% | 1278/26162 | ✓905 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_reactions.py (21e, 8.5s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_reactions.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ return list(specs) ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_reactions_disabled_by_default ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_reactions_enabled_when_set_true ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_reactions_enabled_with_1 ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_reactions_disabled_with_false ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_reactions_disabled_with_0 ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_reactions_disabled_with_no ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_set_reaction_calls_bot_api ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_set_reaction_returns_false_without_bot ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_set_reaction_handles_api_error_gracefully ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_on_processing_start_adds_eyes_reaction ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_on_processing_start_skipped_when_disabled ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_on_processing_start_handles_missing_ids ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_on_processing_complete_success ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_on_processing_complete_failure ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_on_processing_complete_skipped_when_disabled ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_on_processing_complete_cancelled_clears_reaction ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_on_processing_complete_cancelled_skipped_when_disabled ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_clear_reactions_handles_api_error_gracefully ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_clear_reactions_returns_false_without_bot ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_config_bridges_telegram_reactions ║ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_config_reactions_env_takes_precedence ║ ============================== 21 errors in 7.81s ============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_reactions.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 5.0% | 1299/26162 | ✓926 | ✗ 0] ✓ plugins/model-providers/anthropic/tests/test_anthropic_auxiliary.py (21✓, 14.9s) [ 5.1% | 1325/26162 | ✓952 | ✗ 0] ✓ plugins/terminals/daytona/tests/test_daytona_environment.py (26✓, 4.5s) [ 5.1% | 1347/26162 | ✓952 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py (22e, 9.0s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ > raise UsageError( ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_errors_are_classified_as_transient[httpx.ConnectError: Connection refused] ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_errors_are_classified_as_transient[telegram.error.NetworkError: httpx.ConnectError] ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_errors_are_classified_as_transient[NetworkError: remote end closed connection without response] ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_errors_are_classified_as_transient[httpx.ReadTimeout: read timed out] ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_errors_are_classified_as_transient[ReadTimeout: timed out] ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_errors_are_classified_as_transient[Server disconnected] ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_errors_are_classified_as_transient[Temporarily unavailable] ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_errors_are_classified_as_transient[Temporary failure in name resolution] ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_errors_are_classified_as_transient[Connection error: failed to connect] ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_permanent_errors_are_not_transient[Bad Request: message to edit not found] ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_permanent_errors_are_not_transient[Bad Request: message can't be edited] ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_permanent_errors_are_not_transient[Bad Request: not enough rights to edit the message] ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_permanent_errors_are_not_transient[Bad Request: MESSAGE_ID_INVALID] ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_permanent_errors_are_not_transient[flood_control:30.0] ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_permanent_errors_are_not_transient[Forbidden: bot was blocked by the user] ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_send_result_retryable_default_is_false ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_send_result_retryable_can_be_set_true ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_send_result_retryable_false_for_permanent ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_failure_keeps_can_edit_true ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_permanent_failure_sets_can_edit_false ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_multiple_transient_then_success_keeps_can_edit_true ║ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_flood_control_sets_can_edit_false ║ ============================== 22 errors in 8.55s ============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 5.2% | 1357/26162 | ✓962 | ✗ 0] ✓ tests/acp/test_auth.py (10✓, 2.4s) [ 5.2% | 1366/26162 | ✓971 | ✗ 0] ✓ tests/acp/test_permissions.py (9✓, 2.1s) [ 5.2% | 1372/26162 | ✓977 | ✗ 0] ✓ tests/acp/test_registry_manifest.py (6✓, 1.4s) [ 5.4% | 1413/26162 | ✓977 | ✗ 0] ✗ plugins/platforms/telegram/tests/test_telegram_documents.py (41e, 12.6s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_documents.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentDownloadBlock::test_missing_filename_and_mime_rejected ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentDownloadBlock::test_unicode_decode_error_handled ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentDownloadBlock::test_text_injection_capped ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentDownloadBlock::test_download_exception_handled ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestVideoDownloadBlock::test_native_video_is_cached ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestVideoDownloadBlock::test_mp4_document_is_treated_as_video ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestMediaGroups::test_non_album_photo_burst_is_buffered_and_combined ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestMediaGroups::test_photo_album_is_buffered_and_combined ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestMediaGroups::test_disconnect_cancels_pending_media_group_flush ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendVoice::test_flac_falls_back_to_document ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendVoice::test_wav_falls_back_to_document ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendVoice::test_mp3_routes_to_send_audio ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_success ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_custom_filename ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_file_not_found ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_workspace_path_has_docker_hint ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_outputs_path_has_docker_hint ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_not_connected ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_caption_truncated ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_api_error_falls_back ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_reply_to ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_thread_id ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestTelegramPhotoBatching::test_flush_photo_batch_does_not_drop_newer_scheduled_task ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestTelegramPhotoBatching::test_disconnect_cancels_pending_photo_batch_tasks ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendVideo::test_send_video_success ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendVideo::test_send_video_file_not_found ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendVideo::test_send_video_workspace_path_has_docker_hint ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendVideo::test_send_video_not_connected ║ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendVideo::test_send_video_thread_id ║ ============================= 41 errors in 11.83s ============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_documents.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 5.5% | 1428/26162 | ✓992 | ✗ 0] ✓ plugins/tts/tests/test_tts_gemini.py (15✓, 5.5s) [ 5.7% | 1483/26162 | ✓1045 | ✗ 2] ✗ plugins/platforms/slack/tests/test_slack_mention.py (53✓ 2✗, 14.1s) ╔╍ Failed: plugins/platforms/slack/tests/test_slack_mention.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ║ monkeypatch.setenv("HERMES_HOME", str(hermes_home)) ║ monkeypatch.setenv("SLACK_BOT_TOKEN", "xoxb-test") ║ ║ config = load_gateway_config() ║ ║ slack_config = config.platforms[Platform.SLACK] ║ > assert slack_config.enabled is False ║ E AssertionError: assert True is False ║ E + where True = PlatformConfig(enabled=True, token='xoxb-test', api_key=None, home_channel=None, reply_to_mode='first', gateway_restart_notification=True, extra={'reply_in_thread': False}).enabled ║ ║ plugins/platforms/slack/tests/test_slack_mention.py:452: AssertionError ║ =============================== warnings summary =============================== ║ plugins/platforms/slack/tests/test_slack_mention.py::test_config_bridges_slack_free_response_channels ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). ║ _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) ║ ║ plugins/platforms/slack/tests/test_slack_mention.py::test_config_bridges_slack_free_response_channels ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated ║ def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): ║ ║ plugins/platforms/slack/tests/test_slack_mention.py::test_config_bridges_slack_free_response_channels ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions ║ warnings.warn( # deprecated in 14.0 - 2024-11-09 ║ ║ -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ║ =========================== short test summary info ============================ ║ FAILED plugins/platforms/slack/tests/test_slack_mention.py::test_explicit_top_level_slack_enabled_false_wins_over_env_token ║ FAILED plugins/platforms/slack/tests/test_slack_mention.py::test_explicit_platforms_slack_enabled_false_wins_over_env_token ║ ================== 2 failed, 53 passed, 3 warnings in 10.76s =================== ║ ║ Repro: python -m pytest plugins/platforms/slack/tests/test_slack_mention.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 5.7% | 1502/26162 | ✓1064 | ✗ 2] ✓ tests/acp/test_events.py (19✓, 3.1s) [ 5.8% | 1518/26162 | ✓1080 | ✗ 2] ✓ plugins/model-providers/anthropic/tests/test_anthropic_agent_integration.py (16✓, 17.3s) [ 5.8% | 1527/26162 | ✓1089 | ✗ 2] ✓ tests/acp/test_ping_suppression.py (9✓, 2.8s) [ 5.9% | 1534/26162 | ✓1096 | ✗ 2] ✓ tests/agent/lsp/test_broken_set.py (7✓, 1.3s) [ 5.9% | 1539/26162 | ✓1101 | ✗ 2] ✓ tests/acp_adapter/test_detect_provider_entra.py (5✓, 1.8s) [ 5.9% | 1545/26162 | ✓1107 | ✗ 2] ✓ tests/agent/lsp/test_client_e2e.py (6✓, 1.3s) [ 5.9% | 1551/26162 | ✓1113 | ✗ 2] ✓ tests/acp_adapter/test_acp_commands.py (6✓, 2.8s) [ 6.1% | 1606/26162 | ✓1167 | ✗ 3] ✗ plugins/model-providers/bedrock/tests/test_bedrock_integration.py (54✓ 1✗, 18.0s) ╔╍ Failed: plugins/model-providers/bedrock/tests/test_bedrock_integration.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ from agent.anthropic_aux import AsyncAnthropicAuxiliaryClient ║ client, model = resolve_provider_client("bedrock", None, async_mode=True) ║ ║ assert client is not None ║ > assert isinstance(client, AsyncAnthropicAuxiliaryClient) ║ E AssertionError: assert False ║ E + where False = isinstance(, ) ║ ║ plugins/model-providers/bedrock/tests/test_bedrock_integration.py:595: AssertionError ║ =============================== warnings summary =============================== ║ plugins/model-providers/bedrock/tests/test_bedrock_integration.py::TestBedrockPreserveDotsFlag::test_bedrock_provider_preserves_dots ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/discord/player.py:30: DeprecationWarning: 'audioop' is deprecated and slated for removal in Python 3.13 ║ import audioop ║ ║ plugins/model-providers/bedrock/tests/test_bedrock_integration.py::TestBedrockPreserveDotsFlag::test_bedrock_provider_preserves_dots ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). ║ _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) ║ ║ plugins/model-providers/bedrock/tests/test_bedrock_integration.py::TestBedrockPreserveDotsFlag::test_bedrock_provider_preserves_dots ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated ║ def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): ║ ║ plugins/model-providers/bedrock/tests/test_bedrock_integration.py::TestBedrockPreserveDotsFlag::test_bedrock_provider_preserves_dots ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions ║ warnings.warn( # deprecated in 14.0 - 2024-11-09 ║ ║ -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ║ =========================== short test summary info ============================ ║ FAILED plugins/model-providers/bedrock/tests/test_bedrock_integration.py::TestAuxiliaryClientBedrockResolution::test_bedrock_async_mode ║ ================== 1 failed, 54 passed, 4 warnings in 12.68s =================== ║ ║ Repro: python -m pytest plugins/model-providers/bedrock/tests/test_bedrock_integration.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 6.2% | 1616/26162 | ✓1177 | ✗ 3] ✓ tests/acp/test_entry.py (10✓, 4.2s) [ 6.2% | 1621/26162 | ✓1182 | ✗ 3] ✓ tests/agent/lsp/test_backend_gate.py (5✓, 2.0s) [ 6.3% | 1661/26162 | ✓1182 | ✗ 3] ✗ plugins/platforms/telegram/tests/test_telegram_group_gating.py (40e, 14.0s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_group_gating.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_group_messages_can_require_direct_trigger_via_config ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_explicit_multi_bot_mentions_route_only_to_named_bots ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_entityless_multi_bot_mentions_still_route_exclusively ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_intern_bots_ignore_messages_addressed_to_other_intern_bot ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_bot_command_addressed_to_other_bot_is_exclusive_even_when_mentions_not_required ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_raw_bot_mention_fallback_does_not_match_email_or_substring ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_exclusive_bot_mentions_can_be_disabled_for_legacy_groups ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_free_response_chats_bypass_mention_requirement ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_guest_mode_allows_only_direct_mentions_outside_allowed_chats ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_guest_mode_defaults_to_false_for_allowed_chat_bypass ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_guest_mode_mention_dropped_in_ignored_thread ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_ignored_threads_drop_group_messages_before_other_gates ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_allowed_topics_drop_other_forum_topics_before_other_gates ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_allowed_topics_do_not_filter_dms ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_allowed_topics_treat_missing_thread_as_general_topic ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_regex_mention_patterns_allow_custom_wake_words ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_invalid_regex_patterns_are_ignored ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_config_bridges_telegram_group_settings ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_config_bridges_telegram_user_allowlists ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_config_env_overrides_telegram_user_allowlists ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_dm_allow_from_is_enforced_by_gateway_authorization_not_trigger_gate ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_group_allow_from_is_enforced_by_gateway_authorization_not_trigger_gate ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_top_level_require_mention_bridges_to_telegram ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_top_level_require_mention_does_not_override_telegram_section ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_config_bridges_telegram_ignored_threads ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_unmentioned_location_message_observed_in_group ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_triggered_location_message_uses_shared_session_in_observe_mode ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_unmentioned_voice_message_observed_in_group ║ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_triggered_voice_message_uses_shared_session_in_observe_mode ║ ============================= 40 errors in 13.23s ============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_group_gating.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 6.4% | 1668/26162 | ✓1189 | ✗ 3] ✓ plugins/model-providers/anthropic/tests/test_anthropic_third_party_oauth_guard.py (7✓, 18.5s) [ 6.4% | 1669/26162 | ✓1189 | ✗ 3] ✗ plugins/platforms/telegram/tests/test_telegram_photo_interrupts.py (1e, 12.8s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_photo_interrupts.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ║ ) ║ E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: ║ ║ .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ║ =============================== warnings summary =============================== ║ .venv/lib/python3.12/site-packages/discord/player.py:30 ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/discord/player.py:30: DeprecationWarning: 'audioop' is deprecated and slated for removal in Python 3.13 ║ import audioop ║ ║ .venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91 ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). ║ _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) ║ ║ .venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:26 ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:26: DeprecationWarning: There is no current event loop ║ loop = asyncio.get_event_loop() ║ ║ .venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67 ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated ║ def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): ║ ║ .venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6 ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions ║ warnings.warn( # deprecated in 14.0 - 2024-11-09 ║ ║ -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_photo_interrupts.py::test_handle_message_does_not_priority_interrupt_photo_followup ║ ========================= 5 warnings, 1 error in 8.30s ========================= ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_photo_interrupts.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 6.6% | 1739/26162 | ✓1259 | ✗ 3] ✓ tests/acp/test_tools.py (70✓, 3.8s) [ 6.7% | 1747/26162 | ✓1267 | ✗ 3] ✓ tests/acp_adapter/test_acp_images.py (8✓, 3.0s) [ 6.7% | 1755/26162 | ✓1275 | ✗ 3] ✓ tests/agent/lsp/test_lifecycle.py (8✓, 1.3s) [ 6.8% | 1773/26162 | ✓1293 | ✗ 3] ✓ tests/agent/lsp/test_eventlog.py (18✓, 1.6s) [ 6.8% | 1785/26162 | ✓1305 | ✗ 3] ✓ tests/agent/lsp/test_install_and_lint_fixes.py (12✓, 1.7s) [ 6.9% | 1803/26162 | ✓1323 | ✗ 3] ✓ tests/agent/lsp/test_delta_key.py (18✓, 2.2s) [ 7.0% | 1821/26162 | ✓1341 | ✗ 3] ✓ tests/agent/lsp/test_protocol.py (18✓, 1.4s) [ 7.0% | 1827/26162 | ✓1347 | ✗ 3] ✓ tests/agent/test_async_utils.py (6✓, 1.1s) [ 7.0% | 1837/26162 | ✓1357 | ✗ 3] ✓ tests/agent/lsp/test_reporter.py (10✓, 1.5s) [ 7.0% | 1842/26162 | ✓1362 | ✗ 3] ✓ tests/agent/lsp/test_service.py (5✓, 1.5s) [ 7.8% | 2043/26162 | ✓1563 | ✗ 3] ✓ plugins/platforms/feishu/tests/test_feishu.py (201✓, 19.6s) [ 7.9% | 2054/26162 | ✓1574 | ✗ 3] ✓ tests/agent/lsp/test_diagnostics_field.py (11✓, 2.6s) [ 7.9% | 2066/26162 | ✓1586 | ✗ 3] ✓ tests/agent/lsp/test_workspace.py (12✓, 1.8s) [ 8.0% | 2083/26162 | ✓1603 | ✗ 3] ✓ tests/agent/test_arcee_trinity_overrides.py (17✓, 1.9s) [ 8.0% | 2095/26162 | ✓1615 | ✗ 3] ✓ tests/agent/test_compressor_image_tokens.py (12✓, 1.1s) [ 8.1% | 2108/26162 | ✓1628 | ✗ 3] ✓ tests/agent/lsp/test_shell_linter_lsp_skip.py (13✓, 2.6s) [ 8.1% | 2112/26162 | ✓1632 | ✗ 3] ✓ tests/agent/test_compress_focus.py (4✓, 1.6s) [ 8.1% | 2131/26162 | ✓1651 | ✗ 3] ✓ tests/agent/test_auxiliary_config_bridge.py (19✓, 2.3s) [ 8.3% | 2171/26162 | ✓1651 | ✗ 3] ✗ plugins/platforms/telegram/tests/test_telegram_reply_mode.py (40e, 14.2s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_reply_mode.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestShouldThreadReply::test_invalid_mode_falls_back_to_first ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestSendWithReplyToMode::test_off_mode_no_reply_threading ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestSendWithReplyToMode::test_first_mode_only_first_chunk_threads ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestSendWithReplyToMode::test_all_mode_all_chunks_thread ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestSendWithReplyToMode::test_no_reply_to_param_no_threading ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestSendWithReplyToMode::test_single_chunk_respects_mode ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestConfigSerialization::test_to_dict_includes_reply_to_mode ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestConfigSerialization::test_from_dict_loads_reply_to_mode ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestConfigSerialization::test_from_dict_defaults_to_first ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestEnvVarOverride::test_env_var_sets_off_mode ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestEnvVarOverride::test_env_var_sets_all_mode ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestEnvVarOverride::test_env_var_case_insensitive ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestEnvVarOverride::test_env_var_invalid_value_ignored ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestEnvVarOverride::test_env_var_empty_value_ignored ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestTelegramYamlConfigLoading::test_top_level_reply_to_mode_off ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestTelegramYamlConfigLoading::test_top_level_reply_to_mode_all ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestTelegramYamlConfigLoading::test_extra_reply_to_mode_off ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestTelegramYamlConfigLoading::test_env_var_takes_precedence_over_yaml ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestTelegramYamlConfigLoading::test_top_level_takes_precedence_over_extra ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_reply_to_id_suppressed_when_off ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_reply_to_id_returned_when_first ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_reply_to_id_returned_when_all ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_reply_to_id_returned_when_no_mode ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_explicit_reply_to_overrides_mode ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_thread_kwargs_suppressed_reply_anchor_when_off ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_thread_kwargs_returns_full_when_first ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_thread_kwargs_no_mode_backward_compat ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_send_dm_topic_off_no_quote ║ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_send_dm_topic_first_still_quotes ║ ============================= 40 errors in 13.52s ============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_reply_mode.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 8.3% | 2173/26162 | ✓1653 | ✗ 3] ✓ tests/agent/test_context_compressor_summary_continuity.py (2✓, 1.5s) [ 8.5% | 2219/26162 | ✓1653 | ✗ 3] ✗ plugins/platforms/telegram/tests/test_telegram_network.py (46e, 15.7s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_network.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransportPassthrough::test_non_telegram_host_bypasses_fallback ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransportPassthrough::test_empty_fallback_list_uses_primary_only ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransportPassthrough::test_primary_succeeds_no_fallback_needed ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransportInit::test_deduplicates_fallback_ips ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransportInit::test_filters_invalid_ips_at_init ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransportInit::test_uses_proxy_env_for_primary_and_fallback_transports ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransportInit::test_no_proxy_bypasses_fallback_ip_cidr ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransportClose::test_aclose_closes_all_transports ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestConfigFallbackIps::test_env_var_populates_config_extra ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestConfigFallbackIps::test_env_var_creates_platform_if_missing ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestConfigFallbackIps::test_env_var_strips_whitespace ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestConfigFallbackIps::test_empty_env_var_does_not_populate ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestAdapterFallbackIps::test_list_in_extra ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestAdapterFallbackIps::test_csv_string_in_extra ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestAdapterFallbackIps::test_empty_extra ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestAdapterFallbackIps::test_no_extra_attr ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestAdapterFallbackIps::test_invalid_ips_filtered ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_google_and_cloudflare_ips_collected ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_system_dns_ip_kept_when_doh_confirms ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_doh_results_deduplicated ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_doh_timeout_falls_back_to_seed ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_doh_connect_error_falls_back_to_seed ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_doh_malformed_json_falls_back_to_seed ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_one_provider_fails_other_succeeds ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_system_dns_failure_keeps_all_doh_ips ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_all_doh_ips_same_as_system_dns_kept ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_cloudflare_gets_accept_header ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_non_a_records_ignored ║ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_invalid_ip_in_doh_response_skipped ║ ============================= 46 errors in 15.09s ============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_network.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 8.5% | 2226/26162 | ✓1660 | ✗ 3] ✓ tests/agent/test_copilot_acp_client.py (7✓, 1.3s) [ 9.2% | 2412/26162 | ✓1840 | ✗ 9] ✗ plugins/platforms/slack/tests/test_slack.py (180✓ 6✗, 18.6s) ╔╍ Failed: plugins/platforms/slack/tests/test_slack.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ plugins/platforms/slack/tests/test_slack.py::TestThreadReplyHandling::test_thread_reply_without_mention_with_session_processed ║ plugins/platforms/slack/tests/test_slack.py::TestThreadReplyHandling::test_thread_reply_with_mention_strips_bot_id ║ plugins/platforms/slack/tests/test_slack.py::TestAssistantThreadLifecycle::test_message_uses_cached_assistant_thread_identity ║ /home/ari/src/hermes-agent/main/plugins/platforms/slack/hermes_agent_slack/adapter.py:2206: RuntimeWarning: coroutine 'AsyncMockMixin._execute_mock_call' was never awaited ║ reply_to_text = await self._fetch_thread_parent_text( ║ Enable tracemalloc to get traceback where the object was allocated. ║ See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. ║ ║ plugins/platforms/slack/tests/test_slack.py::TestBangPrefixCommands::test_bang_works_inside_thread ║ plugins/platforms/slack/tests/test_slack.py::TestAssistantThreadLifecycle::test_message_uses_cached_assistant_thread_identity ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/_pytest/stash.py:108: RuntimeWarning: coroutine 'AsyncMockMixin._execute_mock_call' was never awaited ║ del self._storage[key] ║ Enable tracemalloc to get traceback where the object was allocated. ║ See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. ║ ║ plugins/platforms/slack/tests/test_slack.py::TestBangPrefixCommands::test_bang_unknown_token_passes_through_unchanged ║ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/collections/__init__.py:458: RuntimeWarning: coroutine 'AsyncMockMixin._execute_mock_call' was never awaited ║ result = self._make(_map(kwds.pop, field_names, self)) ║ Enable tracemalloc to get traceback where the object was allocated. ║ See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. ║ ║ -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ║ =========================== short test summary info ============================ ║ FAILED plugins/platforms/slack/tests/test_slack.py::TestAppMentionHandler::test_app_mention_registered_on_connect ║ FAILED plugins/platforms/slack/tests/test_slack.py::TestSlackConnectCleanup::test_reconnect_closes_previous_handler_to_prevent_zombie_socket ║ FAILED plugins/platforms/slack/tests/test_slack.py::TestSlackProxyBehavior::test_resolve_slack_proxy_url_ignores_unsupported_proxy_schemes ║ FAILED plugins/platforms/slack/tests/test_slack.py::TestSlackProxyBehavior::test_resolve_slack_proxy_url_checks_all_slack_hosts ║ FAILED plugins/platforms/slack/tests/test_slack.py::TestSlackProxyBehavior::test_connect_uses_proxy_when_not_bypassed ║ FAILED plugins/platforms/slack/tests/test_slack.py::TestSlackProxyBehavior::test_connect_clears_proxy_when_no_proxy_matches_slack ║ ================= 6 failed, 180 passed, 36 warnings in 15.51s ================== ║ ║ Repro: python -m pytest plugins/platforms/slack/tests/test_slack.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 9.3% | 2426/26162 | ✓1854 | ✗ 9] ✓ tests/agent/test_context_references.py (14✓, 1.6s) [ 9.3% | 2432/26162 | ✓1854 | ✗ 9] ✗ plugins/platforms/telegram/tests/test_telegram_noise_filter.py (6e, 15.7s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_noise_filter.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ =============================== warnings summary =============================== ║ .venv/lib/python3.12/site-packages/discord/player.py:30 ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/discord/player.py:30: DeprecationWarning: 'audioop' is deprecated and slated for removal in Python 3.13 ║ import audioop ║ ║ .venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91 ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). ║ _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) ║ ║ .venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:26 ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:26: DeprecationWarning: There is no current event loop ║ loop = asyncio.get_event_loop() ║ ║ .venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67 ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated ║ def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): ║ ║ .venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6 ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions ║ warnings.warn( # deprecated in 14.0 - 2024-11-09 ║ ║ -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ║ =========================== short test summary info ============================ ║ ERROR plugins/platforms/telegram/tests/test_telegram_noise_filter.py::test_telegram_status_suppresses_auxiliary_and_retry_noise ║ ERROR plugins/platforms/telegram/tests/test_telegram_noise_filter.py::test_non_telegram_status_is_unchanged ║ ERROR plugins/platforms/telegram/tests/test_telegram_noise_filter.py::test_telegram_status_sanitizes_raw_provider_security_errors ║ ERROR plugins/platforms/telegram/tests/test_telegram_noise_filter.py::test_telegram_final_response_sanitizes_raw_provider_errors ║ ERROR plugins/platforms/telegram/tests/test_telegram_noise_filter.py::test_telegram_final_response_redacts_auth_secrets ║ ERROR plugins/platforms/telegram/tests/test_telegram_noise_filter.py::test_telegram_final_response_keeps_normal_answers ║ ======================== 5 warnings, 6 errors in 10.61s ======================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_noise_filter.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 9.9% | 2582/26162 | ✓1991 | ✗ 21] ✗ plugins/platforms/matrix/tests/test_matrix.py (137✓ 12✗ 1s, 19.3s) ╔╍ Failed: plugins/platforms/matrix/tests/test_matrix.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ WARNING hermes_agent_matrix.adapter:adapter.py:1610 Matrix: dropped 3 consecutive live events as 'too old' more than 30s after startup (skew ≈ 7200s). The host system clock is likely set ahead of real time, which causes the startup grace filter to silently discard every incoming message. Run `timedatectl set-ntp true` (or sync NTP) and restart the bot. ║ WARNING hermes_agent_matrix.adapter:adapter.py:1610 Matrix: dropped 3 consecutive live events as 'too old' more than 30s after startup (skew ≈ 7200s). The host system clock is likely set ahead of real time, which causes the startup grace filter to silently discard every incoming message. Run `timedatectl set-ntp true` (or sync NTP) and restart the bot. ║ =============================== warnings summary =============================== ║ plugins/platforms/matrix/tests/test_matrix.py::TestMatrixConfigLoading::test_apply_env_overrides_with_access_token ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). ║ _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) ║ ║ plugins/platforms/matrix/tests/test_matrix.py::TestMatrixConfigLoading::test_apply_env_overrides_with_access_token ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated ║ def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): ║ ║ plugins/platforms/matrix/tests/test_matrix.py::TestMatrixConfigLoading::test_apply_env_overrides_with_access_token ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions ║ warnings.warn( # deprecated in 14.0 - 2024-11-09 ║ ║ -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ║ =========================== short test summary info ============================ ║ FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixRequirements::test_check_requirements_encryption_true_no_e2ee_deps ║ FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixRequirements::test_check_requirements_encryption_false_no_e2ee_deps_ok ║ FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixRequirements::test_check_requirements_encryption_true_with_e2ee_deps ║ FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixAccessTokenAuth::test_connect_with_access_token_and_encryption ║ FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixE2EEHardFail::test_connect_fails_when_encryption_true_but_no_e2ee_deps ║ FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixE2EEHardFail::test_connect_fails_when_crypto_setup_raises ║ FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixDeviceId::test_connect_uses_configured_device_id_over_whoami ║ FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixPasswordLoginDeviceId::test_password_login_uses_device_id ║ FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixEncryptedEventHandler::test_connect_registers_encrypted_event_handler_when_encryption_on ║ FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixEncryptedEventHandler::test_connect_fails_on_stale_otk_conflict ║ FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixClockSkewWarning::test_late_drops_emit_one_shot_clock_skew_warning ║ FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixClockSkewWarning::test_state_reset_allows_warning_to_fire_again ║ ============ 12 failed, 137 passed, 1 skipped, 3 warnings in 16.10s ============ ║ ║ Repro: python -m pytest plugins/platforms/matrix/tests/test_matrix.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 10.0% | 2609/26162 | ✓2018 | ✗ 21] ✓ tests/agent/test_compressor_historical_media.py (27✓, 2.2s) [ 10.0% | 2624/26162 | ✓2033 | ✗ 21] ✓ tests/agent/test_auxiliary_main_first.py (15✓, 2.9s) [ 10.2% | 2665/26162 | ✓2033 | ✗ 21] ✗ plugins/platforms/telegram/tests/test_telegram_thread_fallback.py (41e, 12.6s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_thread_fallback.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_base_gateway_metadata_for_resumed_telegram_dm_topic_uses_direct_topic ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_base_gateway_replies_to_triggering_message_for_telegram_dm_topic ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_gateway_runner_busy_ack_replies_to_triggering_message_for_telegram_dm_topic ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_uses_reply_fallback_for_hermes_dm_topics ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_uses_metadata_reply_fallback_for_streaming_dm_topics ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_reply_fallback_applies_to_every_chunk_for_dm_topics ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_model_picker_uses_metadata_reply_fallback_for_dm_topics ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_dm_topic_fallback_without_anchor_does_not_crash ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_dm_topic_reply_not_found_retry_drops_thread_id ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_image_file-send_photo-image_path-photo.png-png-data] ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_document-send_document-file_path-report.txt-report-data] ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_video-send_video-video_path-clip.mp4-video-data] ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_voice-send_voice-audio_path-clip.ogg-ogg-data] ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_voice-send_audio-audio_path-clip.mp3-mp3-data] ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_animation_dm_topic_reply_not_found_retry_drops_thread_id ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_media_group_dm_topic_reply_not_found_retry_drops_thread_id ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_image_url_dm_topic_reply_not_found_retry_drops_thread_id ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_image_upload_dm_topic_reply_not_found_retry_drops_thread_id ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_slash_confirm_private_topic_callback_followup_sends_thread_and_reply ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_slash_confirm_forum_callback_followup_keeps_existing_thread_behavior ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_base_send_image_fallback_preserves_metadata ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_raises_on_other_bad_request ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_without_thread_id_unaffected ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_retries_network_errors_normally ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_does_not_retry_timeout ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_retries_wrapped_connect_timeout ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_marks_wrapped_connect_timeout_retryable_after_exhaustion ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_thread_fallback_only_fires_once ║ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_retries_retry_after_errors ║ ============================= 41 errors in 12.11s ============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_thread_fallback.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 10.2% | 2666/26162 | ✓2034 | ✗ 21] ✓ tests/agent/test_curator_activity.py (1✓, 1.1s) [ 10.2% | 2680/26162 | ✓2048 | ✗ 21] ✓ tests/agent/test_copilot_acp_deprecation.py (14✓, 2.2s) [ 10.3% | 2685/26162 | ✓2053 | ✗ 21] ✓ tests/agent/test_crossloop_client_cache.py (5✓, 1.5s) [ 10.5% | 2735/26162 | ✓2103 | ✗ 21] ✓ plugins/stt/tests/test_transcription_command_providers.py (50✓, 12.2s) [ 10.5% | 2745/26162 | ✓2113 | ✗ 21] ✓ tests/agent/test_curator_reports.py (10✓, 1.5s) [ 10.5% | 2755/26162 | ✓2123 | ✗ 21] ✓ tests/agent/test_display_emoji.py (10✓, 1.6s) [ 10.7% | 2798/26162 | ✓2123 | ✗ 21] ✗ plugins/platforms/telegram/tests/test_telegram_topic_mode.py (43e, 12.9s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_topic_mode.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_restore_refuses_session_owned_by_another_telegram_user ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_restore_refuses_already_linked_session ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_first_message_inside_topic_records_topic_binding ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_root_command_creates_and_pins_system_topic ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_auto_generated_title_renames_bound_telegram_topic ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_auto_generated_title_does_not_rename_topic_bound_to_other_session ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_operator_declared_topic_is_not_auto_renamed ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_disable_topic_auto_rename_extra_skips_rename ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_schedule_topic_rename_respects_disable_flag ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_telegram_topic_auto_rename_disabled_string_truthy ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_general_topic_is_treated_as_root_lobby ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_lobby_reminder_is_debounced_per_chat ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_binding_survives_session_deletion_via_cascade ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_migration_rebuilds_v1_binding_table_with_cascade_fk ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_help_subcommand_returns_usage ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_off_disables_mode_and_clears_bindings ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_off_is_idempotent_when_never_enabled ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_refuses_unauthorized_user ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_recover_returns_none_for_known_topic ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_recover_preserves_unknown_thread_id_for_new_topic ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_recover_rewrites_lobby_thread_id_to_most_recent ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_recover_returns_none_when_topic_mode_disabled ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_recover_returns_none_when_no_bindings_yet ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_recover_returns_none_for_brand_new_topic ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_list_telegram_topic_bindings_for_chat ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_list_telegram_topic_bindings_for_chat_no_table ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_get_telegram_topic_binding_by_session_returns_binding ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_get_telegram_topic_binding_by_session_returns_none_for_unknown ║ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_session_split_restores_source_thread_id_from_binding ║ ============================= 43 errors in 12.05s ============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_topic_mode.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 10.9% | 2844/26162 | ✓2169 | ✗ 21] ✓ tests/agent/test_curator_classification.py (46✓, 2.0s) [ 11.0% | 2865/26162 | ✓2190 | ✗ 21] ✓ tests/agent/test_auxiliary_transport_autodetect.py (21✓, 4.2s) [ 11.0% | 2889/26162 | ✓2214 | ✗ 21] ✓ tests/agent/test_display_tool_failure.py (24✓, 1.5s) [ 11.1% | 2900/26162 | ✓2225 | ✗ 21] ✓ tests/agent/test_external_skills.py (11✓, 1.3s) [ 11.2% | 2931/26162 | ✓2256 | ✗ 21] ✓ tests/agent/test_display.py (31✓, 2.0s) [ 11.3% | 2953/26162 | ✓2277 | ✗ 21] ✓ plugins/terminals/modal/tests/test_modal_sandbox_fixes.py (21✓ 1s, 12.7s) [ 11.4% | 2971/26162 | ✓2295 | ✗ 21] ✓ tests/agent/test_file_safety.py (18✓, 1.4s) [ 11.4% | 2977/26162 | ✓2301 | ✗ 21] ✓ tests/agent/test_external_skills_dirs_cache.py (6✓, 1.5s) [ 11.5% | 3001/26162 | ✓2325 | ✗ 21] ✓ tests/agent/test_display_todo_progress.py (24✓, 2.2s) [ 11.6% | 3026/26162 | ✓2350 | ✗ 21] ✓ tests/agent/test_curator_backup.py (25✓, 2.7s) [ 11.8% | 3078/26162 | ✓2402 | ✗ 21] ✓ plugins/tts/tests/test_tts_command_providers.py (52✓, 13.1s) [ 11.8% | 3098/26162 | ✓2422 | ✗ 21] ✓ tests/agent/test_file_safety_credentials.py (20✓, 1.7s) [ 11.9% | 3114/26162 | ✓2438 | ✗ 21] ✓ tests/agent/test_file_safety_cross_profile.py (16✓, 1.7s) [ 12.0% | 3136/26162 | ✓2460 | ✗ 21] ✓ tests/agent/test_gemini_free_tier_gate.py (22✓, 1.7s) [ 12.0% | 3147/26162 | ✓2471 | ✗ 21] ✓ tests/agent/test_gemini_schema.py (11✓, 1.5s) [ 12.1% | 3157/26162 | ✓2481 | ✗ 21] ✓ tests/agent/test_image_gen_registry.py (10✓, 1.4s) [ 12.1% | 3172/26162 | ✓2496 | ✗ 21] ✓ tests/agent/test_markdown_tables.py (15✓, 1.1s) [ 12.1% | 3174/26162 | ✓2498 | ✗ 21] ✓ tests/agent/test_last_total_tokens.py (2✓, 1.3s) [ 12.2% | 3186/26162 | ✓2510 | ✗ 21] ✓ tests/agent/test_memory_session_switch.py (12✓, 0.9s) [ 12.3% | 3225/26162 | ✓2549 | ✗ 21] ✓ tests/agent/test_local_stream_timeout.py (39✓, 1.6s) [ 12.4% | 3236/26162 | ✓2560 | ✗ 21] ✓ tests/agent/test_gemini_native_adapter.py (11✓, 2.3s) [ 12.6% | 3293/26162 | ✓2617 | ✗ 21] ✓ tests/agent/test_image_routing.py (57✓, 2.2s) [ 13.1% | 3433/26162 | ✓2757 | ✗ 21] ✓ tests/agent/test_error_classifier.py (140✓, 3.8s) [ 13.2% | 3442/26162 | ✓2766 | ✗ 21] ✓ tests/agent/test_model_metadata_ssl.py (9✓, 1.2s) [ 13.4% | 3516/26162 | ✓2840 | ✗ 21] ✓ tests/agent/test_memory_provider.py (74✓, 2.2s) [ 13.6% | 3548/26162 | ✓2872 | ✗ 21] ✓ tests/agent/test_models_dev.py (32✓, 1.5s) [ 13.6% | 3557/26162 | ✓2881 | ✗ 21] ✓ tests/agent/test_minimax_auxiliary_url.py (9✓, 2.0s) [ 13.8% | 3605/26162 | ✓2929 | ✗ 21] ✓ tests/agent/test_curator.py (48✓, 6.1s) [ 13.9% | 3647/26162 | ✓2971 | ✗ 21] ✓ tests/agent/test_moonshot_schema.py (42✓, 2.0s) [ 14.1% | 3679/26162 | ✓3003 | ✗ 21] ✓ tests/agent/test_nous_rate_guard.py (32✓, 1.4s) [ 14.1% | 3682/26162 | ✓3006 | ✗ 21] ✓ tests/agent/test_nous_oauth_401_guidance.py (3✓, 1.7s) [ 14.2% | 3715/26162 | ✓3039 | ✗ 21] ✓ tests/agent/test_onboarding.py (33✓, 1.7s) [ 14.2% | 3721/26162 | ✓3045 | ✗ 21] ✓ tests/agent/test_portal_tags.py (6✓, 1.2s) [ 14.5% | 3788/26162 | ✓3112 | ✗ 21] ✓ tests/agent/test_credential_pool.py (67✓, 7.3s) [ 14.8% | 3876/26162 | ✓3200 | ✗ 21] ✓ tests/agent/test_gemini_cloudcode.py (88✓, 4.8s) [ 14.9% | 3890/26162 | ✓3214 | ✗ 21] ✓ tests/agent/test_prompt_caching.py (14✓, 1.2s) [ 14.9% | 3909/26162 | ✓3233 | ✗ 21] ✓ tests/agent/test_context_engine.py (19✓, 8.6s) [ 15.0% | 3917/26162 | ✓3241 | ✗ 21] ✓ tests/acp/test_edit_approval.py (8✓, 14.6s) [ 15.1% | 3941/26162 | ✓3265 | ✗ 21] ✓ tests/agent/test_rate_limit_tracker.py (24✓, 1.2s) [ 15.1% | 3963/26162 | ✓3287 | ✗ 21] ✓ tests/agent/test_model_metadata_local_ctx.py (22✓, 3.7s) [ 15.2% | 3978/26162 | ✓3302 | ✗ 21] ✓ tests/agent/test_proxy_and_url_validation.py (15✓, 1.7s) [ 15.2% | 3984/26162 | ✓3308 | ✗ 21] ✓ tests/agent/test_skill_commands_reload.py (6✓, 0.8s) [ 15.3% | 4005/26162 | ✓3329 | ✗ 21] ✓ tests/agent/test_streaming_context_scrubber.py (21✓, 1.1s) [ 15.4% | 4020/26162 | ✓3344 | ✗ 21] ✓ tests/agent/test_skill_utils.py (15✓, 1.1s) [ 15.5% | 4063/26162 | ✓3387 | ✗ 21] ✓ tests/agent/test_i18n.py (43✓, 6.1s) [ 15.6% | 4086/26162 | ✓3410 | ✗ 21] ✓ tests/agent/test_shell_hooks_consent.py (23✓, 1.9s) [ 15.9% | 4168/26162 | ✓3492 | ✗ 21] ✓ tests/agent/test_redact.py (82✓, 2.6s) [ 16.3% | 4270/26162 | ✓3594 | ✗ 21] ✓ tests/agent/test_model_metadata.py (102✓, 4.9s) [ 16.4% | 4303/26162 | ✓3627 | ✗ 21] ✓ tests/agent/test_skill_bundles.py (33✓, 2.1s) [ 16.5% | 4324/26162 | ✓3648 | ✗ 21] ✓ tests/agent/test_subagent_progress.py (21✓, 1.6s) [ 16.6% | 4342/26162 | ✓3666 | ✗ 21] ✓ tests/agent/test_subdirectory_hints.py (18✓, 1.1s) [ 16.6% | 4345/26162 | ✓3669 | ✗ 21] ✓ tests/agent/test_tool_result_classification.py (3✓, 0.8s) [ 16.7% | 4358/26162 | ✓3682 | ✗ 21] ✓ tests/agent/test_tool_guardrails.py (13✓, 1.1s) [ 16.7% | 4368/26162 | ✓3692 | ✗ 21] ✓ tests/agent/test_system_prompt_restore.py (10✓, 1.6s) [ 16.9% | 4421/26162 | ✓3745 | ✗ 21] ✓ tests/agent/test_shell_hooks.py (53✓, 3.5s) [ 17.1% | 4477/26162 | ✓3801 | ✗ 21] ✓ tests/agent/test_plugin_llm.py (56✓, 5.1s) [ 17.2% | 4488/26162 | ✓3812 | ✗ 21] ✓ tests/agent/test_usage_pricing.py (11✓, 0.9s) [ 17.3% | 4514/26162 | ✓3838 | ✗ 21] ✓ tests/agent/test_transcription_registry.py (26✓, 1.8s) [ 17.4% | 4545/26162 | ✓3869 | ✗ 21] ✓ tests/agent/test_think_scrubber.py (31✓, 2.1s) [ 17.4% | 4555/26162 | ✓3879 | ✗ 21] ✓ tests/agent/test_video_gen_registry.py (10✓, 0.9s) [ 17.6% | 4596/26162 | ✓3920 | ✗ 21] ✓ tests/agent/test_skill_commands.py (41✓, 3.7s) [ 17.6% | 4604/26162 | ✓3928 | ✗ 21] ✓ tests/acp/test_mcp_e2e.py (8✓, 17.9s) [ 17.7% | 4624/26162 | ✓3948 | ✗ 21] ✓ tests/agent/test_title_generator.py (20✓, 2.6s) [ 17.7% | 4632/26162 | ✓3956 | ✗ 21] ✓ tests/agent/test_save_url_image.py (8✓, 4.7s) [ 17.9% | 4678/26162 | ✓4002 | ✗ 21] ✓ tests/agent/test_tts_registry.py (46✓, 2.5s) [ 18.0% | 4701/26162 | ✓4025 | ✗ 21] ✓ tests/agent/transports/test_codex_event_projector.py (23✓, 1.3s) [ 18.4% | 4825/26162 | ✓4149 | ✗ 21] ✓ tests/agent/test_prompt_builder.py (124✓, 6.1s) [ 18.5% | 4833/26162 | ✓4157 | ✗ 21] ✓ tests/agent/transports/test_transport.py (8✓, 1.1s) [ 18.6% | 4870/26162 | ✓4194 | ✗ 21] ✓ tests/agent/transports/test_types.py (37✓, 1.4s) [ 18.9% | 4939/26162 | ✓4263 | ✗ 21] ✓ tests/agent/transports/test_chat_completions.py (69✓, 2.0s) [ 18.9% | 4948/26162 | ✓4272 | ✗ 21] ✓ tests/agent/transports/test_hermes_tools_mcp_server.py (9✓, 1.6s) [ 19.0% | 4975/26162 | ✓4299 | ✗ 21] ✓ tests/agent/transports/test_codex_app_server_runtime.py (27✓, 2.3s) [ 19.4% | 5074/26162 | ✓4299 | ✗ 21] ✗ plugins/platforms/telegram/tests/test_telegram_format.py (99e, 30.2s) ╔╍ Failed: plugins/platforms/telegram/tests/test_telegram_format.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestStripMdv2::test_preserves_multi_underscore_identifier ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestStripMdv2::test_plain_text_unchanged ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestStripMdv2::test_empty_string ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestStripMdv2::test_removes_strikethrough_markers ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestStripMdv2::test_removes_spoiler_markers ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_basic_table_rewritten_as_row_groups ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_bare_pipe_table_rewritten ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_alignment_separators ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_two_consecutive_tables_rewritten_separately ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_plain_text_with_pipes_not_wrapped ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_horizontal_rule_not_wrapped ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_existing_code_block_with_pipes_left_alone ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_no_pipe_character_short_circuits ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_no_dash_short_circuits ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_single_column_separator_not_matched ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageTables::test_table_rendered_as_bullets ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageTables::test_text_after_table_still_formatted ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageTables::test_multiple_tables_in_single_message ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::test_send_escapes_chunk_indicator_for_markdownv2 ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestEditMessageStreamingSafety::test_non_final_edit_uses_plain_text_without_markdown ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestEditMessageStreamingSafety::test_final_edit_uses_markdownv2_with_plain_fallback ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestEditMessageStreamingSafety::test_message_too_long_splits_into_continuations_not_silent_truncation ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestEditMessageStreamingSafety::test_message_too_long_continuations_preserve_topic_metadata ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestTelegramGuestMentionGating::test_guest_mode_allows_explicit_mention_outside_allowed_chats ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestTelegramGuestMentionGating::test_guest_mode_does_not_allow_reply_outside_allowed_chats ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestTelegramGuestMentionGating::test_guest_mode_disabled_keeps_allowed_chats_as_hard_gate_for_mentions ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestTelegramGuestMentionGating::test_guest_mode_allows_bot_command_entity_outside_allowed_chats ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestTelegramGuestMentionGating::test_guest_mode_allows_text_mention_entity_outside_allowed_chats ║ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestTelegramGuestMentionGating::test_guest_mode_allows_mention_in_caption_outside_allowed_chats ║ ============================= 99 errors in 29.37s ============================== ║ ║ Repro: python -m pytest plugins/platforms/telegram/tests/test_telegram_format.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 19.4% | 5077/26162 | ✓4302 | ✗ 21] ✓ tests/agent/test_direct_provider_url_detection.py (3✓, 12.9s) [ 19.4% | 5085/26162 | ✓4310 | ✗ 21] ✓ tests/cli/test_busy_input_mode_command.py (8✓, 1.4s) [ 19.4% | 5088/26162 | ✓4313 | ✗ 21] ✓ tests/agent/test_custom_provider_extra_body.py (3✓, 13.3s) [ 19.5% | 5098/26162 | ✓4323 | ✗ 21] ✓ tests/agent/test_credential_pool_routing.py (10✓, 13.9s) [ 19.5% | 5114/26162 | ✓4339 | ✗ 21] ✓ tests/cli/test_cli_background_status_indicator.py (16✓, 2.0s) [ 19.6% | 5125/26162 | ✓4350 | ✗ 21] ✓ tests/cli/test_cli_bracketed_paste_sanitizer.py (11✓, 1.6s) [ 19.6% | 5129/26162 | ✓4354 | ✗ 21] ✓ tests/cli/test_cli_copy_command.py (4✓, 1.1s) [ 19.7% | 5158/26162 | ✓4383 | ✗ 21] ✓ tests/agent/test_auxiliary_named_custom_providers.py (29✓, 16.5s) [ 19.8% | 5169/26162 | ✓4394 | ✗ 21] ✓ tests/cli/test_cli_approval_ui.py (11✓, 2.5s) [ 19.8% | 5173/26162 | ✓4398 | ✗ 21] ✓ tests/cli/test_cli_background_tui_refresh.py (4✓, 2.0s) [ 19.8% | 5187/26162 | ✓4412 | ✗ 21] ✓ tests/agent/test_memory_user_id.py (14✓, 11.1s) [ 19.9% | 5203/26162 | ✓4428 | ✗ 21] ✓ tests/cli/test_cli_browser_connect.py (16✓, 2.1s) [ 19.9% | 5210/26162 | ✓4435 | ✗ 21] ✓ tests/cli/test_cli_external_editor.py (7✓, 1.4s) [ 20.0% | 5223/26162 | ✓4448 | ✗ 21] ✓ tests/agent/test_codex_cloudflare_headers.py (13✓, 16.9s) [ 20.0% | 5231/26162 | ✓4456 | ✗ 21] ✓ tests/cli/test_bracketed_paste_timeout.py (8✓, 3.9s) [ 20.0% | 5238/26162 | ✓4463 | ✗ 21] ✓ tests/agent/test_gemini_fast_fallback.py (7✓, 13.4s) [ 20.2% | 5273/26162 | ✓4498 | ✗ 21] ✓ tests/cli/test_cli_file_drop.py (35✓, 1.9s) [ 20.2% | 5282/26162 | ✓4507 | ✗ 21] ✓ tests/cli/test_cli_image_command.py (9✓, 1.6s) [ 20.2% | 5284/26162 | ✓4509 | ✗ 21] ✓ tests/cli/test_cli_loading_indicator.py (2✓, 1.3s) [ 20.2% | 5291/26162 | ✓4516 | ✗ 21] ✓ tests/cli/test_cli_goal_interrupt.py (7✓, 1.9s) [ 20.2% | 5297/26162 | ✓4522 | ✗ 21] ✓ tests/cli/test_cli_mcp_config_watch.py (6✓, 1.2s) [ 20.3% | 5299/26162 | ✓4524 | ✗ 21] ✓ tests/cli/test_cli_insights_command.py (2✓, 1.7s) [ 20.3% | 5308/26162 | ✓4533 | ✗ 21] ✓ tests/cli/test_cli_force_redraw.py (9✓, 2.4s) [ 20.4% | 5324/26162 | ✓4549 | ✗ 21] ✓ tests/cli/test_cli_light_mode.py (16✓, 1.8s) [ 20.4% | 5338/26162 | ✓4563 | ✗ 21] ✓ tests/cli/test_cli_markdown_rendering.py (14✓, 1.8s) [ 21.0% | 5493/26162 | ✓4718 | ✗ 21] ✓ tests/agent/test_auxiliary_client.py (155✓, 19.5s) [ 21.2% | 5539/26162 | ✓4764 | ✗ 21] ✓ tests/agent/test_openrouter_response_cache.py (46✓, 12.0s) [ 21.2% | 5544/26162 | ✓4769 | ✗ 21] ✓ tests/cli/test_cli_resume_command.py (5✓, 1.4s) [ 21.3% | 5585/26162 | ✓4810 | ✗ 21] ✓ tests/acp/test_session.py (41✓, 23.4s) [ 21.4% | 5588/26162 | ✓4813 | ✗ 21] ✓ tests/cli/test_cli_reload_skills.py (3✓, 1.8s) [ 21.4% | 5593/26162 | ✓4818 | ✗ 21] ✓ tests/cli/test_cli_extension_hooks.py (5✓, 4.3s) [ 21.4% | 5600/26162 | ✓4825 | ✗ 21] ✓ tests/agent/test_subagent_stop_hook.py (7✓, 9.8s) [ 21.4% | 5606/26162 | ✓4831 | ✗ 21] ✓ tests/cli/test_cli_shift_enter_newline.py (6✓, 1.6s) [ 21.5% | 5614/26162 | ✓4839 | ✗ 21] ✓ tests/cli/test_cli_save_config_value.py (8✓, 1.8s) [ 21.5% | 5625/26162 | ✓4850 | ✗ 21] ✓ tests/cli/test_cli_skin_integration.py (11✓, 1.4s) [ 21.5% | 5627/26162 | ✓4852 | ✗ 21] ✓ tests/agent/test_vision_resolved_args.py (2✓, 7.9s) [ 21.5% | 5629/26162 | ✓4854 | ✗ 21] ✓ tests/cli/test_cli_retry.py (2✓, 2.3s) [ 21.5% | 5634/26162 | ✓4859 | ✗ 21] ✓ tests/cli/test_cli_secret_capture.py (5✓, 2.2s) [ 21.6% | 5650/26162 | ✓4875 | ✗ 21] ✓ tests/cli/test_cli_terminal_response_sanitizer.py (16✓, 1.5s) [ 21.6% | 5663/26162 | ✓4888 | ✗ 21] ✓ tests/cli/test_cprint_bg_thread.py (13✓, 1.3s) [ 21.7% | 5675/26162 | ✓4900 | ✗ 21] ✓ tests/agent/test_non_stream_stale_timeout.py (12✓, 14.6s) [ 21.8% | 5694/26162 | ✓4919 | ✗ 21] ✓ tests/agent/test_unsupported_temperature_retry.py (19✓, 9.8s) [ 21.8% | 5714/26162 | ✓4939 | ✗ 21] ✓ tests/cli/test_cli_provider_resolution.py (20✓, 3.6s) [ 21.9% | 5726/26162 | ✓4951 | ✗ 21] ✓ tests/cli/test_exit_delete_session.py (12✓, 0.9s) [ 21.9% | 5742/26162 | ✓4967 | ✗ 21] ✓ tests/cli/test_destructive_slash_confirm.py (16✓, 1.1s) [ 22.0% | 5758/26162 | ✓4983 | ✗ 21] ✓ tests/cli/test_branch_command.py (16✓, 7.7s) [ 22.0% | 5762/26162 | ✓4987 | ✗ 21] ✓ tests/cli/test_cli_shutdown_memory_messages.py (4✓, 3.3s) [ 22.1% | 5771/26162 | ✓4996 | ✗ 21] ✓ tests/cli/test_ctrl_enter_newline.py (9✓, 2.0s) [ 22.1% | 5774/26162 | ✓4999 | ✗ 21] ✓ tests/agent/test_codex_ttfb_watchdog.py (3✓, 21.6s) [ 22.1% | 5783/26162 | ✓5008 | ✗ 21] ✓ tests/cli/test_cwd_env_respect.py (9✓, 2.0s) [ 22.2% | 5799/26162 | ✓5024 | ✗ 21] ✓ tests/agent/test_unsupported_parameter_retry.py (16✓, 10.8s) [ 22.2% | 5802/26162 | ✓5027 | ✗ 21] ✓ tests/cli/test_destructive_slash_inline_skip_e2e.py (3✓, 1.9s) [ 22.3% | 5838/26162 | ✓5063 | ✗ 21] ✓ tests/cli/test_cli_status_bar.py (36✓, 3.0s) [ 22.3% | 5843/26162 | ✓5068 | ✗ 21] ✓ tests/cli/test_prompt_text_input_thread_safety.py (5✓, 1.0s) [ 22.3% | 5846/26162 | ✓5071 | ✗ 21] ✓ tests/cli/test_cli_user_message_preview.py (3✓, 2.6s) [ 22.4% | 5851/26162 | ✓5076 | ✗ 21] ✓ tests/cli/test_exit_summary_resume_hint.py (5✓, 1.3s) [ 22.4% | 5858/26162 | ✓5083 | ✗ 21] ✓ tests/cli/test_cli_new_session.py (7✓, 5.2s) [ 22.5% | 5876/26162 | ✓5101 | ✗ 21] ✓ tests/cli/test_fast_command.py (18✓, 1.8s) [ 22.5% | 5878/26162 | ✓5103 | ✗ 21] ✓ tests/cli/test_save_conversation_location.py (2✓, 1.0s) [ 22.5% | 5879/26162 | ✓5104 | ✗ 21] ✓ tests/cli/test_gquota_command.py (1✓, 2.0s) [ 22.5% | 5898/26162 | ✓5123 | ✗ 21] ✓ tests/cli/test_personality_none.py (19✓, 2.0s) [ 22.6% | 5902/26162 | ✓5127 | ✗ 21] ✓ tests/cli/test_resume_quiet_stderr.py (4✓, 1.7s) [ 22.6% | 5906/26162 | ✓5131 | ✗ 21] ✓ tests/cli/test_slash_command_interrupt.py (4✓, 1.5s) [ 22.7% | 5951/26162 | ✓5176 | ✗ 21] ✓ tests/agent/transports/test_codex_transport.py (45✓, 10.8s) [ 22.8% | 5959/26162 | ✓5184 | ✗ 21] ✓ tests/cli/test_stream_delta_think_tag.py (8✓, 1.4s) [ 22.8% | 5964/26162 | ✓5189 | ✗ 21] ✓ tests/cli/test_compress_focus.py (5✓, 3.9s) [ 22.8% | 5967/26162 | ✓5192 | ✗ 21] ✓ tests/cron/test_compute_next_run_last_run_at.py (3✓, 0.9s) [ 22.8% | 5974/26162 | ✓5199 | ✗ 21] ✓ tests/cli/test_cli_steer_busy_path.py (7✓, 4.8s) [ 22.9% | 5983/26162 | ✓5208 | ✗ 21] ✓ tests/cli/test_slash_confirm_windows.py (9✓, 2.1s) [ 22.9% | 6003/26162 | ✓5228 | ✗ 21] ✓ tests/cli/test_update_command.py (20✓, 2.0s) [ 23.0% | 6007/26162 | ✓5232 | ✗ 21] ✓ tests/cli/test_session_boundary_hooks.py (4✓, 2.4s) [ 23.0% | 6012/26162 | ✓5237 | ✗ 21] ✓ tests/cli/test_worktree_security.py (5✓, 1.6s) [ 23.0% | 6023/26162 | ✓5248 | ✗ 21] ✓ tests/cron/test_cron_prompt_injection_skill.py (11✓, 1.5s) [ 23.1% | 6035/26162 | ✓5260 | ✗ 21] ✓ tests/agent/test_vision_routing_31179.py (12✓, 12.8s) [ 23.1% | 6056/26162 | ✓5281 | ✗ 21] ✓ tests/cron/test_cron_context_from.py (21✓, 2.2s) [ 23.2% | 6064/26162 | ✓5289 | ✗ 21] ✓ tests/cron/test_file_permissions.py (8✓, 1.4s) [ 23.3% | 6104/26162 | ✓5329 | ✗ 21] ✓ tests/cli/test_resume_display.py (40✓, 4.0s) [ 23.3% | 6105/26162 | ✓5330 | ✗ 21] ✓ tests/cron/test_scheduler_mcp_init.py (1✓, 1.3s) [ 23.4% | 6111/26162 | ✓5336 | ✗ 21] ✓ tests/cli/test_manual_compress.py (6✓, 5.0s) [ 23.4% | 6120/26162 | ✓5345 | ✗ 21] ✓ tests/gateway/test_7100_transient_failure_transcript.py (9✓, 1.0s) [ 23.5% | 6136/26162 | ✓5361 | ✗ 21] ✓ tests/cron/test_rewrite_skill_refs.py (16✓, 2.0s) [ 23.5% | 6146/26162 | ✓5371 | ✗ 21] ✓ tests/cli/test_cli_context_warning.py (10✓, 11.6s) [ 23.5% | 6150/26162 | ✓5375 | ✗ 21] ✓ tests/gateway/test_allowlist_startup_check.py (4✓, 1.1s) [ 23.5% | 6152/26162 | ✓5377 | ✗ 21] ✓ tests/gateway/platforms/test_yuanbao_recall_db_only.py (2✓, 1.7s) [ 23.6% | 6172/26162 | ✓5397 | ✗ 21] ✓ tests/cron/test_cron_profile.py (20✓, 3.4s) [ 23.7% | 6193/26162 | ✓5418 | ✗ 21] ✓ tests/cron/test_cron_workdir.py (21✓, 3.0s) [ 23.8% | 6234/26162 | ✓5459 | ✗ 21] ✓ tests/cli/test_worktree.py (41✓, 5.0s) [ 23.8% | 6237/26162 | ✓5462 | ✗ 21] ✓ tests/cli/test_cli_preloaded_skills.py (3✓, 9.9s) [ 23.9% | 6252/26162 | ✓5477 | ✗ 21] ✓ tests/gateway/test_active_session_text_merge.py (15✓, 2.4s) [ 23.9% | 6253/26162 | ✓5478 | ✗ 21] ✓ tests/cli/test_cli_interrupt_subagent.py (1✓, 11.3s) [ 24.1% | 6310/26162 | ✓5535 | ✗ 21] ✓ tests/agent/transports/test_codex_app_server_session.py (57✓, 15.3s) [ 24.2% | 6327/26162 | ✓5552 | ✗ 21] ✓ tests/gateway/test_api_server_normalize.py (17✓, 1.5s) [ 24.2% | 6330/26162 | ✓5555 | ✗ 21] ✓ tests/gateway/test_auth_fallback.py (3✓, 0.9s) [ 24.3% | 6347/26162 | ✓5572 | ✗ 21] ✓ tests/gateway/test_api_server_bind_guard.py (17✓, 2.2s) [ 24.3% | 6353/26162 | ✓5578 | ✗ 21] ✓ tests/cli/test_cli_status_command.py (6✓, 9.2s) [ 24.6% | 6440/26162 | ✓5665 | ✗ 21] ✓ tests/cron/test_jobs.py (87✓, 4.4s) [ 24.6% | 6446/26162 | ✓5671 | ✗ 21] ✓ tests/gateway/test_auto_continue.py (6✓, 1.2s) [ 24.7% | 6456/26162 | ✓5681 | ✗ 21] ✓ tests/cli/test_cli_tools_command.py (10✓, 9.1s) [ 24.8% | 6479/26162 | ✓5704 | ✗ 21] ✓ tests/gateway/test_api_server_multimodal.py (23✓, 2.2s) [ 24.8% | 6490/26162 | ✓5715 | ✗ 21] ✓ tests/cli/test_cli_prefix_matching.py (11✓, 11.9s) [ 24.8% | 6500/26162 | ✓5725 | ✗ 21] ✓ tests/gateway/test_base_topic_sessions.py (10✓, 1.3s) [ 24.9% | 6504/26162 | ✓5729 | ✗ 21] ✓ tests/gateway/test_bundles_command.py (4✓, 1.3s) [ 24.9% | 6525/26162 | ✓5750 | ✗ 21] ✓ tests/gateway/test_approve_deny_commands.py (21✓, 2.7s) [ 25.0% | 6528/26162 | ✓5753 | ✗ 21] ✓ tests/gateway/test_cancel_background_drain.py (3✓, 1.1s) [ 25.0% | 6539/26162 | ✓5764 | ✗ 21] ✓ tests/cron/test_cron_inactivity_timeout.py (11✓, 6.7s) [ 25.1% | 6555/26162 | ✓5780 | ✗ 21] ✓ tests/gateway/test_busy_session_ack.py (16✓, 2.1s) [ 25.1% | 6559/26162 | ✓5784 | ✗ 21] ✓ tests/gateway/test_busy_session_auth_bypass.py (4✓, 2.2s) [ 25.1% | 6566/26162 | ✓5791 | ✗ 21] ✓ tests/gateway/test_clean_shutdown_marker.py (7✓, 2.0s) [ 25.2% | 6599/26162 | ✓5824 | ✗ 21] ✓ tests/gateway/test_channel_directory.py (33✓, 2.1s) [ 25.4% | 6639/26162 | ✓5864 | ✗ 21] ✓ tests/gateway/test_command_bypass_active_session.py (40✓, 2.3s) [ 25.4% | 6654/26162 | ✓5879 | ✗ 21] ✓ tests/gateway/test_complete_path_at_filter.py (15✓, 2.1s) [ 25.7% | 6732/26162 | ✓5957 | ✗ 21] ✓ tests/acp/test_server.py (78✓, 35.3s) [ 25.8% | 6748/26162 | ✓5973 | ✗ 21] ✓ tests/gateway/test_delivery.py (16✓, 1.0s) [ 25.9% | 6784/26162 | ✓6009 | ✗ 21] ✓ tests/gateway/test_api_server_jobs.py (36✓, 5.6s) [ 26.1% | 6839/26162 | ✓6064 | ✗ 21] ✓ tests/cli/test_reasoning_command.py (55✓, 10.7s) [ 26.2% | 6854/26162 | ✓6079 | ✗ 21] ✓ tests/cli/test_tool_progress_scrollback.py (15✓, 9.8s) [ 26.3% | 6878/26162 | ✓6103 | ✗ 21] ✓ tests/gateway/test_config_cwd_bridge.py (24✓, 1.7s) [ 26.3% | 6880/26162 | ✓6105 | ✗ 21] ✓ tests/gateway/test_debug_command.py (2✓, 1.5s) [ 26.5% | 6922/26162 | ✓6147 | ✗ 21] ✓ tests/cli/test_cli_init.py (42✓, 16.1s) [ 26.5% | 6941/26162 | ✓6166 | ✗ 21] ✓ tests/gateway/test_discord_allowed_mentions.py (19✓, 1.5s) [ 26.6% | 6956/26162 | ✓6181 | ✗ 21] ✓ tests/gateway/test_discord_allowed_channels.py (15✓, 1.6s) [ 26.7% | 6974/26162 | ✓6199 | ✗ 21] ✓ tests/cron/test_cron_no_agent.py (18✓, 9.5s) [ 26.7% | 6980/26162 | ✓6205 | ✗ 21] ✓ tests/gateway/test_destructive_slash_confirm.py (6✓, 2.0s) [ 26.8% | 7002/26162 | ✓6227 | ✗ 21] ✓ tests/gateway/test_api_server_runs.py (22✓, 6.3s) [ 26.8% | 7016/26162 | ✓6241 | ✗ 21] ✓ tests/gateway/test_discord_attachment_download.py (14✓, 1.4s) [ 26.8% | 7022/26162 | ✓6247 | ✗ 21] ✓ tests/gateway/test_discord_channel_skills.py (6✓, 1.1s) [ 26.9% | 7040/26162 | ✓6265 | ✗ 21] ✓ tests/cli/test_quick_commands.py (18✓, 12.3s) [ 26.9% | 7049/26162 | ✓6274 | ✗ 21] ✓ tests/gateway/test_discord_bot_auth_bypass.py (9✓, 2.0s) [ 27.0% | 7057/26162 | ✓6282 | ✗ 21] ✓ tests/gateway/test_discord_bot_filter.py (8✓, 2.0s) [ 27.0% | 7071/26162 | ✓6296 | ✗ 21] ✓ tests/gateway/test_discord_clarify_buttons.py (14✓, 1.9s) [ 27.0% | 7072/26162 | ✓6297 | ✗ 21] ✓ tests/gateway/test_discord_media_metadata.py (1✓, 1.3s) [ 27.0% | 7073/26162 | ✓6298 | ✗ 21] ✓ tests/gateway/test_discord_model_picker.py (1✓, 1.2s) [ 27.1% | 7092/26162 | ✓6317 | ✗ 21] ✓ tests/gateway/test_discord_component_auth.py (19✓, 1.8s) [ 27.1% | 7095/26162 | ✓6320 | ✗ 21] ✓ tests/gateway/test_discord_opus.py (3✓, 1.2s) [ 27.1% | 7096/26162 | ✓6321 | ✗ 21] ✓ tests/gateway/test_discord_race_polish.py (1✓, 0.8s) [ 27.1% | 7097/26162 | ✓6322 | ✗ 21] ✓ tests/gateway/test_discord_imports.py (1✓, 1.6s) [ 27.2% | 7117/26162 | ✓6342 | ✗ 21] ✓ tests/gateway/test_discord_document_handling.py (20✓, 1.9s) [ 27.3% | 7151/26162 | ✓6376 | ✗ 21] ✓ tests/gateway/test_discord_free_response.py (34✓, 2.0s) [ 27.3% | 7153/26162 | ✓6378 | ✗ 21] ✓ tests/cron/test_codex_execution_paths.py (2✓, 12.7s) [ 27.4% | 7159/26162 | ✓6384 | ✗ 21] ✓ tests/gateway/test_config_env_bridge_authority.py (6✓, 4.9s) [ 27.6% | 7215/26162 | ✓6440 | ✗ 21] ✓ tests/agent/test_insights.py (56✓, 30.9s) [ 27.6% | 7222/26162 | ✓6447 | ✗ 21] ✓ tests/gateway/test_discord_reactions.py (7✓, 1.6s) [ 27.7% | 7250/26162 | ✓6475 | ✗ 21] ✓ tests/cli/test_surrogate_sanitization.py (28✓, 13.5s) [ 27.7% | 7258/26162 | ✓6483 | ✗ 21] ✓ tests/gateway/test_discord_system_messages.py (8✓, 1.4s) [ 27.8% | 7276/26162 | ✓6501 | ✗ 21] ✓ tests/gateway/test_discord_send.py (18✓, 1.7s) [ 27.8% | 7284/26162 | ✓6509 | ✗ 21] ✓ tests/gateway/test_discord_thread_persistence.py (8✓, 1.6s) [ 28.0% | 7316/26162 | ✓6541 | ✗ 21] ✓ tests/gateway/test_discord_slash_auth.py (32✓, 2.1s) [ 28.0% | 7328/26162 | ✓6553 | ✗ 21] ✓ tests/gateway/test_discord_roles_dm_scope.py (12✓, 2.3s) [ 28.1% | 7361/26162 | ✓6586 | ✗ 21] ✓ tests/gateway/test_dm_topics.py (33✓, 1.8s) [ 28.2% | 7383/26162 | ✓6608 | ✗ 21] ✓ tests/gateway/test_document_cache.py (22✓, 1.4s) [ 28.4% | 7419/26162 | ✓6644 | ✗ 21] ✓ tests/cron/test_cron_script.py (36✓, 13.3s) [ 28.5% | 7463/26162 | ✓6688 | ✗ 21] ✓ tests/gateway/test_extract_local_files.py (44✓, 1.4s) [ 28.5% | 7467/26162 | ✓6692 | ✗ 21] ✓ tests/gateway/test_fallback_eviction.py (4✓, 1.2s) [ 28.7% | 7499/26162 | ✓6724 | ✗ 21] ✓ tests/gateway/test_display_config.py (32✓, 2.8s) [ 28.7% | 7512/26162 | ✓6737 | ✗ 21] ✓ tests/gateway/test_ephemeral_reply.py (13✓, 2.2s) [ 28.7% | 7518/26162 | ✓6743 | ✗ 21] ✓ tests/gateway/test_feishu_bot_auth_bypass.py (6✓, 1.7s) [ 28.8% | 7545/26162 | ✓6764 | ✗ 21] ✓ tests/gateway/test_allowed_channels_widening.py (21✓ 6s, 12.5s) [ 28.9% | 7569/26162 | ✓6788 | ✗ 21] ✓ tests/gateway/test_duplicate_reply_suppression.py (24✓, 2.6s) [ 29.1% | 7619/26162 | ✓6838 | ✗ 21] ✓ tests/gateway/test_bluebubbles.py (50✓, 10.1s) [ 29.1% | 7622/26162 | ✓6841 | ✗ 21] ✓ tests/gateway/test_gateway_command_help.py (3✓, 1.9s) [ 29.2% | 7631/26162 | ✓6850 | ✗ 21] ✓ tests/gateway/test_fresh_reset_skill_injection.py (9✓, 2.2s) [ 29.2% | 7652/26162 | ✓6871 | ✗ 21] ✓ tests/gateway/test_hooks.py (21✓, 1.1s) [ 29.3% | 7664/26162 | ✓6883 | ✗ 21] ✓ tests/gateway/test_api_server_toolset.py (12✓, 12.3s) [ 29.6% | 7747/26162 | ✓6966 | ✗ 21] ✓ tests/agent/test_context_compressor.py (83✓, 38.9s) [ 29.6% | 7752/26162 | ✓6971 | ✗ 21] ✓ tests/gateway/test_goal_verdict_send.py (5✓, 2.4s) [ 29.7% | 7764/26162 | ✓6983 | ✗ 21] ✓ tests/gateway/test_insights_unicode_flags.py (12✓, 1.6s) [ 29.7% | 7770/26162 | ✓6989 | ✗ 21] ✓ tests/gateway/test_interrupt_key_match.py (6✓, 1.2s) [ 29.8% | 7784/26162 | ✓7003 | ✗ 21] ✓ tests/gateway/test_discord_channel_controls.py (14✓, 7.8s) [ 29.9% | 7815/26162 | ✓7034 | ✗ 21] ✓ tests/gateway/test_background_process_notifications.py (31✓, 12.1s) [ 29.9% | 7816/26162 | ✓7035 | ✗ 21] ✓ tests/gateway/test_compression_session_id_persistence.py (1✓, 10.3s) [ 30.0% | 7837/26162 | ✓7056 | ✗ 21] ✓ tests/gateway/test_background_command.py (21✓, 12.3s) [ 30.0% | 7841/26162 | ✓7060 | ✗ 21] ✓ tests/gateway/test_compress_command.py (4✓, 11.0s) [ 30.0% | 7851/26162 | ✓7070 | ✗ 21] ✓ tests/gateway/test_discord_channel_prompts.py (10✓, 8.3s) [ 30.0% | 7852/26162 | ✓7071 | ✗ 21] ✓ tests/gateway/test_load_transcript_db_only.py (1✓, 1.2s) [ 30.0% | 7860/26162 | ✓7079 | ✗ 21] ✓ tests/gateway/test_message_deduplicator.py (8✓, 0.8s) [ 30.1% | 7875/26162 | ✓7094 | ✗ 21] ✓ tests/gateway/test_mirror.py (15✓, 0.8s) [ 30.1% | 7879/26162 | ✓7098 | ✗ 21] ✓ tests/gateway/test_media_extraction.py (4✓, 1.8s) [ 30.3% | 7915/26162 | ✓7134 | ✗ 21] ✓ tests/gateway/test_media_download_retry.py (36✓, 2.1s) [ 30.3% | 7917/26162 | ✓7136 | ✗ 21] ✓ tests/gateway/test_compress_focus.py (2✓, 12.5s) [ 30.3% | 7919/26162 | ✓7138 | ✗ 21] ✓ tests/gateway/test_compress_plugin_engine.py (2✓, 12.5s) [ 30.3% | 7929/26162 | ✓7148 | ✗ 21] ✓ tests/gateway/test_memory_monitor.py (10✓, 2.3s) [ 30.6% | 8002/26162 | ✓7221 | ✗ 21] ✓ tests/gateway/test_line_plugin.py (73✓, 3.4s) [ 30.6% | 8011/26162 | ✓7230 | ✗ 21] ✓ tests/gateway/test_model_switch_persistence.py (9✓, 2.1s) [ 30.8% | 8055/26162 | ✓7274 | ✗ 21] ✓ tests/gateway/test_irc_adapter.py (44✓, 4.4s) [ 30.9% | 8071/26162 | ✓7290 | ✗ 21] ✓ tests/gateway/test_pii_redaction.py (16✓, 1.0s) [ 31.3% | 8199/26162 | ✓7418 | ✗ 21] ✓ tests/cron/test_scheduler.py (128✓, 20.0s) [ 31.4% | 8215/26162 | ✓7434 | ✗ 21] ✓ tests/gateway/test_discord_connect.py (16✓, 11.5s) [ 31.4% | 8218/26162 | ✓7437 | ✗ 21] ✓ tests/gateway/test_pending_drain_race.py (3✓, 2.1s) [ 31.5% | 8251/26162 | ✓7470 | ✗ 21] ✓ tests/gateway/test_discord_reply_mode.py (33✓, 10.9s) [ 31.7% | 8282/26162 | ✓7501 | ✗ 21] ✓ tests/gateway/test_platform_connected_checkers.py (31✓, 1.2s) [ 31.9% | 8337/26162 | ✓7556 | ✗ 21] ✓ tests/gateway/test_agent_cache.py (55✓, 20.1s) [ 32.3% | 8440/26162 | ✓7659 | ✗ 21] ✓ tests/gateway/test_platform_base.py (103✓, 2.4s) [ 32.3% | 8447/26162 | ✓7659 | ✗ 21] ✓ tests/gateway/test_plugin_platform_interface.py (7s, 0.5s) [ 32.3% | 8454/26162 | ✓7666 | ✗ 21] ✓ tests/gateway/test_home_target_env_var.py (7✓, 7.9s) [ 32.6% | 8532/26162 | ✓7744 | ✗ 21] ✓ tests/gateway/test_ntfy_plugin.py (78✓, 3.8s) [ 32.8% | 8575/26162 | ✓7787 | ✗ 21] ✓ tests/gateway/test_pairing.py (43✓, 3.8s) [ 32.8% | 8579/26162 | ✓7791 | ✗ 21] ✓ tests/gateway/test_fast_command.py (4✓, 10.0s) [ 32.8% | 8588/26162 | ✓7800 | ✗ 21] ✓ tests/gateway/test_post_delivery_callback_chaining.py (9✓, 1.0s) [ 32.9% | 8595/26162 | ✓7807 | ✗ 21] ✓ tests/gateway/test_platform_http_client_limits.py (7✓, 2.3s) [ 32.9% | 8599/26162 | ✓7811 | ✗ 21] ✓ tests/gateway/test_reload_skills_command.py (4✓, 1.4s) [ 32.9% | 8602/26162 | ✓7814 | ✗ 21] ✓ tests/gateway/test_goal_status_notice.py (3✓, 10.2s) [ 32.9% | 8606/26162 | ✓7818 | ✗ 21] ✓ tests/gateway/test_keep_typing_timeout.py (4✓, 8.4s) [ 32.9% | 8611/26162 | ✓7823 | ✗ 21] ✓ tests/gateway/test_pre_gateway_dispatch.py (5✓, 2.1s) [ 32.9% | 8616/26162 | ✓7828 | ✗ 21] ✓ tests/gateway/test_reload_skills_discord_resync.py (5✓, 1.6s) [ 33.0% | 8621/26162 | ✓7833 | ✗ 21] ✓ tests/gateway/test_pending_drain_no_recursion.py (5✓, 5.9s) [ 33.2% | 8681/26162 | ✓7893 | ✗ 21] ✓ tests/gateway/test_email.py (60✓, 12.7s) [ 33.2% | 8682/26162 | ✓7894 | ✗ 21] ✓ tests/gateway/test_goal_max_turns_config.py (1✓, 11.8s) [ 33.4% | 8730/26162 | ✓7942 | ✗ 21] ✓ tests/gateway/test_config.py (48✓, 18.6s) [ 33.5% | 8753/26162 | ✓7965 | ✗ 21] ✓ tests/gateway/test_msgraph_webhook.py (23✓, 9.1s) [ 33.6% | 8786/26162 | ✓7998 | ✗ 21] ✓ tests/gateway/test_discord_slash_commands.py (33✓, 15.5s) [ 33.8% | 8831/26162 | ✓8043 | ✗ 21] ✓ tests/gateway/test_homeassistant.py (45✓, 12.7s) [ 33.8% | 8837/26162 | ✓8049 | ✗ 21] ✓ tests/gateway/test_kanban_notifier.py (6✓, 11.7s) [ 33.8% | 8838/26162 | ✓8050 | ✗ 21] ✓ tests/gateway/test_model_command_custom_providers.py (1✓, 10.7s) [ 33.9% | 8881/26162 | ✓8093 | ✗ 21] ✓ tests/gateway/test_mattermost.py (43✓, 11.6s) [ 34.0% | 8887/26162 | ✓8099 | ✗ 21] ✓ tests/gateway/test_pending_event_none.py (6✓, 8.8s) [ 34.0% | 8895/26162 | ✓8107 | ✗ 21] ✓ tests/gateway/test_internal_event_bypass_pairing.py (8✓, 13.4s) [ 34.1% | 8909/26162 | ✓8121 | ✗ 21] ✓ tests/gateway/test_resume_command.py (14✓, 4.0s) [ 34.1% | 8923/26162 | ✓8135 | ✗ 21] ✓ tests/gateway/test_loop_exception_handler.py (14✓, 12.2s) [ 34.1% | 8928/26162 | ✓8140 | ✗ 21] ✓ tests/gateway/test_running_agent_session_toggles.py (5✓, 1.6s) [ 34.7% | 9087/26162 | ✓8299 | ✗ 21] ✓ tests/gateway/test_qqbot.py (159✓, 6.8s) [ 34.7% | 9090/26162 | ✓8302 | ✗ 21] ✓ tests/gateway/test_notice_delivery.py (3✓, 11.6s) [ 34.8% | 9115/26162 | ✓8327 | ✗ 21] ✓ tests/gateway/test_runtime_footer.py (25✓, 1.8s) [ 35.4% | 9265/26162 | ✓8477 | ✗ 21] ✓ tests/gateway/test_api_server.py (150✓, 27.4s) [ 36.0% | 9425/26162 | ✓8637 | ✗ 21] ✓ tests/gateway/test_google_chat.py (160✓, 16.4s) [ 36.0% | 9427/26162 | ✓8639 | ✗ 21] ✓ tests/gateway/test_native_image_buffer_isolation.py (2✓, 13.2s) [ 36.1% | 9450/26162 | ✓8662 | ✗ 21] ✓ tests/gateway/test_send_image_file.py (23✓, 2.6s) [ 36.2% | 9469/26162 | ✓8681 | ✗ 21] ✓ tests/gateway/test_send_multiple_images.py (19✓, 2.7s) [ 36.3% | 9504/26162 | ✓8716 | ✗ 21] ✓ tests/gateway/test_send_retry.py (35✓, 2.4s) [ 36.4% | 9520/26162 | ✓8732 | ✗ 21] ✓ tests/gateway/test_replay_entry_fields.py (16✓, 9.1s) [ 36.4% | 9531/26162 | ✓8743 | ✗ 21] ✓ tests/gateway/test_queue_consumption.py (11✓, 9.6s) [ 36.4% | 9536/26162 | ✓8748 | ✗ 21] ✓ tests/gateway/test_session_boundary_security_state.py (5✓, 2.0s) [ 36.5% | 9554/26162 | ✓8766 | ✗ 21] ✓ tests/gateway/test_reasoning_command.py (18✓, 10.5s) [ 36.6% | 9583/26162 | ✓8795 | ✗ 21] ✓ tests/gateway/test_platform_reconnect.py (29✓, 12.3s) [ 36.6% | 9587/26162 | ✓8799 | ✗ 21] ✓ tests/gateway/test_session_list_allowed_sources.py (4✓, 1.9s) [ 36.7% | 9610/26162 | ✓8822 | ✗ 21] ✓ tests/gateway/test_session_hygiene.py (23✓, 2.5s) [ 36.8% | 9627/26162 | ✓8839 | ✗ 21] ✓ tests/gateway/test_restart_drain.py (17✓, 9.9s) [ 36.8% | 9630/26162 | ✓8842 | ✗ 21] ✓ tests/gateway/test_session_model_reset.py (3✓, 1.6s) [ 36.8% | 9635/26162 | ✓8847 | ✗ 21] ✓ tests/gateway/test_reply_to_injection.py (5✓, 10.5s) [ 36.9% | 9657/26162 | ✓8869 | ✗ 21] ✓ tests/gateway/test_proxy_mode.py (22✓, 11.6s) [ 37.0% | 9682/26162 | ✓8894 | ✗ 21] ✓ tests/gateway/test_restart_notification.py (25✓, 10.1s) [ 37.0% | 9684/26162 | ✓8896 | ✗ 21] ✓ tests/gateway/test_retry_replacement.py (2✓, 9.7s) [ 37.1% | 9694/26162 | ✓8906 | ✗ 21] ✓ tests/gateway/test_session_state_cleanup.py (10✓, 1.3s) [ 37.1% | 9710/26162 | ✓8922 | ✗ 21] ✓ tests/gateway/test_session_reset_notify.py (16✓, 1.9s) [ 37.3% | 9760/26162 | ✓8972 | ✗ 21] ✓ tests/gateway/test_platform_registry.py (50✓, 13.9s) [ 37.6% | 9834/26162 | ✓9046 | ✗ 21] ✓ tests/gateway/test_session.py (74✓, 5.3s) [ 37.6% | 9836/26162 | ✓9048 | ✗ 21] ✓ tests/gateway/test_run_progress_interrupt.py (2✓, 9.9s) [ 37.7% | 9854/26162 | ✓9066 | ✗ 21] ✓ tests/gateway/test_session_store_prune.py (18✓, 1.7s) [ 37.7% | 9864/26162 | ✓9076 | ✗ 21] ✓ tests/gateway/test_session_dm_thread_seeding.py (10✓, 4.5s) [ 37.7% | 9872/26162 | ✓9084 | ✗ 21] ✓ tests/gateway/test_gateway_inactivity_timeout.py (8✓, 22.0s) [ 37.7% | 9874/26162 | ✓9086 | ✗ 21] ✓ tests/gateway/test_retry_response.py (2✓, 10.9s) [ 37.8% | 9892/26162 | ✓9104 | ✗ 21] ✓ tests/gateway/test_signal_rate_limit.py (18✓, 1.3s) [ 37.8% | 9901/26162 | ✓9113 | ✗ 21] ✓ tests/gateway/test_restart_redelivery_dedup.py (9✓, 11.7s) [ 38.0% | 9951/26162 | ✓9163 | ✗ 21] ✓ tests/gateway/test_signal_format.py (50✓, 1.6s) [ 38.1% | 9972/26162 | ✓9184 | ✗ 21] ✓ tests/gateway/test_slash_access.py (21✓, 1.3s) [ 38.2% | 9999/26162 | ✓9211 | ✗ 21] ✓ tests/gateway/test_simplex_plugin.py (27✓, 1.7s) [ 38.2% | 10006/26162 | ✓9218 | ✗ 21] ✓ tests/gateway/test_shutdown_memory_provider_messages.py (7✓, 2.6s) [ 38.3% | 10009/26162 | ✓9221 | ✗ 21] ✓ tests/gateway/test_ssl_certs.py (3✓, 1.3s) [ 38.3% | 10014/26162 | ✓9226 | ✗ 21] ✓ tests/gateway/test_run_cleanup_progress.py (5✓, 11.4s) [ 38.3% | 10020/26162 | ✓9232 | ✗ 21] ✓ tests/gateway/test_sse_agent_cancel.py (6✓, 1.7s) [ 38.3% | 10025/26162 | ✓9237 | ✗ 21] ✓ tests/gateway/test_steer_command.py (5✓, 1.1s) [ 38.4% | 10055/26162 | ✓9267 | ✗ 21] ✓ tests/gateway/test_shutdown_forensics.py (30✓, 3.6s) [ 38.6% | 10105/26162 | ✓9317 | ✗ 21] ✓ tests/gateway/test_status.py (50✓, 1.9s) [ 38.6% | 10109/26162 | ✓9321 | ✗ 21] ✓ tests/gateway/test_step_callback_compat.py (4✓, 1.5s) [ 38.7% | 10115/26162 | ✓9327 | ✗ 21] ✓ tests/gateway/test_session_boundary_hooks.py (6✓, 7.5s) [ 38.7% | 10132/26162 | ✓9344 | ✗ 21] ✓ tests/gateway/test_sticker_cache.py (17✓, 1.5s) [ 38.8% | 10139/26162 | ✓9351 | ✗ 21] ✓ tests/gateway/test_runtime_config_env_expansion.py (7✓, 10.3s) [ 38.8% | 10141/26162 | ✓9353 | ✗ 21] ✓ tests/gateway/test_runtime_env_reload_config_authority.py (2✓, 10.0s) [ 38.8% | 10155/26162 | ✓9367 | ✗ 21] ✓ tests/gateway/test_status_command.py (14✓, 2.4s) [ 38.9% | 10167/26162 | ✓9379 | ✗ 21] ✓ tests/gateway/test_stream_consumer_draft.py (12✓, 1.8s) [ 38.9% | 10182/26162 | ✓9393 | ✗ 21] ✓ tests/gateway/test_stream_consumer_fresh_final.py (14✓ 1s, 2.0s) [ 39.0% | 10194/26162 | ✓9405 | ✗ 21] ✓ tests/gateway/test_session_env.py (12✓, 8.1s) [ 39.0% | 10199/26162 | ✓9410 | ✗ 21] ✓ tests/gateway/test_unavailable_skill_hint.py (5✓, 1.1s) [ 39.0% | 10203/26162 | ✓9414 | ✗ 21] ✓ tests/gateway/test_safe_adapter_disconnect.py (4✓, 10.9s) [ 39.0% | 10205/26162 | ✓9416 | ✗ 21] ✓ tests/gateway/test_runner_fatal_adapter.py (2✓, 12.7s) [ 39.2% | 10251/26162 | ✓9462 | ✗ 21] ✓ tests/gateway/test_teams.py (46✓, 2.6s) [ 39.3% | 10281/26162 | ✓9492 | ✗ 21] ✓ tests/gateway/test_unauthorized_dm_behavior.py (30✓, 1.8s) [ 39.3% | 10289/26162 | ✓9500 | ✗ 21] ✓ tests/gateway/test_usage_command.py (8✓, 1.5s) [ 39.4% | 10317/26162 | ✓9528 | ✗ 21] ✓ tests/gateway/test_update_command.py (28✓, 3.0s) [ 39.4% | 10320/26162 | ✓9531 | ✗ 21] ✓ tests/gateway/test_vision_memory_leak.py (3✓, 2.2s) [ 39.5% | 10329/26162 | ✓9540 | ✗ 21] ✓ tests/gateway/test_gateway_shutdown.py (9✓, 28.1s) [ 39.5% | 10343/26162 | ✓9554 | ✗ 21] ✓ tests/gateway/test_title_command.py (14✓, 4.3s) [ 39.5% | 10345/26162 | ✓9556 | ✗ 21] ✓ tests/gateway/test_shared_group_sender_prefix.py (2✓, 8.2s) [ 39.6% | 10354/26162 | ✓9565 | ✗ 21] ✓ tests/gateway/test_session_info.py (9✓, 10.7s) [ 39.6% | 10365/26162 | ✓9576 | ✗ 21] ✓ tests/gateway/test_weak_credential_guard.py (11✓, 2.5s) [ 39.6% | 10367/26162 | ✓9578 | ✗ 21] ✓ tests/gateway/test_send_voice_reply_notify.py (2✓, 13.6s) [ 39.7% | 10380/26162 | ✓9591 | ✗ 21] ✓ tests/gateway/test_session_split_brain_11016.py (13✓, 9.5s) [ 39.9% | 10445/26162 | ✓9656 | ✗ 21] ✓ tests/gateway/test_webhook_adapter.py (65✓, 2.5s) [ 39.9% | 10449/26162 | ✓9660 | ✗ 21] ✓ tests/gateway/test_session_model_override_routing.py (4✓, 11.2s) [ 40.0% | 10462/26162 | ✓9673 | ✗ 21] ✓ tests/gateway/test_webhook_dynamic_routes.py (13✓, 2.0s) [ 40.0% | 10474/26162 | ✓9685 | ✗ 21] ✓ tests/gateway/test_wecom_callback.py (12✓, 1.5s) [ 40.1% | 10488/26162 | ✓9699 | ✗ 21] ✓ tests/gateway/test_webhook_deliver_only.py (14✓, 2.2s) [ 40.1% | 10492/26162 | ✓9703 | ✗ 21] ✓ tests/gateway/test_webhook_integration.py (4✓, 1.9s) [ 40.1% | 10499/26162 | ✓9710 | ✗ 21] ✓ tests/gateway/test_stream_consumer_thread_routing.py (7✓, 7.0s) [ 40.1% | 10502/26162 | ✓9713 | ✗ 21] ✓ tests/gateway/test_webhook_signature_rate_limit.py (3✓, 1.9s) [ 40.5% | 10591/26162 | ✓9797 | ✗ 21] ✓ tests/gateway/test_stream_consumer.py (84✓ 5s, 7.4s) [ 40.6% | 10609/26162 | ✓9815 | ✗ 21] ✓ tests/gateway/test_slash_access_dispatch.py (18✓, 9.1s) [ 40.6% | 10617/26162 | ✓9823 | ✗ 21] ✓ tests/gateway/test_shutdown_cache_cleanup.py (8✓, 10.7s) [ 40.7% | 10661/26162 | ✓9867 | ✗ 21] ✓ tests/gateway/test_wecom.py (44✓, 2.6s) [ 40.8% | 10663/26162 | ✓9869 | ✗ 21] ✓ tests/hermes_cli/test_anthropic_oauth_flow.py (2✓, 1.1s) [ 40.8% | 10666/26162 | ✓9872 | ✗ 21] ✓ tests/hermes_cli/test_anthropic_provider_persistence.py (3✓, 1.0s) [ 40.8% | 10675/26162 | ✓9881 | ✗ 21] ✓ tests/hermes_cli/test_ai_gateway_models.py (9✓, 1.4s) [ 40.8% | 10681/26162 | ✓9887 | ✗ 21] ✓ tests/gateway/test_ws_auth_retry.py (6✓, 1.6s) [ 40.9% | 10690/26162 | ✓9896 | ✗ 21] ✓ tests/gateway/test_runner_startup_failures.py (9✓, 17.9s) [ 40.9% | 10693/26162 | ✓9899 | ✗ 21] ✓ tests/hermes_cli/test_apply_model_switch_result_context.py (3✓, 1.5s) [ 40.9% | 10697/26162 | ✓9903 | ✗ 21] ✓ tests/hermes_cli/test_apply_profile_override.py (4✓, 1.2s) [ 40.9% | 10700/26162 | ✓9906 | ✗ 21] ✓ tests/hermes_cli/test_atomic_yaml_write.py (3✓, 0.8s) [ 41.3% | 10809/26162 | ✓10015 | ✗ 21] ✓ tests/gateway/test_signal.py (109✓, 11.6s) [ 41.4% | 10836/26162 | ✓10042 | ✗ 21] ✓ tests/gateway/test_whatsapp_connect.py (27✓, 3.2s) [ 41.4% | 10844/26162 | ✓10050 | ✗ 21] ✓ tests/gateway/test_transcript_offset.py (8✓, 8.3s) [ 41.5% | 10849/26162 | ✓10055 | ✗ 21] ✓ tests/hermes_cli/test_at_context_completion_filter.py (5✓, 1.3s) [ 41.6% | 10888/26162 | ✓10094 | ✗ 21] ✓ tests/gateway/test_sms.py (39✓, 10.8s) [ 41.7% | 10902/26162 | ✓10108 | ✗ 21] ✓ tests/hermes_cli/test_atomic_json_write.py (14✓, 1.4s) [ 41.7% | 10918/26162 | ✓10124 | ✗ 21] ✓ tests/hermes_cli/test_auth_codex_provider.py (16✓, 1.2s) [ 41.8% | 10925/26162 | ✓10131 | ✗ 21] ✓ tests/gateway/test_teams_pipeline_runtime_wiring.py (7✓, 9.1s) [ 41.8% | 10939/26162 | ✓10145 | ✗ 21] ✓ tests/hermes_cli/test_auth_loopback_ssh_hint.py (14✓, 1.5s) [ 41.9% | 10966/26162 | ✓10172 | ✗ 21] ✓ tests/hermes_cli/test_arcee_provider.py (27✓, 2.5s) [ 42.0% | 10977/26162 | ✓10183 | ✗ 21] ✓ tests/hermes_cli/test_auth_profile_fallback.py (11✓, 1.2s) [ 42.1% | 11003/26162 | ✓10209 | ✗ 21] ✓ tests/gateway/test_whatsapp_formatting.py (26✓, 4.3s) [ 42.1% | 11005/26162 | ✓10211 | ✗ 21] ✓ tests/hermes_cli/test_auth_usable_secret.py (2✓, 1.0s) [ 42.1% | 11009/26162 | ✓10215 | ✗ 21] ✓ tests/hermes_cli/test_auth_toctou_file_modes.py (4✓, 1.3s) [ 42.2% | 11034/26162 | ✓10240 | ✗ 21] ✓ tests/hermes_cli/test_auth_manual_paste.py (25✓, 1.9s) [ 42.2% | 11040/26162 | ✓10246 | ✗ 21] ✓ tests/hermes_cli/test_auth_provider_gate.py (6✓, 1.6s) [ 42.2% | 11051/26162 | ✓10257 | ✗ 21] ✓ tests/gateway/test_unknown_command.py (11✓, 9.5s) [ 42.3% | 11059/26162 | ✓10265 | ✗ 21] ✓ tests/gateway/test_verbose_command.py (8✓, 8.5s) [ 42.4% | 11080/26162 | ✓10286 | ✗ 21] ✓ tests/gateway/test_update_streaming.py (21✓, 9.3s) [ 42.4% | 11089/26162 | ✓10295 | ✗ 21] ✓ tests/gateway/test_stuck_loop.py (9✓, 11.0s) [ 42.4% | 11098/26162 | ✓10303 | ✗ 21] ✓ tests/hermes_cli/test_auth_ssl_macos.py (8✓ 1s, 2.2s) [ 43.1% | 11279/26162 | ✓10483 | ✗ 22] ✗ tests/gateway/test_voice_command.py (180✓ 1✗, 8.7s) ╔╍ Failed: tests/gateway/test_voice_command.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ║ # Create a fake audio file that TTS would produce ║ fake_audio = tmp_path / "hermes_voice" ║ fake_audio.mkdir() ║ audio_file = fake_audio / "test.mp3" ║ audio_file.write_bytes(b"fake audio") ║ ║ tts_result = json.dumps({ ║ "success": True, ║ "file_path": str(audio_file), ║ }) ║ ║ with patch("gateway.run.asyncio.to_thread", new_callable=AsyncMock, return_value=tts_result), \ ║ patch("hermes_agent_tts.tts_tool._strip_markdown_for_tts", return_value="hello"), \ ║ patch("os.path.isfile", return_value=True), \ ║ patch("os.makedirs"): ║ await runner._send_voice_reply(event, "Hello world") ║ ║ # File should be cleaned up despite exception ║ > assert not audio_file.exists(), \ ║ "Temp audio file must be cleaned up even when send_voice raises" ║ E AssertionError: Temp audio file must be cleaned up even when send_voice raises ║ E assert not True ║ E + where True = exists() ║ E + where exists = PosixPath('/tmp/pytest-of-ethie/pytest-42460/test_files_cleaned_on_send_exc0/hermes_voice/test.mp3').exists ║ ║ tests/gateway/test_voice_command.py:2121: AssertionError ║ =========================== short test summary info ============================ ║ FAILED tests/gateway/test_voice_command.py::TestSendVoiceReplyCleanup::test_files_cleaned_on_send_exception ║ ======================== 1 failed, 180 passed in 7.92s ========================= ║ ║ Repro: python -m pytest tests/gateway/test_voice_command.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 43.2% | 11311/26162 | ✓10515 | ✗ 22] ✓ tests/hermes_cli/test_auth_qwen_provider.py (32✓, 2.5s) [ 43.3% | 11330/26162 | ✓10534 | ✗ 22] ✓ tests/hermes_cli/test_azure_detect.py (19✓, 1.8s) [ 43.3% | 11334/26162 | ✓10538 | ✗ 22] ✓ tests/hermes_cli/test_banner_pip_update.py (4✓, 1.4s) [ 43.4% | 11342/26162 | ✓10546 | ✗ 22] ✓ tests/hermes_cli/test_bundles.py (8✓, 1.3s) [ 43.4% | 11352/26162 | ✓10556 | ✗ 22] ✓ tests/gateway/test_voice_mode_platform_isolation.py (10✓, 9.0s) [ 43.5% | 11369/26162 | ✓10573 | ✗ 22] ✓ tests/gateway/test_session_race_guard.py (17✓, 16.6s) [ 43.5% | 11374/26162 | ✓10578 | ✗ 22] ✓ tests/hermes_cli/test_banner_skills.py (5✓, 1.4s) [ 43.5% | 11378/26162 | ✓10582 | ✗ 22] ✓ tests/hermes_cli/test_banner_git_state.py (4✓, 1.7s) [ 43.5% | 11385/26162 | ✓10589 | ✗ 22] ✓ tests/gateway/test_tts_media_routing.py (7✓, 11.3s) [ 43.5% | 11391/26162 | ✓10594 | ✗ 23] ✗ tests/gateway/test_stt_config.py (5✓ 1✗, 12.3s) ╔╍ Failed: tests/gateway/test_stt_config.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ }, ║ ): ║ result = await runner._prepare_inbound_message_text( ║ event=event, ║ source=source, ║ history=[], ║ ) ║ ║ assert result is not None ║ > assert "queued voice transcript" in result ║ E AssertionError: assert 'queued voice transcript' in '[The user sent a voice message but I had trouble transcribing it~ (Audio file not found: /tmp/queued-voice.ogg)]' ║ ║ tests/gateway/test_stt_config.py:141: AssertionError ║ =============================== warnings summary =============================== ║ tests/gateway/test_stt_config.py::test_load_gateway_config_bridges_stt_enabled_from_config_yaml ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). ║ _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) ║ ║ tests/gateway/test_stt_config.py::test_load_gateway_config_bridges_stt_enabled_from_config_yaml ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated ║ def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): ║ ║ tests/gateway/test_stt_config.py::test_load_gateway_config_bridges_stt_enabled_from_config_yaml ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions ║ warnings.warn( # deprecated in 14.0 - 2024-11-09 ║ ║ -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ║ =========================== short test summary info ============================ ║ FAILED tests/gateway/test_stt_config.py::test_prepare_inbound_message_text_transcribes_queued_voice_event ║ =================== 1 failed, 5 passed, 3 warnings in 7.56s ==================== ║ ║ Repro: python -m pytest tests/gateway/test_stt_config.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 43.6% | 11395/26162 | ✓10598 | ✗ 23] ✓ tests/hermes_cli/test_clear_stale_base_url.py (4✓, 1.3s) [ 43.6% | 11397/26162 | ✓10600 | ✗ 23] ✓ tests/hermes_cli/test_cli_output.py (2✓, 1.3s) [ 43.6% | 11414/26162 | ✓10617 | ✗ 23] ✓ tests/hermes_cli/test_coalesce_session_args.py (17✓, 1.3s) [ 43.8% | 11458/26162 | ✓10661 | ✗ 23] ✓ tests/hermes_cli/test_auth_commands.py (44✓, 4.7s) [ 44.0% | 11506/26162 | ✓10709 | ✗ 23] ✓ tests/hermes_cli/test_claw.py (48✓, 2.3s) [ 44.1% | 11536/26162 | ✓10739 | ✗ 23] ✓ tests/hermes_cli/test_codex_runtime_switch.py (30✓, 1.7s) [ 44.2% | 11557/26162 | ✓10760 | ✗ 23] ✓ tests/hermes_cli/test_config_validation.py (21✓, 1.2s) [ 44.4% | 11624/26162 | ✓10827 | ✗ 23] ✓ tests/hermes_cli/test_codex_runtime_plugin_migration.py (67✓, 2.1s) [ 44.5% | 11638/26162 | ✓10841 | ✗ 23] ✓ tests/hermes_cli/test_container_aware_cli.py (14✓, 1.6s) [ 44.5% | 11644/26162 | ✓10847 | ✗ 23] ✓ tests/hermes_cli/test_config_env_refs.py (6✓, 1.7s) [ 44.5% | 11653/26162 | ✓10856 | ✗ 23] ✓ tests/hermes_cli/test_copilot_catalog_oauth_fallback.py (9✓, 1.1s) [ 44.7% | 11684/26162 | ✓10885 | ✗ 23] ✓ tests/hermes_cli/test_completion.py (29✓ 2s, 2.3s) [ 44.7% | 11685/26162 | ✓10886 | ✗ 23] ✓ tests/hermes_cli/test_config_drift.py (1✓, 2.3s) [ 44.9% | 11743/26162 | ✓10944 | ✗ 23] ✓ tests/hermes_cli/test_auth_nous_provider.py (58✓, 5.5s) [ 45.0% | 11762/26162 | ✓10963 | ✗ 23] ✓ tests/hermes_cli/test_codex_models.py (19✓, 2.7s) [ 45.0% | 11775/26162 | ✓10976 | ✗ 23] ✓ tests/hermes_cli/test_config_env_expansion.py (13✓, 2.4s) [ 45.1% | 11801/26162 | ✓11002 | ✗ 23] ✓ tests/hermes_cli/test_container_boot.py (26✓, 2.3s) [ 45.2% | 11813/26162 | ✓11014 | ✗ 23] ✓ tests/hermes_cli/test_copilot_token_exchange.py (12✓, 1.3s) [ 45.2% | 11824/26162 | ✓11025 | ✗ 23] ✓ tests/hermes_cli/test_copilot_context.py (11✓, 1.8s) [ 45.3% | 11841/26162 | ✓11042 | ✗ 23] ✓ tests/hermes_cli/test_argparse_flag_propagation.py (17✓, 7.4s) [ 45.5% | 11906/26162 | ✓11107 | ✗ 23] ✓ tests/gateway/test_restart_resume_pending.py (65✓, 27.6s) [ 45.5% | 11912/26162 | ✓11113 | ✗ 23] ✓ tests/hermes_cli/test_curses_color_compat.py (6✓, 0.9s) [ 45.6% | 11922/26162 | ✓11123 | ✗ 23] ✓ tests/hermes_cli/test_dashboard_lifecycle_flags.py (10✓, 0.7s) [ 45.6% | 11923/26162 | ✓11124 | ✗ 23] ✓ tests/gateway/test_yolo_command.py (1✓, 8.7s) [ 45.6% | 11927/26162 | ✓11127 | ✗ 24] ✗ tests/hermes_cli/test_codex_cli_model_picker.py (3✓ 1✗, 4.0s) ╔╍ Failed: tests/hermes_cli/test_codex_cli_model_picker.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ collected 4 items ║ ║ tests/hermes_cli/test_codex_cli_model_picker.py ..F. [100%] ║ ║ =================================== FAILURES =================================== ║ ________________ test_claude_code_file_detected_by_model_picker ________________ ║ ║ claude_code_only_env = PosixPath('/tmp/pytest-of-ethie/pytest-42518/test_claude_code_file_detected0/.hermes') ║ ║ def test_claude_code_file_detected_by_model_picker(claude_code_only_env): ║ """anthropic should appear when credentials only exist in ~/.claude/.credentials.json.""" ║ from hermes_cli.model_switch import list_authenticated_providers ║ ║ providers = list_authenticated_providers( ║ current_provider="anthropic", ║ max_models=10, ║ ) ║ slugs = [p["slug"] for p in providers] ║ > assert "anthropic" in slugs, ( ║ f"anthropic not found in /model picker providers: {slugs}" ║ ) ║ E AssertionError: anthropic not found in /model picker providers: [] ║ E assert 'anthropic' in [] ║ ║ tests/hermes_cli/test_codex_cli_model_picker.py:158: AssertionError ║ ------------------------------ Captured log call ------------------------------- ║ INFO hermes_cli.model_catalog:model_catalog.py:129 model catalog fetch failed (https://hermes-agent.nousresearch.com/docs/api/model-catalog.json): HTTP Error 403: Forbidden ║ =========================== short test summary info ============================ ║ FAILED tests/hermes_cli/test_codex_cli_model_picker.py::test_claude_code_file_detected_by_model_picker ║ ========================= 1 failed, 3 passed in 2.68s ========================== ║ ║ Repro: python -m pytest tests/hermes_cli/test_codex_cli_model_picker.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 45.6% | 11930/26162 | ✓11130 | ✗ 24] ✓ tests/hermes_cli/test_cron.py (3✓, 1.6s) [ 45.9% | 12012/26162 | ✓11212 | ✗ 24] ✓ tests/hermes_cli/test_auth_xai_oauth_provider.py (82✓, 6.0s) [ 45.9% | 12016/26162 | ✓11216 | ✗ 24] ✓ tests/hermes_cli/test_curator_run.py (4✓, 1.3s) [ 46.0% | 12022/26162 | ✓11222 | ✗ 24] ✓ tests/hermes_cli/test_curator_recent_run_notice.py (6✓, 1.6s) [ 46.0% | 12024/26162 | ✓11224 | ✗ 24] ✓ tests/hermes_cli/test_copilot_in_model_list.py (2✓, 2.2s) [ 46.0% | 12025/26162 | ✓11225 | ✗ 24] ✓ tests/hermes_cli/test_dashboard_browser_safe_imports.py (1✓, 1.2s) [ 46.1% | 12050/26162 | ✓11250 | ✗ 24] ✓ tests/hermes_cli/test_copilot_auth.py (25✓, 3.0s) [ 46.1% | 12063/26162 | ✓11263 | ✗ 24] ✓ tests/hermes_cli/test_curator_archive_prune.py (13✓, 1.8s) [ 46.2% | 12086/26162 | ✓11286 | ✗ 24] ✓ tests/gateway/test_text_batching.py (23✓, 15.2s) [ 46.2% | 12091/26162 | ✓11291 | ✗ 24] ✓ tests/hermes_cli/test_curator_status.py (5✓, 1.6s) [ 46.2% | 12092/26162 | ✓11292 | ✗ 24] ✓ tests/hermes_cli/test_dashboard_profiles_nav_label.py (1✓, 1.1s) [ 46.2% | 12097/26162 | ✓11297 | ✗ 24] ✓ tests/hermes_cli/test_destructive_slash_confirm_gate.py (5✓, 0.9s) [ 46.3% | 12125/26162 | ✓11325 | ✗ 24] ✓ tests/gateway/test_run_progress_topics.py (28✓, 26.0s) [ 46.4% | 12137/26162 | ✓11337 | ✗ 24] ✓ tests/hermes_cli/test_custom_provider_context_length.py (12✓, 1.7s) [ 46.6% | 12191/26162 | ✓11391 | ✗ 24] ✓ tests/gateway/test_weixin.py (54✓, 10.7s) [ 46.8% | 12247/26162 | ✓11447 | ✗ 24] ✓ tests/hermes_cli/test_config.py (56✓, 4.3s) [ 46.8% | 12252/26162 | ✓11452 | ✗ 24] ✓ tests/hermes_cli/test_deprecated_cwd_warning.py (5✓, 1.3s) [ 46.9% | 12260/26162 | ✓11460 | ✗ 24] ✓ tests/gateway/test_whatsapp_reply_prefix.py (8✓, 10.1s) [ 46.9% | 12262/26162 | ✓11462 | ✗ 24] ✓ tests/hermes_cli/test_doctor_dedicated_provider_skip.py (2✓, 1.1s) [ 47.0% | 12288/26162 | ✓11488 | ✗ 24] ✓ tests/gateway/test_whatsapp_group_gating.py (26✓, 10.3s) [ 47.0% | 12302/26162 | ✓11502 | ✗ 24] ✓ tests/hermes_cli/test_dep_ensure.py (14✓, 1.8s) [ 47.0% | 12308/26162 | ✓11508 | ✗ 24] ✓ tests/hermes_cli/test_env_load_cache.py (6✓, 1.2s) [ 47.1% | 12314/26162 | ✓11514 | ✗ 24] ✓ tests/hermes_cli/test_env_loader.py (6✓, 1.2s) [ 47.1% | 12317/26162 | ✓11517 | ✗ 24] ✓ tests/hermes_cli/test_env_sanitize_on_load.py (3✓, 1.3s) [ 47.1% | 12332/26162 | ✓11532 | ✗ 24] ✓ tests/hermes_cli/test_dingtalk_auth.py (15✓, 1.7s) [ 47.2% | 12336/26162 | ✓11536 | ✗ 24] ✓ tests/hermes_cli/test_discord_skill_clamp_warning.py (4✓, 1.7s) [ 47.2% | 12342/26162 | ✓11542 | ✗ 24] ✓ tests/hermes_cli/test_gateway_linger.py (6✓, 1.3s) [ 47.2% | 12346/26162 | ✓11546 | ✗ 24] ✓ tests/hermes_cli/test_gateway_proc_fallback.py (4✓, 1.3s) [ 47.3% | 12362/26162 | ✓11562 | ✗ 24] ✓ tests/hermes_cli/test_detect_api_mode_for_url.py (16✓, 2.1s) [ 47.3% | 12363/26162 | ✓11563 | ✗ 24] ✓ tests/hermes_cli/test_gateway_runtime_health.py (1✓, 1.4s) [ 47.3% | 12366/26162 | ✓11566 | ✗ 24] ✓ tests/hermes_cli/test_gateway_service_paths.py (3✓, 1.3s) [ 47.5% | 12434/26162 | ✓11634 | ✗ 24] ✓ tests/hermes_cli/test_debug.py (68✓, 2.8s) [ 47.6% | 12441/26162 | ✓11641 | ✗ 24] ✓ tests/hermes_cli/test_determine_api_mode_hostname.py (7✓, 2.6s) [ 47.7% | 12474/26162 | ✓11674 | ✗ 24] ✓ tests/hermes_cli/test_gateway.py (33✓, 2.2s) [ 47.7% | 12489/26162 | ✓11689 | ✗ 24] ✓ tests/hermes_cli/test_gateway_s6_dispatch.py (15✓, 2.5s) [ 47.8% | 12510/26162 | ✓11710 | ✗ 24] ✓ tests/hermes_cli/test_gateway_windows.py (21✓, 2.2s) [ 47.9% | 12524/26162 | ✓11724 | ✗ 24] ✓ tests/hermes_cli/test_hooks_cli.py (14✓, 1.8s) [ 47.9% | 12543/26162 | ✓11743 | ✗ 24] ✓ tests/hermes_cli/test_gateway_wsl.py (19✓, 2.2s) [ 48.0% | 12555/26162 | ✓11755 | ✗ 24] ✓ tests/hermes_cli/test_install_cua_driver.py (12✓, 1.9s) [ 48.0% | 12556/26162 | ✓11756 | ✗ 24] ✓ tests/hermes_cli/test_kanban_db_init.py (1✓, 1.2s) [ 48.0% | 12567/26162 | ✓11767 | ✗ 24] ✓ tests/hermes_cli/test_ignore_user_config_flags.py (11✓, 2.5s) [ 48.1% | 12571/26162 | ✓11771 | ✗ 24] ✓ tests/hermes_cli/test_gemini_free_tier_setup_block.py (4✓, 3.0s) [ 48.1% | 12581/26162 | ✓11781 | ✗ 24] ✓ tests/hermes_cli/test_doctor_command_install.py (10✓, 4.2s) [ 48.1% | 12587/26162 | ✓11787 | ✗ 24] ✓ tests/hermes_cli/test_kanban_blocked_sticky.py (6✓, 2.5s) [ 48.2% | 12605/26162 | ✓11805 | ✗ 24] ✓ tests/hermes_cli/test_inventory.py (18✓, 2.9s) [ 48.2% | 12606/26162 | ✓11806 | ✗ 24] ✓ tests/hermes_cli/test_launcher.py (1✓, 0.7s) [ 48.4% | 12652/26162 | ✓11852 | ✗ 24] ✓ tests/hermes_cli/test_kanban_diagnostics.py (46✓, 1.9s) [ 48.5% | 12684/26162 | ✓11884 | ✗ 24] ✓ tests/hermes_cli/test_fallback_cmd.py (32✓, 4.9s) [ 48.5% | 12693/26162 | ✓11893 | ✗ 24] ✓ tests/hermes_cli/test_kanban_decompose.py (9✓, 2.7s) [ 48.5% | 12696/26162 | ✓11896 | ✗ 24] ✓ tests/hermes_cli/test_kanban_swarm.py (3✓, 1.2s) [ 49.2% | 12869/26162 | ✓12069 | ✗ 24] ✓ tests/hermes_cli/test_api_key_providers.py (173✓, 13.9s) [ 49.3% | 12890/26162 | ✓12090 | ✗ 24] ✓ tests/hermes_cli/test_aux_config.py (21✓, 11.3s) [ 49.3% | 12898/26162 | ✓12098 | ✗ 24] ✓ tests/hermes_cli/test_kanban_decompose_db.py (8✓, 2.5s) [ 49.5% | 12948/26162 | ✓12148 | ✗ 24] ✓ tests/hermes_cli/test_goals.py (50✓, 4.5s) [ 49.5% | 12951/26162 | ✓12151 | ✗ 24] ✓ tests/hermes_cli/test_mcp_add_command_dest.py (3✓, 1.0s) [ 49.5% | 12961/26162 | ✓12161 | ✗ 24] ✓ tests/hermes_cli/test_list_picker_providers.py (10✓, 1.7s) [ 49.7% | 12998/26162 | ✓12198 | ✗ 24] ✓ tests/hermes_cli/test_logs.py (37✓, 1.6s) [ 49.7% | 13003/26162 | ✓12203 | ✗ 24] ✓ tests/hermes_cli/test_managed_installs.py (5✓, 1.5s) [ 49.7% | 13013/26162 | ✓12213 | ✗ 24] ✓ tests/hermes_cli/test_kanban_specify_db.py (10✓, 2.7s) [ 49.8% | 13018/26162 | ✓12218 | ✗ 24] ✓ tests/hermes_cli/test_mcp_reload_confirm_gate.py (5✓, 1.3s) [ 49.8% | 13027/26162 | ✓12227 | ✗ 24] ✓ tests/hermes_cli/test_memory_reset.py (9✓, 1.4s) [ 49.9% | 13044/26162 | ✓12244 | ✗ 24] ✓ tests/hermes_cli/test_migrate_xai.py (17✓, 1.5s) [ 49.9% | 13050/26162 | ✓12250 | ✗ 24] ✓ tests/hermes_cli/test_banner.py (6✓, 12.2s) [ 49.9% | 13066/26162 | ✓12266 | ✗ 24] ✓ tests/hermes_cli/test_kanban_promote.py (16✓, 3.7s) [ 50.0% | 13079/26162 | ✓12279 | ✗ 24] ✓ tests/hermes_cli/test_custom_provider_model_switch.py (13✓, 8.2s) [ 50.0% | 13083/26162 | ✓12283 | ✗ 24] ✓ tests/hermes_cli/test_chat_skills_flag.py (4✓, 12.2s) [ 50.0% | 13090/26162 | ✓12290 | ✗ 24] ✓ tests/hermes_cli/test_model_switch_context_display.py (7✓, 1.5s) [ 50.1% | 13110/26162 | ✓12310 | ✗ 24] ✓ tests/hermes_cli/test_kanban_specify.py (20✓, 4.0s) [ 50.2% | 13122/26162 | ✓12322 | ✗ 24] ✓ tests/hermes_cli/test_kanban_notify.py (12✓, 4.5s) [ 50.7% | 13253/26162 | ✓12453 | ✗ 24] ✓ tests/hermes_cli/test_gateway_service.py (131✓, 6.9s) [ 50.7% | 13267/26162 | ✓12467 | ✗ 24] ✓ tests/hermes_cli/test_mcp_tools_config.py (14✓, 2.7s) [ 50.8% | 13290/26162 | ✓12490 | ✗ 24] ✓ tests/hermes_cli/test_model_catalog.py (23✓, 2.6s) [ 50.8% | 13302/26162 | ✓12502 | ✗ 24] ✓ tests/hermes_cli/test_non_ascii_credential.py (12✓, 1.6s) [ 50.9% | 13310/26162 | ✓12510 | ✗ 24] ✓ tests/hermes_cli/test_model_picker_viewport.py (8✓, 2.7s) [ 51.0% | 13341/26162 | ✓12541 | ✗ 24] ✓ tests/hermes_cli/test_nous_hermes_non_agentic.py (31✓, 1.5s) [ 51.0% | 13345/26162 | ✓12545 | ✗ 24] ✓ tests/hermes_cli/test_nous_auth_status_cache.py (4✓, 1.9s) [ 51.0% | 13353/26162 | ✓12553 | ✗ 24] ✓ tests/hermes_cli/test_nous_subscription.py (8✓, 1.5s) [ 51.1% | 13371/26162 | ✓12571 | ✗ 24] ✓ tests/hermes_cli/test_nous_inference_url_validation.py (18✓, 1.7s) [ 51.4% | 13448/26162 | ✓12648 | ✗ 24] ✓ tests/hermes_cli/test_model_normalize.py (77✓, 3.6s) [ 51.4% | 13459/26162 | ✓12659 | ✗ 24] ✓ tests/hermes_cli/test_models_dev_preferred_merge.py (11✓, 2.3s) [ 51.7% | 13532/26162 | ✓12732 | ✗ 24] ✓ tests/hermes_cli/test_models.py (73✓, 2.4s) [ 51.8% | 13539/26162 | ✓12739 | ✗ 24] ✓ tests/hermes_cli/test_model_switch_variant_tags.py (7✓, 2.8s) [ 51.8% | 13542/26162 | ✓12742 | ✗ 24] ✓ tests/hermes_cli/test_model_switch_copilot_api_mode.py (3✓, 3.6s) [ 51.8% | 13545/26162 | ✓12745 | ✗ 24] ✓ tests/hermes_cli/test_pin_kanban_board_env.py (3✓, 0.9s) [ 51.8% | 13553/26162 | ✓12753 | ✗ 24] ✓ tests/hermes_cli/test_plugin_cli_registration.py (8✓, 0.9s) [ 51.9% | 13585/26162 | ✓12785 | ✗ 24] ✓ tests/hermes_cli/test_mcp_config.py (32✓, 5.0s) [ 51.9% | 13587/26162 | ✓12787 | ✗ 24] ✓ tests/hermes_cli/test_openai_codex_model_validation_fallback.py (2✓, 2.3s) [ 52.2% | 13668/26162 | ✓12868 | ✗ 24] ✓ tests/hermes_cli/test_model_validation.py (81✓, 3.6s) [ 52.3% | 13675/26162 | ✓12875 | ✗ 24] ✓ tests/hermes_cli/test_pip_install_detection.py (7✓, 1.3s) [ 52.3% | 13679/26162 | ✓12878 | ✗ 25] ✗ tests/hermes_cli/test_gateway_platform_gating.py (3✓ 1✗, 10.1s) ╔╍ Failed: tests/hermes_cli/test_gateway_platform_gating.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ INFO gateway.platform_registry:platform_registry.py:180 Platform 'line' re-registered (was plugin, now plugin) ║ INFO gateway.platform_registry:platform_registry.py:180 Platform 'matrix' re-registered (was plugin, now plugin) ║ INFO gateway.platform_registry:platform_registry.py:180 Platform 'mattermost' re-registered (was plugin, now plugin) ║ INFO gateway.platform_registry:platform_registry.py:180 Platform 'ntfy' re-registered (was plugin, now plugin) ║ INFO gateway.platform_registry:platform_registry.py:180 Platform 'simplex' re-registered (was plugin, now plugin) ║ INFO gateway.platform_registry:platform_registry.py:180 Platform 'slack' re-registered (was plugin, now plugin) ║ INFO gateway.platform_registry:platform_registry.py:180 Platform 'teams' re-registered (was plugin, now plugin) ║ INFO gateway.platform_registry:platform_registry.py:180 Platform 'telegram' re-registered (was plugin, now plugin) ║ INFO hermes_cli.plugins:plugins.py:1410 Plugin discovery complete: 84 found, 67 enabled ║ =============================== warnings summary =============================== ║ tests/hermes_cli/test_gateway_platform_gating.py::TestMatrixHiddenOnWindows::test_matrix_present_on_linux ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/discord/player.py:30: DeprecationWarning: 'audioop' is deprecated and slated for removal in Python 3.13 ║ import audioop ║ ║ tests/hermes_cli/test_gateway_platform_gating.py::TestMatrixHiddenOnWindows::test_matrix_present_on_linux ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). ║ _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) ║ ║ tests/hermes_cli/test_gateway_platform_gating.py::TestMatrixHiddenOnWindows::test_matrix_present_on_linux ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated ║ def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): ║ ║ tests/hermes_cli/test_gateway_platform_gating.py::TestMatrixHiddenOnWindows::test_matrix_present_on_linux ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions ║ warnings.warn( # deprecated in 14.0 - 2024-11-09 ║ ║ -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ║ =========================== short test summary info ============================ ║ FAILED tests/hermes_cli/test_gateway_platform_gating.py::TestMatrixHiddenOnWindows::test_matrix_hidden_on_windows ║ =================== 1 failed, 3 passed, 4 warnings in 7.06s ==================== ║ ║ Repro: python -m pytest tests/hermes_cli/test_gateway_platform_gating.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 52.3% | 13691/26162 | ✓12890 | ✗ 25] ✓ tests/hermes_cli/test_model_provider_persistence.py (12✓, 4.9s) [ 52.5% | 13722/26162 | ✓12921 | ✗ 25] ✓ tests/hermes_cli/test_ollama_cloud_auth.py (31✓, 3.1s) [ 52.5% | 13734/26162 | ✓12933 | ✗ 25] ✓ tests/hermes_cli/test_opencode_go_flat_namespace.py (12✓, 2.9s) [ 52.5% | 13741/26162 | ✓12940 | ✗ 25] ✓ tests/hermes_cli/test_opencode_go_validation_fallback.py (7✓, 2.4s) [ 52.5% | 13743/26162 | ✓12942 | ✗ 25] ✓ tests/hermes_cli/test_opencode_go_in_model_list.py (2✓, 2.6s) [ 52.7% | 13789/26162 | ✓12988 | ✗ 25] ✓ tests/hermes_cli/test_kanban_cli.py (46✓, 9.4s) [ 52.8% | 13804/26162 | ✓13003 | ✗ 25] ✓ tests/hermes_cli/test_plugin_auxiliary_tasks.py (15✓, 2.4s) [ 52.8% | 13809/26162 | ✓13008 | ✗ 25] ✓ tests/hermes_cli/test_post_setup_gating.py (5✓, 1.3s) [ 52.8% | 13819/26162 | ✓13018 | ✗ 25] ✓ tests/hermes_cli/test_profile_describer.py (10✓, 1.8s) [ 52.8% | 13825/26162 | ✓13024 | ✗ 25] ✓ tests/hermes_cli/test_overlay_slug_resolution.py (6✓, 3.3s) [ 52.9% | 13828/26162 | ✓13027 | ✗ 25] ✓ tests/hermes_cli/test_profile_export_credentials.py (3✓, 1.6s) [ 52.9% | 13845/26162 | ✓13044 | ✗ 25] ✓ tests/hermes_cli/test_provider_config_validation.py (17✓, 1.2s) [ 53.0% | 13854/26162 | ✓13053 | ✗ 25] ✓ tests/hermes_cli/test_profiles_s6_hooks.py (9✓, 1.8s) [ 53.1% | 13879/26162 | ✓13078 | ✗ 25] ✓ tests/hermes_cli/test_gmi_provider.py (25✓, 11.5s) [ 53.1% | 13890/26162 | ✓13089 | ✗ 25] ✓ tests/hermes_cli/test_prompt_api_key.py (11✓, 2.0s) [ 53.2% | 13925/26162 | ✓13124 | ✗ 25] ✓ tests/hermes_cli/test_project_plugin_rce_bypass.py (35✓, 2.0s) [ 53.2% | 13926/26162 | ✓13125 | ✗ 25] ✓ tests/hermes_cli/test_reasoning_effort_menu.py (1✓, 1.5s) [ 53.3% | 13940/26162 | ✓13139 | ✗ 25] ✓ tests/hermes_cli/test_image_gen_picker.py (14✓, 11.7s) [ 53.4% | 13966/26162 | ✓13165 | ✗ 25] ✓ tests/hermes_cli/test_relaunch.py (26✓, 1.2s) [ 53.6% | 14030/26162 | ✓13229 | ✗ 25] ✓ tests/hermes_cli/test_profile_distribution.py (64✓, 3.4s) [ 53.6% | 14034/26162 | ✓13233 | ✗ 25] ✓ tests/hermes_cli/test_secret_prompt.py (4✓, 1.2s) [ 53.7% | 14046/26162 | ✓13245 | ✗ 25] ✓ tests/hermes_cli/test_pty_bridge.py (12✓, 2.8s) [ 53.8% | 14066/26162 | ✓13265 | ✗ 25] ✓ tests/hermes_cli/test_security_advisories.py (20✓, 1.6s) [ 53.8% | 14084/26162 | ✓13283 | ✗ 25] ✓ tests/hermes_cli/test_model_switch_custom_providers.py (18✓, 8.8s) [ 53.9% | 14090/26162 | ✓13289 | ✗ 25] ✓ tests/hermes_cli/test_resolve_last_session.py (6✓, 2.6s) [ 54.0% | 14126/26162 | ✓13325 | ✗ 25] ✓ tests/hermes_cli/test_proxy.py (36✓, 3.6s) [ 54.1% | 14147/26162 | ✓13346 | ✗ 25] ✓ tests/hermes_cli/test_send_cmd.py (21✓, 1.8s) [ 54.2% | 14173/26162 | ✓13372 | ✗ 25] ✓ tests/hermes_cli/test_security_audit.py (26✓, 2.1s) [ 54.3% | 14206/26162 | ✓13405 | ✗ 25] ✓ tests/hermes_cli/test_session_browse.py (33✓, 1.8s) [ 54.3% | 14219/26162 | ✓13418 | ✗ 25] ✓ tests/hermes_cli/test_session_recap.py (13✓, 1.5s) [ 54.4% | 14223/26162 | ✓13422 | ✗ 25] ✓ tests/hermes_cli/test_redact_config_bridge.py (4✓, 3.6s) [ 54.4% | 14225/26162 | ✓13424 | ✗ 25] ✓ tests/hermes_cli/test_setup_hermes_script.py (2✓, 1.0s) [ 54.4% | 14229/26162 | ✓13428 | ✗ 25] ✓ tests/hermes_cli/test_sessions_delete.py (4✓, 1.9s) [ 54.4% | 14230/26162 | ✓13429 | ✗ 25] ✓ tests/hermes_cli/test_setup_matrix_e2ee.py (1✓, 1.6s) [ 54.6% | 14281/26162 | ✓13480 | ✗ 25] ✓ tests/hermes_cli/test_service_manager.py (51✓, 3.3s) [ 54.6% | 14283/26162 | ✓13482 | ✗ 25] ✓ tests/hermes_cli/test_setup_agent_settings.py (2✓, 1.8s) [ 54.8% | 14329/26162 | ✓13528 | ✗ 25] ✓ tests/hermes_cli/test_gemini_provider.py (46✓, 15.5s) [ 55.2% | 14436/26162 | ✓13635 | ✗ 25] ✓ tests/hermes_cli/test_profiles.py (107✓, 6.4s) [ 55.2% | 14437/26162 | ✓13636 | ✗ 25] ✓ tests/hermes_cli/test_setup_ollama_cloud_force_refresh.py (1✓, 1.5s) [ 55.4% | 14493/26162 | ✓13692 | ✗ 25] ✓ tests/hermes_cli/test_kanban_boards.py (56✓, 15.3s) [ 55.9% | 14637/26162 | ✓13836 | ✗ 25] ✓ tests/hermes_cli/test_commands.py (144✓, 20.9s) [ 56.1% | 14670/26162 | ✓13869 | ✗ 25] ✓ tests/hermes_cli/test_set_config_value.py (33✓, 2.8s) [ 56.1% | 14675/26162 | ✓13874 | ✗ 25] ✓ tests/hermes_cli/test_setup_prompt_menus.py (5✓, 1.4s) [ 56.1% | 14676/26162 | ✓13875 | ✗ 25] ✓ tests/hermes_cli/test_skills_subparser.py (1✓, 0.9s) [ 56.1% | 14683/26162 | ✓13882 | ✗ 25] ✓ tests/hermes_cli/test_setup_noninteractive.py (7✓, 2.4s) [ 56.2% | 14692/26162 | ✓13891 | ✗ 25] ✓ tests/hermes_cli/test_setup_reconfigure.py (9✓, 1.6s) [ 56.2% | 14702/26162 | ✓13901 | ✗ 25] ✓ tests/hermes_cli/test_cmd_update.py (10✓, 22.5s) [ 56.3% | 14730/26162 | ✓13929 | ✗ 25] ✓ tests/hermes_cli/test_skills_config.py (28✓, 1.7s) [ 56.3% | 14735/26162 | ✓13934 | ✗ 25] ✓ tests/hermes_cli/test_skills_install_flags.py (5✓, 1.6s) [ 56.6% | 14796/26162 | ✓13995 | ✗ 25] ✓ tests/hermes_cli/test_doctor.py (61✓, 18.4s) [ 56.6% | 14800/26162 | ✓13999 | ✗ 25] ✓ tests/hermes_cli/test_placeholder_usage.py (4✓, 9.3s) [ 56.6% | 14800/26162 | ✓13999 | ✗ 25] ✓ tests/hermes_cli/test_subparser_routing_fallback.py (0.5s) [ 56.6% | 14815/26162 | ✓14014 | ✗ 25] ✓ tests/hermes_cli/test_skills_skip_confirm.py (15✓, 1.7s) [ 56.7% | 14821/26162 | ✓14020 | ✗ 25] ✓ tests/hermes_cli/test_spotify_auth.py (6✓, 1.5s) [ 56.8% | 14847/26162 | ✓14046 | ✗ 25] ✓ tests/hermes_cli/test_path_completion.py (26✓, 10.4s) [ 56.8% | 14851/26162 | ✓14050 | ✗ 25] ✓ tests/hermes_cli/test_subprocess_timeouts.py (4✓, 1.2s) [ 56.8% | 14866/26162 | ✓14065 | ✗ 25] ✓ tests/hermes_cli/test_suppress_eio_on_interrupt.py (15✓, 1.4s) [ 56.9% | 14879/26162 | ✓14078 | ✗ 25] ✓ tests/hermes_cli/test_session_handoff.py (13✓, 5.9s) [ 57.0% | 14912/26162 | ✓14111 | ✗ 25] ✓ tests/hermes_cli/test_skin_engine.py (33✓, 2.6s) [ 57.1% | 14936/26162 | ✓14135 | ✗ 25] ✓ tests/hermes_cli/test_skills_hub.py (24✓, 3.2s) [ 57.6% | 15064/26162 | ✓14263 | ✗ 25] ✓ tests/hermes_cli/test_runtime_provider_resolution.py (128✓, 7.3s) [ 57.6% | 15076/26162 | ✓14275 | ✗ 25] ✓ tests/hermes_cli/test_model_switch_opencode_anthropic.py (12✓, 13.7s) [ 57.7% | 15087/26162 | ✓14286 | ✗ 25] ✓ tests/hermes_cli/test_tips.py (11✓, 1.3s) [ 57.7% | 15095/26162 | ✓14294 | ✗ 25] ✓ tests/hermes_cli/test_teams_pipeline_plugin_cli.py (8✓, 1.8s) [ 57.8% | 15132/26162 | ✓14331 | ✗ 25] ✓ tests/hermes_cli/test_startup_plugin_gating.py (37✓, 2.6s) [ 57.9% | 15137/26162 | ✓14336 | ✗ 25] ✓ tests/hermes_cli/test_status_model_provider.py (5✓, 2.2s) [ 57.9% | 15140/26162 | ✓14339 | ✗ 25] ✓ tests/hermes_cli/test_plugins_transcription_registration.py (3✓, 10.2s) [ 57.9% | 15157/26162 | ✓14356 | ✗ 25] ✓ tests/hermes_cli/test_status.py (17✓, 2.6s) [ 58.0% | 15161/26162 | ✓14360 | ✗ 25] ✓ tests/hermes_cli/test_terminal_menu_fallbacks.py (4✓, 2.1s) [ 58.0% | 15164/26162 | ✓14363 | ✗ 25] ✓ tests/hermes_cli/test_plugins_tts_registration.py (3✓, 10.5s) [ 58.0% | 15167/26162 | ✓14366 | ✗ 25] ✓ tests/hermes_cli/test_update_config_clears_custom_fields.py (3✓, 1.3s) [ 58.0% | 15169/26162 | ✓14368 | ✗ 25] ✓ tests/hermes_cli/test_tui_bundled.py (2✓, 1.9s) [ 58.0% | 15184/26162 | ✓14383 | ✗ 25] ✓ tests/hermes_cli/test_plugin_scanner_recursion.py (15✓, 12.9s) [ 58.1% | 15202/26162 | ✓14401 | ✗ 25] ✓ tests/hermes_cli/test_update_concurrent_quarantine.py (18✓, 2.1s) [ 58.1% | 15210/26162 | ✓14409 | ✗ 25] ✓ tests/hermes_cli/test_update_check.py (8✓, 2.2s) [ 58.2% | 15226/26162 | ✓14425 | ✗ 25] ✓ tests/hermes_cli/test_update_hangup_protection.py (16✓, 2.0s) [ 58.3% | 15241/26162 | ✓14440 | ✗ 25] ✓ tests/hermes_cli/test_tui_npm_install.py (15✓, 2.5s) [ 58.3% | 15249/26162 | ✓14448 | ✗ 25] ✓ tests/hermes_cli/test_update_post_pull_syntax_guard.py (8✓, 2.2s) [ 58.4% | 15268/26162 | ✓14467 | ✗ 25] ✓ tests/hermes_cli/test_update_stale_dashboard.py (19✓, 2.2s) [ 58.4% | 15270/26162 | ✓14469 | ✗ 25] ✓ tests/hermes_cli/test_update_zip_symlink_reject.py (2✓, 2.3s) [ 58.5% | 15315/26162 | ✓14514 | ✗ 25] ✓ tests/hermes_cli/test_ollama_cloud_provider.py (45✓, 15.6s) [ 58.5% | 15317/26162 | ✓14516 | ✗ 25] ✓ tests/hermes_cli/test_whatsapp_setup_ordering.py (2✓, 1.1s) [ 58.6% | 15333/26162 | ✓14532 | ✗ 25] ✓ tests/hermes_cli/test_web_ui_build.py (16✓, 1.8s) [ 58.6% | 15335/26162 | ✓14534 | ✗ 25] ✓ tests/hermes_cli/test_web_server_oauth_write.py (2✓, 2.0s) [ 58.8% | 15379/26162 | ✓14578 | ✗ 25] ✓ tests/hermes_cli/test_voice_wrapper.py (44✓, 3.0s) [ 58.9% | 15399/26162 | ✓14598 | ✗ 25] ✓ tests/hermes_cli/test_webhook_cli.py (20✓, 2.2s) [ 58.9% | 15413/26162 | ✓14612 | ✗ 25] ✓ tests/hermes_cli/test_xai_oauth_pkce_token_exchange.py (14✓, 1.5s) [ 58.9% | 15420/26162 | ✓14619 | ✗ 25] ✓ tests/hermes_cli/test_web_oauth_dispatch.py (7✓, 2.6s) [ 59.0% | 15423/26162 | ✓14622 | ✗ 25] ✓ tests/hermes_cli/test_regression_16767.py (3✓, 12.8s) [ 59.0% | 15430/26162 | ✓14629 | ✗ 25] ✓ tests/hermes_cli/test_web_server_cron_profiles.py (7✓, 2.8s) [ 59.0% | 15438/26162 | ✓14637 | ✗ 25] ✓ tests/hermes_cli/test_setup_irc.py (8✓, 10.3s) [ 59.4% | 15537/26162 | ✓14736 | ✗ 25] ✓ tests/hermes_cli/test_backup.py (99✓, 30.7s) [ 59.7% | 15608/26162 | ✓14807 | ✗ 25] ✓ tests/hermes_cli/test_plugins_cmd.py (71✓, 15.9s) [ 59.7% | 15610/26162 | ✓14809 | ✗ 25] ✓ tests/hermes_cli/test_xai_provider_labels.py (2✓, 1.9s) [ 59.8% | 15651/26162 | ✓14850 | ✗ 25] ✓ tests/hermes_cli/test_tui_resume_flow.py (41✓, 6.1s) [ 59.9% | 15661/26162 | ✓14860 | ✗ 25] ✓ tests/honcho_plugin/test_cli.py (10✓, 1.2s) [ 60.0% | 15694/26162 | ✓14893 | ✗ 25] ✓ tests/hermes_cli/test_xai_retirement.py (33✓, 2.1s) [ 60.0% | 15701/26162 | ✓14900 | ✗ 25] ✓ tests/honcho_plugin/test_empty_profile_hint.py (7✓, 1.3s) [ 60.0% | 15710/26162 | ✓14909 | ✗ 25] ✓ tests/openviking_plugin/test_openviking.py (9✓, 0.8s) [ 60.2% | 15750/26162 | ✓14949 | ✗ 25] ✓ tests/honcho_plugin/test_async_memory.py (40✓, 2.0s) [ 60.3% | 15779/26162 | ✓14978 | ✗ 25] ✓ tests/hermes_cli/test_user_providers_model_switch.py (29✓, 6.3s) [ 60.4% | 15792/26162 | ✓14991 | ✗ 25] ✓ tests/honcho_plugin/test_pin_peer_name.py (13✓, 1.6s) [ 60.4% | 15795/26162 | ✓14994 | ✗ 25] ✓ tests/hermes_cli/test_slack_cli.py (3✓, 9.9s) [ 60.4% | 15809/26162 | ✓15008 | ✗ 25] ✓ tests/plugins/image_gen/test_fal_provider.py (14✓, 1.5s) [ 60.7% | 15891/26162 | ✓15090 | ✗ 25] ✓ tests/honcho_plugin/test_client.py (82✓, 2.8s) [ 61.4% | 16063/26162 | ✓15262 | ✗ 25] ✓ tests/hermes_cli/test_kanban_db.py (172✓, 25.9s) [ 61.5% | 16078/26162 | ✓15277 | ✗ 25] ✓ tests/plugins/memory/test_mem0_v2.py (15✓, 1.6s) [ 61.6% | 16107/26162 | ✓15306 | ✗ 25] ✓ tests/plugins/memory/test_supermemory_provider.py (29✓, 1.5s) [ 61.6% | 16128/26162 | ✓15327 | ✗ 25] ✓ tests/plugins/memory/test_openviking_provider.py (21✓, 1.8s) [ 61.7% | 16136/26162 | ✓15335 | ✗ 25] ✓ tests/hermes_state/test_resolve_resume_session_id.py (8✓, 4.3s) [ 61.8% | 16157/26162 | ✓15356 | ✗ 25] ✓ tests/plugins/image_gen/test_xai_provider.py (21✓, 2.5s) [ 61.8% | 16175/26162 | ✓15374 | ✗ 25] ✓ tests/plugins/image_gen/test_openai_codex_provider.py (18✓, 3.1s) [ 61.9% | 16200/26162 | ✓15399 | ✗ 25] ✓ tests/plugins/image_gen/test_openai_provider.py (25✓, 3.0s) [ 62.0% | 16233/26162 | ✓15432 | ✗ 25] ✓ tests/hermes_cli/test_setup_openclaw_migration.py (33✓, 14.1s) [ 62.5% | 16348/26162 | ✓15547 | ✗ 25] ✓ tests/honcho_plugin/test_session.py (115✓, 4.3s) [ 62.5% | 16360/26162 | ✓15553 | ✗ 25] ✓ tests/hermes_cli/test_tool_token_estimation.py (6✓ 6s, 11.3s) [ 62.8% | 16432/26162 | ✓15625 | ✗ 25] ✓ tests/hermes_cli/test_plugins.py (72✓, 20.7s) [ 63.0% | 16474/26162 | ✓15667 | ✗ 25] ✓ tests/plugins/test_google_meet_node.py (42✓, 1.6s) [ 63.0% | 16485/26162 | ✓15678 | ✗ 25] ✓ tests/plugins/test_google_meet_audio.py (11✓, 2.0s) [ 63.0% | 16494/26162 | ✓15687 | ✗ 25] ✓ tests/plugins/test_google_meet_realtime.py (9✓, 1.5s) [ 63.1% | 16504/26162 | ✓15697 | ✗ 25] ✓ tests/hermes_cli/test_tts_picker.py (10✓, 11.0s) [ 63.5% | 16600/26162 | ✓15793 | ✗ 25] ✓ tests/plugins/memory/test_hindsight_provider.py (96✓, 3.9s) [ 63.5% | 16608/26162 | ✓15801 | ✗ 25] ✓ tests/hermes_cli/test_video_gen_picker.py (8✓, 9.6s) [ 63.5% | 16620/26162 | ✓15813 | ✗ 25] ✓ tests/hermes_state/test_get_messages_around.py (12✓, 6.5s) [ 63.5% | 16622/26162 | ✓15815 | ✗ 25] ✓ tests/hermes_cli/test_update_yes_flag.py (2✓, 10.8s) [ 63.7% | 16673/26162 | ✓15866 | ✗ 25] ✓ tests/plugins/test_google_meet_plugin.py (51✓, 2.3s) [ 63.8% | 16691/26162 | ✓15884 | ✗ 25] ✓ tests/plugins/video_gen/test_fal_plugin.py (18✓, 1.5s) [ 63.8% | 16697/26162 | ✓15890 | ✗ 25] ✓ tests/providers/test_e2e_wiring.py (6✓, 1.0s) [ 63.9% | 16708/26162 | ✓15901 | ✗ 25] ✓ tests/hermes_state/test_get_anchored_view.py (11✓, 7.2s) [ 63.9% | 16715/26162 | ✓15908 | ✗ 25] ✓ tests/plugins/video_gen/test_xai_plugin.py (7✓, 1.5s) [ 63.9% | 16726/26162 | ✓15919 | ✗ 25] ✓ tests/plugins/video_gen/test_xai_plugin_integration.py (11✓, 1.2s) [ 64.0% | 16737/26162 | ✓15930 | ✗ 25] ✓ tests/plugins/test_teams_pipeline_plugin.py (11✓, 2.0s) [ 64.1% | 16759/26162 | ✓15952 | ✗ 25] ✓ tests/providers/test_profile_wiring.py (22✓, 1.2s) [ 64.1% | 16775/26162 | ✓15968 | ✗ 25] ✓ tests/run_agent/test_1630_context_overflow_loop.py (16✓, 1.2s) [ 64.2% | 16794/26162 | ✓15987 | ✗ 25] ✓ tests/providers/test_transport_parity.py (19✓, 1.3s) [ 64.4% | 16836/26162 | ✓16029 | ✗ 25] ✓ tests/providers/test_provider_profiles.py (42✓, 1.7s) [ 64.4% | 16841/26162 | ✓16034 | ✗ 25] ✓ tests/run_agent/test_31273_402_not_retried.py (5✓, 1.5s) [ 64.4% | 16848/26162 | ✓16041 | ✗ 25] ✓ tests/run_agent/test_anthropic_truncation_continuation.py (7✓, 1.1s) [ 64.5% | 16865/26162 | ✓16058 | ✗ 25] ✓ tests/hermes_cli/test_tools_disable_enable.py (17✓, 13.9s) [ 64.5% | 16880/26162 | ✓16073 | ✗ 25] ✓ tests/hermes_cli/test_setup_model_provider.py (15✓, 18.6s) [ 64.6% | 16891/26162 | ✓16084 | ✗ 25] ✓ tests/plugins/test_kanban_worker_runs.py (11✓, 4.6s) [ 64.8% | 16952/26162 | ✓16145 | ✗ 25] ✓ tests/hermes_cli/test_tencent_tokenhub_provider.py (61✓, 15.7s) [ 64.8% | 16961/26162 | ✓16154 | ✗ 25] ✓ tests/plugins/test_achievements_plugin.py (9✓, 5.9s) [ 65.5% | 17126/26162 | ✓16319 | ✗ 25] ✓ tests/hermes_cli/test_kanban_core_functionality.py (165✓, 32.5s) [ 65.5% | 17145/26162 | ✓16338 | ✗ 25] ✓ tests/hermes_cli/test_setup.py (19✓, 19.8s) [ 65.6% | 17156/26162 | ✓16349 | ✗ 25] ✓ tests/hermes_cli/test_web_server_host_header.py (11✓, 12.5s) [ 65.6% | 17163/26162 | ✓16356 | ✗ 25] ✓ tests/run_agent/test_codex_multimodal_tool_result.py (7✓, 1.2s) [ 65.6% | 17174/26162 | ✓16367 | ✗ 25] ✓ tests/hermes_cli/test_timeouts.py (11✓, 17.0s) [ 65.7% | 17180/26162 | ✓16373 | ✗ 25] ✓ tests/run_agent/test_compression_boundary.py (6✓, 1.6s) [ 65.9% | 17232/26162 | ✓16425 | ✗ 25] ✓ tests/hermes_cli/test_xiaomi_provider.py (52✓, 12.1s) [ 66.1% | 17299/26162 | ✓16492 | ✗ 25] ✓ tests/plugins/test_retaindb_plugin.py (67✓, 6.5s) [ 66.2% | 17308/26162 | ✓16501 | ✗ 25] ✓ tests/run_agent/test_async_httpx_del_neuter.py (9✓, 4.2s) [ 66.2% | 17311/26162 | ✓16504 | ✗ 25] ✓ tests/run_agent/test_compression_trigger_excludes_reasoning.py (3✓, 1.2s) [ 66.3% | 17349/26162 | ✓16542 | ✗ 25] ✓ tests/plugins/test_disk_cleanup_plugin.py (38✓, 11.1s) [ 66.5% | 17386/26162 | ✓16579 | ✗ 25] ✓ tests/plugins/test_langfuse_plugin.py (37✓, 10.4s) [ 66.5% | 17407/26162 | ✓16600 | ✗ 25] ✓ tests/plugins/model_providers/test_opencode_go_profile.py (21✓, 13.5s) [ 66.8% | 17485/26162 | ✓16678 | ✗ 25] ✓ tests/hermes_cli/test_tools_config.py (78✓, 23.7s) [ 66.9% | 17509/26162 | ✓16702 | ✗ 25] ✓ tests/run_agent/test_anthropic_prompt_cache_policy.py (24✓, 11.2s) [ 67.1% | 17544/26162 | ✓16737 | ✗ 25] ✓ tests/run_agent/test_agent_guardrails.py (35✓, 11.4s) [ 67.1% | 17548/26162 | ✓16741 | ✗ 25] ✓ tests/providers/test_plugin_discovery.py (4✓, 12.5s) [ 67.1% | 17551/26162 | ✓16744 | ✗ 25] ✓ tests/run_agent/test_background_review_toolset_restriction.py (3✓, 10.5s) [ 67.2% | 17582/26162 | ✓16775 | ✗ 25] ✓ tests/plugins/browser/test_browser_provider_plugins.py (31✓, 17.8s) [ 67.2% | 17584/26162 | ✓16775 | ✗ 25] ✓ tests/run_agent/test_deepseek_v4_thinking_live.py (2s, 0.7s) [ 67.2% | 17585/26162 | ✓16776 | ✗ 25] ✓ tests/run_agent/test_compress_focus_plugin_fallback.py (1✓, 9.6s) [ 67.3% | 17614/26162 | ✓16805 | ✗ 25] ✓ tests/plugins/model_providers/test_deepseek_profile.py (29✓, 16.9s) [ 67.4% | 17630/26162 | ✓16821 | ✗ 25] ✓ tests/run_agent/test_callable_api_key.py (16✓, 11.5s) [ 67.4% | 17638/26162 | ✓16829 | ✗ 25] ✓ tests/run_agent/test_background_review_summary.py (8✓, 12.0s) [ 67.4% | 17644/26162 | ✓16835 | ✗ 25] ✓ tests/run_agent/test_commit_memory_session_context_engine.py (6✓, 10.6s) [ 67.5% | 17648/26162 | ✓16839 | ✗ 25] ✓ tests/run_agent/test_background_review.py (4✓, 12.8s) [ 67.5% | 17651/26162 | ✓16842 | ✗ 25] ✓ tests/run_agent/test_background_review_cache_parity.py (3✓, 13.4s) [ 67.5% | 17666/26162 | ✓16857 | ✗ 25] ✓ tests/run_agent/test_codex_app_server_integration.py (15✓, 13.8s) [ 67.6% | 17691/26162 | ✓16882 | ✗ 25] ✓ tests/hermes_cli/test_update_autostash.py (25✓, 28.4s) [ 67.6% | 17693/26162 | ✓16884 | ✗ 25] ✓ tests/run_agent/test_concurrent_interrupt.py (2✓, 12.4s) [ 68.2% | 17838/26162 | ✓17028 | ✗ 26] ✗ tests/hermes_cli/test_web_server.py (144✓ 1✗, 27.4s) ╔╍ Failed: tests/hermes_cli/test_web_server.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ║ .venv/lib/python3.12/site-packages/starlette/testclient.py:187: KeyError ║ =============================== warnings summary =============================== ║ tests/hermes_cli/test_web_server.py::TestWebServerEndpoints::test_get_status ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/discord/player.py:30: DeprecationWarning: 'audioop' is deprecated and slated for removal in Python 3.13 ║ import audioop ║ ║ tests/hermes_cli/test_web_server.py::TestWebServerEndpoints::test_get_status ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). ║ _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) ║ ║ tests/hermes_cli/test_web_server.py::TestWebServerEndpoints::test_get_status ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated ║ def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): ║ ║ tests/hermes_cli/test_web_server.py::TestWebServerEndpoints::test_get_status ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions ║ warnings.warn( # deprecated in 14.0 - 2024-11-09 ║ ║ tests/hermes_cli/test_web_server.py::TestPtyWebSocket::test_streams_child_stdout_to_client ║ tests/hermes_cli/test_web_server.py::TestPtyWebSocket::test_resize_escape_is_forwarded ║ tests/hermes_cli/test_web_server.py::TestPtyWebSocket::test_resume_parameter_is_forwarded_to_argv ║ tests/hermes_cli/test_web_server.py::TestPtyWebSocket::test_channel_param_propagates_sidecar_url ║ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=1896384) is multi-threaded, use of forkpty() may lead to deadlocks in the child. ║ pid, fd = os.forkpty() ║ ║ -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ║ =========================== short test summary info ============================ ║ FAILED tests/hermes_cli/test_web_server.py::TestPtyWebSocket::test_client_input_reaches_child_stdin ║ ================== 1 failed, 144 passed, 8 warnings in 22.66s ================== ║ ║ Repro: python -m pytest tests/hermes_cli/test_web_server.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 68.2% | 17843/26162 | ✓17033 | ✗ 26] ✓ tests/run_agent/test_jsondecodeerror_retryable.py (5✓, 1.6s) [ 68.2% | 17848/26162 | ✓17038 | ✗ 26] ✓ tests/run_agent/test_context_token_tracking.py (5✓, 12.6s) [ 68.3% | 17856/26162 | ✓17046 | ✗ 26] ✓ tests/run_agent/test_860_dedup.py (8✓, 18.4s) [ 68.3% | 17858/26162 | ✓17048 | ✗ 26] ✓ tests/run_agent/test_compressor_fallback_update.py (2✓, 13.6s) [ 68.3% | 17874/26162 | ✓17064 | ✗ 26] ✓ tests/run_agent/test_compression_feasibility.py (16✓, 14.5s) [ 68.4% | 17890/26162 | ✓17080 | ✗ 26] ✓ tests/run_agent/test_413_compression.py (16✓, 19.1s) [ 68.4% | 17896/26162 | ✓17086 | ✗ 26] ✓ tests/run_agent/test_last_reasoning_per_turn.py (6✓, 1.9s) [ 68.5% | 17911/26162 | ✓17101 | ✗ 26] ✓ tests/run_agent/test_long_context_tier_429.py (15✓, 2.0s) [ 68.5% | 17918/26162 | ✓17108 | ✗ 26] ✓ tests/run_agent/test_memory_nudge_counter_hydration.py (7✓, 1.8s) [ 68.5% | 17922/26162 | ✓17112 | ✗ 26] ✓ tests/run_agent/test_api_max_retries_config.py (4✓, 19.8s) [ 68.5% | 17928/26162 | ✓17118 | ✗ 26] ✓ tests/run_agent/test_compression_persistence.py (6✓, 15.8s) [ 68.5% | 17931/26162 | ✓17121 | ✗ 26] ✓ tests/run_agent/test_credential_pool_interrupt.py (3✓, 9.7s) [ 68.6% | 17941/26162 | ✓17131 | ✗ 26] ✓ tests/run_agent/test_codex_silent_hang_hint.py (10✓, 18.7s) [ 68.7% | 17978/26162 | ✓17168 | ✗ 26] ✓ tests/run_agent/test_codex_xai_oauth_recovery.py (37✓, 19.2s) [ 68.7% | 17981/26162 | ✓17171 | ✗ 26] ✓ tests/run_agent/test_compression_boundary_hook.py (3✓, 18.2s) [ 68.7% | 17984/26162 | ✓17174 | ✗ 26] ✓ tests/run_agent/test_empty_response_recovery_persistence.py (3✓, 10.5s) [ 68.8% | 17995/26162 | ✓17185 | ✗ 26] ✓ tests/run_agent/test_percentage_clamp.py (11✓, 2.6s) [ 69.0% | 18045/26162 | ✓17235 | ✗ 26] ✓ tests/plugins/web/test_web_search_provider_plugins.py (50✓, 24.3s) [ 69.0% | 18060/26162 | ✓17250 | ✗ 26] ✓ tests/run_agent/test_image_rejection_fallback.py (15✓, 11.0s) [ 69.0% | 18061/26162 | ✓17251 | ✗ 26] ✓ tests/run_agent/test_dict_tool_call_args.py (1✓, 12.5s) [ 69.0% | 18062/26162 | ✓17252 | ✗ 26] ✓ tests/run_agent/test_redirect_stdout_issue.py (1✓, 2.1s) [ 69.0% | 18063/26162 | ✓17253 | ✗ 26] ✓ tests/run_agent/test_create_openai_client_kwargs_isolation.py (1✓, 16.7s) [ 69.2% | 18096/26162 | ✓17286 | ✗ 26] ✓ tests/run_agent/test_file_mutation_verifier.py (33✓, 13.4s) [ 69.2% | 18098/26162 | ✓17288 | ✗ 26] ✓ tests/run_agent/test_exit_cleanup_interrupt.py (2✓, 13.7s) [ 69.2% | 18101/26162 | ✓17291 | ✗ 26] ✓ tests/run_agent/test_create_openai_client_reuse.py (3✓, 15.0s) [ 69.2% | 18114/26162 | ✓17304 | ✗ 26] ✓ tests/run_agent/test_image_shrink_recovery.py (13✓, 13.3s) [ 69.2% | 18115/26162 | ✓17304 | ✗ 26] ✓ tests/run_agent/test_sequential_chats_live.py (1s, 0.7s) [ 69.2% | 18115/26162 | ✓17304 | ✗ 26] ✓ tests/run_agent/test_interactive_interrupt.py (13.5s) [ 69.3% | 18118/26162 | ✓17307 | ✗ 26] ✓ tests/run_agent/test_copilot_native_vision_headers.py (3✓, 19.3s) [ 69.3% | 18123/26162 | ✓17312 | ✗ 26] ✓ tests/run_agent/test_iteration_budget_race.py (5✓, 11.5s) [ 69.3% | 18128/26162 | ✓17317 | ✗ 26] ✓ tests/run_agent/test_invalid_context_length_warning.py (5✓, 13.5s) [ 69.4% | 18164/26162 | ✓17353 | ✗ 26] ✓ tests/run_agent/test_deepseek_reasoning_content_echo.py (36✓, 16.8s) [ 69.5% | 18173/26162 | ✓17362 | ✗ 26] ✓ tests/run_agent/test_create_openai_client_proxy_env.py (9✓, 19.1s) [ 69.5% | 18175/26162 | ✓17364 | ✗ 26] ✓ tests/run_agent/test_init_fallback_on_exhausted_pool.py (2✓, 15.8s) [ 69.5% | 18186/26162 | ✓17375 | ✗ 26] ✓ tests/run_agent/test_message_sequence_repair.py (11✓, 10.8s) [ 69.5% | 18195/26162 | ✓17384 | ✗ 26] ✓ tests/run_agent/test_strip_reasoning_tags_cli.py (9✓, 1.8s) [ 69.6% | 18197/26162 | ✓17386 | ✗ 26] ✓ tests/run_agent/test_materialize_data_url_cleanup.py (2✓, 12.6s) [ 69.6% | 18204/26162 | ✓17393 | ✗ 26] ✓ tests/run_agent/test_interrupt_propagation.py (7✓, 17.2s) [ 69.6% | 18205/26162 | ✓17394 | ✗ 26] ✓ tests/run_agent/test_memory_provider_init.py (1✓, 12.6s) [ 69.6% | 18207/26162 | ✓17396 | ✗ 26] ✓ tests/run_agent/test_plugin_context_engine_init.py (2✓, 11.8s) [ 69.7% | 18223/26162 | ✓17412 | ✗ 26] ✓ tests/run_agent/test_memory_sync_interrupted.py (16✓, 13.7s) [ 69.7% | 18238/26162 | ✓17427 | ✗ 26] ✓ tests/run_agent/test_multimodal_tool_content_recovery.py (15✓, 13.2s) [ 69.7% | 18243/26162 | ✓17432 | ✗ 26] ✓ tests/run_agent/test_openai_client_lifecycle.py (5✓, 14.8s) [ 69.7% | 18244/26162 | ✓17433 | ✗ 26] ✓ tests/run_agent/test_real_interrupt_subagent.py (1✓, 12.9s) [ 69.8% | 18263/26162 | ✓17452 | ✗ 26] ✓ tests/run_agent/test_review_prompt_class_first.py (19✓, 11.7s) [ 69.8% | 18270/26162 | ✓17459 | ✗ 26] ✓ tests/run_agent/test_partial_stream_finish_reason.py (7✓, 15.8s) [ 69.8% | 18273/26162 | ✓17462 | ✗ 26] ✓ tests/scripts/test_release_acp_registry.py (3✓, 1.0s) [ 69.9% | 18294/26162 | ✓17483 | ✗ 26] ✓ tests/run_agent/test_repair_tool_call_arguments.py (21✓, 13.8s) [ 70.0% | 18309/26162 | ✓17498 | ✗ 26] ✓ tests/run_agent/test_run_agent_multimodal_prologue.py (15✓, 11.8s) [ 70.1% | 18327/26162 | ✓17516 | ✗ 26] ✓ tests/run_agent/test_repair_tool_call_name.py (18✓, 14.3s) [ 70.1% | 18340/26162 | ✓17529 | ✗ 26] ✓ tests/skills/test_fetch_transcript.py (13✓, 1.3s) [ 70.2% | 18354/26162 | ✓17543 | ✗ 26] ✓ tests/skills/test_darwinian_evolver_skill.py (14✓, 1.5s) [ 70.3% | 18386/26162 | ✓17575 | ✗ 26] ✓ tests/run_agent/test_primary_runtime_restore.py (32✓, 18.2s) [ 70.3% | 18398/26162 | ✓17587 | ✗ 26] ✓ tests/run_agent/test_streaming_tool_call_repair.py (12✓, 10.7s) [ 70.3% | 18402/26162 | ✓17591 | ✗ 26] ✓ tests/run_agent/test_session_reset_fix.py (4✓, 12.3s) [ 70.4% | 18417/26162 | ✓17606 | ✗ 26] ✓ tests/skills/test_google_oauth_setup.py (15✓, 1.8s) [ 70.4% | 18422/26162 | ✓17611 | ✗ 26] ✓ tests/run_agent/test_session_meta_filtering.py (5✓, 12.8s) [ 70.5% | 18435/26162 | ✓17624 | ✗ 26] ✓ tests/skills/test_hyperliquid_skill.py (13✓, 1.3s) [ 70.5% | 18438/26162 | ✓17627 | ✗ 26] ✓ tests/skills/test_google_workspace_credential_files.py (3✓, 1.5s) [ 70.5% | 18447/26162 | ✓17636 | ✗ 26] ✓ tests/skills/test_google_workspace_api.py (9✓, 2.0s) [ 70.5% | 18457/26162 | ✓17646 | ✗ 26] ✓ tests/run_agent/test_provider_attribution_headers.py (10✓, 18.6s) [ 70.6% | 18466/26162 | ✓17655 | ✗ 26] ✓ tests/skills/test_youtube_quiz.py (9✓, 1.0s) [ 70.6% | 18466/26162 | ✓17655 | ✗ 26] ✓ tests/stress/test_concurrency.py (0.6s) [ 70.6% | 18466/26162 | ✓17655 | ✗ 26] ✓ tests/stress/test_benchmarks.py (0.7s) [ 70.7% | 18504/26162 | ✓17693 | ✗ 26] ✓ tests/skills/test_memento_cards.py (38✓, 1.7s) [ 70.8% | 18526/26162 | ✓17715 | ✗ 26] ✓ tests/run_agent/test_provider_fallback.py (22✓, 19.2s) [ 70.9% | 18552/26162 | ✓17741 | ✗ 26] ✓ tests/skills/test_openclaw_migration_hardening.py (26✓, 1.6s) [ 70.9% | 18552/26162 | ✓17741 | ✗ 26] ✓ tests/stress/test_atypical_scenarios.py (1.0s) [ 70.9% | 18559/26162 | ✓17748 | ✗ 26] ✓ tests/skills/test_telephony_skill.py (7✓, 1.5s) [ 70.9% | 18559/26162 | ✓17748 | ✗ 26] ✓ tests/stress/test_concurrency_parent_gate.py (0.6s) [ 71.3% | 18653/26162 | ✓17842 | ✗ 26] ✓ tests/plugins/test_kanban_dashboard_plugin.py (94✓, 43.0s) [ 71.3% | 18653/26162 | ✓17842 | ✗ 26] ✓ tests/stress/test_concurrency_mixed.py (1.0s) [ 71.3% | 18653/26162 | ✓17842 | ✗ 26] ✓ tests/stress/test_concurrency_reclaim_race.py (0.7s) [ 71.3% | 18656/26162 | ✓17845 | ✗ 26] ✓ tests/run_agent/test_stream_interrupt_retry.py (3✓, 13.7s) [ 71.3% | 18656/26162 | ✓17845 | ✗ 26] ✓ tests/stress/test_property_fuzzing.py (0.7s) [ 71.3% | 18656/26162 | ✓17845 | ✗ 26] ✓ tests/stress/test_subprocess_e2e.py (0.6s) [ 71.3% | 18664/26162 | ✓17853 | ✗ 26] ✓ tests/test_atomic_replace_symlinks.py (8✓, 1.2s) [ 71.4% | 18674/26162 | ✓17863 | ✗ 26] ✓ tests/run_agent/test_tls_fd_recycle_corruption.py (10✓, 11.2s) [ 71.4% | 18686/26162 | ✓17875 | ✗ 26] ✓ tests/test_empty_model_fallback.py (12✓, 1.4s) [ 71.5% | 18707/26162 | ✓17896 | ✗ 26] ✓ tests/run_agent/test_steer.py (21✓, 15.7s) [ 71.5% | 18714/26162 | ✓17903 | ✗ 26] ✓ tests/test_env_loader_secret_sources.py (7✓, 1.4s) [ 71.6% | 18739/26162 | ✓17928 | ✗ 26] ✓ tests/test_base_url_hostname.py (25✓, 2.0s) [ 71.7% | 18751/26162 | ✓17940 | ✗ 26] ✓ tests/test_evidence_store.py (12✓, 1.0s) [ 71.7% | 18755/26162 | ✓17944 | ✗ 26] ✓ tests/test_account_usage.py (4✓, 2.3s) [ 71.7% | 18768/26162 | ✓17957 | ✗ 26] ✓ tests/test_cli_skin_integration.py (13✓, 1.8s) [ 71.9% | 18804/26162 | ✓17993 | ✗ 26] ✓ tests/test_bitwarden_secrets.py (36✓, 2.2s) [ 71.9% | 18805/26162 | ✓17994 | ✗ 26] ✓ tests/test_cli_manual_compress.py (1✓, 2.1s) [ 72.0% | 18846/26162 | ✓18035 | ✗ 26] ✓ tests/skills/test_openclaw_migration.py (41✓, 4.4s) [ 72.0% | 18848/26162 | ✓18037 | ✗ 26] ✓ tests/run_agent/test_switch_model_context.py (2✓, 13.9s) [ 72.1% | 18858/26162 | ✓18047 | ✗ 26] ✓ tests/run_agent/test_stream_drop_logging.py (10✓, 16.5s) [ 72.1% | 18863/26162 | ✓18052 | ✗ 26] ✓ tests/test_install_sh_browser_install.py (5✓, 0.7s) [ 72.1% | 18869/26162 | ✓18058 | ✗ 26] ✓ tests/test_hermes_home_profile_warning.py (6✓, 1.2s) [ 72.1% | 18873/26162 | ✓18062 | ✗ 26] ✓ tests/run_agent/test_strict_api_validation.py (4✓, 15.3s) [ 72.2% | 18876/26162 | ✓18065 | ✗ 26] ✓ tests/test_gateway_streaming_nested_config.py (3✓, 1.8s) [ 72.3% | 18907/26162 | ✓18096 | ✗ 26] ✓ tests/test_cli_file_drop.py (31✓, 3.2s) [ 72.3% | 18909/26162 | ✓18098 | ✗ 26] ✓ tests/test_install_sh_pythonpath_sanitization.py (2✓, 1.2s) [ 72.3% | 18916/26162 | ✓18105 | ✗ 26] ✓ tests/test_ipv4_preference.py (7✓, 0.9s) [ 72.3% | 18922/26162 | ✓18111 | ✗ 26] ✓ tests/test_install_sh_setup_wizard_tty_probe.py (6✓, 1.3s) [ 72.4% | 18929/26162 | ✓18118 | ✗ 26] ✓ tests/test_honcho_client_config.py (7✓, 1.7s) [ 72.4% | 18931/26162 | ✓18120 | ✗ 26] ✓ tests/test_install_sh_termux_network_prereqs.py (2✓, 1.0s) [ 72.4% | 18933/26162 | ✓18122 | ✗ 26] ✓ tests/test_install_sh_symlink_stomp.py (2✓, 1.1s) [ 72.4% | 18937/26162 | ✓18126 | ✗ 26] ✓ tests/run_agent/test_switch_model_fallback_prune.py (4✓, 15.2s) [ 72.4% | 18940/26162 | ✓18129 | ✗ 26] ✓ tests/run_agent/test_session_id_env.py (3✓, 18.9s) [ 72.4% | 18945/26162 | ✓18134 | ✗ 26] ✓ tests/test_lint_config.py (5✓, 1.2s) [ 72.4% | 18945/26162 | ✓18134 | ✗ 26] ✓ tests/test_minisweagent_path.py (0.6s) [ 72.5% | 18962/26162 | ✓18146 | ✗ 26] ✓ tests/test_hermes_bootstrap.py (12✓ 5s, 2.9s) [ 72.6% | 18991/26162 | ✓18175 | ✗ 26] ✓ tests/run_agent/test_unicode_ascii_codec.py (29✓, 10.7s) [ 72.7% | 19031/26162 | ✓18215 | ✗ 26] ✓ tests/test_hermes_constants.py (40✓, 3.1s) [ 72.8% | 19046/26162 | ✓18230 | ✗ 26] ✓ tests/test_hermes_state_wal_fallback.py (15✓, 2.8s) [ 73.0% | 19096/26162 | ✓18280 | ✗ 26] ✓ tests/test_hermes_logging.py (50✓, 3.2s) [ 73.1% | 19121/26162 | ✓18305 | ✗ 26] ✓ tests/run_agent/test_thinking_only_sanitizer.py (25✓, 15.3s) [ 73.3% | 19182/26162 | ✓18366 | ✗ 26] ✓ tests/run_agent/test_tool_arg_coercion.py (61✓, 14.8s) [ 73.3% | 19184/26162 | ✓18368 | ✗ 26] ✓ tests/test_packaging_metadata.py (2✓, 0.8s) [ 73.4% | 19199/26162 | ✓18383 | ✗ 26] ✓ tests/run_agent/test_vision_aware_preprocessing.py (15✓, 10.5s) [ 73.5% | 19233/26162 | ✓18417 | ✗ 26] ✓ tests/test_live_system_guard_self_test.py (34✓, 2.3s) [ 73.5% | 19234/26162 | ✓18418 | ✗ 26] ✓ tests/run_agent/test_tool_name_db_persistence.py (1✓, 12.1s) [ 73.6% | 19245/26162 | ✓18429 | ✗ 26] ✓ tests/test_model_picker_scroll.py (11✓, 1.6s) [ 73.6% | 19253/26162 | ✓18437 | ✗ 26] ✓ tests/test_ollama_num_ctx.py (8✓, 1.2s) [ 73.6% | 19260/26162 | ✓18444 | ✗ 26] ✓ tests/test_minimax_model_validation.py (7✓, 1.7s) [ 73.6% | 19265/26162 | ✓18449 | ✗ 26] ✓ tests/test_process_loop_event_loop_warning.py (5✓, 0.8s) [ 73.7% | 19270/26162 | ✓18454 | ✗ 26] ✓ tests/run_agent/test_tool_executor_contextvar_propagation.py (5✓, 13.9s) [ 73.7% | 19273/26162 | ✓18457 | ✗ 26] ✓ tests/test_package_json_lazy_deps.py (3✓, 1.1s) [ 73.7% | 19278/26162 | ✓18462 | ✗ 26] ✓ tests/test_project_metadata.py (5✓, 0.9s) [ 73.7% | 19280/26162 | ✓18464 | ✗ 26] ✓ tests/test_mini_swe_runner.py (2✓, 2.1s) [ 73.7% | 19284/26162 | ✓18468 | ✗ 26] ✓ tests/test_sql_injection.py (4✓, 0.6s) [ 73.7% | 19291/26162 | ✓18475 | ✗ 26] ✓ tests/run_agent/test_tool_call_args_sanitizer.py (7✓, 14.6s) [ 73.8% | 19300/26162 | ✓18484 | ✗ 26] ✓ tests/test_retry_utils.py (9✓, 1.0s) [ 73.9% | 19328/26162 | ✓18512 | ✗ 26] ✓ tests/test_minimax_oauth.py (28✓, 2.4s) [ 73.9% | 19331/26162 | ✓18515 | ✗ 26] ✓ tests/run_agent/test_token_persistence_non_cli.py (3✓, 16.0s) [ 73.9% | 19346/26162 | ✓18530 | ✗ 26] ✓ tests/test_toolset_distributions.py (15✓, 1.1s) [ 74.0% | 19355/26162 | ✓18539 | ✗ 26] ✓ tests/run_agent/test_tool_call_guardrail_runtime.py (9✓, 15.3s) [ 74.1% | 19382/26162 | ✓18566 | ✗ 26] ✓ tests/test_toolsets.py (27✓, 1.4s) [ 74.1% | 19384/26162 | ✓18568 | ✗ 26] ✓ tests/test_termux_all_extra_compat.py (2✓, 1.5s) [ 74.1% | 19388/26162 | ✓18572 | ✗ 26] ✓ tests/test_utils_truthy_values.py (4✓, 1.2s) [ 74.2% | 19404/26162 | ✓18588 | ✗ 26] ✓ tests/test_subprocess_home_isolation.py (16✓, 1.9s) [ 74.2% | 19404/26162 | ✓18588 | ✗ 26] ✓ tests/tools/test_approval_heartbeat.py (0.9s) [ 74.3% | 19435/26162 | ✓18619 | ✗ 26] ✓ tests/test_trajectory_compressor.py (31✓, 2.7s) [ 74.3% | 19438/26162 | ✓18622 | ✗ 26] ✓ tests/tools/test_approval_plugin_hooks.py (3✓, 1.3s) [ 74.3% | 19439/26162 | ✓18623 | ✗ 26] ✓ tests/test_run_tests_parallel.py (1✓, 3.3s) [ 74.5% | 19479/26162 | ✓18663 | ✗ 26] ✓ tests/test_yuanbao_proto.py (40✓, 2.2s) [ 74.6% | 19511/26162 | ✓18695 | ✗ 26] ✓ tests/test_yuanbao_integration.py (32✓, 2.7s) [ 74.8% | 19560/26162 | ✓18744 | ✗ 26] ✓ tests/test_yuanbao_markdown.py (49✓, 2.6s) [ 74.9% | 19590/26162 | ✓18774 | ✗ 26] ✓ tests/tools/test_ansi_strip.py (30✓, 2.1s) [ 74.9% | 19598/26162 | ✓18782 | ✗ 26] ✓ tests/test_trajectory_compressor_async.py (8✓, 3.1s) [ 75.0% | 19616/26162 | ✓18800 | ✗ 26] ✓ tests/tools/test_base_environment.py (18✓, 1.9s) [ 75.0% | 19622/26162 | ✓18806 | ✗ 26] ✓ tests/tools/test_browser_camofox_state.py (6✓, 0.9s) [ 75.1% | 19639/26162 | ✓18823 | ✗ 26] ✓ tests/test_lazy_session_regressions.py (17✓, 6.4s) [ 75.1% | 19648/26162 | ✓18832 | ✗ 26] ✓ tests/tools/test_accretion_caps.py (9✓, 3.4s) [ 75.2% | 19671/26162 | ✓18855 | ✗ 26] ✓ tests/tools/test_browser_camofox.py (23✓, 2.4s) [ 75.3% | 19711/26162 | ✓18895 | ✗ 26] ✓ tests/run_agent/test_streaming.py (40✓, 23.1s) [ 75.4% | 19716/26162 | ✓18900 | ✗ 26] ✓ tests/tools/test_browser_cloud_provider_cache.py (5✓, 1.3s) [ 75.5% | 19743/26162 | ✓18927 | ✗ 26] ✓ tests/tools/test_browser_camofox_persistence.py (27✓, 2.1s) [ 75.8% | 19837/26162 | ✓19021 | ✗ 26] ✓ tests/test_yuanbao_pipeline.py (94✓, 4.2s) [ 75.9% | 19844/26162 | ✓19028 | ✗ 26] ✓ tests/tools/test_browser_content_none_guard.py (7✓, 1.2s) [ 75.9% | 19851/26162 | ✓19035 | ✗ 26] ✓ tests/tools/test_browser_cdp_override.py (7✓, 2.3s) [ 75.9% | 19857/26162 | ✓19041 | ✗ 26] ✓ tests/tools/test_browser_cleanup.py (6✓, 2.0s) [ 76.3% | 19950/26162 | ✓19134 | ✗ 26] ✓ tests/run_agent/test_provider_parity.py (93✓, 29.6s) [ 76.3% | 19960/26162 | ✓19144 | ✗ 26] ✓ tests/tools/test_browser_chromium_check.py (10✓, 2.1s) [ 76.3% | 19968/26162 | ✓19152 | ✗ 26] ✓ tests/tools/test_browser_cloud_fallback.py (8✓, 2.3s) [ 76.3% | 19972/26162 | ✓19156 | ✗ 26] ✓ tests/tools/test_browser_supervisor_healthcheck.py (4✓, 0.8s) [ 76.4% | 19992/26162 | ✓19176 | ✗ 26] ✓ tests/tools/test_budget_config.py (20✓, 1.0s) [ 76.5% | 20006/26162 | ✓19190 | ✗ 26] ✓ tests/tools/test_browser_eval_supervisor_path.py (14✓, 2.4s) [ 76.5% | 20026/26162 | ✓19210 | ✗ 26] ✓ tests/tools/test_browser_hybrid_routing.py (20✓, 2.2s) [ 76.6% | 20046/26162 | ✓19230 | ✗ 26] ✓ tests/tools/test_clarify_tool.py (20✓, 1.2s) [ 76.7% | 20064/26162 | ✓19248 | ✗ 26] ✓ tests/tools/test_browser_orphan_reaper.py (18✓, 2.2s) [ 76.8% | 20080/26162 | ✓19264 | ✗ 26] ✓ tests/test_batch_runner_checkpoint.py (16✓, 12.5s) [ 76.8% | 20099/26162 | ✓19283 | ✗ 26] ✓ tests/test_ctx_halving_fix.py (19✓, 12.8s) [ 76.9% | 20114/26162 | ✓19298 | ✗ 26] ✓ tests/tools/test_clarify_gateway.py (15✓, 2.5s) [ 77.0% | 20156/26162 | ✓19340 | ✗ 26] ✓ tests/tools/test_browser_lightpanda.py (42✓, 3.4s) [ 77.2% | 20185/26162 | ✓19366 | ✗ 26] ✓ tests/tools/test_code_execution_windows_env.py (26✓ 3s, 1.5s) [ 77.2% | 20204/26162 | ✓19385 | ✗ 26] ✓ tests/tools/test_command_guards.py (19✓, 1.8s) [ 77.6% | 20289/26162 | ✓19470 | ✗ 26] ✓ tests/test_mcp_serve.py (85✓, 10.7s) [ 77.7% | 20317/26162 | ✓19498 | ✗ 26] ✓ tests/tools/test_computer_use_vision_routing.py (28✓, 1.5s) [ 77.7% | 20333/26162 | ✓19514 | ✗ 26] ✓ tests/test_sanitize_tool_error.py (16✓, 9.4s) [ 77.8% | 20343/26162 | ✓19524 | ✗ 26] ✓ tests/tools/test_config_null_guard.py (10✓, 1.7s) [ 78.2% | 20450/26162 | ✓19631 | ✗ 26] ✓ tests/tools/test_clipboard.py (107✓, 3.6s) [ 78.2% | 20458/26162 | ✓19639 | ✗ 26] ✓ tests/tools/test_credential_pool_env_fallback.py (8✓, 1.6s) [ 78.3% | 20487/26162 | ✓19668 | ✗ 26] ✓ tests/tools/test_credential_files.py (29✓, 2.0s) [ 78.4% | 20511/26162 | ✓19692 | ✗ 26] ✓ tests/test_model_tools.py (24✓, 11.4s) [ 78.4% | 20517/26162 | ✓19698 | ✗ 26] ✓ tests/test_transform_llm_output_hook.py (6✓, 10.0s) [ 78.5% | 20526/26162 | ✓19707 | ✗ 26] ✓ tests/test_transform_tool_result_hook.py (9✓, 10.1s) [ 78.5% | 20550/26162 | ✓19731 | ✗ 26] ✓ tests/tools/test_cron_approval_mode.py (24✓, 1.9s) [ 78.6% | 20555/26162 | ✓19736 | ✗ 26] ✓ tests/test_get_tool_definitions_cache_isolation.py (5✓, 14.1s) [ 78.6% | 20560/26162 | ✓19741 | ✗ 26] ✓ tests/tools/test_delegate_composite_toolsets.py (5✓, 1.3s) [ 78.6% | 20568/26162 | ✓19749 | ✗ 26] ✓ tests/tools/test_cron_prompt_injection.py (8✓, 1.9s) [ 78.7% | 20581/26162 | ✓19762 | ✗ 26] ✓ tests/tools/test_debug_helpers.py (13✓, 1.6s) [ 78.8% | 20609/26162 | ✓19790 | ✗ 26] ✓ tests/test_plugin_skills.py (28✓, 11.9s) [ 79.5% | 20797/26162 | ✓19978 | ✗ 26] ✓ tests/tools/test_approval.py (188✓, 9.7s) [ 79.5% | 20798/26162 | ✓19979 | ✗ 26] ✓ tests/tools/test_dockerfile_node_modules_perms.py (1✓, 1.0s) [ 79.7% | 20848/26162 | ✓20029 | ✗ 26] ✓ tests/tools/test_cronjob_tools.py (50✓, 2.3s) [ 79.7% | 20857/26162 | ✓20038 | ✗ 26] ✓ tests/tools/test_docker_find.py (9✓, 1.2s) [ 79.8% | 20877/26162 | ✓20058 | ✗ 26] ✓ tests/tools/test_browser_ssrf_local.py (20✓, 7.0s) [ 79.8% | 20882/26162 | ✓20063 | ✗ 26] ✓ tests/tools/test_feishu_tools.py (5✓, 0.8s) [ 79.8% | 20887/26162 | ✓20068 | ✗ 26] ✓ tests/tools/test_delegate_toolset_scope.py (5✓, 2.2s) [ 79.9% | 20894/26162 | ✓20075 | ✗ 26] ✓ tests/tools/test_dockerfile_pid1_reaping.py (7✓, 1.3s) [ 80.1% | 20959/26162 | ✓20140 | ✗ 26] ✓ tests/run_agent/test_run_agent_codex_responses.py (65✓, 33.7s) [ 80.2% | 20971/26162 | ✓20152 | ✗ 26] ✓ tests/test_model_tools_async_bridge.py (12✓, 13.8s) [ 80.3% | 21006/26162 | ✓20187 | ✗ 26] ✓ tests/tools/test_file_operations_edge_cases.py (35✓, 1.5s) [ 80.3% | 21018/26162 | ✓20199 | ✗ 26] ✓ tests/tools/test_cross_profile_guard.py (12✓, 3.6s) [ 80.4% | 21035/26162 | ✓20216 | ✗ 26] ✓ tests/tools/test_env_passthrough.py (17✓, 2.0s) [ 80.4% | 21040/26162 | ✓20221 | ✗ 26] ✓ tests/tools/test_file_ops_cwd_tracking.py (5✓, 1.9s) [ 80.5% | 21055/26162 | ✓20236 | ✗ 26] ✓ tests/tools/test_file_sync.py (15✓, 1.7s) [ 80.5% | 21065/26162 | ✓20246 | ✗ 26] ✓ tests/tools/test_browser_secret_exfil.py (10✓, 9.1s) [ 80.5% | 21069/26162 | ✓20250 | ✗ 26] ✓ tests/tools/test_file_tools_container_config.py (4✓, 1.2s) [ 80.6% | 21080/26162 | ✓20261 | ✗ 26] ✓ tests/tools/test_file_staleness.py (11✓, 2.4s) [ 80.7% | 21119/26162 | ✓20300 | ✗ 26] ✓ tests/tools/test_file_read_guards.py (39✓, 2.6s) [ 80.8% | 21137/26162 | ✓20318 | ✗ 26] ✓ tests/tools/test_file_sync_back.py (18✓, 1.9s) [ 81.1% | 21214/26162 | ✓20395 | ✗ 26] ✓ tests/tools/test_checkpoint_manager.py (77✓, 8.8s) [ 81.2% | 21234/26162 | ✓20415 | ✗ 26] ✓ tests/tools/test_browser_hardening.py (20✓, 10.4s) [ 81.2% | 21253/26162 | ✓20434 | ✗ 26] ✓ tests/tools/test_browser_cdp_tool.py (19✓, 11.3s) [ 81.3% | 21275/26162 | ✓20456 | ✗ 26] ✓ tests/tools/test_browser_homebrew_paths.py (22✓, 10.0s) [ 81.4% | 21291/26162 | ✓20472 | ✗ 26] ✓ tests/tools/test_file_write_safety.py (16✓, 1.8s) [ 81.7% | 21368/26162 | ✓20549 | ✗ 26] ✓ tests/tools/test_file_operations.py (77✓, 3.6s) [ 81.7% | 21372/26162 | ✓20550 | ✗ 26] ✓ tests/tools/test_file_sync_perf.py (1✓ 3s, 2.5s) [ 81.7% | 21380/26162 | ✓20558 | ✗ 26] ✓ tests/tools/test_force_dangerous_override.py (8✓, 1.8s) [ 81.8% | 21411/26162 | ✓20589 | ✗ 26] ✓ tests/tools/test_file_tools.py (31✓, 2.5s) [ 81.9% | 21422/26162 | ✓20600 | ✗ 26] ✓ tests/tools/test_hidden_dir_filter.py (11✓, 1.0s) [ 81.9% | 21427/26162 | ✓20605 | ✗ 26] ✓ tests/tools/test_heartbeat_stale_thresholds.py (5✓, 1.2s) [ 82.0% | 21450/26162 | ✓20628 | ✗ 26] ✓ tests/tools/test_docker_environment.py (23✓, 5.0s) [ 82.0% | 21453/26162 | ✓20631 | ✗ 26] ✓ tests/tools/test_image_generation_plugin_dispatch.py (3✓, 1.4s) [ 82.1% | 21487/26162 | ✓20665 | ✗ 26] ✓ tests/tools/test_fuzzy_match.py (34✓, 2.2s) [ 82.1% | 21490/26162 | ✓20668 | ✗ 26] ✓ tests/tools/test_kanban_codex_lane_skill.py (3✓, 1.2s) [ 82.2% | 21496/26162 | ✓20674 | ✗ 26] ✓ tests/tools/test_image_generation_env.py (6✓, 1.7s) [ 82.2% | 21500/26162 | ✓20678 | ✗ 26] ✓ tests/tools/test_init_session_cwd_respect.py (4✓, 1.4s) [ 82.2% | 21510/26162 | ✓20688 | ✗ 26] ✓ tests/tools/test_local_env_windows_msys.py (10✓, 1.5s) [ 82.3% | 21538/26162 | ✓20716 | ✗ 26] ✓ tests/tools/test_llm_content_none_guard.py (28✓, 1.9s) [ 82.4% | 21554/26162 | ✓20732 | ✗ 26] ✓ tests/tools/test_file_state_registry.py (16✓, 4.8s) [ 82.5% | 21581/26162 | ✓20759 | ✗ 26] ✓ tests/tools/test_browser_console.py (27✓, 13.3s) [ 82.5% | 21590/26162 | ✓20768 | ✗ 26] ✓ tests/tools/test_local_env_cwd_recovery.py (9✓, 1.9s) [ 82.5% | 21595/26162 | ✓20773 | ✗ 26] ✓ tests/tools/test_managed_tool_gateway.py (5✓, 1.0s) [ 82.6% | 21597/26162 | ✓20775 | ✗ 26] ✓ tests/tools/test_local_interrupt_cleanup.py (2✓, 1.8s) [ 82.6% | 21602/26162 | ✓20775 | ✗ 31] ✗ tests/tools/test_managed_media_gateways.py (5✗, 1.3s) ╔╍ Failed: tests/tools/test_managed_media_gateways.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ║ > transcription_tools = _load_tool_module( ║ "tools.transcription_tools", ║ "transcription_tools.py", ║ ) ║ ║ tests/tools/test_managed_media_gateways.py:277: ║ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ║ tests/tools/test_managed_media_gateways.py:17: in _load_tool_module ║ spec.loader.exec_module(module) ║ :995: in exec_module ║ ??? ║ :1132: in get_code ║ ??? ║ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ║ ║ self = <_frozen_importlib_external.SourceFileLoader object at 0x74bc83ef7170> ║ path = '/home/ari/src/hermes-agent/main/tools/transcription_tools.py' ║ ║ > ??? ║ E FileNotFoundError: [Errno 2] No such file or directory: '/home/ari/src/hermes-agent/main/tools/transcription_tools.py' ║ ║ :1190: FileNotFoundError ║ =========================== short test summary info ============================ ║ FAILED tests/tools/test_managed_media_gateways.py::test_managed_fal_submit_uses_gateway_origin_and_nous_token ║ FAILED tests/tools/test_managed_media_gateways.py::test_managed_fal_submit_reuses_cached_sync_client ║ FAILED tests/tools/test_managed_media_gateways.py::test_openai_tts_uses_managed_audio_gateway_when_direct_key_absent ║ FAILED tests/tools/test_managed_media_gateways.py::test_openai_tts_accepts_openai_api_key_as_direct_fallback ║ FAILED tests/tools/test_managed_media_gateways.py::test_transcription_uses_model_specific_response_formats ║ ============================== 5 failed in 0.76s =============================== ║ ║ Repro: python -m pytest tests/tools/test_managed_media_gateways.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 82.6% | 21620/26162 | ✓20793 | ✗ 31] ✓ tests/tools/test_local_env_blocklist.py (18✓, 2.3s) [ 82.7% | 21640/26162 | ✓20813 | ✗ 31] ✓ tests/test_timezone.py (20✓, 16.9s) [ 83.1% | 21740/26162 | ✓20913 | ✗ 31] ✓ tests/tools/test_hardline_blocklist.py (100✓, 3.7s) [ 83.1% | 21747/26162 | ✓20920 | ✗ 31] ✓ tests/tools/test_managed_modal_environment.py (7✓, 1.7s) [ 83.2% | 21761/26162 | ✓20934 | ✗ 31] ✓ tests/tools/test_local_shell_init.py (14✓, 2.1s) [ 83.2% | 21764/26162 | ✓20937 | ✗ 31] ✓ tests/tools/test_local_tempdir.py (3✓, 2.3s) [ 83.4% | 21819/26162 | ✓20989 | ✗ 34] ✗ tests/tools/test_image_generation.py (52✓ 3✗, 3.9s) ╔╍ Failed: tests/tools/test_image_generation.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ # Trigger the lazy import on first call. Idempotent. ║ _load_fal_client() ║ _resolve_fal_provider() ║ request_headers = {"x-idempotency-key": str(uuid.uuid4())} ║ managed_gateway = _resolve_managed_fal_gateway() ║ if managed_gateway is None: ║ return fal_client.submit(model, arguments=arguments, headers=request_headers) ║ ║ managed_client = _get_managed_fal_client(managed_gateway) ║ try: ║ return managed_client.submit( ║ model, ║ arguments=arguments, ║ headers=request_headers, ║ ) ║ except Exception as exc: ║ # 4xx from the managed gateway typically means the portal doesn't ║ # currently proxy this model (allowlist miss, billing gate, etc.) ║ # — surface a clearer message with actionable remediation instead ║ # of a raw HTTP error from httpx. ║ > status = _extract_http_status(exc) ║ ^^^^^^^^^^^^^^^^^^^^^^^^^ ║ E TypeError: 'NoneType' object is not callable ║ ║ tools/image_generation_tool.py:435: TypeError ║ =========================== short test summary info ============================ ║ FAILED tests/tools/test_image_generation.py::TestManagedGatewayErrorTranslation::test_4xx_translates_to_value_error_with_remediation ║ FAILED tests/tools/test_image_generation.py::TestManagedGatewayErrorTranslation::test_5xx_is_not_translated ║ FAILED tests/tools/test_image_generation.py::TestManagedGatewayErrorTranslation::test_non_http_exception_from_managed_bubbles_up ║ ========================= 3 failed, 52 passed in 2.61s ========================= ║ ║ Repro: python -m pytest tests/tools/test_image_generation.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 83.4% | 21832/26162 | ✓21002 | ✗ 34] ✓ tests/tools/test_computer_use_capture_routing.py (13✓, 11.0s) [ 83.5% | 21835/26162 | ✓21005 | ✗ 34] ✓ tests/tools/test_mcp_circuit_breaker.py (3✓, 2.1s) [ 83.5% | 21841/26162 | ✓21011 | ✗ 34] ✓ tests/tools/test_mcp_empty_error_message.py (6✓, 2.1s) [ 83.5% | 21843/26162 | ✓21013 | ✗ 34] ✓ tests/tools/test_mcp_cancelled_error_propagation.py (2✓, 2.4s) [ 83.5% | 21852/26162 | ✓21022 | ✗ 34] ✓ tests/tools/test_mcp_image_content.py (9✓, 2.2s) [ 83.6% | 21862/26162 | ✓21032 | ✗ 34] ✓ tests/tools/test_mcp_dynamic_discovery.py (10✓, 2.7s) [ 83.6% | 21864/26162 | ✓21034 | ✗ 34] ✓ tests/tools/test_mcp_oauth_bidirectional.py (2✓, 2.5s) [ 84.3% | 22046/26162 | ✓21216 | ✗ 34] ✓ tests/test_tui_gateway_server.py (182✓, 19.1s) [ 84.3% | 22056/26162 | ✓21226 | ✗ 34] ✓ tests/tools/test_managed_browserbase_and_modal.py (10✓, 4.1s) [ 84.4% | 22077/26162 | ✓21247 | ✗ 34] ✓ tests/tools/test_mcp_invalid_url.py (21✓, 2.9s) [ 84.4% | 22084/26162 | ✓21254 | ✗ 34] ✓ tests/tools/test_mcp_oauth_manager.py (7✓, 2.6s) [ 84.4% | 22093/26162 | ✓21263 | ✗ 34] ✓ tests/tools/test_mcp_oauth_cold_load_expiry.py (9✓, 2.9s) [ 84.5% | 22102/26162 | ✓21272 | ✗ 34] ✓ tests/tools/test_mcp_oauth_metadata.py (9✓, 2.5s) [ 84.8% | 22173/26162 | ✓21343 | ✗ 34] ✓ tests/tools/test_computer_use.py (71✓, 13.1s) [ 84.8% | 22178/26162 | ✓21348 | ✗ 34] ✓ tests/tools/test_mcp_oauth_integration.py (5✓, 2.9s) [ 84.8% | 22186/26162 | ✓21356 | ✗ 34] ✓ tests/tools/test_mcp_probe.py (8✓, 2.7s) [ 84.8% | 22190/26162 | ✓21360 | ✗ 34] ✓ tests/tools/test_mcp_reconnect_signal.py (4✓, 2.4s) [ 84.8% | 22194/26162 | ✓21364 | ✗ 34] ✓ tests/tools/test_mcp_sse_transport.py (4✓, 2.4s) [ 84.9% | 22202/26162 | ✓21370 | ✗ 36] ✗ tests/tools/test_local_background_child_hang.py (6✓ 2✗, 5.9s) ╔╍ Failed: tests/tools/test_local_background_child_hang.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ > assert result["returncode"] == 0 ║ E assert 127 == 0 ║ ║ tests/tools/test_local_background_child_hang.py:129: AssertionError ║ _ TestBackgroundChildDoesNotHang.test_invalid_utf8_uses_replacement_not_fallback _ ║ ║ self = ║ local_env = ║ ║ def test_invalid_utf8_uses_replacement_not_fallback(self, local_env): ║ """Truly invalid byte sequences must be substituted with U+FFFD (matching ║ the pre-fix ``errors='replace'`` behaviour of the old ``TextIOWrapper`` ║ drain), not clobber the entire buffer with a fallback placeholder. ║ """ ║ # Write a deliberate invalid UTF-8 lead byte sandwiched between valid ASCII ║ cmd = ( ║ 'python3 -c \'import sys; ' ║ 'sys.stdout.buffer.write(b"before "); ' ║ 'sys.stdout.buffer.write(b"\\xff\\xfe"); ' ║ 'sys.stdout.buffer.write(b" after\\n")\'' ║ ) ║ result = local_env.execute(cmd, timeout=5) ║ > assert result["returncode"] == 0 ║ E assert 127 == 0 ║ ║ tests/tools/test_local_background_child_hang.py:151: AssertionError ║ =========================== short test summary info ============================ ║ FAILED tests/tools/test_local_background_child_hang.py::TestBackgroundChildDoesNotHang::test_utf8_multibyte_across_read_boundary ║ FAILED tests/tools/test_local_background_child_hang.py::TestBackgroundChildDoesNotHang::test_invalid_utf8_uses_replacement_not_fallback ║ ========================= 2 failed, 6 passed in 4.71s ========================== ║ ║ Repro: python -m pytest tests/tools/test_local_background_child_hang.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 84.9% | 22203/26162 | ✓21371 | ✗ 36] ✓ tests/tools/test_memory_tool_import_fallback.py (1✓, 1.5s) [ 84.9% | 22206/26162 | ✓21374 | ✗ 36] ✓ tests/tools/test_memory_tool_schema.py (3✓, 1.7s) [ 85.1% | 22273/26162 | ✓21441 | ✗ 36] ✓ tests/tools/test_mcp_oauth.py (67✓, 4.6s) [ 85.2% | 22278/26162 | ✓21446 | ✗ 36] ✓ tests/tools/test_mcp_structured_content.py (5✓, 2.7s) [ 85.2% | 22287/26162 | ✓21455 | ✗ 36] ✓ tests/tools/test_modal_bulk_upload.py (9✓, 1.6s) [ 85.2% | 22291/26162 | ✓21459 | ✗ 36] ✓ tests/tools/test_modal_snapshot_isolation.py (4✓, 1.6s) [ 85.2% | 22300/26162 | ✓21468 | ✗ 36] ✓ tests/tools/test_microsoft_graph_auth.py (9✓, 1.9s) [ 85.3% | 22304/26162 | ✓21472 | ✗ 36] ✓ tests/tools/test_mcp_tool_issue_948.py (4✓, 2.8s) [ 85.3% | 22322/26162 | ✓21490 | ✗ 36] ✓ tests/tools/test_mcp_tool_session_expired.py (18✓, 2.5s) [ 85.4% | 22330/26162 | ✓21498 | ✗ 36] ✓ tests/tools/test_mcp_utility_capability_gating.py (8✓, 2.4s) [ 85.4% | 22337/26162 | ✓21505 | ✗ 36] ✓ tests/tools/test_mcp_tool_401_handling.py (7✓, 3.1s) [ 85.4% | 22346/26162 | ✓21514 | ✗ 36] ✓ tests/tools/test_microsoft_graph_client.py (9✓, 2.0s) [ 85.5% | 22371/26162 | ✓21539 | ✗ 36] ✓ tests/tools/test_notify_on_complete.py (25✓, 1.9s) [ 85.6% | 22383/26162 | ✓21551 | ✗ 36] ✓ tests/tools/test_parse_env_var.py (12✓, 1.9s) [ 85.6% | 22407/26162 | ✓21575 | ✗ 36] ✓ tests/tools/test_osv_check.py (24✓, 2.1s) [ 85.9% | 22471/26162 | ✓21639 | ✗ 36] ✓ tests/tools/test_memory_tool.py (64✓, 2.8s) [ 85.9% | 22478/26162 | ✓21646 | ✗ 36] ✓ tests/tools/test_delegate_subagent_timeout_diagnostic.py (7✓, 12.8s) [ 86.0% | 22488/26162 | ✓21656 | ✗ 36] ✓ tests/tools/test_pr_6656_regressions.py (10✓, 1.6s) [ 86.1% | 22513/26162 | ✓21681 | ✗ 36] ✓ tests/tools/test_patch_parser.py (25✓, 2.1s) [ 86.1% | 22515/26162 | ✓21683 | ✗ 36] ✓ tests/tools/test_send_message_telegram_proxy.py (2✓, 1.0s) [ 86.3% | 22566/26162 | ✓21734 | ✗ 36] ✓ tests/tools/test_file_tools_live.py (51✓, 10.1s) [ 86.3% | 22572/26162 | ✓21740 | ✗ 36] ✓ tests/tools/test_resolve_path.py (6✓, 1.4s) [ 86.3% | 22580/26162 | ✓21745 | ✗ 36] ✓ tests/tools/test_signal_media.py (5✓ 3s, 1.0s) [ 86.3% | 22589/26162 | ✓21754 | ✗ 36] ✓ tests/tools/test_search_hidden_dirs.py (9✓, 1.3s) [ 86.4% | 22592/26162 | ✓21757 | ✗ 36] ✓ tests/tools/test_mixture_of_agents_tool.py (3✓, 3.3s) [ 86.5% | 22632/26162 | ✓21797 | ✗ 36] ✓ tests/tools/test_schema_sanitizer.py (40✓, 1.8s) [ 86.5% | 22639/26162 | ✓21804 | ✗ 36] ✓ tests/tools/test_singularity_preflight.py (7✓, 1.3s) [ 86.6% | 22648/26162 | ✓21813 | ✗ 36] ✓ tests/tools/test_shared_container_task_id.py (9✓, 1.6s) [ 86.6% | 22653/26162 | ✓21818 | ✗ 36] ✓ tests/tools/test_skill_provenance.py (5✓, 0.9s) [ 86.6% | 22659/26162 | ✓21823 | ✗ 36] ✓ tests/tools/test_skill_view_path_check.py (5✓ 1s, 0.8s) [ 86.6% | 22663/26162 | ✓21827 | ✗ 36] ✓ tests/tools/test_skill_env_passthrough.py (4✓, 1.4s) [ 86.7% | 22688/26162 | ✓21852 | ✗ 36] ✓ tests/tools/test_read_loop_detection.py (25✓, 2.3s) [ 86.8% | 22697/26162 | ✓21861 | ✗ 36] ✓ tests/tools/test_skill_improvements.py (9✓, 1.5s) [ 86.8% | 22716/26162 | ✓21880 | ✗ 36] ✓ tests/tools/test_send_message_missing_platforms.py (19✓, 2.1s) [ 86.9% | 22722/26162 | ✓21886 | ✗ 36] ✓ tests/tools/test_skill_view_traversal.py (6✓, 1.0s) [ 86.9% | 22733/26162 | ✓21897 | ✗ 36] ✓ tests/tools/test_skills_ast_audit.py (11✓, 1.3s) [ 87.2% | 22823/26162 | ✓21987 | ✗ 36] ✓ tests/tools/test_discord_tool.py (90✓, 14.1s) [ 87.3% | 22837/26162 | ✓22001 | ✗ 36] ✓ tests/tools/test_skill_size_limits.py (14✓, 1.7s) [ 87.3% | 22846/26162 | ✓22010 | ✗ 36] ✓ tests/tools/test_skills_hub_clawhub.py (9✓, 1.5s) [ 87.4% | 22853/26162 | ✓22017 | ✗ 36] ✓ tests/tools/test_skills_hub_browse_sh.py (7✓, 1.5s) [ 87.4% | 22874/26162 | ✓22038 | ✗ 36] ✓ tests/tools/test_ssh_bulk_upload.py (21✓, 1.2s) [ 87.5% | 22890/26162 | ✓22054 | ✗ 36] ✓ tests/tools/test_slash_confirm.py (16✓, 1.3s) [ 87.5% | 22898/26162 | ✓22062 | ✗ 36] ✓ tests/tools/test_symlink_prefix_confusion.py (8✓, 1.1s) [ 87.6% | 22912/26162 | ✓22076 | ✗ 36] ✓ tests/tools/test_spotify_client.py (14✓, 1.3s) [ 87.8% | 22976/26162 | ✓22139 | ✗ 37] ✗ tests/tools/test_process_registry.py (63✓ 1✗, 3.8s) ╔╍ Failed: tests/tools/test_process_registry.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ self = ║ registry = ║ tmp_path = PosixPath('/tmp/pytest-of-ethie/pytest-43067/test_close_stdin_allows_eof_dr0') ║ ║ def test_close_stdin_allows_eof_driven_process_to_finish(self, registry, tmp_path): ║ """PTY mode: writing data + sending EOF lets an EOF-driven child finish. ║ ║ Background non-PTY mode used to expose subprocess stdin via a pipe, ║ but PR #214b95392 detached non-PTY stdin to DEVNULL to fix keyboard ║ lockout (#17959). For interactive stdin → PTY mode is now the only ║ supported path. ║ """ ║ session = registry.spawn_local( ║ 'python3 -c "import sys; print(sys.stdin.read().strip())"', ║ cwd=str(tmp_path), ║ use_pty=True, ║ ) ║ ║ try: ║ time.sleep(0.5) ║ > assert registry.submit_stdin(session.id, "hello")["status"] == "ok" ║ E AssertionError: assert 'already_exited' == 'ok' ║ E ║ E - ok ║ E + already_exited ║ ║ tests/tools/test_process_registry.py:314: AssertionError ║ =========================== short test summary info ============================ ║ FAILED tests/tools/test_process_registry.py::TestStdinHelpers::test_close_stdin_allows_eof_driven_process_to_finish ║ ========================= 1 failed, 63 passed in 3.27s ========================= ║ ║ Repro: python -m pytest tests/tools/test_process_registry.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 87.9% | 22994/26162 | ✓22157 | ✗ 37] ✓ tests/tools/test_sync_back_backends.py (18✓, 1.2s) [ 88.1% | 23057/26162 | ✓22220 | ✗ 37] ✓ tests/tools/test_skills_guard.py (63✓, 2.5s) [ 88.2% | 23082/26162 | ✓22234 | ✗ 37] ✓ tests/tools/test_ssh_environment.py (14✓ 11s, 1.9s) [ 88.6% | 23168/26162 | ✓22320 | ✗ 37] ✓ tests/tools/test_skill_manager_tool.py (86✓, 3.2s) [ 88.6% | 23170/26162 | ✓22322 | ✗ 37] ✓ tests/tools/test_terminal_none_command_guard.py (2✓, 1.1s) [ 88.7% | 23215/26162 | ✓22367 | ✗ 37] ✓ tests/tools/test_skills_sync.py (45✓, 2.6s) [ 88.8% | 23226/26162 | ✓22378 | ✗ 37] ✓ tests/tools/test_terminal_foreground_timeout_cap.py (11✓, 1.8s) [ 88.9% | 23260/26162 | ✓22412 | ✗ 37] ✓ tests/tools/test_terminal_compound_background.py (34✓, 2.4s) [ 88.9% | 23265/26162 | ✓22417 | ✗ 37] ✓ tests/tools/test_terminal_config_env_sync.py (5✓, 2.5s) [ 89.0% | 23296/26162 | ✓22448 | ✗ 37] ✓ tests/tools/test_terminal_exit_semantics.py (31✓, 2.4s) [ 89.1% | 23310/26162 | ✓22462 | ✗ 37] ✓ tests/tools/test_terminal_tool.py (14✓, 1.7s) [ 89.2% | 23330/26162 | ✓22482 | ✗ 37] ✓ tests/tools/test_terminal_requirements.py (20✓, 2.0s) [ 89.2% | 23333/26162 | ✓22485 | ✗ 37] ✓ tests/tools/test_terminal_tool_pty_fallback.py (3✓, 1.7s) [ 89.2% | 23345/26162 | ✓22497 | ✗ 37] ✓ tests/tools/test_threaded_process_handle.py (12✓, 1.3s) [ 89.6% | 23432/26162 | ✓22584 | ✗ 37] ✓ tests/tools/test_skills_tool.py (87✓, 3.5s) [ 89.6% | 23444/26162 | ✓22596 | ✗ 37] ✓ tests/tools/test_todo_tool.py (12✓, 1.3s) [ 89.9% | 23512/26162 | ✓22664 | ✗ 37] ✓ tests/tools/test_homeassistant_tool.py (68✓, 13.2s) [ 89.9% | 23514/26162 | ✓22666 | ✗ 37] ✓ tests/tools/test_terminal_task_cwd.py (2✓, 2.5s) [ 89.9% | 23532/26162 | ✓22684 | ✗ 37] ✓ tests/tools/test_tool_output_limits.py (18✓, 1.1s) [ 90.0% | 23538/26162 | ✓22690 | ✗ 37] ✓ tests/tools/test_interrupt.py (6✓, 13.5s) [ 90.0% | 23540/26162 | ✓22692 | ✗ 37] ✓ tests/tools/test_tts_opus_routing.py (2✓, 1.2s) [ 90.0% | 23550/26162 | ✓22702 | ✗ 37] ✓ tests/tools/test_transcription_dotenv_fallback.py (10✓, 1.3s) [ 90.2% | 23591/26162 | ✓22743 | ✗ 37] ✓ tests/tools/test_skill_usage.py (41✓, 5.3s) [ 90.4% | 23638/26162 | ✓22790 | ✗ 37] ✓ tests/tools/test_tool_backend_helpers.py (47✓, 2.1s) [ 90.4% | 23646/26162 | ✓22798 | ✗ 37] ✓ tests/tools/test_tts_dotenv_fallback.py (8✓, 1.4s) [ 90.9% | 23770/26162 | ✓22922 | ✗ 37] ✓ tests/tools/test_skills_hub.py (124✓, 5.2s) [ 90.9% | 23786/26162 | ✓22922 | ✗ 37] ✗ tests/tools/test_vercel_sandbox_environment.py (16e, 1.4s) ╔╍ Failed: tests/tools/test_vercel_sandbox_environment.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ ??? ║ :1360: in _find_and_load ║ ??? ║ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ║ ║ name = 'tools.environments.vercel_sandbox' ║ import_ = ║ ║ > ??? ║ E ModuleNotFoundError: No module named 'tools.environments.vercel_sandbox' ║ ║ :1324: ModuleNotFoundError ║ =========================== short test summary info ============================ ║ ERROR tests/tools/test_vercel_sandbox_environment.py::TestStartup::test_default_cwd_tracks_remote_workspace_root ║ ERROR tests/tools/test_vercel_sandbox_environment.py::TestStartup::test_tilde_cwd_resolves_against_remote_home ║ ERROR tests/tools/test_vercel_sandbox_environment.py::TestStartup::test_pending_sandbox_timeout_raises_descriptive_error ║ ERROR tests/tools/test_vercel_sandbox_environment.py::TestFileSync::test_initial_sync_uploads_managed_files_under_remote_home ║ ERROR tests/tools/test_vercel_sandbox_environment.py::TestFileSync::test_execute_resyncs_changed_managed_files ║ ERROR tests/tools/test_vercel_sandbox_environment.py::TestFileSync::test_cleanup_syncs_back_snapshots_closes_and_is_idempotent ║ ERROR tests/tools/test_vercel_sandbox_environment.py::TestFileSync::test_cleanup_sync_back_failure_from_download_does_not_block_snapshot ║ ERROR tests/tools/test_vercel_sandbox_environment.py::TestExecute::test_execute_recreates_unhealthy_sandbox_before_running_command[terminal-state] ║ ERROR tests/tools/test_vercel_sandbox_environment.py::TestExecute::test_execute_recreates_unhealthy_sandbox_before_running_command[refresh-failure] ║ ERROR tests/tools/test_vercel_sandbox_environment.py::TestExecute::test_run_bash_handle_uses_captured_sandbox_for_exec_and_cancel ║ ERROR tests/tools/test_vercel_sandbox_environment.py::TestSnapshotPersistence::test_create_restores_from_saved_snapshot ║ ERROR tests/tools/test_vercel_sandbox_environment.py::TestSnapshotPersistence::test_restore_failure_prunes_snapshot_and_falls_back_to_fresh_sandbox ║ ERROR tests/tools/test_vercel_sandbox_environment.py::TestSnapshotPersistence::test_cleanup_stops_when_snapshot_fails_without_storing_metadata ║ ERROR tests/tools/test_vercel_sandbox_environment.py::TestSnapshotPersistence::test_non_persistent_cleanup_stops_without_snapshot ║ ERROR tests/tools/test_vercel_sandbox_environment.py::TestSnapshotPersistence::test_persistent_cleanup_without_task_id_stops_without_snapshot ║ ERROR tests/tools/test_vercel_sandbox_environment.py::TestCleanup::test_cleanup_continues_when_sync_back_raises ║ ============================== 16 errors in 0.81s ============================== ║ ║ Repro: python -m pytest tests/tools/test_vercel_sandbox_environment.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 90.9% | 23793/26162 | ✓22929 | ✗ 37] ✓ tests/tools/test_video_generation_dispatch.py (7✓, 1.3s) [ 91.1% | 23822/26162 | ✓22958 | ✗ 37] ✓ tests/tools/test_video_analyze.py (29✓, 1.7s) [ 91.1% | 23827/26162 | ✓22963 | ✗ 37] ✓ tests/tools/test_video_generation_dynamic_schema.py (5✓, 1.5s) [ 91.3% | 23876/26162 | ✓23012 | ✗ 37] ✓ tests/tools/test_tool_result_storage.py (49✓, 2.6s) [ 91.6% | 23966/26162 | ✓23102 | ✗ 37] ✓ tests/tools/test_tirith_security.py (90✓, 3.9s) [ 91.7% | 23984/26162 | ✓23120 | ✗ 37] ✓ tests/tools/test_vision_native_fast_path.py (18✓, 2.2s) [ 91.8% | 24013/26162 | ✓23149 | ✗ 37] ✓ tests/tools/test_watch_patterns.py (29✓, 2.3s) [ 91.8% | 24015/26162 | ✓23151 | ✗ 37] ✓ tests/tools/test_terminal_timeout_output.py (2✓, 5.6s) [ 92.2% | 24127/26162 | ✓23263 | ✗ 37] ✓ tests/tools/test_url_safety.py (112✓, 3.8s) [ 92.4% | 24166/26162 | ✓23302 | ✗ 37] ✓ tests/tools/test_web_providers_xai.py (39✓, 2.4s) [ 92.6% | 24215/26162 | ✓23351 | ✗ 37] ✓ tests/tools/test_web_tools_config.py (49✓, 2.9s) [ 92.6% | 24235/26162 | ✓23371 | ✗ 37] ✓ tests/tools/test_write_deny.py (20✓, 1.3s) [ 92.7% | 24251/26162 | ✓23387 | ✗ 37] ✓ tests/tools/test_mcp_stability.py (16✓, 14.1s) [ 93.0% | 24335/26162 | ✓23466 | ✗ 41] ✗ tests/tools/test_voice_cli_integration.py (79✓ 4✗ 1s, 4.3s) ╔╍ Failed: tests/tools/test_voice_cli_integration.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ def test_play_audio_called(self, _tts, mock_play, _mkd, _isf, _gsz, _unl, _cp): ║ cli = _make_voice_cli(_voice_tts=True) ║ cli._voice_speak_response("Hello world") ║ > mock_play.assert_called_once() ║ ║ tests/tools/test_voice_cli_integration.py:1134: ║ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ║ ║ self = ║ ║ def assert_called_once(self): ║ """assert that the mock was called only once. ║ """ ║ if not self.call_count == 1: ║ msg = ("Expected '%s' to have been called once. Called %s times.%s" ║ % (self._mock_name or 'mock', ║ self.call_count, ║ self._calls_repr())) ║ > raise AssertionError(msg) ║ E AssertionError: Expected 'play_audio_file' to have been called once. Called 0 times. ║ ║ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:928: AssertionError ║ ------------------------------ Captured log call ------------------------------- ║ WARNING cli:cli.py:10906 Voice TTS playback failed: tts tool provider not registered ║ =========================== short test summary info ============================ ║ FAILED tests/tools/test_voice_cli_integration.py::TestVoiceSpeakResponseReal::test_markdown_stripped ║ FAILED tests/tools/test_voice_cli_integration.py::TestVoiceSpeakResponseReal::test_code_blocks_removed ║ FAILED tests/tools/test_voice_cli_integration.py::TestVoiceSpeakResponseReal::test_long_text_truncated ║ FAILED tests/tools/test_voice_cli_integration.py::TestVoiceSpeakResponseReal::test_play_audio_called ║ =================== 4 failed, 79 passed, 1 skipped in 3.44s ==================== ║ ║ Repro: python -m pytest tests/tools/test_voice_cli_integration.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 93.1% | 24360/26162 | ✓23491 | ✗ 41] ✓ tests/tools/test_x_search_tool.py (25✓, 2.1s) [ 93.2% | 24372/26162 | ✓23503 | ✗ 41] ✓ tests/tools/test_windows_compat.py (12✓, 2.9s) [ 93.2% | 24376/26162 | ✓23507 | ✗ 41] ✓ tests/tui_gateway/test_entry_sys_path.py (4✓, 1.1s) [ 93.2% | 24395/26162 | ✓23526 | ✗ 41] ✓ tests/tools/test_yolo_mode.py (19✓, 2.1s) [ 93.5% | 24457/26162 | ✓23566 | ✗ 48] ✗ tests/tools/test_voice_mode.py (40✓ 7✗ 15s, 5.2s) ╔╍ Failed: tests/tools/test_voice_mode.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ np = pytest.importorskip("numpy") ║ ║ tests/tools/test_voice_mode.py::TestAudioLevelIndicator::test_peak_rms_tracks_maximum ║ /home/ari/src/hermes-agent/main/tests/tools/test_voice_mode.py:1154: PytestDeprecationWarning: ║ Module 'numpy' was found, but when imported by pytest it raised: ║ ImportError('\n\nIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!\n\nImporting the numpy C-extensions failed. This error can happen for\nmany reasons, often due to issues with your setup or how NumPy was\ninstalled.\n\nWe have compiled some common reasons and troubleshooting tips at:\n\n https://numpy.org/devdocs/user/troubleshooting-importerror.html\n\nPlease note and check the following:\n\n * The Python version is: Python 3.12 from "/home/ari/src/hermes-agent/main/.venv/bin/python"\n * The NumPy version is: "2.4.3"\n\nand make sure that they are the versions you expect.\n\nPlease carefully study the information and documentation linked above.\nThis is unlikely to be a NumPy issue but will be caused by a bad install\nor environment on your machine.\n\nOriginal error was: libstdc++.so.6: cannot open shared object file: No such file or directory\n') ║ In pytest 9.1 this warning will become an error by default. ║ You can fix the underlying problem, or alternatively overwrite this behavior and silence this warning by passing exc_type=ImportError explicitly. ║ See https://docs.pytest.org/en/stable/deprecations.html#pytest-importorskip-default-behavior-regarding-importerror ║ np = pytest.importorskip("numpy") ║ ║ tests/tools/test_voice_mode.py::TestConfigurableSilenceParams::test_custom_threshold_and_duration ║ /home/ari/src/hermes-agent/main/tests/tools/test_voice_mode.py:1190: PytestDeprecationWarning: ║ Module 'numpy' was found, but when imported by pytest it raised: ║ ImportError('\n\nIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!\n\nImporting the numpy C-extensions failed. This error can happen for\nmany reasons, often due to issues with your setup or how NumPy was\ninstalled.\n\nWe have compiled some common reasons and troubleshooting tips at:\n\n https://numpy.org/devdocs/user/troubleshooting-importerror.html\n\nPlease note and check the following:\n\n * The Python version is: Python 3.12 from "/home/ari/src/hermes-agent/main/.venv/bin/python"\n * The NumPy version is: "2.4.3"\n\nand make sure that they are the versions you expect.\n\nPlease carefully study the information and documentation linked above.\nThis is unlikely to be a NumPy issue but will be caused by a bad install\nor environment on your machine.\n\nOriginal error was: libstdc++.so.6: cannot open shared object file: No such file or directory\n') ║ In pytest 9.1 this warning will become an error by default. ║ You can fix the underlying problem, or alternatively overwrite this behavior and silence this warning by passing exc_type=ImportError explicitly. ║ See https://docs.pytest.org/en/stable/deprecations.html#pytest-importorskip-default-behavior-regarding-importerror ║ np = pytest.importorskip("numpy") ║ ║ -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ║ =========================== short test summary info ============================ ║ FAILED tests/tools/test_voice_mode.py::TestCheckVoiceRequirements::test_all_requirements_met ║ FAILED tests/tools/test_voice_mode.py::TestCheckVoiceRequirements::test_missing_stt_provider ║ FAILED tests/tools/test_voice_mode.py::TestTranscribeRecording::test_delegates_to_transcribe_audio ║ FAILED tests/tools/test_voice_mode.py::TestTranscribeRecording::test_filters_whisper_hallucination ║ FAILED tests/tools/test_voice_mode.py::TestTranscribeRecording::test_does_not_filter_real_speech ║ FAILED tests/tools/test_voice_mode.py::TestTranscribeRecording::test_oversized_wav_is_chunked_and_stitched ║ FAILED tests/tools/test_voice_mode.py::TestTranscribeRecording::test_oversized_wav_reports_failing_chunk ║ ============ 7 failed, 40 passed, 15 skipped, 15 warnings in 4.16s ============= ║ ║ Repro: python -m pytest tests/tools/test_voice_mode.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 94.0% | 24592/26162 | ✓23701 | ✗ 48] ✓ tests/tools/test_delegate.py (135✓, 23.9s) [ 94.0% | 24599/26162 | ✓23708 | ✗ 48] ✓ tests/tui_gateway/test_render.py (7✓, 0.7s) [ 94.1% | 24630/26162 | ✓23739 | ✗ 48] ✓ tests/tools/test_registry.py (31✓, 12.3s) [ 94.2% | 24632/26162 | ✓23741 | ✗ 48] ✓ tests/tui_gateway/test_review_summary_callback.py (2✓, 0.9s) [ 94.4% | 24690/26162 | ✓23799 | ✗ 48] ✓ tests/tools/test_windows_native_support.py (58✓, 3.7s) [ 94.4% | 24697/26162 | ✓23806 | ✗ 48] ✓ tests/website/test_generate_skill_docs.py (7✓, 1.1s) [ 94.4% | 24706/26162 | ✓23815 | ✗ 48] ✓ tests/tools/test_terminal_output_transform_hook.py (9✓, 10.0s) [ 94.5% | 24712/26162 | ✓23821 | ✗ 48] ✓ tests/tools/test_terminal_tool_requirements.py (6✓, 10.8s) [ 94.5% | 24726/26162 | ✓23835 | ✗ 48] ✓ tests/tools/test_web_providers.py (14✓, 8.5s) [ 95.0% | 24847/26162 | ✓23955 | ✗ 49] ✗ tests/tools/test_send_message_tool.py (120✓ 1✗, 15.3s) ╔╍ Failed: tests/tools/test_send_message_tool.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ ║ File "/home/ari/src/hermes-agent/main/plugins/platforms/matrix/hermes_agent_matrix/adapter.py", line 643, in connect ║ resp = await client.whoami() ║ ^^^^^^^^^^^^^^^^^^^^^ ║ File "/home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/mautrix/client/api/authentication.py", line 190, in whoami ║ resp = await self.api.request(Method.GET, Path.v3.account.whoami) ║ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ║ File "/home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/mautrix/api.py", line 447, in request ║ raise MatrixConnectionError(str(e)) from e ║ mautrix.errors.base.MatrixConnectionError: Cannot connect to host matrix.example.com:443 ssl:default [Name or service not known] ║ =============================== warnings summary =============================== ║ .venv/lib/python3.12/site-packages/discord/player.py:30 ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/discord/player.py:30: DeprecationWarning: 'audioop' is deprecated and slated for removal in Python 3.13 ║ import audioop ║ ║ tests/tools/test_send_message_tool.py::TestSendMessageTool::test_cron_duplicate_target_is_skipped_and_explained ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). ║ _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) ║ ║ tests/tools/test_send_message_tool.py::TestSendMessageTool::test_cron_duplicate_target_is_skipped_and_explained ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated ║ def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): ║ ║ tests/tools/test_send_message_tool.py::TestSendMessageTool::test_cron_duplicate_target_is_skipped_and_explained ║ /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions ║ warnings.warn( # deprecated in 14.0 - 2024-11-09 ║ ║ -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ║ =========================== short test summary info ============================ ║ FAILED tests/tools/test_send_message_tool.py::TestSendToPlatformChunking::test_send_matrix_via_adapter_sends_document ║ ================== 1 failed, 120 passed, 4 warnings in 12.99s ================== ║ ║ Repro: python -m pytest tests/tools/test_send_message_tool.py ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ [ 95.1% | 24872/26162 | ✓23980 | ✗ 49] ✓ tests/tools/test_web_providers_searxng.py (25✓, 8.8s) [ 95.2% | 24907/26162 | ✓24015 | ✗ 49] ✓ tests/tools/test_tts_plugin_dispatch.py (35✓, 10.6s) [ 95.3% | 24929/26162 | ✓24037 | ✗ 49] ✓ tests/tools/test_web_providers_brave_free.py (22✓, 9.2s) [ 95.4% | 24947/26162 | ✓24055 | ✗ 49] ✓ tests/tools/test_web_providers_ddgs.py (18✓, 9.2s) [ 95.5% | 24975/26162 | ✓24083 | ✗ 49] ✓ tests/tools/test_transcription_plugin_dispatch.py (28✓, 11.1s) [ 95.6% | 25013/26162 | ✓24121 | ✗ 49] ✓ tests/tools/test_session_search.py (38✓, 16.4s) [ 95.7% | 25035/26162 | ✓24143 | ✗ 49] ✓ tests/tools/test_website_policy.py (22✓, 8.8s) [ 95.7% | 25050/26162 | ✓24158 | ✗ 49] ✓ tests/tools/test_web_tools_tavily.py (15✓, 9.5s) [ 95.8% | 25066/26162 | ✓24174 | ✗ 49] ✓ tests/tools/test_video_generation_tool_surface_matrix.py (16✓, 11.1s) [ 96.1% | 25136/26162 | ✓24238 | ✗ 49] ✓ tests/tools/test_vision_tools.py (64✓ 6s, 10.7s) [ 96.1% | 25143/26162 | ✓24245 | ✗ 49] ✓ tests/tui_gateway/test_make_agent_provider.py (7✓, 6.8s) [ 96.9% | 25339/26162 | ✓24441 | ✗ 49] ✓ tests/tools/test_mcp_tool.py (196✓, 20.9s) [ 97.2% | 25420/26162 | ✓24522 | ✗ 49] ✓ tests/tools/test_kanban_tools.py (81✓, 25.4s) [ 97.3% | 25456/26162 | ✓24558 | ✗ 49] ✓ tests/tools/test_code_execution_modes.py (36✓, 35.4s) [ 97.3% | 25465/26162 | ✓24567 | ✗ 49] ✓ tests/tools/test_zombie_process_cleanup.py (9✓, 12.1s) [ 97.4% | 25487/26162 | ✓24588 | ✗ 49] ✓ tests/tools/test_browser_supervisor.py (21✓ 1s, 42.9s) [ 97.6% | 25540/26162 | ✓24641 | ✗ 49] ✓ tests/tui_gateway/test_protocol.py (53✓, 20.1s) [ 98.4% | 25756/26162 | ✓24857 | ✗ 49] ✓ tests/test_hermes_state.py (216✓, 56.8s) [ 99.7% | 26084/26162 | ✓25185 | ✗ 49] ✓ tests/run_agent/test_run_agent.py (328✓, 76.7s) [ 99.7% | 26095/26162 | ✓25196 | ✗ 49] ✓ tests/tui_gateway/test_goal_command.py (11✓, 27.2s) [100.0% | 26162/26162 | ✓25263 | ✗ 49] ✓ tests/tools/test_code_execution.py (67✓, 107.3s) === Summary: 1204 files, 25263 tests passed, 49 failed (100% complete) in 285.7s (32 workers) === Durations cached to test_durations.json (1204 files) === Per-file subprocess time distribution === Files: 1204 Total subprocess CPU-wall: 6859.3s (runner wall: 285.7s, parallelism: 32x) P50: 2.37s P90: 13.81s P95: 17.90s P99: 30.19s Max: 107.30s <1s: 57 files (5%) <2s: 481 files (40%) Top 10 slowest: 107.30s tests/tools/test_code_execution.py 76.74s tests/run_agent/test_run_agent.py 56.85s tests/test_hermes_state.py 42.95s tests/plugins/test_kanban_dashboard_plugin.py 42.85s tests/tools/test_browser_supervisor.py 38.92s tests/agent/test_context_compressor.py 35.42s tests/tools/test_code_execution_modes.py 35.27s tests/acp/test_server.py 33.74s tests/run_agent/test_run_agent_codex_responses.py 32.50s tests/hermes_cli/test_kanban_core_functionality.py === Failure output === --- plugins/platforms/telegram/tests/test_telegram_channel_posts.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 3 items plugins/platforms/telegram/tests/test_telegram_channel_posts.py EEE [100%] ==================================== ERRORS ==================================== _ ERROR at setup of test_build_message_event_uses_channel_identity_for_channel_posts _ cls = func = . at 0x7f89692f3d80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_text_handler_uses_effective_message_for_channel_post __ cls = func = . at 0x7f89692fefc0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_command_handler_uses_effective_message_for_channel_post _ cls = func = . at 0x7f89692ff560> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_channel_posts.py::test_build_message_event_uses_channel_identity_for_channel_posts ERROR plugins/platforms/telegram/tests/test_telegram_channel_posts.py::test_text_handler_uses_effective_message_for_channel_post ERROR plugins/platforms/telegram/tests/test_telegram_channel_posts.py::test_command_handler_uses_effective_message_for_channel_post ============================== 3 errors in 0.82s =============================== --- plugins/platforms/telegram/tests/test_telegram_audio_vs_voice.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 5 items plugins/platforms/telegram/tests/test_telegram_audio_vs_voice.py EEEEE [100%] ==================================== ERRORS ==================================== ____________ ERROR at setup of test_voice_message_still_transcribed ____________ cls = func = . at 0x77b392560400> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______________ ERROR at setup of test_audio_attachment_skips_stt _______________ cls = func = . at 0x77b392560540> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of test_audio_attachment_context_note_format __________ cls = func = . at 0x77b3925636a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of test_audio_attachment_skips_stt_when_stt_disabled ______ cls = func = . at 0x77b392562d40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of test_telegram_media_type_detection_audio_vs_voice ______ cls = func = . at 0x77b392507100> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_audio_vs_voice.py::test_voice_message_still_transcribed ERROR plugins/platforms/telegram/tests/test_telegram_audio_vs_voice.py::test_audio_attachment_skips_stt ERROR plugins/platforms/telegram/tests/test_telegram_audio_vs_voice.py::test_audio_attachment_context_note_format ERROR plugins/platforms/telegram/tests/test_telegram_audio_vs_voice.py::test_audio_attachment_skips_stt_when_stt_disabled ERROR plugins/platforms/telegram/tests/test_telegram_audio_vs_voice.py::test_telegram_media_type_detection_audio_vs_voice ============================== 5 errors in 1.71s =============================== --- plugins/platforms/telegram/tests/test_telegram_callback_auth_fail_closed.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 5 items plugins/platforms/telegram/tests/test_telegram_callback_auth_fail_closed.py E [ 20%] EEEE [100%] ==================================== ERRORS ==================================== _ ERROR at setup of TestCallbackAuthFailClosed.test_no_allowlist_no_allow_all_denies _ cls = func = . at 0x7fc01287d800> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestCallbackAuthFailClosed.test_no_allowlist_with_global_allow_all_permits _ cls = func = . at 0x7fc01287f2e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestCallbackAuthFailClosed.test_allowlist_with_matching_user_permits _ cls = func = . at 0x7fc01224d120> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestCallbackAuthFailClosed.test_allowlist_without_matching_user_denies _ cls = func = . at 0x7fc01224cc20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestCallbackAuthFailClosed.test_allowlist_wildcard_permits _ cls = func = . at 0x7fc013804f40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_callback_auth_fail_closed.py::TestCallbackAuthFailClosed::test_no_allowlist_no_allow_all_denies ERROR plugins/platforms/telegram/tests/test_telegram_callback_auth_fail_closed.py::TestCallbackAuthFailClosed::test_no_allowlist_with_global_allow_all_permits ERROR plugins/platforms/telegram/tests/test_telegram_callback_auth_fail_closed.py::TestCallbackAuthFailClosed::test_allowlist_with_matching_user_permits ERROR plugins/platforms/telegram/tests/test_telegram_callback_auth_fail_closed.py::TestCallbackAuthFailClosed::test_allowlist_without_matching_user_denies ERROR plugins/platforms/telegram/tests/test_telegram_callback_auth_fail_closed.py::TestCallbackAuthFailClosed::test_allowlist_wildcard_permits ============================== 5 errors in 1.73s =============================== --- plugins/platforms/dingtalk/tests/test_dingtalk.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 68 items plugins/platforms/dingtalk/tests/test_dingtalk.py EEEEEEEEEEEEEEEEEEEEEE [ 32%] EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE [100%] ==================================== ERRORS ==================================== _ ERROR at setup of TestDingTalkRequirements.test_returns_false_when_sdk_missing _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb639de510> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestDingTalkRequirements.test_returns_false_when_env_vars_missing _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63a2ff20> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestDingTalkRequirements.test_returns_true_when_all_available _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb637e2b70> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ____ ERROR at setup of TestDingTalkAdapterInit.test_reads_config_from_extra ____ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb637e3530> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ____ ERROR at setup of TestDingTalkAdapterInit.test_falls_back_to_env_vars _____ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb637e3710> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError __________ ERROR at setup of TestExtractText.test_text_as_dict_legacy __________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb637e32c0> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ______ ERROR at setup of TestExtractText.test_text_as_textcontent_object _______ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb638e22a0> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError __ ERROR at setup of TestExtractText.test_text_content_attr_with_empty_string __ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382f080> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ______ ERROR at setup of TestExtractText.test_rich_text_content_new_shape ______ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382cef0> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ________ ERROR at setup of TestExtractText.test_rich_text_legacy_shape _________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382d010> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _____________ ERROR at setup of TestExtractText.test_empty_message _____________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382e900> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _____ ERROR at setup of TestDeduplication.test_first_message_not_duplicate _____ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382fd40> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError __ ERROR at setup of TestDeduplication.test_second_same_message_is_duplicate ___ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63610800> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError __ ERROR at setup of TestDeduplication.test_different_messages_not_duplicate ___ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63611490> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ______ ERROR at setup of TestDeduplication.test_cache_cleanup_on_overflow ______ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63611400> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ____________ ERROR at setup of TestSend.test_send_posts_to_webhook _____________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382f440> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError __________ ERROR at setup of TestSend.test_send_fails_without_webhook __________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382fe60> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ___________ ERROR at setup of TestSend.test_send_uses_cached_webhook ___________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382dcd0> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ___________ ERROR at setup of TestSend.test_send_handles_http_error ____________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382e270> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ______ ERROR at setup of TestSend.test_send_image_renders_markdown_image _______ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382d100> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestSend.test_send_image_file_returns_explicit_unsupported_error _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382fcb0> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestSend.test_send_document_returns_explicit_unsupported_error _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63a8e4e0> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ____ ERROR at setup of TestConnect.test_disconnect_closes_session_websocket ____ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63a8eb40> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _________ ERROR at setup of TestConnect.test_connect_fails_without_sdk _________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb637e2450> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _____ ERROR at setup of TestConnect.test_connect_fails_without_credentials _____ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb637e2bd0> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ___________ ERROR at setup of TestConnect.test_disconnect_cleans_up ____________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63611550> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestConnect.test_disconnect_finalizes_open_streaming_cards _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb636116d0> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ____ ERROR at setup of TestWebhookDomainAllowlist.test_api_domain_accepted _____ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb636134a0> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ____ ERROR at setup of TestWebhookDomainAllowlist.test_oapi_domain_accepted ____ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb636109e0> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _______ ERROR at setup of TestWebhookDomainAllowlist.test_http_rejected ________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63612e70> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ___ ERROR at setup of TestWebhookDomainAllowlist.test_suffix_attack_rejected ___ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb636108c0> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestWebhookDomainAllowlist.test_unsanctioned_subdomain_rejected _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb637e2810> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestHandlerProcessIsAsync.test_process_is_coroutine_function _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb637e3f20> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestExtractMedia.test_voice_rich_text_item_classified_as_voice _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63a8fb60> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ___ ERROR at setup of TestExtractMedia.test_audio_rich_text_item_stays_audio ___ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63a8f2c0> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestAllowedUsersGate.test_empty_allowlist_allows_everyone __ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382d640> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestAllowedUsersGate.test_wildcard_allowlist_allows_everyone _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382cd40> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestAllowedUsersGate.test_matches_sender_id_case_insensitive _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382e510> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _________ ERROR at setup of TestAllowedUsersGate.test_matches_staff_id _________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63567d40> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _______ ERROR at setup of TestAllowedUsersGate.test_rejects_unknown_user _______ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63567860> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestAllowedUsersGate.test_env_var_csv_populates_allowlist __ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382c2f0> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ________ ERROR at setup of TestMentionPatterns.test_empty_patterns_list ________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382e1b0> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _______ ERROR at setup of TestMentionPatterns.test_pattern_matches_text ________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382dc10> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ____ ERROR at setup of TestMentionPatterns.test_pattern_is_case_insensitive ____ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382c770> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestMentionPatterns.test_invalid_regex_is_skipped_not_raised _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb637e3c20> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError __ ERROR at setup of TestMentionPatterns.test_env_var_json_populates_patterns __ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382c500> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestMentionPatterns.test_env_var_newline_fallback_when_not_json _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63613650> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ______ ERROR at setup of TestShouldProcessMessage.test_dm_always_accepted ______ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63613f80> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestShouldProcessMessage.test_group_rejected_when_require_mention_and_no_trigger _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63566f90> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestShouldProcessMessage.test_group_accepted_when_require_mention_disabled _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63566300> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestShouldProcessMessage.test_group_accepted_when_bot_is_mentioned _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63567440> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestShouldProcessMessage.test_group_accepted_when_text_matches_wake_word _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63630560> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestShouldProcessMessage.test_group_accepted_when_chat_in_free_response_list _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63567140> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestIncomingHandlerProcess.test_process_extracts_session_webhook _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63566db0> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestIncomingHandlerProcess.test_process_fallback_session_webhook_when_from_dict_misses_it _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb635662d0> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestIncomingHandlerProcess.test_process_returns_ack_immediately _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63613080> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestExtractTextMentions.test_preserves_at_mentions_in_text _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63611760> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError ___ ERROR at setup of TestExtractTextMentions.test_dingtalk_in_platform_enum ___ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb636139b0> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestMessageContextIsolation.test_contexts_keyed_by_chat_id _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63a8f470> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _____ ERROR at setup of TestCardLifecycle.test_final_reply_finalizes_card ______ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382e630> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError __ ERROR at setup of TestCardLifecycle.test_intermediate_send_stays_streaming __ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb6382c9e0> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestCardLifecycle.test_done_fires_only_when_reply_to_is_set _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63633650> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError __ ERROR at setup of TestCardLifecycle.test_edit_message_finalize_fires_done ___ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63632c60> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestCardLifecycle.test_edit_message_finalize_false_tracks_sibling _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63632180> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestCardLifecycle.test_next_send_auto_closes_sibling_streaming_cards _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63633530> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError __ ERROR at setup of TestCardLifecycle.test_edit_message_requires_message_id ___ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63633980> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError __ ERROR at setup of TestCardLifecycle.test_fire_done_reaction_is_idempotent ___ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb63631c10> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError _ ERROR at setup of TestDingTalkAdapterAICards.test_send_uses_ai_card_if_configured _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x72bb636311f0> @pytest.fixture(autouse=True) def _fake_dingtalk_optional_sdks(monkeypatch): """Keep DingTalk adapter tests hermetic when optional SDKs are absent.""" > from gateway.platforms import dingtalk as dt E ImportError: cannot import name 'dingtalk' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/dingtalk/tests/test_dingtalk.py:43: ImportError =========================== short test summary info ============================ ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestDingTalkRequirements::test_returns_false_when_sdk_missing ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestDingTalkRequirements::test_returns_false_when_env_vars_missing ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestDingTalkRequirements::test_returns_true_when_all_available ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestDingTalkAdapterInit::test_reads_config_from_extra ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestDingTalkAdapterInit::test_falls_back_to_env_vars ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestExtractText::test_text_as_dict_legacy ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestExtractText::test_text_as_textcontent_object ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestExtractText::test_text_content_attr_with_empty_string ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestExtractText::test_rich_text_content_new_shape ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestExtractText::test_rich_text_legacy_shape ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestExtractText::test_empty_message ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestDeduplication::test_first_message_not_duplicate ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestDeduplication::test_second_same_message_is_duplicate ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestDeduplication::test_different_messages_not_duplicate ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestDeduplication::test_cache_cleanup_on_overflow ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestSend::test_send_posts_to_webhook ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestSend::test_send_fails_without_webhook ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestSend::test_send_uses_cached_webhook ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestSend::test_send_handles_http_error ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestSend::test_send_image_renders_markdown_image ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestSend::test_send_image_file_returns_explicit_unsupported_error ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestSend::test_send_document_returns_explicit_unsupported_error ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestConnect::test_disconnect_closes_session_websocket ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestConnect::test_connect_fails_without_sdk ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestConnect::test_connect_fails_without_credentials ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestConnect::test_disconnect_cleans_up ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestConnect::test_disconnect_finalizes_open_streaming_cards ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestWebhookDomainAllowlist::test_api_domain_accepted ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestWebhookDomainAllowlist::test_oapi_domain_accepted ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestWebhookDomainAllowlist::test_http_rejected ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestWebhookDomainAllowlist::test_suffix_attack_rejected ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestWebhookDomainAllowlist::test_unsanctioned_subdomain_rejected ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestHandlerProcessIsAsync::test_process_is_coroutine_function ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestExtractMedia::test_voice_rich_text_item_classified_as_voice ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestExtractMedia::test_audio_rich_text_item_stays_audio ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestAllowedUsersGate::test_empty_allowlist_allows_everyone ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestAllowedUsersGate::test_wildcard_allowlist_allows_everyone ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestAllowedUsersGate::test_matches_sender_id_case_insensitive ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestAllowedUsersGate::test_matches_staff_id ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestAllowedUsersGate::test_rejects_unknown_user ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestAllowedUsersGate::test_env_var_csv_populates_allowlist ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestMentionPatterns::test_empty_patterns_list ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestMentionPatterns::test_pattern_matches_text ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestMentionPatterns::test_pattern_is_case_insensitive ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestMentionPatterns::test_invalid_regex_is_skipped_not_raised ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestMentionPatterns::test_env_var_json_populates_patterns ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestMentionPatterns::test_env_var_newline_fallback_when_not_json ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestShouldProcessMessage::test_dm_always_accepted ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestShouldProcessMessage::test_group_rejected_when_require_mention_and_no_trigger ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestShouldProcessMessage::test_group_accepted_when_require_mention_disabled ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestShouldProcessMessage::test_group_accepted_when_bot_is_mentioned ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestShouldProcessMessage::test_group_accepted_when_text_matches_wake_word ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestShouldProcessMessage::test_group_accepted_when_chat_in_free_response_list ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestIncomingHandlerProcess::test_process_extracts_session_webhook ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestIncomingHandlerProcess::test_process_fallback_session_webhook_when_from_dict_misses_it ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestIncomingHandlerProcess::test_process_returns_ack_immediately ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestExtractTextMentions::test_preserves_at_mentions_in_text ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestExtractTextMentions::test_dingtalk_in_platform_enum ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestMessageContextIsolation::test_contexts_keyed_by_chat_id ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestCardLifecycle::test_final_reply_finalizes_card ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestCardLifecycle::test_intermediate_send_stays_streaming ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestCardLifecycle::test_done_fires_only_when_reply_to_is_set ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestCardLifecycle::test_edit_message_finalize_fires_done ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestCardLifecycle::test_edit_message_finalize_false_tracks_sibling ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestCardLifecycle::test_next_send_auto_closes_sibling_streaming_cards ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestCardLifecycle::test_edit_message_requires_message_id ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestCardLifecycle::test_fire_done_reaction_is_idempotent ERROR plugins/platforms/dingtalk/tests/test_dingtalk.py::TestDingTalkAdapterAICards::test_send_uses_ai_card_if_configured ============================== 68 errors in 4.96s ============================== --- plugins/platforms/telegram/tests/test_telegram_max_doc_bytes.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 3 items plugins/platforms/telegram/tests/test_telegram_max_doc_bytes.py EEE [100%] ==================================== ERRORS ==================================== ____ ERROR at setup of test_max_doc_bytes_defaults_to_20mb_without_base_url ____ cls = func = . at 0x78c207534360> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of test_max_doc_bytes_raised_to_2gb_when_base_url_set _____ cls = func = . at 0x78c207537240> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of test_max_doc_bytes_empty_base_url_keeps_default _______ cls = func = . at 0x78c2075379c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_max_doc_bytes.py::test_max_doc_bytes_defaults_to_20mb_without_base_url ERROR plugins/platforms/telegram/tests/test_telegram_max_doc_bytes.py::test_max_doc_bytes_raised_to_2gb_when_base_url_set ERROR plugins/platforms/telegram/tests/test_telegram_max_doc_bytes.py::test_max_doc_bytes_empty_base_url_keeps_default ============================== 3 errors in 0.98s =============================== --- plugins/platforms/telegram/tests/test_telegram_forum_commands.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 5 items plugins/platforms/telegram/tests/test_telegram_forum_commands.py EEEEE [100%] ==================================== ERRORS ==================================== _________ ERROR at setup of test_ensure_forum_commands_skips_non_forum _________ cls = func = . at 0x7b3977d16660> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of test_ensure_forum_commands_skips_already_registered _____ cls = func = . at 0x7b3977d16980> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of test_ensure_forum_commands_registers_once __________ cls = func = . at 0x7b3977854e00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of test_ensure_forum_commands_handles_set_failure _______ cls = func = . at 0x7b3977855120> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___________ ERROR at setup of test_ensure_forum_commands_race_safety ___________ cls = func = . at 0x7b3977cf7420> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_forum_commands.py::test_ensure_forum_commands_skips_non_forum ERROR plugins/platforms/telegram/tests/test_telegram_forum_commands.py::test_ensure_forum_commands_skips_already_registered ERROR plugins/platforms/telegram/tests/test_telegram_forum_commands.py::test_ensure_forum_commands_registers_once ERROR plugins/platforms/telegram/tests/test_telegram_forum_commands.py::test_ensure_forum_commands_handles_set_failure ERROR plugins/platforms/telegram/tests/test_telegram_forum_commands.py::test_ensure_forum_commands_race_safety ============================== 5 errors in 1.36s =============================== --- plugins/platforms/telegram/tests/test_telegram_conflict.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 6 items plugins/platforms/telegram/tests/test_telegram_conflict.py EEEEEE [100%] ==================================== ERRORS ==================================== _________ ERROR at setup of test_connect_rejects_same_host_token_lock __________ cls = func = . at 0x7897872f3ce0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of test_polling_conflict_retries_before_fatal _________ cls = func = . at 0x78978711a8e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of test_polling_conflict_becomes_fatal_after_retries ______ cls = func = . at 0x78978711ade0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_connect_marks_retryable_fatal_error_for_startup_network_failure _ cls = func = . at 0x789787119ee0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of test_connect_clears_webhook_before_polling _________ cls = func = . at 0x789787119120> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of test_disconnect_skips_inactive_updater_and_app _______ cls = func = . at 0x78978711a3e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_conflict.py::test_connect_rejects_same_host_token_lock ERROR plugins/platforms/telegram/tests/test_telegram_conflict.py::test_polling_conflict_retries_before_fatal ERROR plugins/platforms/telegram/tests/test_telegram_conflict.py::test_polling_conflict_becomes_fatal_after_retries ERROR plugins/platforms/telegram/tests/test_telegram_conflict.py::test_connect_marks_retryable_fatal_error_for_startup_network_failure ERROR plugins/platforms/telegram/tests/test_telegram_conflict.py::test_connect_clears_webhook_before_polling ERROR plugins/platforms/telegram/tests/test_telegram_conflict.py::test_disconnect_skips_inactive_updater_and_app ============================== 6 errors in 2.26s =============================== --- plugins/platforms/telegram/tests/test_telegram_caption_merge.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 13 items plugins/platforms/telegram/tests/test_telegram_caption_merge.py EEEEEEEE [ 61%] EEEEE [100%] ==================================== ERRORS ==================================== ________ ERROR at setup of TestMergeCaptionBasic.test_no_existing_text _________ cls = func = . at 0x7e9934199bc0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of TestMergeCaptionBasic.test_empty_existing_text _______ cls = func = . at 0x7e99337e2e80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of TestMergeCaptionBasic.test_exact_duplicate_dropped _____ cls = func = . at 0x7e99337e3740> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestMergeCaptionBasic.test_different_captions_merged ____ cls = func = . at 0x7e99337e1b20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestMergeCaptionSubstringBug.test_shorter_caption_not_dropped_when_substring _ cls = func = . at 0x7e99337e39c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestMergeCaptionSubstringBug.test_longer_caption_not_dropped_when_contains_existing _ cls = func = . at 0x7e99337e3b00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestMergeCaptionSubstringBug.test_prefix_caption_not_dropped _ cls = func = . at 0x7e99337e3e20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestMergeCaptionWhitespace.test_trailing_space_treated_as_duplicate _ cls = func = . at 0x7e99337e2b60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestMergeCaptionWhitespace.test_leading_space_treated_as_duplicate _ cls = func = . at 0x7e99337e3ce0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestMergeCaptionWhitespace.test_whitespace_only_new_text_not_added _ cls = func = . at 0x7e9933354cc0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestMergeCaptionMultipleItems.test_three_unique_captions_all_present _ cls = func = . at 0x7e9933354fe0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestMergeCaptionMultipleItems.test_duplicate_in_middle_dropped _ cls = func = . at 0x7e9933354400> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestMergeCaptionMultipleItems.test_album_scenario_revenue_profit _ cls = func = . at 0x7e9933355580> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionBasic::test_no_existing_text ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionBasic::test_empty_existing_text ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionBasic::test_exact_duplicate_dropped ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionBasic::test_different_captions_merged ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionSubstringBug::test_shorter_caption_not_dropped_when_substring ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionSubstringBug::test_longer_caption_not_dropped_when_contains_existing ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionSubstringBug::test_prefix_caption_not_dropped ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionWhitespace::test_trailing_space_treated_as_duplicate ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionWhitespace::test_leading_space_treated_as_duplicate ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionWhitespace::test_whitespace_only_new_text_not_added ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionMultipleItems::test_three_unique_captions_all_present ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionMultipleItems::test_duplicate_in_middle_dropped ERROR plugins/platforms/telegram/tests/test_telegram_caption_merge.py::TestMergeCaptionMultipleItems::test_album_scenario_revenue_profit ============================== 13 errors in 4.49s ============================== --- plugins/platforms/telegram/tests/test_telegram_model_picker.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 4 items plugins/platforms/telegram/tests/test_telegram_model_picker.py EEEE [100%] ==================================== ERRORS ==================================== _ ERROR at setup of TestTelegramModelPicker.test_send_model_picker_escapes_dynamic_provider_label _ cls = func = . at 0x704e3b8ff920> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramModelPicker.test_back_button_escapes_dynamic_provider_label _ cls = func = . at 0x704e3b726b60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramModelPicker.test_model_selected_edits_message_on_success _ cls = func = . at 0x704e3b727060> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramModelPicker.test_retries_without_thread_when_thread_not_found _ cls = func = . at 0x704e3b7262a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_model_picker.py::TestTelegramModelPicker::test_send_model_picker_escapes_dynamic_provider_label ERROR plugins/platforms/telegram/tests/test_telegram_model_picker.py::TestTelegramModelPicker::test_back_button_escapes_dynamic_provider_label ERROR plugins/platforms/telegram/tests/test_telegram_model_picker.py::TestTelegramModelPicker::test_model_selected_edits_message_on_success ERROR plugins/platforms/telegram/tests/test_telegram_model_picker.py::TestTelegramModelPicker::test_retries_without_thread_when_thread_not_found ============================== 4 errors in 2.08s =============================== --- plugins/platforms/telegram/tests/test_telegram_reply_quote.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 4 items plugins/platforms/telegram/tests/test_telegram_reply_quote.py EEEE [100%] ==================================== ERRORS ==================================== ______ ERROR at setup of test_native_partial_quote_used_as_reply_to_text _______ cls = func = . at 0x7d08d782c4a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of test_full_reply_text_used_when_no_native_quote _______ cls = func = . at 0x7d08d782f240> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of test_caption_fallback_when_no_quote_and_no_text _______ cls = func = . at 0x7d08d782f9c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of test_empty_quote_text_falls_back_to_full_reply _______ cls = func = . at 0x7d08d782e980> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_reply_quote.py::test_native_partial_quote_used_as_reply_to_text ERROR plugins/platforms/telegram/tests/test_telegram_reply_quote.py::test_full_reply_text_used_when_no_native_quote ERROR plugins/platforms/telegram/tests/test_telegram_reply_quote.py::test_caption_fallback_when_no_quote_and_no_text ERROR plugins/platforms/telegram/tests/test_telegram_reply_quote.py::test_empty_quote_text_falls_back_to_full_reply ============================== 4 errors in 1.33s =============================== --- plugins/platforms/telegram/tests/test_telegram_send_path_health.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 3 items plugins/platforms/telegram/tests/test_telegram_send_path_health.py EEE [100%] ==================================== ERRORS ==================================== ____________ ERROR at setup of test_send_succeeds_when_path_healthy ____________ cls = func = . at 0x76f1a25542c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ________ ERROR at setup of test_send_short_circuits_when_path_degraded _________ cls = func = . at 0x76f1a25544a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of test_reconnect_storm_sets_and_heartbeat_clears_flag _____ cls = func = . at 0x76f1a2557600> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_send_path_health.py::test_send_succeeds_when_path_healthy ERROR plugins/platforms/telegram/tests/test_telegram_send_path_health.py::test_send_short_circuits_when_path_degraded ERROR plugins/platforms/telegram/tests/test_telegram_send_path_health.py::test_reconnect_storm_sets_and_heartbeat_clears_flag ============================== 3 errors in 1.36s =============================== --- plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 12 items plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py EEEEEE [ 50%] EEEEEE [100%] ==================================== ERRORS ==================================== _ ERROR at setup of TestTelegramSendClarify.test_multi_choice_renders_buttons_and_other _ cls = func = . at 0x7399f8ce8860> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestTelegramSendClarify.test_open_ended_no_keyboard _____ cls = func = . at 0x7399f8ceb560> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of TestTelegramSendClarify.test_not_connected _________ cls = func = . at 0x7399f8ce80e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramSendClarify.test_long_choice_rendered_in_body_not_truncated _ cls = func = . at 0x7399f8ceb240> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of TestTelegramSendClarify.test_html_escapes_question _____ cls = func = . at 0x7399f8cebb00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramClarifyCallback.test_numeric_choice_resolves_with_choice_text _ cls = func = . at 0x7399f8ceaca0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramClarifyCallback.test_other_button_flips_to_text_mode _ cls = func = . at 0x7399f8cebe20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of TestTelegramClarifyCallback.test_already_resolved ______ cls = func = . at 0x7399f8b182c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramClarifyCallback.test_unauthorized_user_rejected _ cls = func = . at 0x7399f8b180e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestTelegramClarifyCallback.test_invalid_choice_token ____ cls = func = . at 0x7399f8b19260> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestBaseAdapterClarifyFallback.test_numbered_text_fallback _ cls = func = . at 0x7399f8b194e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestBaseAdapterClarifyFallback.test_open_ended_fallback_renders_question_only _ cls = func = . at 0x7399f8b18540> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramSendClarify::test_multi_choice_renders_buttons_and_other ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramSendClarify::test_open_ended_no_keyboard ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramSendClarify::test_not_connected ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramSendClarify::test_long_choice_rendered_in_body_not_truncated ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramSendClarify::test_html_escapes_question ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramClarifyCallback::test_numeric_choice_resolves_with_choice_text ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramClarifyCallback::test_other_button_flips_to_text_mode ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramClarifyCallback::test_already_resolved ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramClarifyCallback::test_unauthorized_user_rejected ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestTelegramClarifyCallback::test_invalid_choice_token ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestBaseAdapterClarifyFallback::test_numbered_text_fallback ERROR plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py::TestBaseAdapterClarifyFallback::test_open_ended_fallback_renders_question_only ============================== 12 errors in 4.49s ============================== --- plugins/platforms/telegram/tests/test_telegram_approval_buttons.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 20 items plugins/platforms/telegram/tests/test_telegram_approval_buttons.py EEEEE [ 25%] EEEEEEEEEEEEEEE [100%] ==================================== ERRORS ==================================== ____ ERROR at setup of TestTelegramExecApproval.test_sends_inline_keyboard _____ cls = func = . at 0x7d5ced1f7060> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestTelegramExecApproval.test_stores_approval_state _____ cls = func = . at 0x7d5ced232160> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of TestTelegramExecApproval.test_sends_in_thread ________ cls = func = . at 0x7d5ced231ee0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramExecApproval.test_retries_without_thread_when_thread_not_found _ cls = func = . at 0x7d5ced231800> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ________ ERROR at setup of TestTelegramExecApproval.test_not_connected _________ cls = func = . at 0x7d5ced232d40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramExecApproval.test_disable_link_previews_sets_preview_kwargs _ cls = func = . at 0x7d5ced232fc0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramExecApproval.test_send_update_prompt_escapes_dynamic_prompt _ cls = func = . at 0x7d5ced233380> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestTelegramExecApproval.test_truncates_long_command ____ cls = func = . at 0x7d5ced233920> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramApprovalCallback.test_resolves_approval_on_click _ cls = func = . at 0x7d5ced233b00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramApprovalCallback.test_resume_typing_after_inline_approval _ cls = func = . at 0x7d5ced2332e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramApprovalCallback.test_typing_stays_paused_when_resolve_returns_zero _ cls = func = . at 0x7d5ced233240> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramApprovalCallback.test_approval_callback_escapes_dynamic_user_name _ cls = func = . at 0x7d5ced232340> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of TestTelegramApprovalCallback.test_deny_button ________ cls = func = . at 0x7d5ced1f6840> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramApprovalCallback.test_approval_callback_rejects_user_blocked_by_global_allowlist _ cls = func = . at 0x7d5ced1f6f20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of TestTelegramApprovalCallback.test_already_resolved _____ cls = func = . at 0x7d5ced2b4180> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramApprovalCallback.test_model_picker_callback_not_affected _ cls = func = . at 0x7d5ced2b45e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramApprovalCallback.test_update_prompt_callback_not_affected _ cls = func = . at 0x7d5ced2b54e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramApprovalCallback.test_update_prompt_callback_rejects_unauthorized_user _ cls = func = . at 0x7d5ced2b5760> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramApprovalCallback.test_update_prompt_callback_rejects_user_blocked_by_global_allowlist _ cls = func = . at 0x7d5ced2b4040> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramApprovalCallback.test_update_prompt_callback_allows_authorized_user _ cls = func = . at 0x7d5ced1f7420> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramExecApproval::test_sends_inline_keyboard ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramExecApproval::test_stores_approval_state ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramExecApproval::test_sends_in_thread ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramExecApproval::test_retries_without_thread_when_thread_not_found ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramExecApproval::test_not_connected ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramExecApproval::test_disable_link_previews_sets_preview_kwargs ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramExecApproval::test_send_update_prompt_escapes_dynamic_prompt ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramExecApproval::test_truncates_long_command ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_resolves_approval_on_click ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_resume_typing_after_inline_approval ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_typing_stays_paused_when_resolve_returns_zero ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_approval_callback_escapes_dynamic_user_name ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_deny_button ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_approval_callback_rejects_user_blocked_by_global_allowlist ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_already_resolved ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_model_picker_callback_not_affected ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_update_prompt_callback_not_affected ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_update_prompt_callback_rejects_unauthorized_user ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_update_prompt_callback_rejects_user_blocked_by_global_allowlist ERROR plugins/platforms/telegram/tests/test_telegram_approval_buttons.py::TestTelegramApprovalCallback::test_update_prompt_callback_allows_authorized_user ============================== 20 errors in 5.93s ============================== --- plugins/platforms/telegram/tests/test_telegram_slash_confirm.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 3 items plugins/platforms/telegram/tests/test_telegram_slash_confirm.py EEE [100%] ==================================== ERRORS ==================================== _ ERROR at setup of TestSendSlashConfirm.test_uses_markdown_v2_and_escapes_special_chars _ cls = func = . at 0x71c1a65544a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestSendSlashConfirm.test_stores_slash_confirm_state ____ cls = func = . at 0x71c1a65574c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of TestSendSlashConfirm.test_not_connected_returns_failure ___ cls = func = . at 0x71c1a6557740> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_slash_confirm.py::TestSendSlashConfirm::test_uses_markdown_v2_and_escapes_special_chars ERROR plugins/platforms/telegram/tests/test_telegram_slash_confirm.py::TestSendSlashConfirm::test_stores_slash_confirm_state ERROR plugins/platforms/telegram/tests/test_telegram_slash_confirm.py::TestSendSlashConfirm::test_not_connected_returns_failure ============================== 3 errors in 1.18s =============================== --- plugins/platforms/telegram/tests/test_telegram_status_update.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 5 items plugins/platforms/telegram/tests/test_telegram_status_update.py EEEEE [100%] ==================================== ERRORS ==================================== ________ ERROR at setup of test_first_call_sends_and_caches_message_id _________ cls = func = . at 0x7ca91b9553a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______________ ERROR at setup of test_second_call_edits_in_place _______________ cls = func = . at 0x7ca91b9556c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of test_edit_failure_falls_back_to_fresh_send _________ cls = func = . at 0x7ca91b957560> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __________ ERROR at setup of test_distinct_status_keys_do_not_collide __________ cls = func = . at 0x7ca91b957ba0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___________ ERROR at setup of test_distinct_chat_ids_do_not_collide ____________ cls = func = . at 0x7ca91b9554e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_status_update.py::test_first_call_sends_and_caches_message_id ERROR plugins/platforms/telegram/tests/test_telegram_status_update.py::test_second_call_edits_in_place ERROR plugins/platforms/telegram/tests/test_telegram_status_update.py::test_edit_failure_falls_back_to_fresh_send ERROR plugins/platforms/telegram/tests/test_telegram_status_update.py::test_distinct_status_keys_do_not_collide ERROR plugins/platforms/telegram/tests/test_telegram_status_update.py::test_distinct_chat_ids_do_not_collide ============================== 5 errors in 1.52s =============================== --- plugins/platforms/telegram/tests/test_telegram_network_reconnect.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 15 items plugins/platforms/telegram/tests/test_telegram_network_reconnect.py EEEE [ 26%] EEEEEEEEEEE [100%] ==================================== ERRORS ==================================== ___ ERROR at setup of test_reconnect_self_schedules_on_start_polling_failure ___ cls = func = . at 0x70095b2c3e20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_reconnect_does_not_self_schedule_when_fatal_error_set _ cls = func = . at 0x70095b0ee5c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of test_reconnect_success_resets_error_count __________ cls = func = . at 0x70095b0eed40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of test_reconnect_triggers_fatal_after_max_retries _______ cls = func = . at 0x70095b0ef100> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of test_reconnect_drains_polling_request_only _________ cls = func = . at 0x70095b0ee8e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __________ ERROR at setup of test_reconnect_continues_if_drain_fails ___________ cls = func = . at 0x70095b0ef6a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of test_initialize_still_runs_when_shutdown_fails _______ cls = func = . at 0x70095b0ed940> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of test_conflict_retry_also_drains_polling_connections _____ cls = func = . at 0x70095b0efce0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____________ ERROR at setup of test_drain_helper_noop_without_app _____________ cls = func = . at 0x70095b0eec00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of test_heartbeat_probe_no_op_when_polling_healthy _______ cls = func = . at 0x70095b0ef6a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_heartbeat_probe_reenters_ladder_when_updater_not_running _ cls = func = . at 0x70095b0ee480> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_heartbeat_probe_reenters_ladder_when_get_me_times_out _ cls = func = . at 0x70095b0ef7e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_heartbeat_probe_reenters_ladder_on_get_me_network_error _ cls = func = . at 0x70095b1a84a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of test_heartbeat_probe_skips_when_already_fatal ________ cls = func = . at 0x70095b1a8ae0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of test_reconnect_schedules_heartbeat_probe_on_success _____ cls = func = . at 0x70095b1a9120> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_reconnect_self_schedules_on_start_polling_failure ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_reconnect_does_not_self_schedule_when_fatal_error_set ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_reconnect_success_resets_error_count ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_reconnect_triggers_fatal_after_max_retries ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_reconnect_drains_polling_request_only ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_reconnect_continues_if_drain_fails ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_initialize_still_runs_when_shutdown_fails ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_conflict_retry_also_drains_polling_connections ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_drain_helper_noop_without_app ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_heartbeat_probe_no_op_when_polling_healthy ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_heartbeat_probe_reenters_ladder_when_updater_not_running ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_heartbeat_probe_reenters_ladder_when_get_me_times_out ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_heartbeat_probe_reenters_ladder_on_get_me_network_error ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_heartbeat_probe_skips_when_already_fatal ERROR plugins/platforms/telegram/tests/test_telegram_network_reconnect.py::test_reconnect_schedules_heartbeat_probe_on_success ============================== 15 errors in 4.70s ============================== --- plugins/platforms/feishu/tests/test_feishu_approval_buttons.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 35 items plugins/platforms/feishu/tests/test_feishu_approval_buttons.py ......... [ 25%] ........EEEEEEEEEEEEEEE... [100%] ==================================== ERRORS ==================================== _ ERROR at setup of TestCardActionCallbackResponse.test_drops_action_when_loop_not_ready _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x78fa94551a60> @pytest.fixture(autouse=False) def _patch_callback_card_types(monkeypatch): """Provide real-ish P2CardActionTriggerResponse / CallBackCard for tests.""" > monkeypatch.setattr(feishu_module, "P2CardActionTriggerResponse", _FakeP2Response) E AttributeError: has no attribute 'P2CardActionTriggerResponse' plugins/platforms/feishu/tests/test_feishu_approval_buttons.py:459: AttributeError _ ERROR at setup of TestCardActionCallbackResponse.test_returns_card_for_approve_action _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x78fa94551550> @pytest.fixture(autouse=False) def _patch_callback_card_types(monkeypatch): """Provide real-ish P2CardActionTriggerResponse / CallBackCard for tests.""" > monkeypatch.setattr(feishu_module, "P2CardActionTriggerResponse", _FakeP2Response) E AttributeError: has no attribute 'P2CardActionTriggerResponse' plugins/platforms/feishu/tests/test_feishu_approval_buttons.py:459: AttributeError _ ERROR at setup of TestCardActionCallbackResponse.test_returns_card_for_deny_action _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x78fa94553140> @pytest.fixture(autouse=False) def _patch_callback_card_types(monkeypatch): """Provide real-ish P2CardActionTriggerResponse / CallBackCard for tests.""" > monkeypatch.setattr(feishu_module, "P2CardActionTriggerResponse", _FakeP2Response) E AttributeError: has no attribute 'P2CardActionTriggerResponse' plugins/platforms/feishu/tests/test_feishu_approval_buttons.py:459: AttributeError _ ERROR at setup of TestCardActionCallbackResponse.test_ignores_missing_approval_id _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x78fa94551430> @pytest.fixture(autouse=False) def _patch_callback_card_types(monkeypatch): """Provide real-ish P2CardActionTriggerResponse / CallBackCard for tests.""" > monkeypatch.setattr(feishu_module, "P2CardActionTriggerResponse", _FakeP2Response) E AttributeError: has no attribute 'P2CardActionTriggerResponse' plugins/platforms/feishu/tests/test_feishu_approval_buttons.py:459: AttributeError _ ERROR at setup of TestCardActionCallbackResponse.test_no_card_for_non_approval_action _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x78fa945515b0> @pytest.fixture(autouse=False) def _patch_callback_card_types(monkeypatch): """Provide real-ish P2CardActionTriggerResponse / CallBackCard for tests.""" > monkeypatch.setattr(feishu_module, "P2CardActionTriggerResponse", _FakeP2Response) E AttributeError: has no attribute 'P2CardActionTriggerResponse' plugins/platforms/feishu/tests/test_feishu_approval_buttons.py:459: AttributeError _ ERROR at setup of TestCardActionCallbackResponse.test_falls_back_to_open_id_when_name_not_cached _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x78fa94553f20> @pytest.fixture(autouse=False) def _patch_callback_card_types(monkeypatch): """Provide real-ish P2CardActionTriggerResponse / CallBackCard for tests.""" > monkeypatch.setattr(feishu_module, "P2CardActionTriggerResponse", _FakeP2Response) E AttributeError: has no attribute 'P2CardActionTriggerResponse' plugins/platforms/feishu/tests/test_feishu_approval_buttons.py:459: AttributeError _ ERROR at setup of TestCardActionCallbackResponse.test_ignores_expired_cached_name _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x78fa9472cc20> @pytest.fixture(autouse=False) def _patch_callback_card_types(monkeypatch): """Provide real-ish P2CardActionTriggerResponse / CallBackCard for tests.""" > monkeypatch.setattr(feishu_module, "P2CardActionTriggerResponse", _FakeP2Response) E AttributeError: has no attribute 'P2CardActionTriggerResponse' plugins/platforms/feishu/tests/test_feishu_approval_buttons.py:459: AttributeError _ ERROR at setup of TestCardActionCallbackResponse.test_rejects_approval_click_from_unauthorized_user _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x78fa9472ee10> @pytest.fixture(autouse=False) def _patch_callback_card_types(monkeypatch): """Provide real-ish P2CardActionTriggerResponse / CallBackCard for tests.""" > monkeypatch.setattr(feishu_module, "P2CardActionTriggerResponse", _FakeP2Response) E AttributeError: has no attribute 'P2CardActionTriggerResponse' plugins/platforms/feishu/tests/test_feishu_approval_buttons.py:459: AttributeError _ ERROR at setup of TestCardActionCallbackResponse.test_rejects_approval_click_when_callback_chat_mismatches _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x78fa9472dbe0> @pytest.fixture(autouse=False) def _patch_callback_card_types(monkeypatch): """Provide real-ish P2CardActionTriggerResponse / CallBackCard for tests.""" > monkeypatch.setattr(feishu_module, "P2CardActionTriggerResponse", _FakeP2Response) E AttributeError: has no attribute 'P2CardActionTriggerResponse' plugins/platforms/feishu/tests/test_feishu_approval_buttons.py:459: AttributeError _ ERROR at setup of TestCardActionCallbackResponse.test_returns_card_for_update_prompt_yes _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x78fa9472c650> @pytest.fixture(autouse=False) def _patch_callback_card_types(monkeypatch): """Provide real-ish P2CardActionTriggerResponse / CallBackCard for tests.""" > monkeypatch.setattr(feishu_module, "P2CardActionTriggerResponse", _FakeP2Response) E AttributeError: has no attribute 'P2CardActionTriggerResponse' plugins/platforms/feishu/tests/test_feishu_approval_buttons.py:459: AttributeError _ ERROR at setup of TestCardActionCallbackResponse.test_returns_card_for_update_prompt_no _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x78fa9471d1c0> @pytest.fixture(autouse=False) def _patch_callback_card_types(monkeypatch): """Provide real-ish P2CardActionTriggerResponse / CallBackCard for tests.""" > monkeypatch.setattr(feishu_module, "P2CardActionTriggerResponse", _FakeP2Response) E AttributeError: has no attribute 'P2CardActionTriggerResponse' plugins/platforms/feishu/tests/test_feishu_approval_buttons.py:459: AttributeError _ ERROR at setup of TestCardActionCallbackResponse.test_ignores_missing_update_prompt_id _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x78fa9471e0f0> @pytest.fixture(autouse=False) def _patch_callback_card_types(monkeypatch): """Provide real-ish P2CardActionTriggerResponse / CallBackCard for tests.""" > monkeypatch.setattr(feishu_module, "P2CardActionTriggerResponse", _FakeP2Response) E AttributeError: has no attribute 'P2CardActionTriggerResponse' plugins/platforms/feishu/tests/test_feishu_approval_buttons.py:459: AttributeError _ ERROR at setup of TestCardActionCallbackResponse.test_already_resolved_update_prompt_returns_no_card _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x78fa9471e450> @pytest.fixture(autouse=False) def _patch_callback_card_types(monkeypatch): """Provide real-ish P2CardActionTriggerResponse / CallBackCard for tests.""" > monkeypatch.setattr(feishu_module, "P2CardActionTriggerResponse", _FakeP2Response) E AttributeError: has no attribute 'P2CardActionTriggerResponse' plugins/platforms/feishu/tests/test_feishu_approval_buttons.py:459: AttributeError _ ERROR at setup of TestCardActionCallbackResponse.test_update_prompt_schedule_failure_returns_no_card _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x78fa9472c3e0> @pytest.fixture(autouse=False) def _patch_callback_card_types(monkeypatch): """Provide real-ish P2CardActionTriggerResponse / CallBackCard for tests.""" > monkeypatch.setattr(feishu_module, "P2CardActionTriggerResponse", _FakeP2Response) E AttributeError: has no attribute 'P2CardActionTriggerResponse' plugins/platforms/feishu/tests/test_feishu_approval_buttons.py:459: AttributeError _ ERROR at setup of TestCardActionCallbackResponse.test_update_prompt_unauthorized_operator_returns_no_card _ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x78fa9486a330> @pytest.fixture(autouse=False) def _patch_callback_card_types(monkeypatch): """Provide real-ish P2CardActionTriggerResponse / CallBackCard for tests.""" > monkeypatch.setattr(feishu_module, "P2CardActionTriggerResponse", _FakeP2Response) E AttributeError: has no attribute 'P2CardActionTriggerResponse' plugins/platforms/feishu/tests/test_feishu_approval_buttons.py:459: AttributeError =============================== warnings summary =============================== .venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91 /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) .venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:26 /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:26: DeprecationWarning: There is no current event loop loop = asyncio.get_event_loop() .venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67 /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): .venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6 /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions warnings.warn( # deprecated in 14.0 - 2024-11-09 -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_drops_action_when_loop_not_ready ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_returns_card_for_approve_action ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_returns_card_for_deny_action ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_ignores_missing_approval_id ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_no_card_for_non_approval_action ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_falls_back_to_open_id_when_name_not_cached ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_ignores_expired_cached_name ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_rejects_approval_click_from_unauthorized_user ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_rejects_approval_click_when_callback_chat_mismatches ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_returns_card_for_update_prompt_yes ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_returns_card_for_update_prompt_no ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_ignores_missing_update_prompt_id ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_already_resolved_update_prompt_returns_no_card ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_update_prompt_schedule_failure_returns_no_card ERROR plugins/platforms/feishu/tests/test_feishu_approval_buttons.py::TestCardActionCallbackResponse::test_update_prompt_unauthorized_operator_returns_no_card ================== 20 passed, 4 warnings, 15 errors in 7.91s =================== --- plugins/platforms/telegram/tests/test_telegram_text_batching.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 5 items plugins/platforms/telegram/tests/test_telegram_text_batching.py EEEEE [100%] ==================================== ERRORS ==================================== _ ERROR at setup of TestTextBatching.test_single_message_dispatched_after_delay _ cls = func = . at 0x7e40c32f9080> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of TestTextBatching.test_split_messages_aggregated _______ cls = func = . at 0x7e40c32fbb00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of TestTextBatching.test_three_way_split_aggregated ______ cls = func = . at 0x7e40c32fb4c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of TestTextBatching.test_different_chats_not_merged ______ cls = func = . at 0x7e40c32fae80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of TestTextBatching.test_batch_cleans_up_after_flush ______ cls = func = . at 0x7e40c349ef20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_text_batching.py::TestTextBatching::test_single_message_dispatched_after_delay ERROR plugins/platforms/telegram/tests/test_telegram_text_batching.py::TestTextBatching::test_split_messages_aggregated ERROR plugins/platforms/telegram/tests/test_telegram_text_batching.py::TestTextBatching::test_three_way_split_aggregated ERROR plugins/platforms/telegram/tests/test_telegram_text_batching.py::TestTextBatching::test_different_chats_not_merged ERROR plugins/platforms/telegram/tests/test_telegram_text_batching.py::TestTextBatching::test_batch_cleans_up_after_flush ============================== 5 errors in 1.59s =============================== --- plugins/stt/tests/test_transcription.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 26 items plugins/stt/tests/test_transcription.py EEEEEEEEEEEEEEEEEEEEEEEEEE [100%] ==================================== ERRORS ==================================== _________ ERROR at setup of TestGetProvider.test_local_when_available __________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 37 def test_local_when_available(self): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:37 ___ ERROR at setup of TestGetProvider.test_explicit_local_no_cloud_fallback ____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 42 def test_explicit_local_no_cloud_fallback(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:42 ________ ERROR at setup of TestGetProvider.test_local_nothing_available ________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 52 def test_local_nothing_available(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:52 __________ ERROR at setup of TestGetProvider.test_openai_when_key_set __________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 60 def test_openai_when_key_set(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:60 __ ERROR at setup of TestGetProvider.test_explicit_openai_no_key_returns_none __ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 66 def test_explicit_openai_no_key_returns_none(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:66 _______ ERROR at setup of TestGetProvider.test_default_provider_is_local _______ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 74 def test_default_provider_is_local(self): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:74 _____ ERROR at setup of TestGetProvider.test_disabled_config_returns_none ______ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 79 def test_disabled_config_returns_none(self): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:79 __________ ERROR at setup of TestValidateAudioFile.test_missing_file ___________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 91 def test_missing_file(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:91 _______ ERROR at setup of TestValidateAudioFile.test_unsupported_format ________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 97 def test_unsupported_format(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:97 _____ ERROR at setup of TestValidateAudioFile.test_valid_file_returns_none _____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 105 def test_valid_file_returns_none(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:105 ____________ ERROR at setup of TestValidateAudioFile.test_too_large ____________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 111 def test_too_large(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:111 _____ ERROR at setup of TestTranscribeLocal.test_successful_transcription ______ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 135 def test_successful_transcription(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:135 ___________ ERROR at setup of TestTranscribeLocal.test_not_installed ___________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 158 def test_not_installed(self): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:158 ______________ ERROR at setup of TestTranscribeOpenAI.test_no_key ______________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 173 def test_no_key(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:173 _____ ERROR at setup of TestTranscribeOpenAI.test_successful_transcription _____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 180 def test_successful_transcription(self, monkeypatch, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:180 ________ ERROR at setup of TestTranscribeAudio.test_dispatches_to_local ________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 204 def test_dispatches_to_local(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:204 _______ ERROR at setup of TestTranscribeAudio.test_dispatches_to_openai ________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 217 def test_dispatches_to_openai(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:217 _____ ERROR at setup of TestTranscribeAudio.test_no_provider_returns_error _____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 230 def test_no_provider_returns_error(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:230 _ ERROR at setup of TestTranscribeAudio.test_disabled_config_returns_disabled_error _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 242 def test_disabled_config_returns_disabled_error(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:242 ____ ERROR at setup of TestTranscribeAudio.test_invalid_file_returns_error _____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 254 def test_invalid_file_returns_error(self): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:254 _ ERROR at setup of TestNormalizeLocalModel.test_openai_model_name_maps_to_default _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 269 def test_openai_model_name_maps_to_default(self): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:269 _ ERROR at setup of TestNormalizeLocalModel.test_groq_model_name_maps_to_default _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 273 def test_groq_model_name_maps_to_default(self): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:273 __ ERROR at setup of TestNormalizeLocalModel.test_valid_local_model_preserved __ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 277 def test_valid_local_model_preserved(self): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:277 _____ ERROR at setup of TestNormalizeLocalModel.test_none_maps_to_default ______ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 282 def test_none_maps_to_default(self): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:282 _ ERROR at setup of TestNormalizeLocalModel.test_warning_emitted_for_cloud_model _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 286 def test_warning_emitted_for_cloud_model(self, caplog): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:286 _ ERROR at setup of TestNormalizeLocalModel.test_local_transcribe_normalises_model _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py, line 293 def test_local_transcribe_normalises_model(self): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _clear_openai_env, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription.py:293 =========================== short test summary info ============================ ERROR plugins/stt/tests/test_transcription.py::TestGetProvider::test_local_when_available ERROR plugins/stt/tests/test_transcription.py::TestGetProvider::test_explicit_local_no_cloud_fallback ERROR plugins/stt/tests/test_transcription.py::TestGetProvider::test_local_nothing_available ERROR plugins/stt/tests/test_transcription.py::TestGetProvider::test_openai_when_key_set ERROR plugins/stt/tests/test_transcription.py::TestGetProvider::test_explicit_openai_no_key_returns_none ERROR plugins/stt/tests/test_transcription.py::TestGetProvider::test_default_provider_is_local ERROR plugins/stt/tests/test_transcription.py::TestGetProvider::test_disabled_config_returns_none ERROR plugins/stt/tests/test_transcription.py::TestValidateAudioFile::test_missing_file ERROR plugins/stt/tests/test_transcription.py::TestValidateAudioFile::test_unsupported_format ERROR plugins/stt/tests/test_transcription.py::TestValidateAudioFile::test_valid_file_returns_none ERROR plugins/stt/tests/test_transcription.py::TestValidateAudioFile::test_too_large ERROR plugins/stt/tests/test_transcription.py::TestTranscribeLocal::test_successful_transcription ERROR plugins/stt/tests/test_transcription.py::TestTranscribeLocal::test_not_installed ERROR plugins/stt/tests/test_transcription.py::TestTranscribeOpenAI::test_no_key ERROR plugins/stt/tests/test_transcription.py::TestTranscribeOpenAI::test_successful_transcription ERROR plugins/stt/tests/test_transcription.py::TestTranscribeAudio::test_dispatches_to_local ERROR plugins/stt/tests/test_transcription.py::TestTranscribeAudio::test_dispatches_to_openai ERROR plugins/stt/tests/test_transcription.py::TestTranscribeAudio::test_no_provider_returns_error ERROR plugins/stt/tests/test_transcription.py::TestTranscribeAudio::test_disabled_config_returns_disabled_error ERROR plugins/stt/tests/test_transcription.py::TestTranscribeAudio::test_invalid_file_returns_error ERROR plugins/stt/tests/test_transcription.py::TestNormalizeLocalModel::test_openai_model_name_maps_to_default ERROR plugins/stt/tests/test_transcription.py::TestNormalizeLocalModel::test_groq_model_name_maps_to_default ERROR plugins/stt/tests/test_transcription.py::TestNormalizeLocalModel::test_valid_local_model_preserved ERROR plugins/stt/tests/test_transcription.py::TestNormalizeLocalModel::test_none_maps_to_default ERROR plugins/stt/tests/test_transcription.py::TestNormalizeLocalModel::test_warning_emitted_for_cloud_model ERROR plugins/stt/tests/test_transcription.py::TestNormalizeLocalModel::test_local_transcribe_normalises_model ============================== 26 errors in 0.62s ============================== --- plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 19 items plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py EEE [ 15%] EEEEEEEEEEEEEEEE [100%] ==================================== ERRORS ==================================== _ ERROR at setup of TestRealMentionsAreDetected.test_mention_at_start_of_message _ cls = func = . at 0x771691be0b80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestRealMentionsAreDetected.test_mention_mid_sentence ____ cls = func = . at 0x771691be3600> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestRealMentionsAreDetected.test_mention_at_end_of_message _ cls = func = . at 0x771691be3ba0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestRealMentionsAreDetected.test_mention_in_caption _____ cls = func = . at 0x771691be3f60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestRealMentionsAreDetected.test_text_mention_entity_targets_bot _ cls = func = . at 0x771691be2fc0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestSubstringFalsePositivesAreRejected.test_email_like_substring _ cls = func = . at 0x771691be3420> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestSubstringFalsePositivesAreRejected.test_hostname_substring _ cls = func = . at 0x771691be3f60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestSubstringFalsePositivesAreRejected.test_superstring_username _ cls = func = . at 0x771691be1f80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestSubstringFalsePositivesAreRejected.test_underscore_suffix_substring _ cls = func = . at 0x771691bb8cc0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestSubstringFalsePositivesAreRejected.test_substring_inside_url_without_entity _ cls = func = . at 0x771691bb8860> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestSubstringFalsePositivesAreRejected.test_substring_inside_code_block_without_entity _ cls = func = . at 0x771691bb9300> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestSubstringFalsePositivesAreRejected.test_plain_text_with_no_at_sign _ cls = func = . at 0x771691bb8b80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestSubstringFalsePositivesAreRejected.test_email_substring_in_caption _ cls = func = . at 0x77169259a520> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestEntityEdgeCases.test_mention_entity_for_different_username _ cls = func = . at 0x771691be0180> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestEntityEdgeCases.test_text_mention_entity_for_different_user _ cls = func = . at 0x771691bb9620> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestEntityEdgeCases.test_malformed_entity_with_negative_offset _ cls = func = . at 0x771691bba340> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestEntityEdgeCases.test_malformed_entity_with_zero_length _ cls = func = . at 0x771691bb9f80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ________ ERROR at setup of TestCaseInsensitivity.test_uppercase_mention ________ cls = func = . at 0x771691bba8e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of TestCaseInsensitivity.test_mixed_case_mention ________ cls = func = . at 0x771691bbaac0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestRealMentionsAreDetected::test_mention_at_start_of_message ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestRealMentionsAreDetected::test_mention_mid_sentence ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestRealMentionsAreDetected::test_mention_at_end_of_message ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestRealMentionsAreDetected::test_mention_in_caption ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestRealMentionsAreDetected::test_text_mention_entity_targets_bot ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestSubstringFalsePositivesAreRejected::test_email_like_substring ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestSubstringFalsePositivesAreRejected::test_hostname_substring ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestSubstringFalsePositivesAreRejected::test_superstring_username ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestSubstringFalsePositivesAreRejected::test_underscore_suffix_substring ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestSubstringFalsePositivesAreRejected::test_substring_inside_url_without_entity ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestSubstringFalsePositivesAreRejected::test_substring_inside_code_block_without_entity ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestSubstringFalsePositivesAreRejected::test_plain_text_with_no_at_sign ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestSubstringFalsePositivesAreRejected::test_email_substring_in_caption ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestEntityEdgeCases::test_mention_entity_for_different_username ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestEntityEdgeCases::test_text_mention_entity_for_different_user ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestEntityEdgeCases::test_malformed_entity_with_negative_offset ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestEntityEdgeCases::test_malformed_entity_with_zero_length ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestCaseInsensitivity::test_uppercase_mention ERROR plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py::TestCaseInsensitivity::test_mixed_case_mention ============================== 19 errors in 5.98s ============================== --- plugins/stt/tests/test_transcription_tools.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 96 items plugins/stt/tests/test_transcription_tools.py EEEEEEEEEEEEEEEEEEEEEEEEEE [ 27%] EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE [100%] ==================================== ERRORS ==================================== _________ ERROR at setup of TestGetProviderGroq.test_groq_when_key_set _________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 78 def test_groq_when_key_set(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:78 _____ ERROR at setup of TestGetProviderGroq.test_groq_explicit_no_fallback _____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 85 def test_groq_explicit_no_fallback(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:85 ______ ERROR at setup of TestGetProviderGroq.test_groq_nothing_available _______ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 92 def test_groq_nothing_available(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:92 _ ERROR at setup of TestGetProviderFallbackPriority.test_auto_detect_prefers_local _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 104 def test_auto_detect_prefers_local(self): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:104 _ ERROR at setup of TestGetProviderFallbackPriority.test_auto_detect_prefers_groq_over_openai _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 110 def test_auto_detect_prefers_groq_over_openai(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:110 _ ERROR at setup of TestGetProviderFallbackPriority.test_explicit_openai_no_key_returns_none _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 120 def test_explicit_openai_no_key_returns_none(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:120 _ ERROR at setup of TestGetProviderFallbackPriority.test_unknown_provider_passed_through _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 129 def test_unknown_provider_passed_through(self): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:129 _ ERROR at setup of TestGetProviderFallbackPriority.test_empty_config_defaults_to_local _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 133 def test_empty_config_defaults_to_local(self): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:133 _ ERROR at setup of TestExplicitProviderRespected.test_explicit_local_no_fallback_to_openai _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 147 def test_explicit_local_no_fallback_to_openai(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:147 _ ERROR at setup of TestExplicitProviderRespected.test_explicit_local_no_fallback_to_groq _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 159 def test_explicit_local_no_fallback_to_groq(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:159 _ ERROR at setup of TestExplicitProviderRespected.test_explicit_local_uses_local_command_fallback _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 168 def test_explicit_local_uses_local_command_fallback(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:168 _ ERROR at setup of TestExplicitProviderRespected.test_explicit_groq_no_fallback_to_openai _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 179 def test_explicit_groq_no_fallback_to_openai(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:179 _ ERROR at setup of TestExplicitProviderRespected.test_explicit_openai_no_fallback_to_groq _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 188 def test_explicit_openai_no_fallback_to_groq(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:188 _ ERROR at setup of TestExplicitProviderRespected.test_auto_detect_still_falls_back_to_cloud _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 198 def test_auto_detect_still_falls_back_to_cloud(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:198 _ ERROR at setup of TestExplicitProviderRespected.test_auto_detect_prefers_groq_over_openai _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 210 def test_auto_detect_prefers_groq_over_openai(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:210 _______________ ERROR at setup of TestTranscribeGroq.test_no_key _______________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 226 def test_no_key(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:226 ____ ERROR at setup of TestTranscribeGroq.test_openai_package_not_installed ____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 233 def test_openai_package_not_installed(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:233 ______ ERROR at setup of TestTranscribeGroq.test_successful_transcription ______ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 241 def test_successful_transcription(self, monkeypatch, sample_wav): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:241 ________ ERROR at setup of TestTranscribeGroq.test_whitespace_stripped _________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 257 def test_whitespace_stripped(self, monkeypatch, sample_wav): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:257 _________ ERROR at setup of TestTranscribeGroq.test_uses_groq_base_url _________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 270 def test_uses_groq_base_url(self, monkeypatch, sample_wav): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:270 _____ ERROR at setup of TestTranscribeGroq.test_api_error_returns_failure ______ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 284 def test_api_error_returns_failure(self, monkeypatch, sample_wav): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:284 __________ ERROR at setup of TestTranscribeGroq.test_permission_error __________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 299 def test_permission_error(self, monkeypatch, sample_wav): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:299 _ ERROR at setup of TestTranscribeOpenAIExtended.test_openai_package_not_installed _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 319 def test_openai_package_not_installed(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:319 ___ ERROR at setup of TestTranscribeOpenAIExtended.test_uses_openai_base_url ___ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 327 def test_uses_openai_base_url(self, monkeypatch, sample_wav): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:327 ___ ERROR at setup of TestTranscribeOpenAIExtended.test_whitespace_stripped ____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 341 def test_whitespace_stripped(self, monkeypatch, sample_wav): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:341 _____ ERROR at setup of TestTranscribeOpenAIExtended.test_permission_error _____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 355 def test_permission_error(self, monkeypatch, sample_wav): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:355 _ ERROR at setup of TestTranscribeLocalCommand.test_auto_detects_local_whisper_binary _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 372 def test_auto_detects_local_whisper_binary(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:372 _ ERROR at setup of TestTranscribeLocalCommand.test_command_fallback_with_template _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 385 def test_command_fallback_with_template(self, monkeypatch, sample_ogg, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:385 _ ERROR at setup of TestTranscribeLocalExtended.test_model_reuse_on_second_call _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 437 def test_model_reuse_on_second_call(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:437 _ ERROR at setup of TestTranscribeLocalExtended.test_model_reloaded_on_change __ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 463 def test_model_reloaded_on_change(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:463 _ ERROR at setup of TestTranscribeLocalExtended.test_exception_returns_failure _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 488 def test_exception_returns_failure(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:488 _ ERROR at setup of TestTranscribeLocalExtended.test_multiple_segments_joined __ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 503 def test_multiple_segments_joined(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:503 _ ERROR at setup of TestTranscribeLocalExtended.test_load_time_cuda_lib_failure_falls_back_to_cpu _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 527 def test_load_time_cuda_lib_failure_falls_back_to_cpu(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:527 _ ERROR at setup of TestTranscribeLocalExtended.test_runtime_cuda_lib_failure_evicts_cache_and_retries_on_cpu _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 560 def test_runtime_cuda_lib_failure_evicts_cache_and_retries_on_cpu(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:560 _ ERROR at setup of TestTranscribeLocalExtended.test_cuda_out_of_memory_does_not_trigger_cpu_fallback _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 603 def test_cuda_out_of_memory_does_not_trigger_cpu_fallback(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:603 __ ERROR at setup of TestModelAutoCorrection.test_groq_corrects_openai_model ___ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 628 def test_groq_corrects_openai_model(self, monkeypatch, sample_wav): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:628 _ ERROR at setup of TestModelAutoCorrection.test_groq_corrects_gpt4o_transcribe _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 642 def test_groq_corrects_gpt4o_transcribe(self, monkeypatch, sample_wav): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:642 __ ERROR at setup of TestModelAutoCorrection.test_openai_corrects_groq_model ___ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 656 def test_openai_corrects_groq_model(self, monkeypatch, sample_wav): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:656 _ ERROR at setup of TestModelAutoCorrection.test_openai_corrects_distil_whisper _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 670 def test_openai_corrects_distil_whisper(self, monkeypatch, sample_wav): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:670 _ ERROR at setup of TestModelAutoCorrection.test_compatible_groq_model_not_overridden _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 684 def test_compatible_groq_model_not_overridden(self, monkeypatch, sample_wav): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:684 _ ERROR at setup of TestModelAutoCorrection.test_compatible_openai_model_not_overridden _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 698 def test_compatible_openai_model_not_overridden(self, monkeypatch, sample_wav): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:698 _ ERROR at setup of TestModelAutoCorrection.test_unknown_model_passes_through_groq _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 712 def test_unknown_model_passes_through_groq(self, monkeypatch, sample_wav): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:712 _ ERROR at setup of TestModelAutoCorrection.test_unknown_model_passes_through_openai _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 727 def test_unknown_model_passes_through_openai(self, monkeypatch, sample_wav): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:727 ___ ERROR at setup of TestLoadSttConfig.test_returns_dict_when_import_fails ____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 747 def test_returns_dict_when_import_fails(self): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:747 _______ ERROR at setup of TestLoadSttConfig.test_real_load_returns_dict ________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 753 def test_real_load_returns_dict(self): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:753 _ ERROR at setup of TestValidateAudioFileEdgeCases.test_directory_is_not_a_file _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 766 def test_directory_is_not_a_file(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:766 _ ERROR at setup of TestValidateAudioFileEdgeCases.test_symlink_with_supported_extension_is_rejected _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 776 def test_symlink_with_supported_extension_is_rejected(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:776 ______ ERROR at setup of TestValidateAudioFileEdgeCases.test_stat_oserror ______ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 793 def test_stat_oserror(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:793 _ ERROR at setup of TestValidateAudioFileEdgeCases.test_all_supported_formats_accepted _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 806 def test_all_supported_formats_accepted(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:806 _ ERROR at setup of TestValidateAudioFileEdgeCases.test_case_insensitive_extension _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 813 def test_case_insensitive_extension(self, tmp_path): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:813 ____ ERROR at setup of TestTranscribeAudioDispatch.test_dispatches_to_groq _____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 825 def test_dispatches_to_groq(self, sample_ogg): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:825 ____ ERROR at setup of TestTranscribeAudioDispatch.test_dispatches_to_local ____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 837 def test_dispatches_to_local(self, sample_ogg): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:837 ___ ERROR at setup of TestTranscribeAudioDispatch.test_dispatches_to_openai ____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 848 def test_dispatches_to_openai(self, sample_ogg): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:848 _ ERROR at setup of TestTranscribeAudioDispatch.test_no_provider_returns_error _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 859 def test_no_provider_returns_error(self, sample_ogg): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:859 _ ERROR at setup of TestTranscribeAudioDispatch.test_explicit_openai_no_key_returns_error _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 870 def test_explicit_openai_no_key_returns_error(self, monkeypatch, sample_ogg): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:870 _ ERROR at setup of TestTranscribeAudioDispatch.test_invalid_file_short_circuits _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 884 def test_invalid_file_short_circuits(self): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:884 _ ERROR at setup of TestTranscribeAudioDispatch.test_model_override_passed_to_groq _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 890 def test_model_override_passed_to_groq(self, sample_ogg): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:890 _ ERROR at setup of TestTranscribeAudioDispatch.test_model_override_passed_to_local _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 901 def test_model_override_passed_to_local(self, sample_ogg): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:901 _ ERROR at setup of TestTranscribeAudioDispatch.test_default_model_used_when_none _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 911 def test_default_model_used_when_none(self, sample_ogg): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:911 __ ERROR at setup of TestTranscribeAudioDispatch.test_config_local_model_used __ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 921 def test_config_local_model_used(self, sample_ogg): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:921 _ ERROR at setup of TestTranscribeAudioDispatch.test_config_openai_model_used __ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 932 def test_config_openai_model_used(self, sample_ogg): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:932 _____________ ERROR at setup of TestTranscribeMistral.test_no_key ______________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 963 def test_no_key(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:963 ____ ERROR at setup of TestTranscribeMistral.test_successful_transcription _____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 970 def test_successful_transcription(self, monkeypatch, sample_ogg, mock_mistral_module): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:970 ____ ERROR at setup of TestTranscribeMistral.test_api_error_returns_failure ____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 986 def test_api_error_returns_failure(self, monkeypatch, sample_ogg, mock_mistral_module): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:986 ________ ERROR at setup of TestTranscribeMistral.test_permission_error _________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 997 def test_permission_error(self, monkeypatch, sample_ogg, mock_mistral_module): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:997 _ ERROR at setup of TestGetProviderMistral.test_mistral_when_key_and_sdk_available _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1021 def test_mistral_when_key_and_sdk_available(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1021 _ ERROR at setup of TestGetProviderMistral.test_mistral_explicit_no_key_returns_none _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1028 def test_mistral_explicit_no_key_returns_none(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1028 _ ERROR at setup of TestGetProviderMistral.test_mistral_explicit_no_sdk_returns_none _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1035 def test_mistral_explicit_no_sdk_returns_none(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1035 ___ ERROR at setup of TestGetProviderMistral.test_auto_detect_skips_mistral ____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1042 def test_auto_detect_skips_mistral(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1042 _ ERROR at setup of TestGetProviderMistral.test_auto_detect_openai_preferred_over_mistral _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1060 def test_auto_detect_openai_preferred_over_mistral(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1060 _ ERROR at setup of TestGetProviderMistral.test_auto_detect_groq_preferred_over_mistral _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1072 def test_auto_detect_groq_preferred_over_mistral(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1072 _ ERROR at setup of TestGetProviderMistral.test_auto_detect_skips_mistral_without_sdk _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1083 def test_auto_detect_skips_mistral_without_sdk(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1083 _ ERROR at setup of TestTranscribeAudioMistralDispatch.test_dispatches_to_mistral _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1102 def test_dispatches_to_mistral(self, sample_ogg): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1102 _ ERROR at setup of TestTranscribeAudioMistralDispatch.test_config_mistral_model_used _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1114 def test_config_mistral_model_used(self, sample_ogg): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1114 _ ERROR at setup of TestTranscribeAudioMistralDispatch.test_model_override_passed_to_mistral _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1125 def test_model_override_passed_to_mistral(self, sample_ogg): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1125 _______________ ERROR at setup of TestTranscribeXAI.test_no_key ________________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1151 def test_no_key(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1151 ______ ERROR at setup of TestTranscribeXAI.test_successful_transcription _______ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1158 def test_successful_transcription(self, monkeypatch, sample_ogg, mock_xai_http_module): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1158 _________ ERROR at setup of TestTranscribeXAI.test_whitespace_stripped _________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1178 def test_whitespace_stripped(self, monkeypatch, sample_ogg, mock_xai_http_module): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1178 ______ ERROR at setup of TestTranscribeXAI.test_api_error_returns_failure ______ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1192 def test_api_error_returns_failure(self, monkeypatch, sample_ogg, mock_xai_http_module): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1192 __ ERROR at setup of TestTranscribeXAI.test_empty_transcript_returns_failure ___ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1209 def test_empty_transcript_returns_failure(self, monkeypatch, sample_ogg, mock_xai_http_module): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1209 __________ ERROR at setup of TestTranscribeXAI.test_permission_error ___________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1224 def test_permission_error(self, monkeypatch, sample_ogg, mock_xai_http_module): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1224 ____ ERROR at setup of TestTranscribeXAI.test_network_error_returns_failure ____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1235 def test_network_error_returns_failure(self, monkeypatch, sample_ogg, mock_xai_http_module): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1235 ______ ERROR at setup of TestTranscribeXAI.test_sends_language_and_format ______ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1246 def test_sends_language_and_format(self, monkeypatch, sample_ogg, mock_xai_http_module): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1246 ___________ ERROR at setup of TestTranscribeXAI.test_custom_base_url ___________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1266 def test_custom_base_url(self, monkeypatch, sample_ogg, mock_xai_http_module): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1266 ____ ERROR at setup of TestTranscribeXAI.test_diarize_sent_when_configured _____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1283 def test_diarize_sent_when_configured(self, monkeypatch, sample_ogg, mock_xai_http_module): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1283 __________ ERROR at setup of TestGetProviderXAI.test_xai_when_key_set __________ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1307 def test_xai_when_key_set(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1307 __ ERROR at setup of TestGetProviderXAI.test_xai_explicit_no_key_returns_none __ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1312 def test_xai_explicit_no_key_returns_none(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1312 ___ ERROR at setup of TestGetProviderXAI.test_auto_detect_xai_after_mistral ____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1318 def test_auto_detect_xai_after_mistral(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1318 _ ERROR at setup of TestGetProviderXAI.test_auto_detect_mistral_skipped_xai_wins _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1332 def test_auto_detect_mistral_skipped_xai_wins(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1332 __ ERROR at setup of TestGetProviderXAI.test_auto_detect_no_key_returns_none ___ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1351 def test_auto_detect_no_key_returns_none(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1351 ___ ERROR at setup of TestTranscribeAudioXAIDispatch.test_dispatches_to_xai ____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1367 def test_dispatches_to_xai(self, sample_ogg): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1367 _ ERROR at setup of TestTranscribeAudioXAIDispatch.test_model_default_is_grok_stt _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1379 def test_model_default_is_grok_stt(self, sample_ogg): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1379 _ ERROR at setup of TestTranscribeAudioXAIDispatch.test_model_override_passed_to_xai _ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1389 def test_model_override_passed_to_xai(self, sample_ogg): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1389 _ ERROR at setup of TestShellSafety.test_auto_detected_template_is_shlex_safe __ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1404 def test_auto_detected_template_is_shlex_safe(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1404 ___ ERROR at setup of TestShellSafety.test_env_var_template_uses_shell_path ____ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1425 def test_env_var_template_uses_shell_path(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1425 _______ ERROR at setup of TestShellSafety.test_no_env_var_uses_list_mode _______ file /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py, line 1433 def test_no_env_var_uses_list_mode(self, monkeypatch): E fixture 'disable_lazy_stt_install' not found > available fixtures: _class_scoped_runner, _ensure_current_event_loop, _function_scoped_runner, _hermetic_environment, _isolate_hermes_home, _live_system_guard, _module_scoped_runner, _package_scoped_runner, _seed_anthropic_registry, _session_scoped_runner, anyio_backend, anyio_backend_name, anyio_backend_options, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, clean_env, doctest_namespace, event_loop_policy, free_tcp_port, free_tcp_port_factory, free_udp_port, free_udp_port_factory, mock_config, mock_mistral_module, mock_xai_http_module, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, sample_ogg, sample_wav, subtests, tmp_dir, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory > use 'pytest --fixtures [testpath]' for help on them. /home/ari/src/hermes-agent/main/plugins/stt/tests/test_transcription_tools.py:1433 =========================== short test summary info ============================ ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderGroq::test_groq_when_key_set ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderGroq::test_groq_explicit_no_fallback ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderGroq::test_groq_nothing_available ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderFallbackPriority::test_auto_detect_prefers_local ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderFallbackPriority::test_auto_detect_prefers_groq_over_openai ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderFallbackPriority::test_explicit_openai_no_key_returns_none ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderFallbackPriority::test_unknown_provider_passed_through ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderFallbackPriority::test_empty_config_defaults_to_local ERROR plugins/stt/tests/test_transcription_tools.py::TestExplicitProviderRespected::test_explicit_local_no_fallback_to_openai ERROR plugins/stt/tests/test_transcription_tools.py::TestExplicitProviderRespected::test_explicit_local_no_fallback_to_groq ERROR plugins/stt/tests/test_transcription_tools.py::TestExplicitProviderRespected::test_explicit_local_uses_local_command_fallback ERROR plugins/stt/tests/test_transcription_tools.py::TestExplicitProviderRespected::test_explicit_groq_no_fallback_to_openai ERROR plugins/stt/tests/test_transcription_tools.py::TestExplicitProviderRespected::test_explicit_openai_no_fallback_to_groq ERROR plugins/stt/tests/test_transcription_tools.py::TestExplicitProviderRespected::test_auto_detect_still_falls_back_to_cloud ERROR plugins/stt/tests/test_transcription_tools.py::TestExplicitProviderRespected::test_auto_detect_prefers_groq_over_openai ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeGroq::test_no_key ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeGroq::test_openai_package_not_installed ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeGroq::test_successful_transcription ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeGroq::test_whitespace_stripped ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeGroq::test_uses_groq_base_url ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeGroq::test_api_error_returns_failure ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeGroq::test_permission_error ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeOpenAIExtended::test_openai_package_not_installed ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeOpenAIExtended::test_uses_openai_base_url ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeOpenAIExtended::test_whitespace_stripped ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeOpenAIExtended::test_permission_error ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeLocalCommand::test_auto_detects_local_whisper_binary ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeLocalCommand::test_command_fallback_with_template ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeLocalExtended::test_model_reuse_on_second_call ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeLocalExtended::test_model_reloaded_on_change ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeLocalExtended::test_exception_returns_failure ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeLocalExtended::test_multiple_segments_joined ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeLocalExtended::test_load_time_cuda_lib_failure_falls_back_to_cpu ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeLocalExtended::test_runtime_cuda_lib_failure_evicts_cache_and_retries_on_cpu ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeLocalExtended::test_cuda_out_of_memory_does_not_trigger_cpu_fallback ERROR plugins/stt/tests/test_transcription_tools.py::TestModelAutoCorrection::test_groq_corrects_openai_model ERROR plugins/stt/tests/test_transcription_tools.py::TestModelAutoCorrection::test_groq_corrects_gpt4o_transcribe ERROR plugins/stt/tests/test_transcription_tools.py::TestModelAutoCorrection::test_openai_corrects_groq_model ERROR plugins/stt/tests/test_transcription_tools.py::TestModelAutoCorrection::test_openai_corrects_distil_whisper ERROR plugins/stt/tests/test_transcription_tools.py::TestModelAutoCorrection::test_compatible_groq_model_not_overridden ERROR plugins/stt/tests/test_transcription_tools.py::TestModelAutoCorrection::test_compatible_openai_model_not_overridden ERROR plugins/stt/tests/test_transcription_tools.py::TestModelAutoCorrection::test_unknown_model_passes_through_groq ERROR plugins/stt/tests/test_transcription_tools.py::TestModelAutoCorrection::test_unknown_model_passes_through_openai ERROR plugins/stt/tests/test_transcription_tools.py::TestLoadSttConfig::test_returns_dict_when_import_fails ERROR plugins/stt/tests/test_transcription_tools.py::TestLoadSttConfig::test_real_load_returns_dict ERROR plugins/stt/tests/test_transcription_tools.py::TestValidateAudioFileEdgeCases::test_directory_is_not_a_file ERROR plugins/stt/tests/test_transcription_tools.py::TestValidateAudioFileEdgeCases::test_symlink_with_supported_extension_is_rejected ERROR plugins/stt/tests/test_transcription_tools.py::TestValidateAudioFileEdgeCases::test_stat_oserror ERROR plugins/stt/tests/test_transcription_tools.py::TestValidateAudioFileEdgeCases::test_all_supported_formats_accepted ERROR plugins/stt/tests/test_transcription_tools.py::TestValidateAudioFileEdgeCases::test_case_insensitive_extension ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioDispatch::test_dispatches_to_groq ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioDispatch::test_dispatches_to_local ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioDispatch::test_dispatches_to_openai ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioDispatch::test_no_provider_returns_error ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioDispatch::test_explicit_openai_no_key_returns_error ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioDispatch::test_invalid_file_short_circuits ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioDispatch::test_model_override_passed_to_groq ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioDispatch::test_model_override_passed_to_local ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioDispatch::test_default_model_used_when_none ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioDispatch::test_config_local_model_used ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioDispatch::test_config_openai_model_used ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeMistral::test_no_key ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeMistral::test_successful_transcription ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeMistral::test_api_error_returns_failure ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeMistral::test_permission_error ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderMistral::test_mistral_when_key_and_sdk_available ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderMistral::test_mistral_explicit_no_key_returns_none ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderMistral::test_mistral_explicit_no_sdk_returns_none ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderMistral::test_auto_detect_skips_mistral ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderMistral::test_auto_detect_openai_preferred_over_mistral ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderMistral::test_auto_detect_groq_preferred_over_mistral ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderMistral::test_auto_detect_skips_mistral_without_sdk ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioMistralDispatch::test_dispatches_to_mistral ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioMistralDispatch::test_config_mistral_model_used ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioMistralDispatch::test_model_override_passed_to_mistral ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_no_key ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_successful_transcription ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_whitespace_stripped ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_api_error_returns_failure ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_empty_transcript_returns_failure ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_permission_error ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_network_error_returns_failure ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_sends_language_and_format ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_custom_base_url ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeXAI::test_diarize_sent_when_configured ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderXAI::test_xai_when_key_set ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderXAI::test_xai_explicit_no_key_returns_none ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderXAI::test_auto_detect_xai_after_mistral ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderXAI::test_auto_detect_mistral_skipped_xai_wins ERROR plugins/stt/tests/test_transcription_tools.py::TestGetProviderXAI::test_auto_detect_no_key_returns_none ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioXAIDispatch::test_dispatches_to_xai ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioXAIDispatch::test_model_default_is_grok_stt ERROR plugins/stt/tests/test_transcription_tools.py::TestTranscribeAudioXAIDispatch::test_model_override_passed_to_xai ERROR plugins/stt/tests/test_transcription_tools.py::TestShellSafety::test_auto_detected_template_is_shlex_safe ERROR plugins/stt/tests/test_transcription_tools.py::TestShellSafety::test_env_var_template_uses_shell_path ERROR plugins/stt/tests/test_transcription_tools.py::TestShellSafety::test_no_env_var_uses_list_mode ============================== 96 errors in 1.74s ============================== --- plugins/platforms/telegram/tests/test_telegram_webhook_secret.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 5 items plugins/platforms/telegram/tests/test_telegram_webhook_secret.py EEEEE [100%] ==================================== ERRORS ==================================== _ ERROR at setup of TestTelegramWebhookSecretRequired.test_webhook_branch_checks_secret _ cls = func = . at 0x7151ed58ac00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramWebhookSecretRequired.test_guard_raises_runtime_error _ cls = func = . at 0x7151ed5ed620> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramWebhookSecretRequired.test_guard_message_includes_advisory_link _ cls = func = . at 0x7151ed5ede40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramWebhookSecretRequired.test_guard_message_explains_remediation _ cls = func = . at 0x7151ed5ee2a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramWebhookSecretRequired.test_polling_branch_has_no_secret_guard _ cls = func = . at 0x7151ed5ece00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_webhook_secret.py::TestTelegramWebhookSecretRequired::test_webhook_branch_checks_secret ERROR plugins/platforms/telegram/tests/test_telegram_webhook_secret.py::TestTelegramWebhookSecretRequired::test_guard_raises_runtime_error ERROR plugins/platforms/telegram/tests/test_telegram_webhook_secret.py::TestTelegramWebhookSecretRequired::test_guard_message_includes_advisory_link ERROR plugins/platforms/telegram/tests/test_telegram_webhook_secret.py::TestTelegramWebhookSecretRequired::test_guard_message_explains_remediation ERROR plugins/platforms/telegram/tests/test_telegram_webhook_secret.py::TestTelegramWebhookSecretRequired::test_polling_branch_has_no_secret_guard ============================== 5 errors in 2.17s =============================== --- plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 12 items plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py EEEEEE [ 50%] EEEEEE [100%] ==================================== ERRORS ==================================== ________ ERROR at setup of TestEnvFloatClamped.test_default_when_unset _________ cls = func = . at 0x72702ca50720> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ________ ERROR at setup of TestEnvFloatClamped.test_parses_valid_value _________ cls = func = . at 0x72702ca536a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestEnvFloatClamped.test_falls_back_to_default_on_garbage __ cls = func = . at 0x72702ca53560> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____________ ERROR at setup of TestEnvFloatClamped.test_rejects_nan ____________ cls = func = . at 0x72702ca52ca0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____________ ERROR at setup of TestEnvFloatClamped.test_rejects_inf ____________ cls = func = . at 0x72702ca52160> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of TestEnvFloatClamped.test_clamps_below_min __________ cls = func = . at 0x72702ca53920> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of TestEnvFloatClamped.test_clamps_above_max __________ cls = func = . at 0x72702ca52b60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestAdaptiveTextBatchTiers.test_class_constants_are_sensible _ cls = func = . at 0x72702c5d0040> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestAdaptiveTextBatchTiers.test_fast_tier_uses_min_with_configured_cap _ cls = func = . at 0x72702c5d09a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestAdaptiveTextBatchTiers.test_short_tier_uses_min_with_configured_cap _ cls = func = . at 0x72702c5d04a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestAdaptiveTextBatchTiers.test_long_message_uses_full_cap _ cls = func = . at 0x72702c5d16c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestAdaptiveTextBatchTiers.test_split_threshold_takes_priority_over_fast_tier _ cls = func = . at 0x72702c5d0fe0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestEnvFloatClamped::test_default_when_unset ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestEnvFloatClamped::test_parses_valid_value ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestEnvFloatClamped::test_falls_back_to_default_on_garbage ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestEnvFloatClamped::test_rejects_nan ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestEnvFloatClamped::test_rejects_inf ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestEnvFloatClamped::test_clamps_below_min ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestEnvFloatClamped::test_clamps_above_max ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestAdaptiveTextBatchTiers::test_class_constants_are_sensible ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestAdaptiveTextBatchTiers::test_fast_tier_uses_min_with_configured_cap ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestAdaptiveTextBatchTiers::test_short_tier_uses_min_with_configured_cap ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestAdaptiveTextBatchTiers::test_long_message_uses_full_cap ERROR plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py::TestAdaptiveTextBatchTiers::test_split_threshold_takes_priority_over_fast_tier ============================== 12 errors in 4.07s ============================== --- plugins/platforms/telegram/tests/test_telegram_reactions.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 21 items plugins/platforms/telegram/tests/test_telegram_reactions.py EEEEEEEEEEEE [ 57%] EEEEEEEEE [100%] ==================================== ERRORS ==================================== _____________ ERROR at setup of test_reactions_disabled_by_default _____________ cls = func = . at 0x786ca49fa0c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____________ ERROR at setup of test_reactions_enabled_when_set_true ____________ cls = func = . at 0x786ca49fb9c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______________ ERROR at setup of test_reactions_enabled_with_1 ________________ cls = func = . at 0x786ca49fad40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____________ ERROR at setup of test_reactions_disabled_with_false _____________ cls = func = . at 0x786ca48fc680> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______________ ERROR at setup of test_reactions_disabled_with_0 _______________ cls = func = . at 0x786ca49fb9c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______________ ERROR at setup of test_reactions_disabled_with_no _______________ cls = func = . at 0x786ca4b99bc0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______________ ERROR at setup of test_set_reaction_calls_bot_api _______________ cls = func = . at 0x786ca4b9a160> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ________ ERROR at setup of test_set_reaction_returns_false_without_bot _________ cls = func = . at 0x786ca48fd4e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of test_set_reaction_handles_api_error_gracefully _______ cls = func = . at 0x786ca48fd800> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ________ ERROR at setup of test_on_processing_start_adds_eyes_reaction _________ cls = func = . at 0x786ca48fdb20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of test_on_processing_start_skipped_when_disabled _______ cls = func = . at 0x786ca48fd260> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ________ ERROR at setup of test_on_processing_start_handles_missing_ids ________ cls = func = . at 0x786ca48fe0c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____________ ERROR at setup of test_on_processing_complete_success _____________ cls = func = . at 0x786ca48fd8a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____________ ERROR at setup of test_on_processing_complete_failure _____________ cls = func = . at 0x786ca48fe340> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of test_on_processing_complete_skipped_when_disabled ______ cls = func = . at 0x786ca48fe700> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of test_on_processing_complete_cancelled_clears_reaction ____ cls = func = . at 0x786ca48fed40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_on_processing_complete_cancelled_skipped_when_disabled _ cls = func = . at 0x786ca48ff060> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of test_clear_reactions_handles_api_error_gracefully ______ cls = func = . at 0x786ca48ff4c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of test_clear_reactions_returns_false_without_bot _______ cls = func = . at 0x786ca48ff7e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___________ ERROR at setup of test_config_bridges_telegram_reactions ___________ cls = func = . at 0x786ca48fefc0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of test_config_reactions_env_takes_precedence _________ cls = func = . at 0x786ca48ffd80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_reactions_disabled_by_default ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_reactions_enabled_when_set_true ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_reactions_enabled_with_1 ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_reactions_disabled_with_false ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_reactions_disabled_with_0 ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_reactions_disabled_with_no ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_set_reaction_calls_bot_api ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_set_reaction_returns_false_without_bot ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_set_reaction_handles_api_error_gracefully ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_on_processing_start_adds_eyes_reaction ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_on_processing_start_skipped_when_disabled ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_on_processing_start_handles_missing_ids ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_on_processing_complete_success ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_on_processing_complete_failure ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_on_processing_complete_skipped_when_disabled ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_on_processing_complete_cancelled_clears_reaction ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_on_processing_complete_cancelled_skipped_when_disabled ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_clear_reactions_handles_api_error_gracefully ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_clear_reactions_returns_false_without_bot ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_config_bridges_telegram_reactions ERROR plugins/platforms/telegram/tests/test_telegram_reactions.py::test_config_reactions_env_takes_precedence ============================== 21 errors in 7.81s ============================== --- plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 22 items plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py E [ 4%] EEEEEEEEEEEEEEEEEEEEE [100%] ==================================== ERRORS ==================================== _ ERROR at setup of test_transient_errors_are_classified_as_transient[httpx.ConnectError: Connection refused] _ cls = func = . at 0x75cd18dce980> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_transient_errors_are_classified_as_transient[telegram.error.NetworkError: httpx.ConnectError] _ cls = func = . at 0x75cd18df5b20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_transient_errors_are_classified_as_transient[NetworkError: remote end closed connection without response] _ cls = func = . at 0x75cd18df6160> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_transient_errors_are_classified_as_transient[httpx.ReadTimeout: read timed out] _ cls = func = . at 0x75cd18df4fe0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_transient_errors_are_classified_as_transient[ReadTimeout: timed out] _ cls = func = . at 0x75cd19cecf40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_transient_errors_are_classified_as_transient[Server disconnected] _ cls = func = . at 0x75cd18f8ba60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_transient_errors_are_classified_as_transient[Temporarily unavailable] _ cls = func = . at 0x75cd18df56c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_transient_errors_are_classified_as_transient[Temporary failure in name resolution] _ cls = func = . at 0x75cd18df6b60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_transient_errors_are_classified_as_transient[Connection error: failed to connect] _ cls = func = . at 0x75cd18df6de0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_permanent_errors_are_not_transient[Bad Request: message to edit not found] _ cls = func = . at 0x75cd18df6980> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_permanent_errors_are_not_transient[Bad Request: message can't be edited] _ cls = func = . at 0x75cd18df7380> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_permanent_errors_are_not_transient[Bad Request: not enough rights to edit the message] _ cls = func = . at 0x75cd18df7560> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_permanent_errors_are_not_transient[Bad Request: MESSAGE_ID_INVALID] _ cls = func = . at 0x75cd18dce020> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_permanent_errors_are_not_transient[flood_control:30.0] _ cls = func = . at 0x75cd18dce0c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_permanent_errors_are_not_transient[Forbidden: bot was blocked by the user] _ cls = func = . at 0x75cd18df7e20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ________ ERROR at setup of test_send_result_retryable_default_is_false _________ cls = func = . at 0x75cd18df7ec0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of test_send_result_retryable_can_be_set_true _________ cls = func = . at 0x75cd18df6a20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of test_send_result_retryable_false_for_permanent _______ cls = func = . at 0x75cd18df5120> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of test_transient_failure_keeps_can_edit_true _________ cls = func = . at 0x75cd18df76a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of test_permanent_failure_sets_can_edit_false _________ cls = func = . at 0x75cd18cc0e00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of test_multiple_transient_then_success_keeps_can_edit_true __ cls = func = . at 0x75cd18cc09a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___________ ERROR at setup of test_flood_control_sets_can_edit_false ___________ cls = func = . at 0x75cd18cc02c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_errors_are_classified_as_transient[httpx.ConnectError: Connection refused] ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_errors_are_classified_as_transient[telegram.error.NetworkError: httpx.ConnectError] ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_errors_are_classified_as_transient[NetworkError: remote end closed connection without response] ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_errors_are_classified_as_transient[httpx.ReadTimeout: read timed out] ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_errors_are_classified_as_transient[ReadTimeout: timed out] ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_errors_are_classified_as_transient[Server disconnected] ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_errors_are_classified_as_transient[Temporarily unavailable] ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_errors_are_classified_as_transient[Temporary failure in name resolution] ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_errors_are_classified_as_transient[Connection error: failed to connect] ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_permanent_errors_are_not_transient[Bad Request: message to edit not found] ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_permanent_errors_are_not_transient[Bad Request: message can't be edited] ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_permanent_errors_are_not_transient[Bad Request: not enough rights to edit the message] ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_permanent_errors_are_not_transient[Bad Request: MESSAGE_ID_INVALID] ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_permanent_errors_are_not_transient[flood_control:30.0] ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_permanent_errors_are_not_transient[Forbidden: bot was blocked by the user] ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_send_result_retryable_default_is_false ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_send_result_retryable_can_be_set_true ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_send_result_retryable_false_for_permanent ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_transient_failure_keeps_can_edit_true ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_permanent_failure_sets_can_edit_false ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_multiple_transient_then_success_keeps_can_edit_true ERROR plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py::test_flood_control_sets_can_edit_false ============================== 22 errors in 8.55s ============================== --- plugins/platforms/telegram/tests/test_telegram_documents.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 41 items plugins/platforms/telegram/tests/test_telegram_documents.py EEEEEEEEEEEE [ 29%] EEEEEEEEEEEEEEEEEEEEEEEEEEEEE [100%] ==================================== ERRORS ==================================== _ ERROR at setup of TestDocumentTypeDetection.test_document_detected_explicitly _ cls = func = . at 0x79691181ee80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestDocumentTypeDetection.test_fallback_is_document _____ cls = func = . at 0x796911865da0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestDocumentDownloadBlock.test_supported_pdf_is_cached ___ cls = func = . at 0x796911866660> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDocumentDownloadBlock.test_supported_txt_injects_content _ cls = func = . at 0x7969118653a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDocumentDownloadBlock.test_supported_md_injects_content _ cls = func = . at 0x796911866ac0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDocumentDownloadBlock.test_caption_preserved_with_injection _ cls = func = . at 0x796911865a80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of TestDocumentDownloadBlock.test_zip_document_cached _____ cls = func = . at 0x796911867100> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDocumentDownloadBlock.test_png_document_is_routed_as_image _ cls = func = . at 0x796911867600> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDocumentDownloadBlock.test_spoofed_png_document_falls_back_with_error _ cls = func = . at 0x7969118660c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestDocumentDownloadBlock.test_oversized_file_rejected ___ cls = func = . at 0x796911866fc0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestDocumentDownloadBlock.test_none_file_size_rejected ___ cls = func = . at 0x796911867e20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDocumentDownloadBlock.test_missing_filename_uses_mime_lookup _ cls = func = . at 0x796911867b00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDocumentDownloadBlock.test_missing_filename_and_mime_rejected _ cls = func = . at 0x79691181e700> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDocumentDownloadBlock.test_unicode_decode_error_handled _ cls = func = . at 0x7969121a1da0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestDocumentDownloadBlock.test_text_injection_capped ____ cls = func = . at 0x7969118e8540> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDocumentDownloadBlock.test_download_exception_handled __ cls = func = . at 0x7969118e8d60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of TestVideoDownloadBlock.test_native_video_is_cached _____ cls = func = . at 0x7969118e8ea0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestVideoDownloadBlock.test_mp4_document_is_treated_as_video _ cls = func = . at 0x7969118e93a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestMediaGroups.test_non_album_photo_burst_is_buffered_and_combined _ cls = func = . at 0x79691181e700> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestMediaGroups.test_photo_album_is_buffered_and_combined __ cls = func = . at 0x796911867240> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestMediaGroups.test_disconnect_cancels_pending_media_group_flush _ cls = func = . at 0x796913183e20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of TestSendVoice.test_flac_falls_back_to_document _______ cls = func = . at 0x7969118e8180> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of TestSendVoice.test_wav_falls_back_to_document ________ cls = func = . at 0x7969118e9800> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ________ ERROR at setup of TestSendVoice.test_mp3_routes_to_send_audio _________ cls = func = . at 0x7969118e9620> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ________ ERROR at setup of TestSendDocument.test_send_document_success _________ cls = func = . at 0x7969118e8540> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestSendDocument.test_send_document_custom_filename _____ cls = func = . at 0x7969118ea2a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of TestSendDocument.test_send_document_file_not_found _____ cls = func = . at 0x7969118e8860> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestSendDocument.test_send_document_workspace_path_has_docker_hint _ cls = func = . at 0x7969118ea660> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestSendDocument.test_send_document_outputs_path_has_docker_hint _ cls = func = . at 0x7969118eaac0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of TestSendDocument.test_send_document_not_connected ______ cls = func = . at 0x7969118ead40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestSendDocument.test_send_document_caption_truncated ____ cls = func = . at 0x7969118eb060> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of TestSendDocument.test_send_document_api_error_falls_back __ cls = func = . at 0x7969118eb1a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ________ ERROR at setup of TestSendDocument.test_send_document_reply_to ________ cls = func = . at 0x7969118eb2e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of TestSendDocument.test_send_document_thread_id ________ cls = func = . at 0x7969118eafc0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramPhotoBatching.test_flush_photo_batch_does_not_drop_newer_scheduled_task _ cls = func = . at 0x7969118ebc40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramPhotoBatching.test_disconnect_cancels_pending_photo_batch_tasks _ cls = func = . at 0x7969118ebec0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___________ ERROR at setup of TestSendVideo.test_send_video_success ____________ cls = func = . at 0x7969118ebd80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ________ ERROR at setup of TestSendVideo.test_send_video_file_not_found ________ cls = func = . at 0x7969118ead40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestSendVideo.test_send_video_workspace_path_has_docker_hint _ cls = func = . at 0x7969118eb2e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ________ ERROR at setup of TestSendVideo.test_send_video_not_connected _________ cls = func = . at 0x7969118ebec0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __________ ERROR at setup of TestSendVideo.test_send_video_thread_id ___________ cls = func = . at 0x7969118ead40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentTypeDetection::test_document_detected_explicitly ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentTypeDetection::test_fallback_is_document ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentDownloadBlock::test_supported_pdf_is_cached ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentDownloadBlock::test_supported_txt_injects_content ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentDownloadBlock::test_supported_md_injects_content ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentDownloadBlock::test_caption_preserved_with_injection ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentDownloadBlock::test_zip_document_cached ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentDownloadBlock::test_png_document_is_routed_as_image ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentDownloadBlock::test_spoofed_png_document_falls_back_with_error ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentDownloadBlock::test_oversized_file_rejected ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentDownloadBlock::test_none_file_size_rejected ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentDownloadBlock::test_missing_filename_uses_mime_lookup ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentDownloadBlock::test_missing_filename_and_mime_rejected ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentDownloadBlock::test_unicode_decode_error_handled ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentDownloadBlock::test_text_injection_capped ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestDocumentDownloadBlock::test_download_exception_handled ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestVideoDownloadBlock::test_native_video_is_cached ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestVideoDownloadBlock::test_mp4_document_is_treated_as_video ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestMediaGroups::test_non_album_photo_burst_is_buffered_and_combined ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestMediaGroups::test_photo_album_is_buffered_and_combined ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestMediaGroups::test_disconnect_cancels_pending_media_group_flush ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendVoice::test_flac_falls_back_to_document ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendVoice::test_wav_falls_back_to_document ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendVoice::test_mp3_routes_to_send_audio ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_success ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_custom_filename ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_file_not_found ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_workspace_path_has_docker_hint ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_outputs_path_has_docker_hint ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_not_connected ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_caption_truncated ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_api_error_falls_back ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_reply_to ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendDocument::test_send_document_thread_id ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestTelegramPhotoBatching::test_flush_photo_batch_does_not_drop_newer_scheduled_task ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestTelegramPhotoBatching::test_disconnect_cancels_pending_photo_batch_tasks ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendVideo::test_send_video_success ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendVideo::test_send_video_file_not_found ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendVideo::test_send_video_workspace_path_has_docker_hint ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendVideo::test_send_video_not_connected ERROR plugins/platforms/telegram/tests/test_telegram_documents.py::TestSendVideo::test_send_video_thread_id ============================= 41 errors in 11.83s ============================== --- plugins/platforms/slack/tests/test_slack_mention.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 55 items plugins/platforms/slack/tests/test_slack_mention.py .................... [ 36%] ................FF................. [100%] =================================== FAILURES =================================== _______ test_explicit_top_level_slack_enabled_false_wins_over_env_token ________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x76b5b9bf5ca0> tmp_path = PosixPath('/tmp/pytest-of-ethie/pytest-42033/test_explicit_top_level_slack_0') def test_explicit_top_level_slack_enabled_false_wins_over_env_token(monkeypatch, tmp_path): from gateway.config import load_gateway_config hermes_home = tmp_path / ".hermes" hermes_home.mkdir() (hermes_home / "config.yaml").write_text( "slack:\n" " enabled: false\n" " require_mention: false\n", encoding="utf-8", ) monkeypatch.setenv("HERMES_HOME", str(hermes_home)) monkeypatch.setenv("SLACK_BOT_TOKEN", "xoxb-test") monkeypatch.delenv("SLACK_REQUIRE_MENTION", raising=False) config = load_gateway_config() slack_config = config.platforms[Platform.SLACK] > assert slack_config.enabled is False E AssertionError: assert True is False E + where True = PlatformConfig(enabled=True, token='xoxb-test', api_key=None, home_channel=None, reply_to_mode='first', gateway_restart_notification=True, extra={'require_mention': False}).enabled plugins/platforms/slack/tests/test_slack_mention.py:426: AssertionError _______ test_explicit_platforms_slack_enabled_false_wins_over_env_token ________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x76b5b38e8e30> tmp_path = PosixPath('/tmp/pytest-of-ethie/pytest-42033/test_explicit_platforms_slack_0') def test_explicit_platforms_slack_enabled_false_wins_over_env_token(monkeypatch, tmp_path): from gateway.config import load_gateway_config hermes_home = tmp_path / ".hermes" hermes_home.mkdir() (hermes_home / "config.yaml").write_text( "platforms:\n" " slack:\n" " enabled: false\n" " extra:\n" " reply_in_thread: false\n", encoding="utf-8", ) monkeypatch.setenv("HERMES_HOME", str(hermes_home)) monkeypatch.setenv("SLACK_BOT_TOKEN", "xoxb-test") config = load_gateway_config() slack_config = config.platforms[Platform.SLACK] > assert slack_config.enabled is False E AssertionError: assert True is False E + where True = PlatformConfig(enabled=True, token='xoxb-test', api_key=None, home_channel=None, reply_to_mode='first', gateway_restart_notification=True, extra={'reply_in_thread': False}).enabled plugins/platforms/slack/tests/test_slack_mention.py:452: AssertionError =============================== warnings summary =============================== plugins/platforms/slack/tests/test_slack_mention.py::test_config_bridges_slack_free_response_channels /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) plugins/platforms/slack/tests/test_slack_mention.py::test_config_bridges_slack_free_response_channels /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): plugins/platforms/slack/tests/test_slack_mention.py::test_config_bridges_slack_free_response_channels /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions warnings.warn( # deprecated in 14.0 - 2024-11-09 -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED plugins/platforms/slack/tests/test_slack_mention.py::test_explicit_top_level_slack_enabled_false_wins_over_env_token FAILED plugins/platforms/slack/tests/test_slack_mention.py::test_explicit_platforms_slack_enabled_false_wins_over_env_token ================== 2 failed, 53 passed, 3 warnings in 10.76s =================== --- plugins/model-providers/bedrock/tests/test_bedrock_integration.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 55 items plugins/model-providers/bedrock/tests/test_bedrock_integration.py ...... [ 10%] ...............................................F. [100%] =================================== FAILURES =================================== _________ TestAuxiliaryClientBedrockResolution.test_bedrock_async_mode _________ self = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x74ef1ffbb590> def test_bedrock_async_mode(self, monkeypatch): """Async mode should return an AsyncAnthropicAuxiliaryClient.""" monkeypatch.setenv("AWS_ACCESS_KEY_ID", "AKIAIO...MPLE") monkeypatch.setenv("AWS_SECRET_ACCESS_KEY", "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY") self._patch_bedrock_build(monkeypatch, MagicMock(return_value=MagicMock())) from agent.auxiliary_client import resolve_provider_client from agent.anthropic_aux import AsyncAnthropicAuxiliaryClient client, model = resolve_provider_client("bedrock", None, async_mode=True) assert client is not None > assert isinstance(client, AsyncAnthropicAuxiliaryClient) E AssertionError: assert False E + where False = isinstance(, ) plugins/model-providers/bedrock/tests/test_bedrock_integration.py:595: AssertionError =============================== warnings summary =============================== plugins/model-providers/bedrock/tests/test_bedrock_integration.py::TestBedrockPreserveDotsFlag::test_bedrock_provider_preserves_dots /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/discord/player.py:30: DeprecationWarning: 'audioop' is deprecated and slated for removal in Python 3.13 import audioop plugins/model-providers/bedrock/tests/test_bedrock_integration.py::TestBedrockPreserveDotsFlag::test_bedrock_provider_preserves_dots /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) plugins/model-providers/bedrock/tests/test_bedrock_integration.py::TestBedrockPreserveDotsFlag::test_bedrock_provider_preserves_dots /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): plugins/model-providers/bedrock/tests/test_bedrock_integration.py::TestBedrockPreserveDotsFlag::test_bedrock_provider_preserves_dots /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions warnings.warn( # deprecated in 14.0 - 2024-11-09 -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED plugins/model-providers/bedrock/tests/test_bedrock_integration.py::TestAuxiliaryClientBedrockResolution::test_bedrock_async_mode ================== 1 failed, 54 passed, 4 warnings in 12.68s =================== --- plugins/platforms/telegram/tests/test_telegram_group_gating.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 40 items plugins/platforms/telegram/tests/test_telegram_group_gating.py EEEEEEEEE [ 22%] EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE [100%] ==================================== ERRORS ==================================== ________ ERROR at setup of test_group_messages_can_be_opened_via_config ________ cls = func = . at 0x769887b00680> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_unmentioned_group_messages_can_be_observed_without_dispatching _ cls = func = . at 0x769887b00860> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_observed_group_context_uses_shared_source_and_prompt_for_later_mentions _ cls = func = . at 0x769887b03100> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_observed_group_context_replays_as_current_message_context_not_user_turns _ cls = func = . at 0x769887b022a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_observed_group_context_does_not_hide_current_user_turn_behind_history_offset _ cls = func = . at 0x769887c82e80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_observed_group_context_wraps_multimodal_current_message_without_mutating_parts _ cls = func = . at 0x769887b02de0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_observed_group_context_replays_normally_without_telegram_prompt _ cls = func = . at 0x769887b02020> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_observed_group_context_preserves_slash_command_text_for_dispatch _ cls = func = . at 0x769887b03a60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_unmentioned_group_observe_requires_chat_allowlist_for_shared_context _ cls = func = . at 0x769887b03d80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_shared_group_observe_source_is_authorized_by_group_allowed_chats _ cls = func = . at 0x769887b03420> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of test_unmentioned_group_observe_respects_chat_allowlist ___ cls = func = . at 0x769887b004a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_group_messages_can_require_direct_trigger_via_config __ cls = func = . at 0x769887b03060> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_explicit_multi_bot_mentions_route_only_to_named_bots __ cls = func = . at 0x769887adb380> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_entityless_multi_bot_mentions_still_route_exclusively _ cls = func = . at 0x769887adb060> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_intern_bots_ignore_messages_addressed_to_other_intern_bot _ cls = func = . at 0x769887500360> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_bot_command_addressed_to_other_bot_is_exclusive_even_when_mentions_not_required _ cls = func = . at 0x769887500720> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_raw_bot_mention_fallback_does_not_match_email_or_substring _ cls = func = . at 0x7698875016c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_exclusive_bot_mentions_can_be_disabled_for_legacy_groups _ cls = func = . at 0x769887501260> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of test_free_response_chats_bypass_mention_requirement _____ cls = func = . at 0x769887501300> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_guest_mode_allows_only_direct_mentions_outside_allowed_chats _ cls = func = . at 0x769887501ee0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_guest_mode_defaults_to_false_for_allowed_chat_bypass __ cls = func = . at 0x7698875022a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of test_guest_mode_mention_dropped_in_ignored_thread ______ cls = func = . at 0x769887502520> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_ignored_threads_drop_group_messages_before_other_gates _ cls = func = . at 0x769887502700> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_allowed_topics_drop_other_forum_topics_before_other_gates _ cls = func = . at 0x769887b036a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___________ ERROR at setup of test_allowed_topics_do_not_filter_dms ____________ cls = func = . at 0x769887502c00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_allowed_topics_treat_missing_thread_as_general_topic __ cls = func = . at 0x769887502980> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of test_regex_mention_patterns_allow_custom_wake_words _____ cls = func = . at 0x769887502b60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __________ ERROR at setup of test_invalid_regex_patterns_are_ignored ___________ cls = func = . at 0x769887502ca0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ________ ERROR at setup of test_config_bridges_telegram_group_settings _________ cls = func = . at 0x769887502fc0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ________ ERROR at setup of test_config_bridges_telegram_user_allowlists ________ cls = func = . at 0x769887500cc0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of test_config_env_overrides_telegram_user_allowlists _____ cls = func = . at 0x7698875036a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_dm_allow_from_is_enforced_by_gateway_authorization_not_trigger_gate _ cls = func = . at 0x769887502de0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_group_allow_from_is_enforced_by_gateway_authorization_not_trigger_gate _ cls = func = . at 0x769887503c40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of test_top_level_require_mention_bridges_to_telegram _____ cls = func = . at 0x769887503ec0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_top_level_require_mention_does_not_override_telegram_section _ cls = func = . at 0x7698875032e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ________ ERROR at setup of test_config_bridges_telegram_ignored_threads ________ cls = func = . at 0x769887502de0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of test_unmentioned_location_message_observed_in_group _____ cls = func = . at 0x769887503420> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_triggered_location_message_uses_shared_session_in_observe_mode _ cls = func = . at 0x769887503740> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of test_unmentioned_voice_message_observed_in_group ______ cls = func = . at 0x769887478860> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_triggered_voice_message_uses_shared_session_in_observe_mode _ cls = func = . at 0x769887478680> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_group_messages_can_be_opened_via_config ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_unmentioned_group_messages_can_be_observed_without_dispatching ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_observed_group_context_uses_shared_source_and_prompt_for_later_mentions ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_observed_group_context_replays_as_current_message_context_not_user_turns ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_observed_group_context_does_not_hide_current_user_turn_behind_history_offset ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_observed_group_context_wraps_multimodal_current_message_without_mutating_parts ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_observed_group_context_replays_normally_without_telegram_prompt ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_observed_group_context_preserves_slash_command_text_for_dispatch ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_unmentioned_group_observe_requires_chat_allowlist_for_shared_context ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_shared_group_observe_source_is_authorized_by_group_allowed_chats ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_unmentioned_group_observe_respects_chat_allowlist ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_group_messages_can_require_direct_trigger_via_config ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_explicit_multi_bot_mentions_route_only_to_named_bots ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_entityless_multi_bot_mentions_still_route_exclusively ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_intern_bots_ignore_messages_addressed_to_other_intern_bot ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_bot_command_addressed_to_other_bot_is_exclusive_even_when_mentions_not_required ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_raw_bot_mention_fallback_does_not_match_email_or_substring ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_exclusive_bot_mentions_can_be_disabled_for_legacy_groups ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_free_response_chats_bypass_mention_requirement ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_guest_mode_allows_only_direct_mentions_outside_allowed_chats ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_guest_mode_defaults_to_false_for_allowed_chat_bypass ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_guest_mode_mention_dropped_in_ignored_thread ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_ignored_threads_drop_group_messages_before_other_gates ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_allowed_topics_drop_other_forum_topics_before_other_gates ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_allowed_topics_do_not_filter_dms ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_allowed_topics_treat_missing_thread_as_general_topic ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_regex_mention_patterns_allow_custom_wake_words ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_invalid_regex_patterns_are_ignored ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_config_bridges_telegram_group_settings ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_config_bridges_telegram_user_allowlists ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_config_env_overrides_telegram_user_allowlists ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_dm_allow_from_is_enforced_by_gateway_authorization_not_trigger_gate ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_group_allow_from_is_enforced_by_gateway_authorization_not_trigger_gate ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_top_level_require_mention_bridges_to_telegram ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_top_level_require_mention_does_not_override_telegram_section ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_config_bridges_telegram_ignored_threads ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_unmentioned_location_message_observed_in_group ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_triggered_location_message_uses_shared_session_in_observe_mode ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_unmentioned_voice_message_observed_in_group ERROR plugins/platforms/telegram/tests/test_telegram_group_gating.py::test_triggered_voice_message_uses_shared_session_in_observe_mode ============================= 40 errors in 13.23s ============================== --- plugins/platforms/telegram/tests/test_telegram_photo_interrupts.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 1 item plugins/platforms/telegram/tests/test_telegram_photo_interrupts.py E [100%] ==================================== ERRORS ==================================== _ ERROR at setup of test_handle_message_does_not_priority_interrupt_photo_followup _ cls = func = . at 0x7e2235e60400> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =============================== warnings summary =============================== .venv/lib/python3.12/site-packages/discord/player.py:30 /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/discord/player.py:30: DeprecationWarning: 'audioop' is deprecated and slated for removal in Python 3.13 import audioop .venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91 /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) .venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:26 /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:26: DeprecationWarning: There is no current event loop loop = asyncio.get_event_loop() .venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67 /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): .venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6 /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions warnings.warn( # deprecated in 14.0 - 2024-11-09 -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_photo_interrupts.py::test_handle_message_does_not_priority_interrupt_photo_followup ========================= 5 warnings, 1 error in 8.30s ========================= --- plugins/platforms/telegram/tests/test_telegram_reply_mode.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 40 items plugins/platforms/telegram/tests/test_telegram_reply_mode.py EEEEEEEEEEE [ 27%] EEEEEEEEEEEEEEEEEEEEEEEEEEEEE [100%] ==================================== ERRORS ==================================== ______ ERROR at setup of TestReplyToModeConfig.test_default_mode_is_first ______ cls = func = . at 0x72ebb3e6e520> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____________ ERROR at setup of TestReplyToModeConfig.test_off_mode _____________ cls = func = . at 0x72ebb3e6f6a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___________ ERROR at setup of TestReplyToModeConfig.test_first_mode ____________ cls = func = . at 0x72ebb3ea62a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____________ ERROR at setup of TestReplyToModeConfig.test_all_mode _____________ cls = func = . at 0x72ebb3ea5f80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestReplyToModeConfig.test_invalid_mode_stored_as_is ____ cls = func = . at 0x72ebb3ea6840> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestReplyToModeConfig.test_none_mode_defaults_to_first ___ cls = func = . at 0x72ebb3ea6a20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestReplyToModeConfig.test_empty_string_mode_defaults_to_first _ cls = func = . at 0x72ebb3ea6160> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestShouldThreadReply.test_no_reply_to_returns_false ____ cls = func = . at 0x72ebb3ea7240> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of TestShouldThreadReply.test_off_mode_never_threads ______ cls = func = . at 0x72ebb3ea74c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestShouldThreadReply.test_first_mode_only_first_chunk ___ cls = func = . at 0x72ebb3ea76a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of TestShouldThreadReply.test_all_mode_all_chunks _______ cls = func = . at 0x72ebb3ea77e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestShouldThreadReply.test_invalid_mode_falls_back_to_first _ cls = func = . at 0x72ebb3ea7d80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of TestSendWithReplyToMode.test_off_mode_no_reply_threading __ cls = func = . at 0x72ebb3ea6de0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestSendWithReplyToMode.test_first_mode_only_first_chunk_threads _ cls = func = . at 0x72ebb3ea7880> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of TestSendWithReplyToMode.test_all_mode_all_chunks_thread ___ cls = func = . at 0x72ebb3ea5da0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestSendWithReplyToMode.test_no_reply_to_param_no_threading _ cls = func = . at 0x72ebb39682c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of TestSendWithReplyToMode.test_single_chunk_respects_mode ___ cls = func = . at 0x72ebb3968fe0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestConfigSerialization.test_to_dict_includes_reply_to_mode _ cls = func = . at 0x72ebb3969080> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestConfigSerialization.test_from_dict_loads_reply_to_mode _ cls = func = . at 0x72ebb3ea77e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of TestConfigSerialization.test_from_dict_defaults_to_first __ cls = func = . at 0x72ebb47fe660> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of TestEnvVarOverride.test_env_var_sets_off_mode ________ cls = func = . at 0x72ebb47ff920> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of TestEnvVarOverride.test_env_var_sets_all_mode ________ cls = func = . at 0x72ebb3968360> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of TestEnvVarOverride.test_env_var_case_insensitive ______ cls = func = . at 0x72ebb3969800> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestEnvVarOverride.test_env_var_invalid_value_ignored ____ cls = func = . at 0x72ebb3969940> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestEnvVarOverride.test_env_var_empty_value_ignored _____ cls = func = . at 0x72ebb3969b20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramYamlConfigLoading.test_top_level_reply_to_mode_off _ cls = func = . at 0x72ebb3968fe0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramYamlConfigLoading.test_top_level_reply_to_mode_all _ cls = func = . at 0x72ebb396a2a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramYamlConfigLoading.test_extra_reply_to_mode_off _ cls = func = . at 0x72ebb396a520> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramYamlConfigLoading.test_env_var_takes_precedence_over_yaml _ cls = func = . at 0x72ebb3968c20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramYamlConfigLoading.test_top_level_takes_precedence_over_extra _ cls = func = . at 0x72ebb396aac0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDMTopicFallbackReplyToMode.test_reply_to_id_suppressed_when_off _ cls = func = . at 0x72ebb3969440> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDMTopicFallbackReplyToMode.test_reply_to_id_returned_when_first _ cls = func = . at 0x72ebb396a520> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDMTopicFallbackReplyToMode.test_reply_to_id_returned_when_all _ cls = func = . at 0x72ebb396b380> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDMTopicFallbackReplyToMode.test_reply_to_id_returned_when_no_mode _ cls = func = . at 0x72ebb396ac00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDMTopicFallbackReplyToMode.test_explicit_reply_to_overrides_mode _ cls = func = . at 0x72ebb396b920> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDMTopicFallbackReplyToMode.test_thread_kwargs_suppressed_reply_anchor_when_off _ cls = func = . at 0x72ebb396a7a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDMTopicFallbackReplyToMode.test_thread_kwargs_returns_full_when_first _ cls = func = . at 0x72ebb396bec0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDMTopicFallbackReplyToMode.test_thread_kwargs_no_mode_backward_compat _ cls = func = . at 0x72ebb396be20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDMTopicFallbackReplyToMode.test_send_dm_topic_off_no_quote _ cls = func = . at 0x72ebb3969080> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDMTopicFallbackReplyToMode.test_send_dm_topic_first_still_quotes _ cls = func = . at 0x72ebb3969440> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestReplyToModeConfig::test_default_mode_is_first ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestReplyToModeConfig::test_off_mode ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestReplyToModeConfig::test_first_mode ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestReplyToModeConfig::test_all_mode ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestReplyToModeConfig::test_invalid_mode_stored_as_is ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestReplyToModeConfig::test_none_mode_defaults_to_first ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestReplyToModeConfig::test_empty_string_mode_defaults_to_first ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestShouldThreadReply::test_no_reply_to_returns_false ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestShouldThreadReply::test_off_mode_never_threads ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestShouldThreadReply::test_first_mode_only_first_chunk ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestShouldThreadReply::test_all_mode_all_chunks ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestShouldThreadReply::test_invalid_mode_falls_back_to_first ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestSendWithReplyToMode::test_off_mode_no_reply_threading ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestSendWithReplyToMode::test_first_mode_only_first_chunk_threads ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestSendWithReplyToMode::test_all_mode_all_chunks_thread ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestSendWithReplyToMode::test_no_reply_to_param_no_threading ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestSendWithReplyToMode::test_single_chunk_respects_mode ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestConfigSerialization::test_to_dict_includes_reply_to_mode ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestConfigSerialization::test_from_dict_loads_reply_to_mode ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestConfigSerialization::test_from_dict_defaults_to_first ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestEnvVarOverride::test_env_var_sets_off_mode ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestEnvVarOverride::test_env_var_sets_all_mode ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestEnvVarOverride::test_env_var_case_insensitive ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestEnvVarOverride::test_env_var_invalid_value_ignored ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestEnvVarOverride::test_env_var_empty_value_ignored ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestTelegramYamlConfigLoading::test_top_level_reply_to_mode_off ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestTelegramYamlConfigLoading::test_top_level_reply_to_mode_all ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestTelegramYamlConfigLoading::test_extra_reply_to_mode_off ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestTelegramYamlConfigLoading::test_env_var_takes_precedence_over_yaml ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestTelegramYamlConfigLoading::test_top_level_takes_precedence_over_extra ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_reply_to_id_suppressed_when_off ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_reply_to_id_returned_when_first ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_reply_to_id_returned_when_all ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_reply_to_id_returned_when_no_mode ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_explicit_reply_to_overrides_mode ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_thread_kwargs_suppressed_reply_anchor_when_off ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_thread_kwargs_returns_full_when_first ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_thread_kwargs_no_mode_backward_compat ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_send_dm_topic_off_no_quote ERROR plugins/platforms/telegram/tests/test_telegram_reply_mode.py::TestDMTopicFallbackReplyToMode::test_send_dm_topic_first_still_quotes ============================= 40 errors in 13.52s ============================== --- plugins/platforms/telegram/tests/test_telegram_network.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 46 items plugins/platforms/telegram/tests/test_telegram_network.py EEEEEEEEEEEEEE [ 30%] EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE [100%] ==================================== ERRORS ==================================== ____ ERROR at setup of TestParseFallbackIpEnv.test_filters_invalid_and_ipv6 ____ cls = func = . at 0x721f175684a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of TestParseFallbackIpEnv.test_none_returns_empty _______ cls = func = . at 0x721f1756bc40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestParseFallbackIpEnv.test_empty_string_returns_empty ___ cls = func = . at 0x721f1756ba60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestParseFallbackIpEnv.test_whitespace_only_returns_empty __ cls = func = . at 0x721f1756be20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ________ ERROR at setup of TestParseFallbackIpEnv.test_single_valid_ip _________ cls = func = . at 0x721f1756b380> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of TestParseFallbackIpEnv.test_multiple_valid_ips _______ cls = func = . at 0x721f174444a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of TestParseFallbackIpEnv.test_rejects_leading_zeros ______ cls = func = . at 0x721f17444860> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestNormalizeFallbackIps.test_deduplication_happens_at_transport_level _ cls = func = . at 0x721f174451c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestNormalizeFallbackIps.test_empty_strings_skipped _____ cls = func = . at 0x721f174440e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestRewriteRequestForIp.test_preserves_host_and_sni _____ cls = func = . at 0x721f174459e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestRewriteRequestForIp.test_preserves_method_and_path ___ cls = func = . at 0x721f17445c60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFallbackTransport.test_falls_back_on_connect_timeout_and_becomes_sticky _ cls = func = . at 0x721f17445260> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestFallbackTransport.test_falls_back_on_connect_error ___ cls = func = . at 0x721f17446160> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFallbackTransport.test_does_not_fallback_on_non_connect_error _ cls = func = . at 0x721f174463e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFallbackTransport.test_all_ips_fail_raises_last_error __ cls = func = . at 0x721f174460c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFallbackTransport.test_multiple_fallback_ips_tried_in_order _ cls = func = . at 0x721f17444540> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFallbackTransport.test_sticky_ip_tried_first_but_falls_through_if_stale _ cls = func = . at 0x721f17447100> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFallbackTransportPassthrough.test_non_telegram_host_bypasses_fallback _ cls = func = . at 0x721f17447380> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFallbackTransportPassthrough.test_empty_fallback_list_uses_primary_only _ cls = func = . at 0x721f17447060> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFallbackTransportPassthrough.test_primary_succeeds_no_fallback_needed _ cls = func = . at 0x721f17da2020> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of TestFallbackTransportInit.test_deduplicates_fallback_ips __ cls = func = . at 0x721f17445260> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFallbackTransportInit.test_filters_invalid_ips_at_init _ cls = func = . at 0x721f17446840> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFallbackTransportInit.test_uses_proxy_env_for_primary_and_fallback_transports _ cls = func = . at 0x721f17446480> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFallbackTransportInit.test_no_proxy_bypasses_fallback_ip_cidr _ cls = func = . at 0x721f17447a60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFallbackTransportClose.test_aclose_closes_all_transports _ cls = func = . at 0x721f17447ce0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestConfigFallbackIps.test_env_var_populates_config_extra __ cls = func = . at 0x721f17446b60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestConfigFallbackIps.test_env_var_creates_platform_if_missing _ cls = func = . at 0x721f17444400> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestConfigFallbackIps.test_env_var_strips_whitespace ____ cls = func = . at 0x721f17445bc0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestConfigFallbackIps.test_empty_env_var_does_not_populate _ cls = func = . at 0x721f17447420> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of TestAdapterFallbackIps.test_list_in_extra __________ cls = func = . at 0x721f17446e80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of TestAdapterFallbackIps.test_csv_string_in_extra _______ cls = func = . at 0x721f16f04ea0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __________ ERROR at setup of TestAdapterFallbackIps.test_empty_extra ___________ cls = func = . at 0x721f16f040e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of TestAdapterFallbackIps.test_no_extra_attr __________ cls = func = . at 0x721f16f05440> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of TestAdapterFallbackIps.test_invalid_ips_filtered ______ cls = func = . at 0x721f16f056c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDiscoverFallbackIps.test_google_and_cloudflare_ips_collected _ cls = func = . at 0x721f16f04fe0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDiscoverFallbackIps.test_system_dns_ip_kept_when_doh_confirms _ cls = func = . at 0x721f16f05d00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestDiscoverFallbackIps.test_doh_results_deduplicated ____ cls = func = . at 0x721f17568540> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDiscoverFallbackIps.test_doh_timeout_falls_back_to_seed _ cls = func = . at 0x721f17568f40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDiscoverFallbackIps.test_doh_connect_error_falls_back_to_seed _ cls = func = . at 0x721f17444400> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDiscoverFallbackIps.test_doh_malformed_json_falls_back_to_seed _ cls = func = . at 0x721f16f04ea0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDiscoverFallbackIps.test_one_provider_fails_other_succeeds _ cls = func = . at 0x721f16f06160> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDiscoverFallbackIps.test_system_dns_failure_keeps_all_doh_ips _ cls = func = . at 0x721f16f06200> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDiscoverFallbackIps.test_all_doh_ips_same_as_system_dns_kept _ cls = func = . at 0x721f16f062a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDiscoverFallbackIps.test_cloudflare_gets_accept_header _ cls = func = . at 0x721f16f06b60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of TestDiscoverFallbackIps.test_non_a_records_ignored _____ cls = func = . at 0x721f16f06a20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestDiscoverFallbackIps.test_invalid_ip_in_doh_response_skipped _ cls = func = . at 0x721f16f07100> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestParseFallbackIpEnv::test_filters_invalid_and_ipv6 ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestParseFallbackIpEnv::test_none_returns_empty ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestParseFallbackIpEnv::test_empty_string_returns_empty ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestParseFallbackIpEnv::test_whitespace_only_returns_empty ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestParseFallbackIpEnv::test_single_valid_ip ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestParseFallbackIpEnv::test_multiple_valid_ips ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestParseFallbackIpEnv::test_rejects_leading_zeros ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestNormalizeFallbackIps::test_deduplication_happens_at_transport_level ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestNormalizeFallbackIps::test_empty_strings_skipped ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestRewriteRequestForIp::test_preserves_host_and_sni ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestRewriteRequestForIp::test_preserves_method_and_path ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransport::test_falls_back_on_connect_timeout_and_becomes_sticky ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransport::test_falls_back_on_connect_error ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransport::test_does_not_fallback_on_non_connect_error ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransport::test_all_ips_fail_raises_last_error ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransport::test_multiple_fallback_ips_tried_in_order ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransport::test_sticky_ip_tried_first_but_falls_through_if_stale ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransportPassthrough::test_non_telegram_host_bypasses_fallback ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransportPassthrough::test_empty_fallback_list_uses_primary_only ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransportPassthrough::test_primary_succeeds_no_fallback_needed ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransportInit::test_deduplicates_fallback_ips ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransportInit::test_filters_invalid_ips_at_init ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransportInit::test_uses_proxy_env_for_primary_and_fallback_transports ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransportInit::test_no_proxy_bypasses_fallback_ip_cidr ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestFallbackTransportClose::test_aclose_closes_all_transports ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestConfigFallbackIps::test_env_var_populates_config_extra ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestConfigFallbackIps::test_env_var_creates_platform_if_missing ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestConfigFallbackIps::test_env_var_strips_whitespace ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestConfigFallbackIps::test_empty_env_var_does_not_populate ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestAdapterFallbackIps::test_list_in_extra ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestAdapterFallbackIps::test_csv_string_in_extra ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestAdapterFallbackIps::test_empty_extra ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestAdapterFallbackIps::test_no_extra_attr ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestAdapterFallbackIps::test_invalid_ips_filtered ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_google_and_cloudflare_ips_collected ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_system_dns_ip_kept_when_doh_confirms ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_doh_results_deduplicated ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_doh_timeout_falls_back_to_seed ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_doh_connect_error_falls_back_to_seed ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_doh_malformed_json_falls_back_to_seed ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_one_provider_fails_other_succeeds ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_system_dns_failure_keeps_all_doh_ips ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_all_doh_ips_same_as_system_dns_kept ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_cloudflare_gets_accept_header ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_non_a_records_ignored ERROR plugins/platforms/telegram/tests/test_telegram_network.py::TestDiscoverFallbackIps::test_invalid_ip_in_doh_response_skipped ============================= 46 errors in 15.09s ============================== --- plugins/platforms/slack/tests/test_slack.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 186 items plugins/platforms/slack/tests/test_slack.py ..F.F.FFFF.................. [ 15%] ........................................................................ [ 53%] ........................................................................ [ 92%] .............. [100%] =================================== FAILURES =================================== _________ TestAppMentionHandler.test_app_mention_registered_on_connect _________ self = def test_app_mention_registered_on_connect(self): """connect() should register message + assistant lifecycle handlers.""" config = PlatformConfig(enabled=True, token="xoxb-fake") adapter = SlackAdapter(config) # Track which events get registered registered_events = [] registered_commands = [] mock_app = MagicMock() def mock_event(event_type): def decorator(fn): registered_events.append(event_type) return fn return decorator def mock_command(cmd): def decorator(fn): registered_commands.append(cmd) return fn return decorator mock_app.event = mock_event mock_app.command = mock_command mock_app.client = AsyncMock() mock_app.client.auth_test = AsyncMock(return_value={ "user_id": "U_BOT", "user": "testbot", }) # Mock AsyncWebClient so multi-workspace auth_test is awaitable mock_web_client = AsyncMock() mock_web_client.auth_test = AsyncMock(return_value={ "user_id": "U_BOT", "user": "testbot", "team_id": "T_FAKE", "team": "FakeTeam", }) with patch.object(_slack_mod, "AsyncApp", return_value=mock_app), \ patch.object(_slack_mod, "AsyncWebClient", return_value=mock_web_client), \ patch.object(_slack_mod, "AsyncSocketModeHandler", return_value=MagicMock()), \ patch.dict(os.environ, {"SLACK_APP_TOKEN": "xapp-fake"}), \ patch("gateway.status.acquire_scoped_lock", return_value=(True, None)), \ patch("asyncio.create_task"): asyncio.run(adapter.connect()) > assert "message" in registered_events E AssertionError: assert 'message' in [] plugins/platforms/slack/tests/test_slack.py:190: AssertionError ------------------------------ Captured log call ------------------------------- ERROR hermes_agent_slack.adapter:adapter.py:694 [Slack] Connection failed: object MagicMock can't be used in 'await' expression Traceback (most recent call last): File "/home/ari/src/hermes-agent/main/plugins/platforms/slack/hermes_agent_slack/adapter.py", line 573, in connect auth_response = await client.auth_test() ^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: object MagicMock can't be used in 'await' expression _ TestSlackConnectCleanup.test_reconnect_closes_previous_handler_to_prevent_zombie_socket _ self = @pytest.mark.asyncio async def test_reconnect_closes_previous_handler_to_prevent_zombie_socket(self): """Regression for #18980: calling connect() on an adapter that already has a live handler (e.g. during a gateway restart) must close the old AsyncSocketModeHandler before creating a new one. Without this guard, the old Socket Mode websocket stays alive and both connections dispatch every Slack event, producing double responses — the same bug that affected DiscordAdapter (#18187). """ config = PlatformConfig(enabled=True, token="xoxb-fake") adapter = SlackAdapter(config) # Simulate state left over from a prior connect() call. first_handler = AsyncMock() first_handler.close_async = AsyncMock() adapter._handler = first_handler mock_app = MagicMock() def _noop_decorator(event_type): def decorator(fn): return fn return decorator mock_app.event = _noop_decorator mock_app.command = _noop_decorator mock_app.action = _noop_decorator mock_app.client = AsyncMock() mock_web_client = AsyncMock() mock_web_client.auth_test = AsyncMock(return_value={ "user_id": "U_BOT", "user": "testbot", "team_id": "T_FAKE", "team": "FakeTeam", }) second_handler = MagicMock() with patch.object(_slack_mod, "AsyncApp", return_value=mock_app), \ patch.object(_slack_mod, "AsyncWebClient", return_value=mock_web_client), \ patch.object(_slack_mod, "AsyncSocketModeHandler", return_value=second_handler), \ patch.dict(os.environ, {"SLACK_APP_TOKEN": "xapp-fake"}), \ patch("gateway.status.acquire_scoped_lock", return_value=(True, None)), \ patch("gateway.status.release_scoped_lock"), \ patch("asyncio.create_task"): result = await adapter.connect() > assert result is True E assert False is True plugins/platforms/slack/tests/test_slack.py:279: AssertionError ------------------------------ Captured log call ------------------------------- ERROR hermes_agent_slack.adapter:adapter.py:694 [Slack] Connection failed: object MagicMock can't be used in 'await' expression Traceback (most recent call last): File "/home/ari/src/hermes-agent/main/plugins/platforms/slack/hermes_agent_slack/adapter.py", line 573, in connect auth_response = await client.auth_test() ^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: object MagicMock can't be used in 'await' expression _ TestSlackProxyBehavior.test_resolve_slack_proxy_url_ignores_unsupported_proxy_schemes _ self = def test_resolve_slack_proxy_url_ignores_unsupported_proxy_schemes(self): > with patch.object(_slack_mod, "resolve_proxy_url", return_value="socks5://proxy.example.com:1080"): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ plugins/platforms/slack/tests/test_slack.py:296: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:1467: in __enter__ original, local = self.get_original() ^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_original(self): target = self.getter() name = self.attribute original = DEFAULT local = False try: original = target.__dict__[name] except (AttributeError, KeyError): original = getattr(target, name, DEFAULT) else: local = True if name in _builtins and isinstance(target, ModuleType): self.create = True if not self.create and original is DEFAULT: > raise AttributeError( "%s does not have the attribute %r" % (target, name) ) E AttributeError: does not have the attribute 'resolve_proxy_url' /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:1437: AttributeError __ TestSlackProxyBehavior.test_resolve_slack_proxy_url_checks_all_slack_hosts __ self = def test_resolve_slack_proxy_url_checks_all_slack_hosts(self): > with patch.object(_slack_mod, "resolve_proxy_url", return_value="http://proxy.example.com:3128"), \ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ patch.object(_slack_mod, "is_host_excluded_by_no_proxy", side_effect=lambda host: host == "wss-primary.slack.com") as excluded: plugins/platforms/slack/tests/test_slack.py:300: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:1467: in __enter__ original, local = self.get_original() ^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_original(self): target = self.getter() name = self.attribute original = DEFAULT local = False try: original = target.__dict__[name] except (AttributeError, KeyError): original = getattr(target, name, DEFAULT) else: local = True if name in _builtins and isinstance(target, ModuleType): self.create = True if not self.create and original is DEFAULT: > raise AttributeError( "%s does not have the attribute %r" % (target, name) ) E AttributeError: does not have the attribute 'resolve_proxy_url' /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:1437: AttributeError _______ TestSlackProxyBehavior.test_connect_uses_proxy_when_not_bypassed _______ self = @pytest.mark.asyncio async def test_connect_uses_proxy_when_not_bypassed(self): created_apps = [] created_clients = [] class FakeWebClient: def __init__(self, token): self.token = token self.proxy = "constructor-default" suffix = token.split("-")[-1] self.auth_test = AsyncMock(return_value={ "team_id": f"T_{suffix}", "user_id": f"U_{suffix}", "user": f"bot-{suffix}", "team": f"Team {suffix}", }) created_clients.append(self) class FakeApp: def __init__(self, token): self.token = token self.client = FakeWebClient(token) self.registered_events = [] self.registered_commands = [] self.registered_actions = [] created_apps.append(self) def event(self, event_type): self.registered_events.append(event_type) def decorator(fn): return fn return decorator def command(self, command_name): self.registered_commands.append(command_name) def decorator(fn): return fn return decorator def action(self, action_id): self.registered_actions.append(action_id) def decorator(fn): return fn return decorator class FakeSocketModeHandler: def __init__(self, app, app_token, proxy=None): self.app = app self.app_token = app_token self.proxy = proxy self.client = MagicMock(proxy="constructor-default") def start_async(self): return None async def close_async(self): return None config = PlatformConfig(enabled=True, token="xoxb-primary,xoxb-secondary") adapter = SlackAdapter(config) with patch.object(_slack_mod, "AsyncApp", side_effect=FakeApp), \ patch.object(_slack_mod, "AsyncWebClient", side_effect=FakeWebClient), \ patch.object(_slack_mod, "AsyncSocketModeHandler", FakeSocketModeHandler), \ > patch.object(_slack_mod, "_resolve_slack_proxy_url", return_value="http://proxy.example.com:3128"), \ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ patch.dict(os.environ, {"SLACK_APP_TOKEN": "xapp-fake"}, clear=False), \ patch("gateway.status.acquire_scoped_lock", return_value=(True, None)), \ patch("asyncio.create_task", return_value=MagicMock(name="socket-mode-task")): plugins/platforms/slack/tests/test_slack.py:379: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:1467: in __enter__ original, local = self.get_original() ^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_original(self): target = self.getter() name = self.attribute original = DEFAULT local = False try: original = target.__dict__[name] except (AttributeError, KeyError): original = getattr(target, name, DEFAULT) else: local = True if name in _builtins and isinstance(target, ModuleType): self.create = True if not self.create and original is DEFAULT: > raise AttributeError( "%s does not have the attribute %r" % (target, name) ) E AttributeError: does not have the attribute '_resolve_slack_proxy_url' /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:1437: AttributeError _ TestSlackProxyBehavior.test_connect_clears_proxy_when_no_proxy_matches_slack _ self = @pytest.mark.asyncio async def test_connect_clears_proxy_when_no_proxy_matches_slack(self): created_apps = [] created_clients = [] class FakeWebClient: def __init__(self, token): self.token = token self.proxy = "constructor-default" suffix = token.split("-")[-1] self.auth_test = AsyncMock(return_value={ "team_id": f"T_{suffix}", "user_id": f"U_{suffix}", "user": f"bot-{suffix}", "team": f"Team {suffix}", }) created_clients.append(self) class FakeApp: def __init__(self, token): self.token = token self.client = FakeWebClient(token) self.registered_events = [] self.registered_commands = [] self.registered_actions = [] created_apps.append(self) def event(self, event_type): self.registered_events.append(event_type) def decorator(fn): return fn return decorator def command(self, command_name): self.registered_commands.append(command_name) def decorator(fn): return fn return decorator def action(self, action_id): self.registered_actions.append(action_id) def decorator(fn): return fn return decorator class FakeSocketModeHandler: def __init__(self, app, app_token, proxy=None): self.app = app self.app_token = app_token self.proxy = proxy self.client = MagicMock(proxy="constructor-default") def start_async(self): return None async def close_async(self): return None config = PlatformConfig(enabled=True, token="xoxb-primary") adapter = SlackAdapter(config) with patch.object(_slack_mod, "AsyncApp", side_effect=FakeApp), \ patch.object(_slack_mod, "AsyncWebClient", side_effect=FakeWebClient), \ patch.object(_slack_mod, "AsyncSocketModeHandler", FakeSocketModeHandler), \ > patch.object(_slack_mod, "_resolve_slack_proxy_url", return_value=None), \ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ patch.dict(os.environ, {"SLACK_APP_TOKEN": "xapp-fake"}, clear=False), \ patch("gateway.status.acquire_scoped_lock", return_value=(True, None)), \ patch("asyncio.create_task", return_value=MagicMock(name="socket-mode-task")): plugins/platforms/slack/tests/test_slack.py:462: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:1467: in __enter__ original, local = self.get_original() ^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def get_original(self): target = self.getter() name = self.attribute original = DEFAULT local = False try: original = target.__dict__[name] except (AttributeError, KeyError): original = getattr(target, name, DEFAULT) else: local = True if name in _builtins and isinstance(target, ModuleType): self.create = True if not self.create and original is DEFAULT: > raise AttributeError( "%s does not have the attribute %r" % (target, name) ) E AttributeError: does not have the attribute '_resolve_slack_proxy_url' /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:1437: AttributeError =============================== warnings summary =============================== plugins/platforms/slack/tests/test_slack.py::TestSlashCommandSessionIsolation::test_channel_slash_command_uses_group_session_semantics /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) plugins/platforms/slack/tests/test_slack.py::TestSlashCommandSessionIsolation::test_channel_slash_command_uses_group_session_semantics /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): plugins/platforms/slack/tests/test_slack.py::TestSlashCommandSessionIsolation::test_channel_slash_command_uses_group_session_semantics /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions warnings.warn( # deprecated in 14.0 - 2024-11-09 plugins/platforms/slack/tests/test_slack.py::TestSendDocument::test_send_document_retries_transient_upload_error /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:2217: RuntimeWarning: coroutine 'AsyncMockMixin._execute_mock_call' was never awaited def __init__(self, name, parent): Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. plugins/platforms/slack/tests/test_slack.py: 25 warnings /home/ari/src/hermes-agent/main/plugins/platforms/slack/hermes_agent_slack/adapter.py:2177: RuntimeWarning: coroutine 'AsyncMockMixin._execute_mock_call' was never awaited user_name = await self._resolve_user_name(user_id, chat_id=channel_id) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. plugins/platforms/slack/tests/test_slack.py::TestBangPrefixCommands::test_bang_works_inside_thread plugins/platforms/slack/tests/test_slack.py::TestThreadReplyHandling::test_thread_reply_without_mention_with_session_processed plugins/platforms/slack/tests/test_slack.py::TestThreadReplyHandling::test_thread_reply_with_mention_strips_bot_id plugins/platforms/slack/tests/test_slack.py::TestAssistantThreadLifecycle::test_message_uses_cached_assistant_thread_identity /home/ari/src/hermes-agent/main/plugins/platforms/slack/hermes_agent_slack/adapter.py:2206: RuntimeWarning: coroutine 'AsyncMockMixin._execute_mock_call' was never awaited reply_to_text = await self._fetch_thread_parent_text( Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. plugins/platforms/slack/tests/test_slack.py::TestBangPrefixCommands::test_bang_works_inside_thread plugins/platforms/slack/tests/test_slack.py::TestAssistantThreadLifecycle::test_message_uses_cached_assistant_thread_identity /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/_pytest/stash.py:108: RuntimeWarning: coroutine 'AsyncMockMixin._execute_mock_call' was never awaited del self._storage[key] Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. plugins/platforms/slack/tests/test_slack.py::TestBangPrefixCommands::test_bang_unknown_token_passes_through_unchanged /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/collections/__init__.py:458: RuntimeWarning: coroutine 'AsyncMockMixin._execute_mock_call' was never awaited result = self._make(_map(kwds.pop, field_names, self)) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED plugins/platforms/slack/tests/test_slack.py::TestAppMentionHandler::test_app_mention_registered_on_connect FAILED plugins/platforms/slack/tests/test_slack.py::TestSlackConnectCleanup::test_reconnect_closes_previous_handler_to_prevent_zombie_socket FAILED plugins/platforms/slack/tests/test_slack.py::TestSlackProxyBehavior::test_resolve_slack_proxy_url_ignores_unsupported_proxy_schemes FAILED plugins/platforms/slack/tests/test_slack.py::TestSlackProxyBehavior::test_resolve_slack_proxy_url_checks_all_slack_hosts FAILED plugins/platforms/slack/tests/test_slack.py::TestSlackProxyBehavior::test_connect_uses_proxy_when_not_bypassed FAILED plugins/platforms/slack/tests/test_slack.py::TestSlackProxyBehavior::test_connect_clears_proxy_when_no_proxy_matches_slack ================= 6 failed, 180 passed, 36 warnings in 15.51s ================== --- plugins/platforms/telegram/tests/test_telegram_noise_filter.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 6 items plugins/platforms/telegram/tests/test_telegram_noise_filter.py EEEEEE [100%] ==================================== ERRORS ==================================== _ ERROR at setup of test_telegram_status_suppresses_auxiliary_and_retry_noise __ cls = func = . at 0x7679b8740ae0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___________ ERROR at setup of test_non_telegram_status_is_unchanged ____________ cls = func = . at 0x7679b852dbc0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_telegram_status_sanitizes_raw_provider_security_errors _ cls = func = . at 0x7679b852d120> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_telegram_final_response_sanitizes_raw_provider_errors _ cls = func = . at 0x7679b852cf40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of test_telegram_final_response_redacts_auth_secrets ______ cls = func = . at 0x7679b8b81120> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of test_telegram_final_response_keeps_normal_answers ______ cls = func = . at 0x7679c1003100> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =============================== warnings summary =============================== .venv/lib/python3.12/site-packages/discord/player.py:30 /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/discord/player.py:30: DeprecationWarning: 'audioop' is deprecated and slated for removal in Python 3.13 import audioop .venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91 /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) .venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:26 /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:26: DeprecationWarning: There is no current event loop loop = asyncio.get_event_loop() .venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67 /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): .venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6 /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions warnings.warn( # deprecated in 14.0 - 2024-11-09 -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_noise_filter.py::test_telegram_status_suppresses_auxiliary_and_retry_noise ERROR plugins/platforms/telegram/tests/test_telegram_noise_filter.py::test_non_telegram_status_is_unchanged ERROR plugins/platforms/telegram/tests/test_telegram_noise_filter.py::test_telegram_status_sanitizes_raw_provider_security_errors ERROR plugins/platforms/telegram/tests/test_telegram_noise_filter.py::test_telegram_final_response_sanitizes_raw_provider_errors ERROR plugins/platforms/telegram/tests/test_telegram_noise_filter.py::test_telegram_final_response_redacts_auth_secrets ERROR plugins/platforms/telegram/tests/test_telegram_noise_filter.py::test_telegram_final_response_keeps_normal_answers ======================== 5 warnings, 6 errors in 10.61s ======================== --- plugins/platforms/matrix/tests/test_matrix.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 150 items plugins/platforms/matrix/tests/test_matrix.py .......................... [ 17%] ................FFF..sF.FF...FF........FF............................... [ 65%] ......................................F...F......... [100%] =================================== FAILURES =================================== _ TestMatrixRequirements.test_check_requirements_encryption_true_no_e2ee_deps __ self = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x75d759146d80> def test_check_requirements_encryption_true_no_e2ee_deps(self, monkeypatch): """MATRIX_ENCRYPTION=true should fail if python-olm is not installed.""" monkeypatch.setenv("MATRIX_ACCESS_TOKEN", "syt_test") monkeypatch.setenv("MATRIX_HOMESERVER", "https://matrix.example.org") monkeypatch.setenv("MATRIX_ENCRYPTION", "true") > from gateway.platforms import matrix as matrix_mod E ImportError: cannot import name 'matrix' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/matrix/tests/test_matrix.py:762: ImportError _ TestMatrixRequirements.test_check_requirements_encryption_false_no_e2ee_deps_ok _ self = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x75d7590fb740> def test_check_requirements_encryption_false_no_e2ee_deps_ok(self, monkeypatch): """Without encryption, missing E2EE deps should not block startup.""" monkeypatch.setenv("MATRIX_ACCESS_TOKEN", "syt_test") monkeypatch.setenv("MATRIX_HOMESERVER", "https://matrix.example.org") monkeypatch.delenv("MATRIX_ENCRYPTION", raising=False) > from gateway.platforms import matrix as matrix_mod E ImportError: cannot import name 'matrix' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/matrix/tests/test_matrix.py:773: ImportError _ TestMatrixRequirements.test_check_requirements_encryption_true_with_e2ee_deps _ self = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x75d7591467b0> def test_check_requirements_encryption_true_with_e2ee_deps(self, monkeypatch): """MATRIX_ENCRYPTION=true should pass if E2EE deps are available.""" monkeypatch.setenv("MATRIX_ACCESS_TOKEN", "syt_test") monkeypatch.setenv("MATRIX_HOMESERVER", "https://matrix.example.org") monkeypatch.setenv("MATRIX_ENCRYPTION", "true") > from gateway.platforms import matrix as matrix_mod E ImportError: cannot import name 'matrix' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/matrix/tests/test_matrix.py:789: ImportError ___ TestMatrixAccessTokenAuth.test_connect_with_access_token_and_encryption ____ self = @pytest.mark.asyncio async def test_connect_with_access_token_and_encryption(self): """connect() should call whoami, set user_id/device_id, set up crypto.""" from hermes_agent_matrix import MatrixAdapter config = PlatformConfig( enabled=True, token="syt_test_access_token", extra={ "homeserver": "https://matrix.example.org", "user_id": "@bot:example.org", "encryption": True, }, ) adapter = MatrixAdapter(config) class FakeWhoamiResponse: def __init__(self, user_id, device_id): self.user_id = user_id self.device_id = device_id fake_mautrix_mods = _make_fake_mautrix() # Create a mock client that returns from the mautrix.client.Client constructor mock_client = MagicMock() mock_client.mxid = "@bot:example.org" mock_client.device_id = None mock_client.state_store = MagicMock() mock_client.sync_store = MagicMock() mock_client.crypto = None mock_client.whoami = AsyncMock(return_value=FakeWhoamiResponse("@bot:example.org", "DEV123")) mock_client.sync = AsyncMock(return_value={"rooms": {"join": {"!room:server": {}}}}) mock_client.add_event_handler = MagicMock() mock_client.handle_sync = MagicMock(return_value=[]) mock_client.query_keys = AsyncMock(return_value={ "device_keys": {"@bot:example.org": {"DEV123": { "keys": {"ed25519:DEV123": "fake_ed25519_key"}, }}}, }) mock_client.api = MagicMock() mock_client.api.token = "syt_test_access_token" mock_client.api.session = MagicMock() mock_client.api.session.close = AsyncMock() # Mock the crypto setup mock_olm = MagicMock() mock_olm.load = AsyncMock() mock_olm.share_keys = AsyncMock() mock_olm.share_keys_min_trust = None mock_olm.send_keys_min_trust = None mock_olm.account = MagicMock() mock_olm.account.identity_keys = {"ed25519": "fake_ed25519_key"} # Patch Client constructor to return our mock fake_mautrix_mods["mautrix.client"].Client = MagicMock(return_value=mock_client) fake_mautrix_mods["mautrix.crypto"].OlmMachine = MagicMock(return_value=mock_olm) > from gateway.platforms import matrix as matrix_mod E ImportError: cannot import name 'matrix' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/matrix/tests/test_matrix.py:912: ImportError _ TestMatrixE2EEHardFail.test_connect_fails_when_encryption_true_but_no_e2ee_deps _ self = @pytest.mark.asyncio async def test_connect_fails_when_encryption_true_but_no_e2ee_deps(self): from hermes_agent_matrix import MatrixAdapter, _check_e2ee_deps config = PlatformConfig( enabled=True, token="syt_test_access_token", extra={ "homeserver": "https://matrix.example.org", "user_id": "@bot:example.org", "encryption": True, }, ) adapter = MatrixAdapter(config) fake_mautrix_mods = _make_fake_mautrix() mock_client = MagicMock() mock_client.whoami = AsyncMock(return_value=MagicMock(user_id="@bot:example.org", device_id="DEV123")) mock_client.api = MagicMock() mock_client.api.token = "syt_test_access_token" mock_client.api.session = MagicMock() mock_client.api.session.close = AsyncMock() mock_client.mxid = "@bot:example.org" mock_client.device_id = None mock_client.crypto = None fake_mautrix_mods["mautrix.client"].Client = MagicMock(return_value=mock_client) > from gateway.platforms import matrix as matrix_mod E ImportError: cannot import name 'matrix' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/matrix/tests/test_matrix.py:992: ImportError ______ TestMatrixE2EEHardFail.test_connect_fails_when_crypto_setup_raises ______ self = @pytest.mark.asyncio async def test_connect_fails_when_crypto_setup_raises(self): """Even if _check_e2ee_deps passes, if OlmMachine raises, hard-fail.""" from hermes_agent_matrix import MatrixAdapter config = PlatformConfig( enabled=True, token="syt_test_access_token", extra={ "homeserver": "https://matrix.example.org", "user_id": "@bot:example.org", "encryption": True, }, ) adapter = MatrixAdapter(config) fake_mautrix_mods = _make_fake_mautrix() mock_client = MagicMock() mock_client.whoami = AsyncMock(return_value=MagicMock(user_id="@bot:example.org", device_id="DEV123")) mock_client.api = MagicMock() mock_client.api.token = "syt_test_access_token" mock_client.api.session = MagicMock() mock_client.api.session.close = AsyncMock() mock_client.mxid = "@bot:example.org" mock_client.device_id = None mock_client.crypto = None fake_mautrix_mods["mautrix.client"].Client = MagicMock(return_value=mock_client) fake_mautrix_mods["mautrix.crypto"].OlmMachine = MagicMock(side_effect=Exception("olm init failed")) > from gateway.platforms import matrix as matrix_mod E ImportError: cannot import name 'matrix' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/matrix/tests/test_matrix.py:1031: ImportError ____ TestMatrixDeviceId.test_connect_uses_configured_device_id_over_whoami _____ self = @pytest.mark.asyncio async def test_connect_uses_configured_device_id_over_whoami(self): """When MATRIX_DEVICE_ID is set, it should be used instead of whoami device_id.""" from hermes_agent_matrix import MatrixAdapter config = PlatformConfig( enabled=True, token="syt_test_access_token", extra={ "homeserver": "https://matrix.example.org", "user_id": "@bot:example.org", "encryption": True, "device_id": "MY_STABLE_DEVICE", }, ) adapter = MatrixAdapter(config) fake_mautrix_mods = _make_fake_mautrix() mock_client = MagicMock() mock_client.mxid = "@bot:example.org" mock_client.device_id = None mock_client.state_store = MagicMock() mock_client.sync_store = MagicMock() mock_client.crypto = None mock_client.whoami = AsyncMock(return_value=MagicMock(user_id="@bot:example.org", device_id="WHOAMI_DEV")) mock_client.sync = AsyncMock(return_value={"rooms": {"join": {"!room:server": {}}}}) mock_client.add_event_handler = MagicMock() mock_client.handle_sync = MagicMock(return_value=[]) mock_client.query_keys = AsyncMock(return_value={ "device_keys": {"@bot:example.org": {"MY_STABLE_DEVICE": { "keys": {"ed25519:MY_STABLE_DEVICE": "fake_ed25519_key"}, }}}, }) mock_client.api = MagicMock() mock_client.api.token = "syt_test_access_token" mock_client.api.session = MagicMock() mock_client.api.session.close = AsyncMock() mock_olm = MagicMock() mock_olm.load = AsyncMock() mock_olm.share_keys = AsyncMock() mock_olm.share_keys_min_trust = None mock_olm.send_keys_min_trust = None mock_olm.account = MagicMock() mock_olm.account.identity_keys = {"ed25519": "fake_ed25519_key"} fake_mautrix_mods["mautrix.client"].Client = MagicMock(return_value=mock_client) fake_mautrix_mods["mautrix.crypto"].OlmMachine = MagicMock(return_value=mock_olm) > from gateway.platforms import matrix as matrix_mod E ImportError: cannot import name 'matrix' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/matrix/tests/test_matrix.py:1137: ImportError ______ TestMatrixPasswordLoginDeviceId.test_password_login_uses_device_id ______ self = @pytest.mark.asyncio async def test_password_login_uses_device_id(self): from hermes_agent_matrix import MatrixAdapter config = PlatformConfig( enabled=True, extra={ "homeserver": "https://matrix.example.org", "user_id": "@bot:example.org", "password": "secret", "device_id": "STABLE_PW_DEVICE", }, ) adapter = MatrixAdapter(config) fake_mautrix_mods = _make_fake_mautrix() mock_client = MagicMock() mock_client.mxid = "@bot:example.org" mock_client.device_id = None mock_client.state_store = MagicMock() mock_client.sync_store = MagicMock() mock_client.crypto = None mock_client.login = AsyncMock(return_value=MagicMock(device_id="STABLE_PW_DEVICE", access_token="tok")) mock_client.sync = AsyncMock(return_value={"rooms": {"join": {}}}) mock_client.add_event_handler = MagicMock() mock_client.api = MagicMock() mock_client.api.token = "" mock_client.api.session = MagicMock() mock_client.api.session.close = AsyncMock() fake_mautrix_mods["mautrix.client"].Client = MagicMock(return_value=mock_client) > from gateway.platforms import matrix as matrix_mod E ImportError: cannot import name 'matrix' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/matrix/tests/test_matrix.py:1187: ImportError _ TestMatrixEncryptedEventHandler.test_connect_registers_encrypted_event_handler_when_encryption_on _ self = @pytest.mark.asyncio async def test_connect_registers_encrypted_event_handler_when_encryption_on(self): from hermes_agent_matrix import MatrixAdapter config = PlatformConfig( enabled=True, token="syt_test_token", extra={ "homeserver": "https://matrix.example.org", "user_id": "@bot:example.org", "encryption": True, }, ) adapter = MatrixAdapter(config) fake_mautrix_mods = _make_fake_mautrix() mock_client = MagicMock() mock_client.mxid = "@bot:example.org" mock_client.device_id = None mock_client.state_store = MagicMock() mock_client.sync_store = MagicMock() mock_client.crypto = None # Will be set during connect mock_client.whoami = AsyncMock(return_value=MagicMock(user_id="@bot:example.org", device_id="DEV123")) mock_client.sync = AsyncMock(return_value={"rooms": {"join": {"!room:server": {}}}}) mock_client.add_event_handler = MagicMock() mock_client.handle_sync = MagicMock(return_value=[]) mock_client.query_keys = AsyncMock(return_value={ "device_keys": {"@bot:example.org": {"DEV123": { "keys": {"ed25519:DEV123": "fake_ed25519_key"}, }}}, }) mock_client.api = MagicMock() mock_client.api.token = "syt_test_token" mock_client.api.session = MagicMock() mock_client.api.session.close = AsyncMock() mock_olm = MagicMock() mock_olm.load = AsyncMock() mock_olm.share_keys = AsyncMock() mock_olm.share_keys_min_trust = None mock_olm.send_keys_min_trust = None mock_olm.account = MagicMock() mock_olm.account.identity_keys = {"ed25519": "fake_ed25519_key"} fake_mautrix_mods["mautrix.client"].Client = MagicMock(return_value=mock_client) fake_mautrix_mods["mautrix.crypto"].OlmMachine = MagicMock(return_value=mock_olm) > from gateway.platforms import matrix as matrix_mod E ImportError: cannot import name 'matrix' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/matrix/tests/test_matrix.py:1448: ImportError ___ TestMatrixEncryptedEventHandler.test_connect_fails_on_stale_otk_conflict ___ self = @pytest.mark.asyncio async def test_connect_fails_on_stale_otk_conflict(self): """connect() must refuse E2EE when OTK upload hits 'already exists'.""" from hermes_agent_matrix import MatrixAdapter config = PlatformConfig( enabled=True, token="syt_test_token", extra={ "homeserver": "https://matrix.example.org", "user_id": "@bot:example.org", "encryption": True, }, ) adapter = MatrixAdapter(config) fake_mautrix_mods = _make_fake_mautrix() mock_client = MagicMock() mock_client.mxid = "@bot:example.org" mock_client.device_id = None mock_client.state_store = MagicMock() mock_client.sync_store = MagicMock() mock_client.crypto = None mock_client.whoami = AsyncMock(return_value=MagicMock(user_id="@bot:example.org", device_id="DEV123")) mock_client.add_event_handler = MagicMock() mock_client.add_dispatcher = MagicMock() mock_client.query_keys = AsyncMock(return_value={ "device_keys": {"@bot:example.org": {"DEV123": { "keys": {"ed25519:DEV123": "fake_ed25519_key"}, }}}, }) mock_client.api = MagicMock() mock_client.api.token = "syt_test_token" mock_client.api.session = MagicMock() mock_client.api.session.close = AsyncMock() # share_keys succeeds on first call (from _verify_device_keys_on_server), # then raises "already exists" on the proactive OTK flush in connect(). mock_olm = MagicMock() mock_olm.load = AsyncMock() mock_olm.share_keys = AsyncMock( side_effect=[None, Exception("One time key signed_curve25519:AAAAAQ already exists")] ) mock_olm.share_keys_min_trust = None mock_olm.send_keys_min_trust = None mock_olm.account = MagicMock() mock_olm.account.identity_keys = {"ed25519": "fake_ed25519_key"} fake_mautrix_mods["mautrix.client"].Client = MagicMock(return_value=mock_client) fake_mautrix_mods["mautrix.crypto"].OlmMachine = MagicMock(return_value=mock_olm) > from gateway.platforms import matrix as matrix_mod E ImportError: cannot import name 'matrix' from 'gateway.platforms' (/home/ari/src/hermes-agent/main/gateway/platforms/__init__.py) plugins/platforms/matrix/tests/test_matrix.py:1517: ImportError _ TestMatrixClockSkewWarning.test_late_drops_emit_one_shot_clock_skew_warning __ self = caplog = <_pytest.logging.LogCaptureFixture object at 0x75d758e74320> @pytest.mark.asyncio async def test_late_drops_emit_one_shot_clock_skew_warning(self, caplog): import logging import time as _t # Simulate the reporter's environment: host clock is ~2 hours ahead # of server time. Startup happened "in the future" relative to the # real-world events we're now receiving. now = _t.time() self.adapter._startup_ts = now - 60 # bot started 60s ago (wall clock) # Server events are dated 2h before startup_ts (skewed clock). skewed_event_ts_ms = int((self.adapter._startup_ts - 7200) * 1000) with caplog.at_level(logging.WARNING, logger="gateway.platforms.matrix"): for i in range(5): ev = self._mk_event( sender=f"@alice{i}:example.org", ts_ms=skewed_event_ts_ms ) await self.adapter._on_room_message(ev) # Handler should never be invoked — all events failed the grace check. self.adapter._handle_text_message.assert_not_called() # Exactly one WARNING from THIS logger should be emitted. Filter by # logger name so unrelated stdlib/library warnings can't satisfy the # assertion. skew_warnings = [ r for r in caplog.records if r.name == "gateway.platforms.matrix" and r.levelname == "WARNING" and "set-ntp" in r.getMessage() ] > assert len(skew_warnings) == 1, ( f"expected exactly 1 clock-skew warning, got {len(skew_warnings)}" ) E AssertionError: expected exactly 1 clock-skew warning, got 0 E assert 0 == 1 E + where 0 = len([]) plugins/platforms/matrix/tests/test_matrix.py:2369: AssertionError ------------------------------ Captured log call ------------------------------- WARNING hermes_agent_matrix.adapter:adapter.py:1610 Matrix: dropped 3 consecutive live events as 'too old' more than 30s after startup (skew ≈ 7200s). The host system clock is likely set ahead of real time, which causes the startup grace filter to silently discard every incoming message. Run `timedatectl set-ntp true` (or sync NTP) and restart the bot. ___ TestMatrixClockSkewWarning.test_state_reset_allows_warning_to_fire_again ___ self = caplog = <_pytest.logging.LogCaptureFixture object at 0x75d758f434d0> @pytest.mark.asyncio async def test_state_reset_allows_warning_to_fire_again(self, caplog): """After the reset block at top of connect() runs, the warning is rearmed. Reconnect lifecycle: the user fixes NTP, restarts the bot, and the new connect() call resets _late_grace_drops / _clock_skew_warned at the top. This test exercises the rearm path by: 1. Tripping the warning once (state: warned=True). 2. Running the same reset block connect() runs. 3. Tripping the warning a second time — the second warning should fire because the state was cleared. """ import logging import time as _t now = _t.time() self.adapter._startup_ts = now - 60 skewed_ms = int((self.adapter._startup_ts - 7200) * 1000) with caplog.at_level(logging.WARNING, logger="gateway.platforms.matrix"): for i in range(3): ev = self._mk_event( sender=f"@alice{i}:example.org", ts_ms=skewed_ms, event_id=f"$first-{i}", ) await self.adapter._on_room_message(ev) assert self.adapter._clock_skew_warned is True # Mirror the reset block in connect() (matrix.py around line 855). self.adapter._startup_ts = _t.time() - 60 self.adapter._late_grace_drops = 0 self.adapter._late_grace_skew = 0.0 self.adapter._clock_skew_warned = False # Same skewed-clock scenario should warn AGAIN after reset. skewed_ms2 = int((self.adapter._startup_ts - 7200) * 1000) for i in range(3): ev = self._mk_event( sender=f"@bob{i}:example.org", ts_ms=skewed_ms2, event_id=f"$second-{i}", ) await self.adapter._on_room_message(ev) skew_warnings = [ r for r in caplog.records if r.name == "gateway.platforms.matrix" and "set-ntp" in r.getMessage() ] > assert len(skew_warnings) == 2, ( f"expected 2 warnings (one per connect cycle), got {len(skew_warnings)}" ) E AssertionError: expected 2 warnings (one per connect cycle), got 0 E assert 0 == 2 E + where 0 = len([]) plugins/platforms/matrix/tests/test_matrix.py:2508: AssertionError ------------------------------ Captured log call ------------------------------- WARNING hermes_agent_matrix.adapter:adapter.py:1610 Matrix: dropped 3 consecutive live events as 'too old' more than 30s after startup (skew ≈ 7200s). The host system clock is likely set ahead of real time, which causes the startup grace filter to silently discard every incoming message. Run `timedatectl set-ntp true` (or sync NTP) and restart the bot. WARNING hermes_agent_matrix.adapter:adapter.py:1610 Matrix: dropped 3 consecutive live events as 'too old' more than 30s after startup (skew ≈ 7200s). The host system clock is likely set ahead of real time, which causes the startup grace filter to silently discard every incoming message. Run `timedatectl set-ntp true` (or sync NTP) and restart the bot. =============================== warnings summary =============================== plugins/platforms/matrix/tests/test_matrix.py::TestMatrixConfigLoading::test_apply_env_overrides_with_access_token /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) plugins/platforms/matrix/tests/test_matrix.py::TestMatrixConfigLoading::test_apply_env_overrides_with_access_token /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): plugins/platforms/matrix/tests/test_matrix.py::TestMatrixConfigLoading::test_apply_env_overrides_with_access_token /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions warnings.warn( # deprecated in 14.0 - 2024-11-09 -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixRequirements::test_check_requirements_encryption_true_no_e2ee_deps FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixRequirements::test_check_requirements_encryption_false_no_e2ee_deps_ok FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixRequirements::test_check_requirements_encryption_true_with_e2ee_deps FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixAccessTokenAuth::test_connect_with_access_token_and_encryption FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixE2EEHardFail::test_connect_fails_when_encryption_true_but_no_e2ee_deps FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixE2EEHardFail::test_connect_fails_when_crypto_setup_raises FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixDeviceId::test_connect_uses_configured_device_id_over_whoami FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixPasswordLoginDeviceId::test_password_login_uses_device_id FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixEncryptedEventHandler::test_connect_registers_encrypted_event_handler_when_encryption_on FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixEncryptedEventHandler::test_connect_fails_on_stale_otk_conflict FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixClockSkewWarning::test_late_drops_emit_one_shot_clock_skew_warning FAILED plugins/platforms/matrix/tests/test_matrix.py::TestMatrixClockSkewWarning::test_state_reset_allows_warning_to_fire_again ============ 12 failed, 137 passed, 1 skipped, 3 warnings in 16.10s ============ --- plugins/platforms/telegram/tests/test_telegram_thread_fallback.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 41 items plugins/platforms/telegram/tests/test_telegram_thread_fallback.py EEEEEE [ 14%] EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE [100%] ==================================== ERRORS ==================================== _ ERROR at setup of test_non_forum_group_reply_thread_id_does_not_fork_session_key _ cls = func = . at 0x7a053ce127a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_forum_group_topic_message_preserves_thread_session_key _ cls = func = . at 0x7a053ce123e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_forum_general_topic_without_message_thread_id_keeps_thread_context _ cls = func = . at 0x7a053c775580> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __________ ERROR at setup of test_send_omits_general_topic_thread_id ___________ cls = func = . at 0x7a053c775080> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of test_send_typing_preserves_general_topic_thread_id _____ cls = func = . at 0x7a053df2fe20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of test_send_typing_does_not_fall_back_to_root_for_dm_topic __ cls = func = . at 0x7a053dd0ce00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_send_typing_attempts_api_call_for_dm_topic_reply_fallback _ cls = func = . at 0x7a053c775d00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_send_typing_falls_back_without_thread_on_bad_request __ cls = func = . at 0x7a053c776200> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of test_send_retries_without_thread_on_thread_not_found ____ cls = func = . at 0x7a053c776480> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_send_retries_transient_thread_not_found_before_fallback _ cls = func = . at 0x7a053c775b20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of test_send_private_dm_topic_uses_direct_messages_topic_id __ cls = func = . at 0x7a053c776ac0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_base_gateway_metadata_marks_telegram_dm_topics_as_reply_fallback _ cls = func = . at 0x7a053c7751c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_base_gateway_metadata_for_resumed_telegram_dm_topic_uses_direct_topic _ cls = func = . at 0x7a053ce10c20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_base_gateway_replies_to_triggering_message_for_telegram_dm_topic _ cls = func = . at 0x7a053ce11580> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_gateway_runner_busy_ack_replies_to_triggering_message_for_telegram_dm_topic _ cls = func = . at 0x7a053c775a80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of test_send_uses_reply_fallback_for_hermes_dm_topics _____ cls = func = . at 0x7a053c7768e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_send_uses_metadata_reply_fallback_for_streaming_dm_topics _ cls = func = . at 0x7a053c7772e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_send_reply_fallback_applies_to_every_chunk_for_dm_topics _ cls = func = . at 0x7a053c776de0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_send_model_picker_uses_metadata_reply_fallback_for_dm_topics _ cls = func = . at 0x7a053ce118a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_send_dm_topic_fallback_without_anchor_does_not_crash __ cls = func = . at 0x7a053cfb14e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of test_send_dm_topic_reply_not_found_retry_drops_thread_id __ cls = func = . at 0x7a053c777a60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_image_file-send_photo-image_path-photo.png-png-data] _ cls = func = . at 0x7a053cfb14e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_document-send_document-file_path-report.txt-report-data] _ cls = func = . at 0x7a053cc98d60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_video-send_video-video_path-clip.mp4-video-data] _ cls = func = . at 0x7a053c7776a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_voice-send_voice-audio_path-clip.ogg-ogg-data] _ cls = func = . at 0x7a053c777a60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_voice-send_audio-audio_path-clip.mp3-mp3-data] _ cls = func = . at 0x7a053ce11580> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_animation_dm_topic_reply_not_found_retry_drops_thread_id _ cls = func = . at 0x7a053cc989a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_media_group_dm_topic_reply_not_found_retry_drops_thread_id _ cls = func = . at 0x7a053cc984a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_send_image_url_dm_topic_reply_not_found_retry_drops_thread_id _ cls = func = . at 0x7a053cc99620> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_send_image_upload_dm_topic_reply_not_found_retry_drops_thread_id _ cls = func = . at 0x7a053cc98860> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_slash_confirm_private_topic_callback_followup_sends_thread_and_reply _ cls = func = . at 0x7a053cc989a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_slash_confirm_forum_callback_followup_keeps_existing_thread_behavior _ cls = func = . at 0x7a053cc99ee0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of test_base_send_image_fallback_preserves_metadata ______ cls = func = . at 0x7a053cc99760> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___________ ERROR at setup of test_send_raises_on_other_bad_request ____________ cls = func = . at 0x7a053cc9a3e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___________ ERROR at setup of test_send_without_thread_id_unaffected ___________ cls = func = . at 0x7a053cc9a200> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of test_send_retries_network_errors_normally __________ cls = func = . at 0x7a053cc9aac0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______________ ERROR at setup of test_send_does_not_retry_timeout ______________ cls = func = . at 0x7a053cc9a340> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of test_send_retries_wrapped_connect_timeout __________ cls = func = . at 0x7a053cc9b060> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_send_marks_wrapped_connect_timeout_retryable_after_exhaustion _ cls = func = . at 0x7a053cc98860> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____________ ERROR at setup of test_thread_fallback_only_fires_once ____________ cls = func = . at 0x7a053cc9b600> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____________ ERROR at setup of test_send_retries_retry_after_errors ____________ cls = func = . at 0x7a053cc9b880> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_non_forum_group_reply_thread_id_does_not_fork_session_key ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_forum_group_topic_message_preserves_thread_session_key ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_forum_general_topic_without_message_thread_id_keeps_thread_context ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_omits_general_topic_thread_id ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_typing_preserves_general_topic_thread_id ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_typing_does_not_fall_back_to_root_for_dm_topic ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_typing_attempts_api_call_for_dm_topic_reply_fallback ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_typing_falls_back_without_thread_on_bad_request ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_retries_without_thread_on_thread_not_found ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_retries_transient_thread_not_found_before_fallback ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_private_dm_topic_uses_direct_messages_topic_id ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_base_gateway_metadata_marks_telegram_dm_topics_as_reply_fallback ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_base_gateway_metadata_for_resumed_telegram_dm_topic_uses_direct_topic ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_base_gateway_replies_to_triggering_message_for_telegram_dm_topic ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_gateway_runner_busy_ack_replies_to_triggering_message_for_telegram_dm_topic ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_uses_reply_fallback_for_hermes_dm_topics ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_uses_metadata_reply_fallback_for_streaming_dm_topics ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_reply_fallback_applies_to_every_chunk_for_dm_topics ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_model_picker_uses_metadata_reply_fallback_for_dm_topics ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_dm_topic_fallback_without_anchor_does_not_crash ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_dm_topic_reply_not_found_retry_drops_thread_id ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_image_file-send_photo-image_path-photo.png-png-data] ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_document-send_document-file_path-report.txt-report-data] ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_video-send_video-video_path-clip.mp4-video-data] ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_voice-send_voice-audio_path-clip.ogg-ogg-data] ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_voice-send_audio-audio_path-clip.mp3-mp3-data] ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_animation_dm_topic_reply_not_found_retry_drops_thread_id ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_media_group_dm_topic_reply_not_found_retry_drops_thread_id ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_image_url_dm_topic_reply_not_found_retry_drops_thread_id ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_image_upload_dm_topic_reply_not_found_retry_drops_thread_id ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_slash_confirm_private_topic_callback_followup_sends_thread_and_reply ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_slash_confirm_forum_callback_followup_keeps_existing_thread_behavior ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_base_send_image_fallback_preserves_metadata ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_raises_on_other_bad_request ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_without_thread_id_unaffected ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_retries_network_errors_normally ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_does_not_retry_timeout ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_retries_wrapped_connect_timeout ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_marks_wrapped_connect_timeout_retryable_after_exhaustion ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_thread_fallback_only_fires_once ERROR plugins/platforms/telegram/tests/test_telegram_thread_fallback.py::test_send_retries_retry_after_errors ============================= 41 errors in 12.11s ============================== --- plugins/platforms/telegram/tests/test_telegram_topic_mode.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 43 items plugins/platforms/telegram/tests/test_telegram_topic_mode.py EEEEEEEEEEE [ 25%] EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE [100%] ==================================== ERRORS ==================================== _ ERROR at setup of test_root_telegram_dm_prompt_is_system_lobby_when_topic_mode_enabled _ cls = func = . at 0x783b1c0c6e80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of test_root_telegram_dm_new_shows_create_topic_instruction __ cls = func = . at 0x783b1c109f80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_telegram_topic_prompt_still_runs_agent_when_topic_mode_enabled _ cls = func = . at 0x783b1c10a200> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_managed_topic_binding_reuses_restored_session_over_static_lane_session _ cls = func = . at 0x783b1c0c5e40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_telegram_group_prompt_is_not_topic_lobby_even_when_dm_topic_mode_enabled _ cls = func = . at 0x783b1c109260> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_topic_command_is_private_dm_only_and_does_not_enable_group_topic_mode _ cls = func = . at 0x783b1c109f80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_group_new_keeps_existing_reset_semantics_when_dm_topic_mode_enabled _ cls = func = . at 0x783b1c10aa20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_new_inside_telegram_topic_resets_current_topic_with_parallel_tip _ cls = func = . at 0x783b1c10b060> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_new_inside_telegram_topic_rewrites_binding_to_new_session _ cls = func = . at 0x783b1c10b2e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_topic_root_command_explicitly_migrates_and_enables_topic_mode _ cls = func = . at 0x783b1c10b600> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_topic_root_command_lists_unlinked_sessions_for_restore _ cls = func = . at 0x783b1c10a3e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of test_topic_root_command_handles_no_unlinked_sessions ____ cls = func = . at 0x783b1c10ade0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_topic_command_inside_bound_topic_shows_current_session _ cls = func = . at 0x783b1c0c5f80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_topic_restore_inside_topic_binds_old_session_and_returns_last_assistant_message _ cls = func = . at 0x783b1c0c6160> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_topic_restore_refuses_session_owned_by_another_telegram_user _ cls = func = . at 0x783b1c10bec0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of test_topic_restore_refuses_already_linked_session ______ cls = func = . at 0x783b1c109da0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of test_first_message_inside_topic_records_topic_binding ____ cls = func = . at 0x783b1c170040> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of test_topic_root_command_creates_and_pins_system_topic ____ cls = func = . at 0x783b1c170cc0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of test_auto_generated_title_renames_bound_telegram_topic ___ cls = func = . at 0x783b1c1709a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_auto_generated_title_does_not_rename_topic_bound_to_other_session _ cls = func = . at 0x783b1c1713a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of test_operator_declared_topic_is_not_auto_renamed ______ cls = func = . at 0x783b1c171800> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of test_disable_topic_auto_rename_extra_skips_rename ______ cls = func = . at 0x783b1c171b20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of test_schedule_topic_rename_respects_disable_flag ______ cls = func = . at 0x783b1c109da0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of test_telegram_topic_auto_rename_disabled_string_truthy ___ cls = func = . at 0x783b1c10b600> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ________ ERROR at setup of test_general_topic_is_treated_as_root_lobby _________ cls = func = . at 0x783b1c171e40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of test_lobby_reminder_is_debounced_per_chat __________ cls = func = . at 0x783b1c172020> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of test_binding_survives_session_deletion_via_cascade _____ cls = func = . at 0x783b1c170b80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of test_migration_rebuilds_v1_binding_table_with_cascade_fk __ cls = func = . at 0x783b1c172340> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __________ ERROR at setup of test_topic_help_subcommand_returns_usage __________ cls = func = . at 0x783b1c172480> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of test_topic_off_disables_mode_and_clears_bindings ______ cls = func = . at 0x783b1c172a20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of test_topic_off_is_idempotent_when_never_enabled _______ cls = func = . at 0x783b1c172d40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____________ ERROR at setup of test_topic_refuses_unauthorized_user ____________ cls = func = . at 0x783b1c172fc0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of test_recover_returns_none_for_known_topic __________ cls = func = . at 0x783b1c1732e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of test_recover_preserves_unknown_thread_id_for_new_topic ___ cls = func = . at 0x783b1c173560> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of test_recover_rewrites_lobby_thread_id_to_most_recent ____ cls = func = . at 0x783b1c173740> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of test_recover_returns_none_when_topic_mode_disabled _____ cls = func = . at 0x783b1c1739c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of test_recover_returns_none_when_no_bindings_yet _______ cls = func = . at 0x783b1c173ce0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of test_recover_returns_none_for_brand_new_topic ________ cls = func = . at 0x783b1c173d80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of test_list_telegram_topic_bindings_for_chat _________ cls = func = . at 0x783b1c173880> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of test_list_telegram_topic_bindings_for_chat_no_table _____ cls = func = . at 0x783b1c173f60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_get_telegram_topic_binding_by_session_returns_binding _ cls = func = . at 0x783b1c173c40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_get_telegram_topic_binding_by_session_returns_none_for_unknown _ cls = func = . at 0x783b1c1732e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of test_session_split_restores_source_thread_id_from_binding __ cls = func = . at 0x783b1c172480> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_root_telegram_dm_prompt_is_system_lobby_when_topic_mode_enabled ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_root_telegram_dm_new_shows_create_topic_instruction ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_telegram_topic_prompt_still_runs_agent_when_topic_mode_enabled ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_managed_topic_binding_reuses_restored_session_over_static_lane_session ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_telegram_group_prompt_is_not_topic_lobby_even_when_dm_topic_mode_enabled ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_command_is_private_dm_only_and_does_not_enable_group_topic_mode ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_group_new_keeps_existing_reset_semantics_when_dm_topic_mode_enabled ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_new_inside_telegram_topic_resets_current_topic_with_parallel_tip ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_new_inside_telegram_topic_rewrites_binding_to_new_session ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_root_command_explicitly_migrates_and_enables_topic_mode ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_root_command_lists_unlinked_sessions_for_restore ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_root_command_handles_no_unlinked_sessions ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_command_inside_bound_topic_shows_current_session ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_restore_inside_topic_binds_old_session_and_returns_last_assistant_message ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_restore_refuses_session_owned_by_another_telegram_user ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_restore_refuses_already_linked_session ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_first_message_inside_topic_records_topic_binding ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_root_command_creates_and_pins_system_topic ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_auto_generated_title_renames_bound_telegram_topic ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_auto_generated_title_does_not_rename_topic_bound_to_other_session ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_operator_declared_topic_is_not_auto_renamed ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_disable_topic_auto_rename_extra_skips_rename ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_schedule_topic_rename_respects_disable_flag ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_telegram_topic_auto_rename_disabled_string_truthy ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_general_topic_is_treated_as_root_lobby ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_lobby_reminder_is_debounced_per_chat ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_binding_survives_session_deletion_via_cascade ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_migration_rebuilds_v1_binding_table_with_cascade_fk ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_help_subcommand_returns_usage ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_off_disables_mode_and_clears_bindings ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_off_is_idempotent_when_never_enabled ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_topic_refuses_unauthorized_user ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_recover_returns_none_for_known_topic ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_recover_preserves_unknown_thread_id_for_new_topic ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_recover_rewrites_lobby_thread_id_to_most_recent ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_recover_returns_none_when_topic_mode_disabled ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_recover_returns_none_when_no_bindings_yet ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_recover_returns_none_for_brand_new_topic ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_list_telegram_topic_bindings_for_chat ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_list_telegram_topic_bindings_for_chat_no_table ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_get_telegram_topic_binding_by_session_returns_binding ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_get_telegram_topic_binding_by_session_returns_none_for_unknown ERROR plugins/platforms/telegram/tests/test_telegram_topic_mode.py::test_session_split_restores_source_thread_id_from_binding ============================= 43 errors in 12.05s ============================== --- plugins/platforms/telegram/tests/test_telegram_format.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 99 items plugins/platforms/telegram/tests/test_telegram_format.py EEEEEEEEEEEEEEE [ 15%] EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE [ 87%] EEEEEEEEEEEE [100%] ==================================== ERRORS ==================================== _____ ERROR at setup of TestEscapeMdv2.test_escapes_all_special_characters _____ cls = func = . at 0x7d8044c17060> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______________ ERROR at setup of TestEscapeMdv2.test_empty_string ______________ cls = func = . at 0x7d8044c89d00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of TestEscapeMdv2.test_no_special_characters __________ cls = func = . at 0x7d8044c8a340> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___________ ERROR at setup of TestEscapeMdv2.test_backslash_escaped ____________ cls = func = . at 0x7d8044c89440> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______________ ERROR at setup of TestEscapeMdv2.test_dot_escaped _______________ cls = func = . at 0x7d8044c8a840> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __________ ERROR at setup of TestEscapeMdv2.test_exclamation_escaped ___________ cls = func = . at 0x7d8044c891c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ________ ERROR at setup of TestEscapeMdv2.test_mixed_text_and_specials _________ cls = func = . at 0x7d8044c8ad40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __________ ERROR at setup of TestFormatMessageBasic.test_empty_string __________ cls = func = . at 0x7d8044c8b380> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___________ ERROR at setup of TestFormatMessageBasic.test_none_input ___________ cls = func = . at 0x7d8044c8b600> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of TestFormatMessageBasic.test_plain_text_specials_escaped ___ cls = func = . at 0x7d8044c8b920> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of TestFormatMessageBasic.test_plain_text_no_markdown _____ cls = func = . at 0x7d8044c8bb00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageCodeBlocks.test_fenced_code_block_preserved _ cls = func = . at 0x7d8044c15120> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestFormatMessageCodeBlocks.test_inline_code_preserved ___ cls = func = . at 0x7d8044c15440> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageCodeBlocks.test_code_block_special_chars_not_escaped _ cls = func = . at 0x7d8044c8af20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageCodeBlocks.test_inline_code_special_chars_not_escaped _ cls = func = . at 0x7d8044c8ac00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestFormatMessageCodeBlocks.test_multiple_code_blocks ____ cls = func = . at 0x7d8044cdc540> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageCodeBlocks.test_inline_code_backslashes_escaped _ cls = func = . at 0x7d8044cdcd60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageCodeBlocks.test_fenced_code_block_backslashes_escaped _ cls = func = . at 0x7d8044cdd260> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageCodeBlocks.test_fenced_code_block_backticks_escaped _ cls = func = . at 0x7d8044c153a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageCodeBlocks.test_inline_code_no_double_escape _ cls = func = . at 0x7d8044c8bba0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of TestFormatMessageBoldItalic.test_bold_converted _______ cls = func = . at 0x7d8045596340> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of TestFormatMessageBoldItalic.test_italic_converted ______ cls = func = . at 0x7d8044cdc360> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of TestFormatMessageBoldItalic.test_bold_with_special_chars __ cls = func = . at 0x7d8044cdc540> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageBoldItalic.test_italic_with_special_chars _ cls = func = . at 0x7d8044cdd800> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageBoldItalic.test_bold_and_italic_in_same_line _ cls = func = . at 0x7d8044cdce00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageBoldItalic.test_reload_mcp_summary_escapes_dynamic_server_names _ cls = func = . at 0x7d8044cdde40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of TestFormatMessageHeaders.test_h1_converted_to_bold _____ cls = func = . at 0x7d8044cdd620> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of TestFormatMessageHeaders.test_h2_converted _________ cls = func = . at 0x7d8044cde520> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageHeaders.test_header_with_inner_bold_stripped _ cls = func = . at 0x7d8044cde700> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of TestFormatMessageHeaders.test_header_with_special_chars ___ cls = func = . at 0x7d8044cddbc0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of TestFormatMessageHeaders.test_multiline_headers _______ cls = func = . at 0x7d8044cdeca0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestFormatMessageLinks.test_markdown_link_converted _____ cls = func = . at 0x7d8044cdeac0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestFormatMessageLinks.test_link_display_text_escaped ____ cls = func = . at 0x7d8044cdf2e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of TestFormatMessageLinks.test_link_url_parentheses_escaped __ cls = func = . at 0x7d8044cdf4c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestFormatMessageLinks.test_link_with_surrounding_text ___ cls = func = . at 0x7d8044cde480> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestItalicNewlineBug.test_bullet_list_not_corrupted _____ cls = func = . at 0x7d8044cdfa60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of TestItalicNewlineBug.test_asterisk_list_items_preserved ___ cls = func = . at 0x7d8044cdfe20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestItalicNewlineBug.test_italic_does_not_span_lines ____ cls = func = . at 0x7d8044cdfba0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of TestItalicNewlineBug.test_single_line_italic_still_works __ cls = func = . at 0x7d8044cde5c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageStrikethrough.test_strikethrough_converted _ cls = func = . at 0x7d8044cdf600> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageStrikethrough.test_strikethrough_with_special_chars _ cls = func = . at 0x7d8044cdea20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageStrikethrough.test_strikethrough_in_code_not_converted _ cls = func = . at 0x7d8044cde5c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageStrikethrough.test_strikethrough_with_bold _ cls = func = . at 0x7d8044cdea20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of TestFormatMessageSpoiler.test_spoiler_converted _______ cls = func = . at 0x7d8044c8ad40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of TestFormatMessageSpoiler.test_spoiler_with_special_chars __ cls = func = . at 0x7d804475cf40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageSpoiler.test_spoiler_in_code_not_converted _ cls = func = . at 0x7d804475c900> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of TestFormatMessageSpoiler.test_spoiler_pipes_not_escaped ___ cls = func = . at 0x7d804475cb80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestFormatMessageBlockquote.test_blockquote_converted ____ cls = func = . at 0x7d804475d620> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageBlockquote.test_blockquote_with_special_chars _ cls = func = . at 0x7d804475c0e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestFormatMessageBlockquote.test_blockquote_multiline ____ cls = func = . at 0x7d804475dc60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageBlockquote.test_blockquote_in_code_not_converted _ cls = func = . at 0x7d804475dee0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of TestFormatMessageBlockquote.test_nested_blockquote _____ cls = func = . at 0x7d804475e340> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageBlockquote.test_gt_in_middle_of_line_still_escaped _ cls = func = . at 0x7d804475e660> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestFormatMessageBlockquote.test_expandable_blockquote ___ cls = func = . at 0x7d804475e8e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageBlockquote.test_single_asterisk_gt_not_blockquote _ cls = func = . at 0x7d804475eac0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageBlockquote.test_regular_blockquote_with_pipes_escaped _ cls = func = . at 0x7d804475ee80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageComplex.test_code_block_with_bold_outside _ cls = func = . at 0x7d8044cdf600> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageComplex.test_bold_inside_code_not_converted _ cls = func = . at 0x7d804475e980> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageComplex.test_link_inside_code_not_converted _ cls = func = . at 0x7d804475e340> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestFormatMessageComplex.test_header_after_code_block ____ cls = func = . at 0x7d804475efc0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestFormatMessageComplex.test_multiple_bold_segments ____ cls = func = . at 0x7d804475dee0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageComplex.test_special_chars_in_plain_text __ cls = func = . at 0x7d804475f880> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __________ ERROR at setup of TestFormatMessageComplex.test_empty_bold __________ cls = func = . at 0x7d804475f100> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of TestFormatMessageComplex.test_empty_code_block _______ cls = func = . at 0x7d804475fd80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ____ ERROR at setup of TestFormatMessageComplex.test_placeholder_collision _____ cls = func = . at 0x7d804475fce0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _______ ERROR at setup of TestStripMdv2.test_removes_escape_backslashes ________ cls = func = . at 0x7d804475fec0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __________ ERROR at setup of TestStripMdv2.test_removes_bold_markers ___________ cls = func = . at 0x7d804475e0c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of TestStripMdv2.test_removes_italic_markers __________ cls = func = . at 0x7d8044cdfce0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of TestStripMdv2.test_removes_both_bold_and_italic _______ cls = func = . at 0x7d8044754540> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __________ ERROR at setup of TestStripMdv2.test_preserves_snake_case ___________ cls = func = . at 0x7d8044754900> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of TestStripMdv2.test_preserves_multi_underscore_identifier __ cls = func = . at 0x7d8044755300> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __________ ERROR at setup of TestStripMdv2.test_plain_text_unchanged ___________ cls = func = . at 0x7d80447554e0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______________ ERROR at setup of TestStripMdv2.test_empty_string _______________ cls = func = . at 0x7d80447558a0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of TestStripMdv2.test_removes_strikethrough_markers ______ cls = func = . at 0x7d8044755b20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _________ ERROR at setup of TestStripMdv2.test_removes_spoiler_markers _________ cls = func = . at 0x7d8044755440> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestWrapMarkdownTables.test_basic_table_rewritten_as_row_groups _ cls = func = . at 0x7d804475fd80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestWrapMarkdownTables.test_bare_pipe_table_rewritten ____ cls = func = . at 0x7d8044755f80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of TestWrapMarkdownTables.test_alignment_separators ______ cls = func = . at 0x7d8044755a80> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestWrapMarkdownTables.test_two_consecutive_tables_rewritten_separately _ cls = func = . at 0x7d8044756340> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestWrapMarkdownTables.test_plain_text_with_pipes_not_wrapped _ cls = func = . at 0x7d80447565c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError __ ERROR at setup of TestWrapMarkdownTables.test_horizontal_rule_not_wrapped ___ cls = func = . at 0x7d8044756840> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestWrapMarkdownTables.test_existing_code_block_with_pipes_left_alone _ cls = func = . at 0x7d8044756a20> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestWrapMarkdownTables.test_no_pipe_character_short_circuits _ cls = func = . at 0x7d8044756d40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _____ ERROR at setup of TestWrapMarkdownTables.test_no_dash_short_circuits _____ cls = func = . at 0x7d8044756c00> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestWrapMarkdownTables.test_single_column_separator_not_matched _ cls = func = . at 0x7d8044757380> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ___ ERROR at setup of TestFormatMessageTables.test_table_rendered_as_bullets ___ cls = func = . at 0x7d8044757600> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageTables.test_text_after_table_still_formatted _ cls = func = . at 0x7d8044757880> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestFormatMessageTables.test_multiple_tables_in_single_message _ cls = func = . at 0x7d8044757ba0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError ______ ERROR at setup of test_send_escapes_chunk_indicator_for_markdownv2 ______ cls = func = . at 0x7d8044756660> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestEditMessageStreamingSafety.test_non_final_edit_uses_plain_text_without_markdown _ cls = func = . at 0x7d8044757a60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestEditMessageStreamingSafety.test_final_edit_uses_markdownv2_with_plain_fallback _ cls = func = . at 0x7d8044757060> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestEditMessageStreamingSafety.test_message_too_long_splits_into_continuations_not_silent_truncation _ cls = func = . at 0x7d8044757600> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestEditMessageStreamingSafety.test_message_too_long_continuations_preserve_topic_metadata _ cls = func = . at 0x7d8044757060> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramGuestMentionGating.test_guest_mode_allows_explicit_mention_outside_allowed_chats _ cls = func = . at 0x7d804471cd60> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramGuestMentionGating.test_guest_mode_does_not_allow_reply_outside_allowed_chats _ cls = func = . at 0x7d8044756d40> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramGuestMentionGating.test_guest_mode_disabled_keeps_allowed_chats_as_hard_gate_for_mentions _ cls = func = . at 0x7d8044757880> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramGuestMentionGating.test_guest_mode_allows_bot_command_entity_outside_allowed_chats _ cls = func = . at 0x7d804471c360> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramGuestMentionGating.test_guest_mode_allows_text_mention_entity_outside_allowed_chats _ cls = func = . at 0x7d804471d260> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError _ ERROR at setup of TestTelegramGuestMentionGating.test_guest_mode_allows_mention_in_caption_outside_allowed_chats _ cls = func = . at 0x7d804471c2c0> when = 'setup' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.12/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/logging.py:843: in pytest_runtest_setup yield .venv/lib/python3.12/site-packages/_pytest/capture.py:895: in pytest_runtest_setup return (yield) ^^^^^ .venv/lib/python3.12/site-packages/_pytest/runner.py:165: in pytest_runtest_setup item.session._setupstate.setup(item) .venv/lib/python3.12/site-packages/_pytest/runner.py:516: in setup raise exc[0].with_traceback(exc[1]) .venv/lib/python3.12/site-packages/_pytest/runner.py:523: in setup col.setup() .venv/lib/python3.12/site-packages/_pytest/python.py:677: in setup init_mod = importtestmodule(self.path / "__init__.py", self.config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .venv/lib/python3.12/site-packages/_pytest/python.py:552: in importtestmodule config.pluginmanager.consider_module(mod) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:845: in consider_module self._import_plugin_specs(getattr(mod, "pytest_plugins", [])) .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:850: in _import_plugin_specs plugins = _get_plugin_specs_as_list(spec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ specs = def _get_plugin_specs_as_list( specs: None | types.ModuleType | str | Sequence[str], ) -> list[str]: """Parse a plugins specification into a list of plugin names.""" # None means empty. if specs is None: return [] # Workaround for #3899 - a submodule which happens to be called "pytest_plugins". if isinstance(specs, types.ModuleType): return [] # Comma-separated list. if isinstance(specs, str): return specs.split(",") if specs else [] # Direct specification. if isinstance(specs, collections.abc.Sequence): return list(specs) > raise UsageError( f"Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: {specs!r}" ) E pytest.UsageError: Plugins may be specified as a sequence or a ','-separated string of plugin names. Got: .venv/lib/python3.12/site-packages/_pytest/config/__init__.py:908: UsageError =========================== short test summary info ============================ ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestEscapeMdv2::test_escapes_all_special_characters ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestEscapeMdv2::test_empty_string ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestEscapeMdv2::test_no_special_characters ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestEscapeMdv2::test_backslash_escaped ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestEscapeMdv2::test_dot_escaped ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestEscapeMdv2::test_exclamation_escaped ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestEscapeMdv2::test_mixed_text_and_specials ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageBasic::test_empty_string ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageBasic::test_none_input ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageBasic::test_plain_text_specials_escaped ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageBasic::test_plain_text_no_markdown ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageCodeBlocks::test_fenced_code_block_preserved ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageCodeBlocks::test_inline_code_preserved ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageCodeBlocks::test_code_block_special_chars_not_escaped ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageCodeBlocks::test_inline_code_special_chars_not_escaped ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageCodeBlocks::test_multiple_code_blocks ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageCodeBlocks::test_inline_code_backslashes_escaped ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageCodeBlocks::test_fenced_code_block_backslashes_escaped ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageCodeBlocks::test_fenced_code_block_backticks_escaped ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageCodeBlocks::test_inline_code_no_double_escape ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageBoldItalic::test_bold_converted ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageBoldItalic::test_italic_converted ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageBoldItalic::test_bold_with_special_chars ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageBoldItalic::test_italic_with_special_chars ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageBoldItalic::test_bold_and_italic_in_same_line ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageBoldItalic::test_reload_mcp_summary_escapes_dynamic_server_names ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageHeaders::test_h1_converted_to_bold ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageHeaders::test_h2_converted ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageHeaders::test_header_with_inner_bold_stripped ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageHeaders::test_header_with_special_chars ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageHeaders::test_multiline_headers ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageLinks::test_markdown_link_converted ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageLinks::test_link_display_text_escaped ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageLinks::test_link_url_parentheses_escaped ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageLinks::test_link_with_surrounding_text ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestItalicNewlineBug::test_bullet_list_not_corrupted ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestItalicNewlineBug::test_asterisk_list_items_preserved ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestItalicNewlineBug::test_italic_does_not_span_lines ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestItalicNewlineBug::test_single_line_italic_still_works ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageStrikethrough::test_strikethrough_converted ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageStrikethrough::test_strikethrough_with_special_chars ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageStrikethrough::test_strikethrough_in_code_not_converted ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageStrikethrough::test_strikethrough_with_bold ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageSpoiler::test_spoiler_converted ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageSpoiler::test_spoiler_with_special_chars ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageSpoiler::test_spoiler_in_code_not_converted ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageSpoiler::test_spoiler_pipes_not_escaped ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageBlockquote::test_blockquote_converted ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageBlockquote::test_blockquote_with_special_chars ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageBlockquote::test_blockquote_multiline ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageBlockquote::test_blockquote_in_code_not_converted ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageBlockquote::test_nested_blockquote ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageBlockquote::test_gt_in_middle_of_line_still_escaped ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageBlockquote::test_expandable_blockquote ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageBlockquote::test_single_asterisk_gt_not_blockquote ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageBlockquote::test_regular_blockquote_with_pipes_escaped ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageComplex::test_code_block_with_bold_outside ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageComplex::test_bold_inside_code_not_converted ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageComplex::test_link_inside_code_not_converted ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageComplex::test_header_after_code_block ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageComplex::test_multiple_bold_segments ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageComplex::test_special_chars_in_plain_text ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageComplex::test_empty_bold ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageComplex::test_empty_code_block ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageComplex::test_placeholder_collision ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestStripMdv2::test_removes_escape_backslashes ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestStripMdv2::test_removes_bold_markers ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestStripMdv2::test_removes_italic_markers ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestStripMdv2::test_removes_both_bold_and_italic ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestStripMdv2::test_preserves_snake_case ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestStripMdv2::test_preserves_multi_underscore_identifier ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestStripMdv2::test_plain_text_unchanged ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestStripMdv2::test_empty_string ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestStripMdv2::test_removes_strikethrough_markers ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestStripMdv2::test_removes_spoiler_markers ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_basic_table_rewritten_as_row_groups ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_bare_pipe_table_rewritten ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_alignment_separators ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_two_consecutive_tables_rewritten_separately ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_plain_text_with_pipes_not_wrapped ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_horizontal_rule_not_wrapped ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_existing_code_block_with_pipes_left_alone ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_no_pipe_character_short_circuits ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_no_dash_short_circuits ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestWrapMarkdownTables::test_single_column_separator_not_matched ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageTables::test_table_rendered_as_bullets ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageTables::test_text_after_table_still_formatted ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestFormatMessageTables::test_multiple_tables_in_single_message ERROR plugins/platforms/telegram/tests/test_telegram_format.py::test_send_escapes_chunk_indicator_for_markdownv2 ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestEditMessageStreamingSafety::test_non_final_edit_uses_plain_text_without_markdown ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestEditMessageStreamingSafety::test_final_edit_uses_markdownv2_with_plain_fallback ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestEditMessageStreamingSafety::test_message_too_long_splits_into_continuations_not_silent_truncation ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestEditMessageStreamingSafety::test_message_too_long_continuations_preserve_topic_metadata ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestTelegramGuestMentionGating::test_guest_mode_allows_explicit_mention_outside_allowed_chats ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestTelegramGuestMentionGating::test_guest_mode_does_not_allow_reply_outside_allowed_chats ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestTelegramGuestMentionGating::test_guest_mode_disabled_keeps_allowed_chats_as_hard_gate_for_mentions ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestTelegramGuestMentionGating::test_guest_mode_allows_bot_command_entity_outside_allowed_chats ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestTelegramGuestMentionGating::test_guest_mode_allows_text_mention_entity_outside_allowed_chats ERROR plugins/platforms/telegram/tests/test_telegram_format.py::TestTelegramGuestMentionGating::test_guest_mode_allows_mention_in_caption_outside_allowed_chats ============================= 99 errors in 29.37s ============================== --- tests/gateway/test_voice_command.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 181 items tests/gateway/test_voice_command.py .................................... [ 19%] ........................................................................ [ 59%] ....................F................................................... [ 99%] . [100%] =================================== FAILURES =================================== ________ TestSendVoiceReplyCleanup.test_files_cleaned_on_send_exception ________ self = tmp_path = PosixPath('/tmp/pytest-of-ethie/pytest-42460/test_files_cleaned_on_send_exc0') @pytest.mark.asyncio async def test_files_cleaned_on_send_exception(self, tmp_path): """Temp files are removed even when send_voice raises.""" runner = _make_runner(tmp_path) adapter = MagicMock() adapter.send_voice = AsyncMock(side_effect=RuntimeError("send failed")) adapter.is_in_voice_channel = MagicMock(return_value=False) event = _make_event(message_type=MessageType.VOICE) runner.adapters[event.source.platform] = adapter runner._get_guild_id = MagicMock(return_value=None) # Create a fake audio file that TTS would produce fake_audio = tmp_path / "hermes_voice" fake_audio.mkdir() audio_file = fake_audio / "test.mp3" audio_file.write_bytes(b"fake audio") tts_result = json.dumps({ "success": True, "file_path": str(audio_file), }) with patch("gateway.run.asyncio.to_thread", new_callable=AsyncMock, return_value=tts_result), \ patch("hermes_agent_tts.tts_tool._strip_markdown_for_tts", return_value="hello"), \ patch("os.path.isfile", return_value=True), \ patch("os.makedirs"): await runner._send_voice_reply(event, "Hello world") # File should be cleaned up despite exception > assert not audio_file.exists(), \ "Temp audio file must be cleaned up even when send_voice raises" E AssertionError: Temp audio file must be cleaned up even when send_voice raises E assert not True E + where True = exists() E + where exists = PosixPath('/tmp/pytest-of-ethie/pytest-42460/test_files_cleaned_on_send_exc0/hermes_voice/test.mp3').exists tests/gateway/test_voice_command.py:2121: AssertionError =========================== short test summary info ============================ FAILED tests/gateway/test_voice_command.py::TestSendVoiceReplyCleanup::test_files_cleaned_on_send_exception ======================== 1 failed, 180 passed in 7.92s ========================= --- tests/gateway/test_stt_config.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 6 items tests/gateway/test_stt_config.py .....F [100%] =================================== FAILURES =================================== _______ test_prepare_inbound_message_text_transcribes_queued_voice_event _______ @pytest.mark.asyncio async def test_prepare_inbound_message_text_transcribes_queued_voice_event(): from gateway.run import GatewayRunner runner = GatewayRunner.__new__(GatewayRunner) runner.config = GatewayConfig(stt_enabled=True) runner.adapters = {} runner._model = "test-model" runner._base_url = "" runner._has_setup_skill = lambda: False source = SessionSource( platform=Platform.TELEGRAM, chat_id="123", chat_type="dm", ) event = MessageEvent( text="", message_type=MessageType.VOICE, source=source, media_urls=["/tmp/queued-voice.ogg"], media_types=["audio/ogg"], ) with patch( "hermes_agent_stt.transcription_tools.transcribe_audio", return_value={ "success": True, "transcript": "queued voice transcript", "provider": "local_command", }, ): result = await runner._prepare_inbound_message_text( event=event, source=source, history=[], ) assert result is not None > assert "queued voice transcript" in result E AssertionError: assert 'queued voice transcript' in '[The user sent a voice message but I had trouble transcribing it~ (Audio file not found: /tmp/queued-voice.ogg)]' tests/gateway/test_stt_config.py:141: AssertionError =============================== warnings summary =============================== tests/gateway/test_stt_config.py::test_load_gateway_config_bridges_stt_enabled_from_config_yaml /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) tests/gateway/test_stt_config.py::test_load_gateway_config_bridges_stt_enabled_from_config_yaml /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): tests/gateway/test_stt_config.py::test_load_gateway_config_bridges_stt_enabled_from_config_yaml /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions warnings.warn( # deprecated in 14.0 - 2024-11-09 -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED tests/gateway/test_stt_config.py::test_prepare_inbound_message_text_transcribes_queued_voice_event =================== 1 failed, 5 passed, 3 warnings in 7.56s ==================== --- tests/hermes_cli/test_codex_cli_model_picker.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 4 items tests/hermes_cli/test_codex_cli_model_picker.py ..F. [100%] =================================== FAILURES =================================== ________________ test_claude_code_file_detected_by_model_picker ________________ claude_code_only_env = PosixPath('/tmp/pytest-of-ethie/pytest-42518/test_claude_code_file_detected0/.hermes') def test_claude_code_file_detected_by_model_picker(claude_code_only_env): """anthropic should appear when credentials only exist in ~/.claude/.credentials.json.""" from hermes_cli.model_switch import list_authenticated_providers providers = list_authenticated_providers( current_provider="anthropic", max_models=10, ) slugs = [p["slug"] for p in providers] > assert "anthropic" in slugs, ( f"anthropic not found in /model picker providers: {slugs}" ) E AssertionError: anthropic not found in /model picker providers: [] E assert 'anthropic' in [] tests/hermes_cli/test_codex_cli_model_picker.py:158: AssertionError ------------------------------ Captured log call ------------------------------- INFO hermes_cli.model_catalog:model_catalog.py:129 model catalog fetch failed (https://hermes-agent.nousresearch.com/docs/api/model-catalog.json): HTTP Error 403: Forbidden =========================== short test summary info ============================ FAILED tests/hermes_cli/test_codex_cli_model_picker.py::test_claude_code_file_detected_by_model_picker ========================= 1 failed, 3 passed in 2.68s ========================== --- tests/hermes_cli/test_gateway_platform_gating.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 4 items tests/hermes_cli/test_gateway_platform_gating.py ..F. [100%] =================================== FAILURES =================================== ___________ TestMatrixHiddenOnWindows.test_matrix_hidden_on_windows ____________ self = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x731898d70920> def test_matrix_hidden_on_windows(self, monkeypatch): """The actual gate: matrix must NOT appear on Windows.""" import hermes_cli.gateway as gateway_mod monkeypatch.setattr(gateway_mod.sys, "platform", "win32") platforms = gateway_mod._all_platforms() keys = {p["key"] for p in platforms} > assert "matrix" not in keys, ( "matrix must be hidden on Windows — python-olm has no " "Windows wheel and no native build path" ) E AssertionError: matrix must be hidden on Windows — python-olm has no Windows wheel and no native build path E assert 'matrix' not in {'bluebubbles', 'dingtalk', 'discord', 'email', 'feishu', 'google_chat', ...} tests/hermes_cli/test_gateway_platform_gating.py:43: AssertionError ------------------------------ Captured log call ------------------------------- INFO hermes_cli.plugins:plugins.py:638 Plugin 'browser-browser-use' registered browser provider: browser-use INFO hermes_cli.plugins:plugins.py:638 Plugin 'browser-browserbase' registered browser provider: browserbase INFO hermes_cli.plugins:plugins.py:638 Plugin 'browser-firecrawl' registered browser provider: firecrawl INFO hermes_cli.plugins:plugins.py:551 Plugin 'fal' registered image_gen provider: fal INFO hermes_cli.plugins:plugins.py:551 Plugin 'openai' registered image_gen provider: openai INFO hermes_cli.plugins:plugins.py:551 Plugin 'openai-codex' registered image_gen provider: openai-codex INFO hermes_cli.plugins:plugins.py:551 Plugin 'xai' registered image_gen provider: xai INFO hermes_cli.plugins:plugins.py:578 Plugin 'fal' registered video_gen provider: fal INFO hermes_cli.plugins:plugins.py:578 Plugin 'xai' registered video_gen provider: xai INFO hermes_cli.plugins:plugins.py:606 Plugin 'web-brave-free' registered web provider: brave-free INFO hermes_cli.plugins:plugins.py:606 Plugin 'web-ddgs' registered web provider: ddgs INFO hermes_cli.plugins:plugins.py:606 Plugin 'web-exa' registered web provider: exa INFO hermes_cli.plugins:plugins.py:606 Plugin 'web-firecrawl' registered web provider: firecrawl INFO hermes_cli.plugins:plugins.py:606 Plugin 'web-parallel' registered web provider: parallel INFO hermes_cli.plugins:plugins.py:606 Plugin 'web-searxng' registered web provider: searxng INFO hermes_cli.plugins:plugins.py:606 Plugin 'web-tavily' registered web provider: tavily INFO hermes_cli.plugins:plugins.py:606 Plugin 'web-xai' registered web provider: xai INFO gateway.platform_registry:platform_registry.py:180 Platform 'dingtalk' re-registered (was plugin, now plugin) INFO gateway.platform_registry:platform_registry.py:180 Platform 'discord' re-registered (was plugin, now plugin) INFO gateway.platform_registry:platform_registry.py:180 Platform 'feishu' re-registered (was plugin, now plugin) INFO gateway.platform_registry:platform_registry.py:180 Platform 'google_chat' re-registered (was plugin, now plugin) INFO gateway.platform_registry:platform_registry.py:180 Platform 'irc' re-registered (was plugin, now plugin) INFO gateway.platform_registry:platform_registry.py:180 Platform 'line' re-registered (was plugin, now plugin) INFO gateway.platform_registry:platform_registry.py:180 Platform 'matrix' re-registered (was plugin, now plugin) INFO gateway.platform_registry:platform_registry.py:180 Platform 'mattermost' re-registered (was plugin, now plugin) INFO gateway.platform_registry:platform_registry.py:180 Platform 'ntfy' re-registered (was plugin, now plugin) INFO gateway.platform_registry:platform_registry.py:180 Platform 'simplex' re-registered (was plugin, now plugin) INFO gateway.platform_registry:platform_registry.py:180 Platform 'slack' re-registered (was plugin, now plugin) INFO gateway.platform_registry:platform_registry.py:180 Platform 'teams' re-registered (was plugin, now plugin) INFO gateway.platform_registry:platform_registry.py:180 Platform 'telegram' re-registered (was plugin, now plugin) INFO hermes_cli.plugins:plugins.py:1410 Plugin discovery complete: 84 found, 67 enabled =============================== warnings summary =============================== tests/hermes_cli/test_gateway_platform_gating.py::TestMatrixHiddenOnWindows::test_matrix_present_on_linux /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/discord/player.py:30: DeprecationWarning: 'audioop' is deprecated and slated for removal in Python 3.13 import audioop tests/hermes_cli/test_gateway_platform_gating.py::TestMatrixHiddenOnWindows::test_matrix_present_on_linux /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) tests/hermes_cli/test_gateway_platform_gating.py::TestMatrixHiddenOnWindows::test_matrix_present_on_linux /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): tests/hermes_cli/test_gateway_platform_gating.py::TestMatrixHiddenOnWindows::test_matrix_present_on_linux /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions warnings.warn( # deprecated in 14.0 - 2024-11-09 -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED tests/hermes_cli/test_gateway_platform_gating.py::TestMatrixHiddenOnWindows::test_matrix_hidden_on_windows =================== 1 failed, 3 passed, 4 warnings in 7.06s ==================== --- tests/hermes_cli/test_web_server.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 145 items tests/hermes_cli/test_web_server.py .................................... [ 24%] ........................................................................ [ 74%] ..............................F...... [100%] =================================== FAILURES =================================== ____________ TestPtyWebSocket.test_client_input_reaches_child_stdin ____________ self = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7caea5bf2e40> def test_client_input_reaches_child_stdin(self, monkeypatch): # ``cat`` echoes stdin back, so a write → read round-trip proves # the full duplex path. monkeypatch.setattr( self.ws_module, "_resolve_chat_argv", lambda resume=None, sidecar_url=None: (["/bin/cat"], None, None), ) with self.client.websocket_connect(self._url()) as conn: conn.send_bytes(b"round-trip-payload\n") buf = b"" import time deadline = time.monotonic() + 5.0 while time.monotonic() < deadline: > frame = conn.receive_bytes() ^^^^^^^^^^^^^^^^^^^^ tests/hermes_cli/test_web_server.py:2194: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def receive_bytes(self) -> bytes: message = self.receive() self._raise_on_close(message) > return cast(bytes, message["bytes"]) ^^^^^^^^^^^^^^^^ E KeyError: 'bytes' .venv/lib/python3.12/site-packages/starlette/testclient.py:187: KeyError =============================== warnings summary =============================== tests/hermes_cli/test_web_server.py::TestWebServerEndpoints::test_get_status /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/discord/player.py:30: DeprecationWarning: 'audioop' is deprecated and slated for removal in Python 3.13 import audioop tests/hermes_cli/test_web_server.py::TestWebServerEndpoints::test_get_status /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) tests/hermes_cli/test_web_server.py::TestWebServerEndpoints::test_get_status /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): tests/hermes_cli/test_web_server.py::TestWebServerEndpoints::test_get_status /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions warnings.warn( # deprecated in 14.0 - 2024-11-09 tests/hermes_cli/test_web_server.py::TestPtyWebSocket::test_streams_child_stdout_to_client tests/hermes_cli/test_web_server.py::TestPtyWebSocket::test_resize_escape_is_forwarded tests/hermes_cli/test_web_server.py::TestPtyWebSocket::test_resume_parameter_is_forwarded_to_argv tests/hermes_cli/test_web_server.py::TestPtyWebSocket::test_channel_param_propagates_sidecar_url /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/pty.py:95: DeprecationWarning: This process (pid=1896384) is multi-threaded, use of forkpty() may lead to deadlocks in the child. pid, fd = os.forkpty() -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED tests/hermes_cli/test_web_server.py::TestPtyWebSocket::test_client_input_reaches_child_stdin ================== 1 failed, 144 passed, 8 warnings in 22.66s ================== --- tests/tools/test_managed_media_gateways.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 5 items tests/tools/test_managed_media_gateways.py FFFFF [100%] =================================== FAILURES =================================== __________ test_managed_fal_submit_uses_gateway_origin_and_nous_token __________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x74bc84a204a0> def test_managed_fal_submit_uses_gateway_origin_and_nous_token(monkeypatch): captured = {} _install_fake_tools_package() _install_fake_fal_client(captured) monkeypatch.delenv("FAL_KEY", raising=False) monkeypatch.setenv("FAL_QUEUE_GATEWAY_URL", "http://127.0.0.1:3009") monkeypatch.setenv("TOOL_GATEWAY_USER_TOKEN", "nous-token") image_generation_tool = _load_tool_module( "tools.image_generation_tool", "image_generation_tool.py", ) # Inject _ManagedFalSyncClient from the plugin since the registry isn't populated if image_generation_tool._ManagedFalSyncClient is None: from hermes_agent_fal.fal_common import _ManagedFalSyncClient as _MSC image_generation_tool._ManagedFalSyncClient = _MSC if image_generation_tool._extract_http_status is None: from hermes_agent_fal.fal_common import _extract_http_status as _EHS image_generation_tool._extract_http_status = _EHS if image_generation_tool._normalize_fal_queue_url_format is None: from hermes_agent_fal.fal_common import _normalize_fal_queue_url_format as _NFQUF image_generation_tool._normalize_fal_queue_url_format = _NFQUF monkeypatch.setattr(image_generation_tool.uuid, "uuid4", lambda: "fal-submit-123") > image_generation_tool._submit_fal_request( "fal-ai/flux-2-pro", {"prompt": "test prompt", "num_images": 1}, ) tests/tools/test_managed_media_gateways.py:191: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tools/image_generation_tool.py:423: in _submit_fal_request managed_client = _get_managed_fal_client(managed_gateway) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tools/image_generation_tool.py:404: in _get_managed_fal_client _managed_fal_client = _ManagedFalSyncClient( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = fal_client = None def __init__(self, fal_client: Any, *, key: str, queue_run_origin: str): sync_client_class = getattr(fal_client, "SyncClient", None) if sync_client_class is None: > raise RuntimeError("fal_client.SyncClient is required for managed FAL gateway mode") E RuntimeError: fal_client.SyncClient is required for managed FAL gateway mode plugins/image_gen/fal_pkg/hermes_agent_fal/fal_common.py:84: RuntimeError ______________ test_managed_fal_submit_reuses_cached_sync_client _______________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x74bc84936120> def test_managed_fal_submit_reuses_cached_sync_client(monkeypatch): captured = {} _install_fake_tools_package() _install_fake_fal_client(captured) monkeypatch.delenv("FAL_KEY", raising=False) monkeypatch.setenv("FAL_QUEUE_GATEWAY_URL", "http://127.0.0.1:3009") monkeypatch.setenv("TOOL_GATEWAY_USER_TOKEN", "nous-token") image_generation_tool = _load_tool_module( "tools.image_generation_tool", "image_generation_tool.py", ) > image_generation_tool._submit_fal_request("fal-ai/flux-2-pro", {"prompt": "first"}) tests/tools/test_managed_media_gateways.py:218: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tools/image_generation_tool.py:423: in _submit_fal_request managed_client = _get_managed_fal_client(managed_gateway) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ managed_gateway = ManagedToolGatewayConfig(vendor='fal-queue', gateway_origin='http://127.0.0.1:3009', nous_user_token='nous-token', managed_mode=True) def _get_managed_fal_client(managed_gateway): """Reuse the managed FAL client so its internal httpx.Client is not leaked per call.""" global _managed_fal_client, _managed_fal_client_config client_config = ( managed_gateway.gateway_origin.rstrip("/"), managed_gateway.nous_user_token, ) with _managed_fal_client_lock: if _managed_fal_client is not None and _managed_fal_client_config == client_config: return _managed_fal_client # Resolve fal_client on the legacy module — preserves the test # pattern of monkey-patching ``image_generation_tool.fal_client``. _load_fal_client() _resolve_fal_provider() > _managed_fal_client = _ManagedFalSyncClient( fal_client, key=managed_gateway.nous_user_token, queue_run_origin=managed_gateway.gateway_origin, ) E TypeError: 'NoneType' object is not callable tools/image_generation_tool.py:404: TypeError ______ test_openai_tts_uses_managed_audio_gateway_when_direct_key_absent _______ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x74bc8407fe90> tmp_path = PosixPath('/tmp/pytest-of-ethie/pytest-43025/test_openai_tts_uses_managed_a0') def test_openai_tts_uses_managed_audio_gateway_when_direct_key_absent(monkeypatch, tmp_path): captured = {} _install_fake_tools_package() _install_fake_openai_module(captured) monkeypatch.delenv("VOICE_TOOLS_OPENAI_KEY", raising=False) monkeypatch.delenv("OPENAI_API_KEY", raising=False) monkeypatch.setenv("TOOL_GATEWAY_DOMAIN", "nousresearch.com") monkeypatch.setenv("TOOL_GATEWAY_USER_TOKEN", "nous-token") > tts_tool = _load_tool_module("tools.tts_tool", "tts_tool.py") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_managed_media_gateways.py:235: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/tools/test_managed_media_gateways.py:17: in _load_tool_module spec.loader.exec_module(module) :995: in exec_module ??? :1132: in get_code ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_frozen_importlib_external.SourceFileLoader object at 0x74bc840b2030> path = '/home/ari/src/hermes-agent/main/tools/tts_tool.py' > ??? E FileNotFoundError: [Errno 2] No such file or directory: '/home/ari/src/hermes-agent/main/tools/tts_tool.py' :1190: FileNotFoundError __________ test_openai_tts_accepts_openai_api_key_as_direct_fallback ___________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x74bc847fdf40> tmp_path = PosixPath('/tmp/pytest-of-ethie/pytest-43025/test_openai_tts_accepts_openai0') def test_openai_tts_accepts_openai_api_key_as_direct_fallback(monkeypatch, tmp_path): captured = {} _install_fake_tools_package() _install_fake_openai_module(captured) monkeypatch.delenv("VOICE_TOOLS_OPENAI_KEY", raising=False) monkeypatch.setenv("OPENAI_API_KEY", "openai-direct-key") monkeypatch.setenv("TOOL_GATEWAY_DOMAIN", "nousresearch.com") monkeypatch.setenv("TOOL_GATEWAY_USER_TOKEN", "nous-token") > tts_tool = _load_tool_module("tools.tts_tool", "tts_tool.py") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_managed_media_gateways.py:257: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/tools/test_managed_media_gateways.py:17: in _load_tool_module spec.loader.exec_module(module) :995: in exec_module ??? :1132: in get_code ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_frozen_importlib_external.SourceFileLoader object at 0x74bc83f88230> path = '/home/ari/src/hermes-agent/main/tools/tts_tool.py' > ??? E FileNotFoundError: [Errno 2] No such file or directory: '/home/ari/src/hermes-agent/main/tools/tts_tool.py' :1190: FileNotFoundError ___________ test_transcription_uses_model_specific_response_formats ____________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x74bc840b1880> tmp_path = PosixPath('/tmp/pytest-of-ethie/pytest-43025/test_transcription_uses_model_0') def test_transcription_uses_model_specific_response_formats(monkeypatch, tmp_path): whisper_capture = {} _install_fake_tools_package() _install_fake_openai_module(whisper_capture, transcription_response="hello from whisper") monkeypatch.setenv("HERMES_HOME", str(tmp_path)) (tmp_path / "config.yaml").write_text("stt:\n provider: openai\n") monkeypatch.delenv("VOICE_TOOLS_OPENAI_KEY", raising=False) monkeypatch.delenv("OPENAI_API_KEY", raising=False) monkeypatch.setenv("TOOL_GATEWAY_DOMAIN", "nousresearch.com") monkeypatch.setenv("TOOL_GATEWAY_USER_TOKEN", "nous-token") > transcription_tools = _load_tool_module( "tools.transcription_tools", "transcription_tools.py", ) tests/tools/test_managed_media_gateways.py:277: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/tools/test_managed_media_gateways.py:17: in _load_tool_module spec.loader.exec_module(module) :995: in exec_module ??? :1132: in get_code ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_frozen_importlib_external.SourceFileLoader object at 0x74bc83ef7170> path = '/home/ari/src/hermes-agent/main/tools/transcription_tools.py' > ??? E FileNotFoundError: [Errno 2] No such file or directory: '/home/ari/src/hermes-agent/main/tools/transcription_tools.py' :1190: FileNotFoundError =========================== short test summary info ============================ FAILED tests/tools/test_managed_media_gateways.py::test_managed_fal_submit_uses_gateway_origin_and_nous_token FAILED tests/tools/test_managed_media_gateways.py::test_managed_fal_submit_reuses_cached_sync_client FAILED tests/tools/test_managed_media_gateways.py::test_openai_tts_uses_managed_audio_gateway_when_direct_key_absent FAILED tests/tools/test_managed_media_gateways.py::test_openai_tts_accepts_openai_api_key_as_direct_fallback FAILED tests/tools/test_managed_media_gateways.py::test_transcription_uses_model_specific_response_formats ============================== 5 failed in 0.76s =============================== --- tests/tools/test_image_generation.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 55 items tests/tools/test_image_generation.py ................................... [ 63%] ................FF.F [100%] =================================== FAILURES =================================== _ TestManagedGatewayErrorTranslation.test_4xx_translates_to_value_error_with_remediation _ model = 'fal-ai/nano-banana-pro', arguments = {'prompt': 'x'} def _submit_fal_request(model: str, arguments: Dict[str, Any]): """Submit a FAL request using direct credentials or the managed queue gateway.""" # Trigger the lazy import on first call. Idempotent. _load_fal_client() _resolve_fal_provider() request_headers = {"x-idempotency-key": str(uuid.uuid4())} managed_gateway = _resolve_managed_fal_gateway() if managed_gateway is None: return fal_client.submit(model, arguments=arguments, headers=request_headers) managed_client = _get_managed_fal_client(managed_gateway) try: > return managed_client.submit( model, arguments=arguments, headers=request_headers, ) tools/image_generation_tool.py:425: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:1139: in __call__ return self._mock_call(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:1143: in _mock_call return self._execute_mock_call(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ('fal-ai/nano-banana-pro',) kwargs = {'arguments': {'prompt': 'x'}, 'headers': {'x-idempotency-key': '9dd946fd-c7f5-4455-82fa-82574c4f9b56'}} effect = _MockHttpxError('Forbidden') def _execute_mock_call(self, /, *args, **kwargs): # separate from _increment_mock_call so that awaited functions are # executed separately from their call, also AsyncMock overrides this method effect = self.side_effect if effect is not None: if _is_exception(effect): > raise effect E tests.tools.test_image_generation._MockHttpxError: Forbidden /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:1198: _MockHttpxError During handling of the above exception, another exception occurred: self = image_tool = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x794ee780a3c0> def test_4xx_translates_to_value_error_with_remediation(self, image_tool, monkeypatch): """403 from managed gateway → ValueError mentioning FAL_KEY + hermes tools.""" from unittest.mock import MagicMock # Simulate: managed mode active, managed submit raises 4xx. managed_gateway = MagicMock() managed_gateway.gateway_origin = "https://fal-queue-gateway.example.com" managed_gateway.nous_user_token = "test-token" monkeypatch.setattr(image_tool, "_resolve_managed_fal_gateway", lambda: managed_gateway) bad_request = _MockHttpxError(403, "Forbidden") mock_managed_client = MagicMock() mock_managed_client.submit.side_effect = bad_request monkeypatch.setattr(image_tool, "_get_managed_fal_client", lambda gw: mock_managed_client) with pytest.raises(ValueError) as exc_info: > image_tool._submit_fal_request("fal-ai/nano-banana-pro", {"prompt": "x"}) tests/tools/test_image_generation.py:438: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ model = 'fal-ai/nano-banana-pro', arguments = {'prompt': 'x'} def _submit_fal_request(model: str, arguments: Dict[str, Any]): """Submit a FAL request using direct credentials or the managed queue gateway.""" # Trigger the lazy import on first call. Idempotent. _load_fal_client() _resolve_fal_provider() request_headers = {"x-idempotency-key": str(uuid.uuid4())} managed_gateway = _resolve_managed_fal_gateway() if managed_gateway is None: return fal_client.submit(model, arguments=arguments, headers=request_headers) managed_client = _get_managed_fal_client(managed_gateway) try: return managed_client.submit( model, arguments=arguments, headers=request_headers, ) except Exception as exc: # 4xx from the managed gateway typically means the portal doesn't # currently proxy this model (allowlist miss, billing gate, etc.) # — surface a clearer message with actionable remediation instead # of a raw HTTP error from httpx. > status = _extract_http_status(exc) ^^^^^^^^^^^^^^^^^^^^^^^^^ E TypeError: 'NoneType' object is not callable tools/image_generation_tool.py:435: TypeError ________ TestManagedGatewayErrorTranslation.test_5xx_is_not_translated _________ model = 'fal-ai/flux-2-pro', arguments = {'prompt': 'x'} def _submit_fal_request(model: str, arguments: Dict[str, Any]): """Submit a FAL request using direct credentials or the managed queue gateway.""" # Trigger the lazy import on first call. Idempotent. _load_fal_client() _resolve_fal_provider() request_headers = {"x-idempotency-key": str(uuid.uuid4())} managed_gateway = _resolve_managed_fal_gateway() if managed_gateway is None: return fal_client.submit(model, arguments=arguments, headers=request_headers) managed_client = _get_managed_fal_client(managed_gateway) try: > return managed_client.submit( model, arguments=arguments, headers=request_headers, ) tools/image_generation_tool.py:425: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:1139: in __call__ return self._mock_call(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:1143: in _mock_call return self._execute_mock_call(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ('fal-ai/flux-2-pro',) kwargs = {'arguments': {'prompt': 'x'}, 'headers': {'x-idempotency-key': 'bf77c206-ea29-491a-8f58-be72865e6644'}} effect = _MockHttpxError('Bad Gateway') def _execute_mock_call(self, /, *args, **kwargs): # separate from _increment_mock_call so that awaited functions are # executed separately from their call, also AsyncMock overrides this method effect = self.side_effect if effect is not None: if _is_exception(effect): > raise effect E tests.tools.test_image_generation._MockHttpxError: Bad Gateway /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:1198: _MockHttpxError During handling of the above exception, another exception occurred: self = image_tool = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x794ee780a270> def test_5xx_is_not_translated(self, image_tool, monkeypatch): """500s are real outages, not model-availability issues — don't rewrite them.""" from unittest.mock import MagicMock managed_gateway = MagicMock() monkeypatch.setattr(image_tool, "_resolve_managed_fal_gateway", lambda: managed_gateway) server_error = _MockHttpxError(502, "Bad Gateway") mock_managed_client = MagicMock() mock_managed_client.submit.side_effect = server_error monkeypatch.setattr(image_tool, "_get_managed_fal_client", lambda gw: mock_managed_client) with pytest.raises(_MockHttpxError): > image_tool._submit_fal_request("fal-ai/flux-2-pro", {"prompt": "x"}) tests/tools/test_image_generation.py:463: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ model = 'fal-ai/flux-2-pro', arguments = {'prompt': 'x'} def _submit_fal_request(model: str, arguments: Dict[str, Any]): """Submit a FAL request using direct credentials or the managed queue gateway.""" # Trigger the lazy import on first call. Idempotent. _load_fal_client() _resolve_fal_provider() request_headers = {"x-idempotency-key": str(uuid.uuid4())} managed_gateway = _resolve_managed_fal_gateway() if managed_gateway is None: return fal_client.submit(model, arguments=arguments, headers=request_headers) managed_client = _get_managed_fal_client(managed_gateway) try: return managed_client.submit( model, arguments=arguments, headers=request_headers, ) except Exception as exc: # 4xx from the managed gateway typically means the portal doesn't # currently proxy this model (allowlist miss, billing gate, etc.) # — surface a clearer message with actionable remediation instead # of a raw HTTP error from httpx. > status = _extract_http_status(exc) ^^^^^^^^^^^^^^^^^^^^^^^^^ E TypeError: 'NoneType' object is not callable tools/image_generation_tool.py:435: TypeError _ TestManagedGatewayErrorTranslation.test_non_http_exception_from_managed_bubbles_up _ model = 'fal-ai/flux-2-pro', arguments = {'prompt': 'x'} def _submit_fal_request(model: str, arguments: Dict[str, Any]): """Submit a FAL request using direct credentials or the managed queue gateway.""" # Trigger the lazy import on first call. Idempotent. _load_fal_client() _resolve_fal_provider() request_headers = {"x-idempotency-key": str(uuid.uuid4())} managed_gateway = _resolve_managed_fal_gateway() if managed_gateway is None: return fal_client.submit(model, arguments=arguments, headers=request_headers) managed_client = _get_managed_fal_client(managed_gateway) try: > return managed_client.submit( model, arguments=arguments, headers=request_headers, ) tools/image_generation_tool.py:425: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:1139: in __call__ return self._mock_call(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:1143: in _mock_call return self._execute_mock_call(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ('fal-ai/flux-2-pro',) kwargs = {'arguments': {'prompt': 'x'}, 'headers': {'x-idempotency-key': '4588543a-f60c-4d25-8962-f8d6173ecc93'}} effect = ConnectionError('network down') def _execute_mock_call(self, /, *args, **kwargs): # separate from _increment_mock_call so that awaited functions are # executed separately from their call, also AsyncMock overrides this method effect = self.side_effect if effect is not None: if _is_exception(effect): > raise effect E ConnectionError: network down /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:1198: ConnectionError During handling of the above exception, another exception occurred: self = image_tool = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x794ee77bbfb0> def test_non_http_exception_from_managed_bubbles_up(self, image_tool, monkeypatch): """Connection errors, timeouts, etc. from managed mode aren't 4xx — they should bubble up unchanged so callers can retry or diagnose.""" from unittest.mock import MagicMock managed_gateway = MagicMock() monkeypatch.setattr(image_tool, "_resolve_managed_fal_gateway", lambda: managed_gateway) conn_error = ConnectionError("network down") mock_managed_client = MagicMock() mock_managed_client.submit.side_effect = conn_error monkeypatch.setattr(image_tool, "_get_managed_fal_client", lambda gw: mock_managed_client) with pytest.raises(ConnectionError): > image_tool._submit_fal_request("fal-ai/flux-2-pro", {"prompt": "x"}) tests/tools/test_image_generation.py:498: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ model = 'fal-ai/flux-2-pro', arguments = {'prompt': 'x'} def _submit_fal_request(model: str, arguments: Dict[str, Any]): """Submit a FAL request using direct credentials or the managed queue gateway.""" # Trigger the lazy import on first call. Idempotent. _load_fal_client() _resolve_fal_provider() request_headers = {"x-idempotency-key": str(uuid.uuid4())} managed_gateway = _resolve_managed_fal_gateway() if managed_gateway is None: return fal_client.submit(model, arguments=arguments, headers=request_headers) managed_client = _get_managed_fal_client(managed_gateway) try: return managed_client.submit( model, arguments=arguments, headers=request_headers, ) except Exception as exc: # 4xx from the managed gateway typically means the portal doesn't # currently proxy this model (allowlist miss, billing gate, etc.) # — surface a clearer message with actionable remediation instead # of a raw HTTP error from httpx. > status = _extract_http_status(exc) ^^^^^^^^^^^^^^^^^^^^^^^^^ E TypeError: 'NoneType' object is not callable tools/image_generation_tool.py:435: TypeError =========================== short test summary info ============================ FAILED tests/tools/test_image_generation.py::TestManagedGatewayErrorTranslation::test_4xx_translates_to_value_error_with_remediation FAILED tests/tools/test_image_generation.py::TestManagedGatewayErrorTranslation::test_5xx_is_not_translated FAILED tests/tools/test_image_generation.py::TestManagedGatewayErrorTranslation::test_non_http_exception_from_managed_bubbles_up ========================= 3 failed, 52 passed in 2.61s ========================= --- tests/tools/test_local_background_child_hang.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 8 items tests/tools/test_local_background_child_hang.py ......FF [100%] =================================== FAILURES =================================== ___ TestBackgroundChildDoesNotHang.test_utf8_multibyte_across_read_boundary ____ self = local_env = def test_utf8_multibyte_across_read_boundary(self, local_env): """Multibyte UTF-8 characters straddling a 4096-byte ``os.read()`` boundary must be decoded correctly via the incremental decoder — not lost to a ``UnicodeDecodeError`` fallback. Regression for a bug in the first draft of the fix where a strict ``bytes.decode('utf-8')`` on each raw chunk wiped the entire buffer as soon as any chunk split a multi-byte char. """ # 10000 "日" chars = 30000 bytes — guaranteed to cross multiple 4096 # read boundaries, and most boundaries will land in the middle of the # 3-byte UTF-8 encoding of U+65E5. cmd = ( 'python3 -c \'import sys; ' 'sys.stdout.buffer.write(chr(0x65e5).encode("utf-8") * 10000); ' 'sys.stdout.buffer.write(b"\\n")\'' ) result = local_env.execute(cmd, timeout=10) > assert result["returncode"] == 0 E assert 127 == 0 tests/tools/test_local_background_child_hang.py:129: AssertionError _ TestBackgroundChildDoesNotHang.test_invalid_utf8_uses_replacement_not_fallback _ self = local_env = def test_invalid_utf8_uses_replacement_not_fallback(self, local_env): """Truly invalid byte sequences must be substituted with U+FFFD (matching the pre-fix ``errors='replace'`` behaviour of the old ``TextIOWrapper`` drain), not clobber the entire buffer with a fallback placeholder. """ # Write a deliberate invalid UTF-8 lead byte sandwiched between valid ASCII cmd = ( 'python3 -c \'import sys; ' 'sys.stdout.buffer.write(b"before "); ' 'sys.stdout.buffer.write(b"\\xff\\xfe"); ' 'sys.stdout.buffer.write(b" after\\n")\'' ) result = local_env.execute(cmd, timeout=5) > assert result["returncode"] == 0 E assert 127 == 0 tests/tools/test_local_background_child_hang.py:151: AssertionError =========================== short test summary info ============================ FAILED tests/tools/test_local_background_child_hang.py::TestBackgroundChildDoesNotHang::test_utf8_multibyte_across_read_boundary FAILED tests/tools/test_local_background_child_hang.py::TestBackgroundChildDoesNotHang::test_invalid_utf8_uses_replacement_not_fallback ========================= 2 failed, 6 passed in 4.71s ========================== --- tests/tools/test_process_registry.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 64 items tests/tools/test_process_registry.py ..................F................ [ 54%] ............................. [100%] =================================== FAILURES =================================== ____ TestStdinHelpers.test_close_stdin_allows_eof_driven_process_to_finish _____ self = registry = tmp_path = PosixPath('/tmp/pytest-of-ethie/pytest-43067/test_close_stdin_allows_eof_dr0') def test_close_stdin_allows_eof_driven_process_to_finish(self, registry, tmp_path): """PTY mode: writing data + sending EOF lets an EOF-driven child finish. Background non-PTY mode used to expose subprocess stdin via a pipe, but PR #214b95392 detached non-PTY stdin to DEVNULL to fix keyboard lockout (#17959). For interactive stdin → PTY mode is now the only supported path. """ session = registry.spawn_local( 'python3 -c "import sys; print(sys.stdin.read().strip())"', cwd=str(tmp_path), use_pty=True, ) try: time.sleep(0.5) > assert registry.submit_stdin(session.id, "hello")["status"] == "ok" E AssertionError: assert 'already_exited' == 'ok' E E - ok E + already_exited tests/tools/test_process_registry.py:314: AssertionError =========================== short test summary info ============================ FAILED tests/tools/test_process_registry.py::TestStdinHelpers::test_close_stdin_allows_eof_driven_process_to_finish ========================= 1 failed, 63 passed in 3.27s ========================= --- tests/tools/test_vercel_sandbox_environment.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 16 items tests/tools/test_vercel_sandbox_environment.py EEEEEEEEEEEEEEEE [100%] ==================================== ERRORS ==================================== _ ERROR at setup of TestStartup.test_default_cwd_tracks_remote_workspace_root __ vercel_sdk = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7b5adb359520> @pytest.fixture() def vercel_module(vercel_sdk, monkeypatch): monkeypatch.setattr("tools.environments.base.is_interrupted", lambda: False) monkeypatch.setattr("tools.credential_files.get_credential_file_mounts", lambda: []) monkeypatch.setattr("tools.credential_files.iter_skills_files", lambda **kwargs: []) monkeypatch.setattr("tools.credential_files.iter_cache_files", lambda **kwargs: []) > module = importlib.import_module("tools.environments.vercel_sandbox") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_vercel_sandbox_environment.py:223: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/importlib/__init__.py:90: in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :1387: in _gcd_import ??? :1360: in _find_and_load ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'tools.environments.vercel_sandbox' import_ = > ??? E ModuleNotFoundError: No module named 'tools.environments.vercel_sandbox' :1324: ModuleNotFoundError __ ERROR at setup of TestStartup.test_tilde_cwd_resolves_against_remote_home ___ vercel_sdk = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7b5adb1ed100> @pytest.fixture() def vercel_module(vercel_sdk, monkeypatch): monkeypatch.setattr("tools.environments.base.is_interrupted", lambda: False) monkeypatch.setattr("tools.credential_files.get_credential_file_mounts", lambda: []) monkeypatch.setattr("tools.credential_files.iter_skills_files", lambda **kwargs: []) monkeypatch.setattr("tools.credential_files.iter_cache_files", lambda **kwargs: []) > module = importlib.import_module("tools.environments.vercel_sandbox") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_vercel_sandbox_environment.py:223: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/importlib/__init__.py:90: in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :1387: in _gcd_import ??? :1360: in _find_and_load ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'tools.environments.vercel_sandbox' import_ = > ??? E ModuleNotFoundError: No module named 'tools.environments.vercel_sandbox' :1324: ModuleNotFoundError _ ERROR at setup of TestStartup.test_pending_sandbox_timeout_raises_descriptive_error _ vercel_sdk = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7b5adb358f50> @pytest.fixture() def vercel_module(vercel_sdk, monkeypatch): monkeypatch.setattr("tools.environments.base.is_interrupted", lambda: False) monkeypatch.setattr("tools.credential_files.get_credential_file_mounts", lambda: []) monkeypatch.setattr("tools.credential_files.iter_skills_files", lambda **kwargs: []) monkeypatch.setattr("tools.credential_files.iter_cache_files", lambda **kwargs: []) > module = importlib.import_module("tools.environments.vercel_sandbox") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_vercel_sandbox_environment.py:223: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/importlib/__init__.py:90: in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :1387: in _gcd_import ??? :1360: in _find_and_load ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'tools.environments.vercel_sandbox' import_ = > ??? E ModuleNotFoundError: No module named 'tools.environments.vercel_sandbox' :1324: ModuleNotFoundError _ ERROR at setup of TestFileSync.test_initial_sync_uploads_managed_files_under_remote_home _ vercel_sdk = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7b5adb0361e0> @pytest.fixture() def vercel_module(vercel_sdk, monkeypatch): monkeypatch.setattr("tools.environments.base.is_interrupted", lambda: False) monkeypatch.setattr("tools.credential_files.get_credential_file_mounts", lambda: []) monkeypatch.setattr("tools.credential_files.iter_skills_files", lambda **kwargs: []) monkeypatch.setattr("tools.credential_files.iter_cache_files", lambda **kwargs: []) > module = importlib.import_module("tools.environments.vercel_sandbox") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_vercel_sandbox_environment.py:223: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/importlib/__init__.py:90: in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :1387: in _gcd_import ??? :1360: in _find_and_load ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'tools.environments.vercel_sandbox' import_ = > ??? E ModuleNotFoundError: No module named 'tools.environments.vercel_sandbox' :1324: ModuleNotFoundError __ ERROR at setup of TestFileSync.test_execute_resyncs_changed_managed_files ___ vercel_sdk = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7b5adb03f110> @pytest.fixture() def vercel_module(vercel_sdk, monkeypatch): monkeypatch.setattr("tools.environments.base.is_interrupted", lambda: False) monkeypatch.setattr("tools.credential_files.get_credential_file_mounts", lambda: []) monkeypatch.setattr("tools.credential_files.iter_skills_files", lambda **kwargs: []) monkeypatch.setattr("tools.credential_files.iter_cache_files", lambda **kwargs: []) > module = importlib.import_module("tools.environments.vercel_sandbox") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_vercel_sandbox_environment.py:223: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/importlib/__init__.py:90: in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :1387: in _gcd_import ??? :1360: in _find_and_load ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'tools.environments.vercel_sandbox' import_ = > ??? E ModuleNotFoundError: No module named 'tools.environments.vercel_sandbox' :1324: ModuleNotFoundError _ ERROR at setup of TestFileSync.test_cleanup_syncs_back_snapshots_closes_and_is_idempotent _ vercel_sdk = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7b5adb03e720> @pytest.fixture() def vercel_module(vercel_sdk, monkeypatch): monkeypatch.setattr("tools.environments.base.is_interrupted", lambda: False) monkeypatch.setattr("tools.credential_files.get_credential_file_mounts", lambda: []) monkeypatch.setattr("tools.credential_files.iter_skills_files", lambda **kwargs: []) monkeypatch.setattr("tools.credential_files.iter_cache_files", lambda **kwargs: []) > module = importlib.import_module("tools.environments.vercel_sandbox") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_vercel_sandbox_environment.py:223: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/importlib/__init__.py:90: in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :1387: in _gcd_import ??? :1360: in _find_and_load ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'tools.environments.vercel_sandbox' import_ = > ??? E ModuleNotFoundError: No module named 'tools.environments.vercel_sandbox' :1324: ModuleNotFoundError _ ERROR at setup of TestFileSync.test_cleanup_sync_back_failure_from_download_does_not_block_snapshot _ vercel_sdk = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7b5adb034aa0> @pytest.fixture() def vercel_module(vercel_sdk, monkeypatch): monkeypatch.setattr("tools.environments.base.is_interrupted", lambda: False) monkeypatch.setattr("tools.credential_files.get_credential_file_mounts", lambda: []) monkeypatch.setattr("tools.credential_files.iter_skills_files", lambda **kwargs: []) monkeypatch.setattr("tools.credential_files.iter_cache_files", lambda **kwargs: []) > module = importlib.import_module("tools.environments.vercel_sandbox") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_vercel_sandbox_environment.py:223: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/importlib/__init__.py:90: in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :1387: in _gcd_import ??? :1360: in _find_and_load ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'tools.environments.vercel_sandbox' import_ = > ??? E ModuleNotFoundError: No module named 'tools.environments.vercel_sandbox' :1324: ModuleNotFoundError _ ERROR at setup of TestExecute.test_execute_recreates_unhealthy_sandbox_before_running_command[terminal-state] _ vercel_sdk = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7b5adb48c5f0> @pytest.fixture() def vercel_module(vercel_sdk, monkeypatch): monkeypatch.setattr("tools.environments.base.is_interrupted", lambda: False) monkeypatch.setattr("tools.credential_files.get_credential_file_mounts", lambda: []) monkeypatch.setattr("tools.credential_files.iter_skills_files", lambda **kwargs: []) monkeypatch.setattr("tools.credential_files.iter_cache_files", lambda **kwargs: []) > module = importlib.import_module("tools.environments.vercel_sandbox") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_vercel_sandbox_environment.py:223: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/importlib/__init__.py:90: in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :1387: in _gcd_import ??? :1360: in _find_and_load ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'tools.environments.vercel_sandbox' import_ = > ??? E ModuleNotFoundError: No module named 'tools.environments.vercel_sandbox' :1324: ModuleNotFoundError _ ERROR at setup of TestExecute.test_execute_recreates_unhealthy_sandbox_before_running_command[refresh-failure] _ vercel_sdk = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7b5adb08a510> @pytest.fixture() def vercel_module(vercel_sdk, monkeypatch): monkeypatch.setattr("tools.environments.base.is_interrupted", lambda: False) monkeypatch.setattr("tools.credential_files.get_credential_file_mounts", lambda: []) monkeypatch.setattr("tools.credential_files.iter_skills_files", lambda **kwargs: []) monkeypatch.setattr("tools.credential_files.iter_cache_files", lambda **kwargs: []) > module = importlib.import_module("tools.environments.vercel_sandbox") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_vercel_sandbox_environment.py:223: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/importlib/__init__.py:90: in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :1387: in _gcd_import ??? :1360: in _find_and_load ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'tools.environments.vercel_sandbox' import_ = > ??? E ModuleNotFoundError: No module named 'tools.environments.vercel_sandbox' :1324: ModuleNotFoundError _ ERROR at setup of TestExecute.test_run_bash_handle_uses_captured_sandbox_for_exec_and_cancel _ vercel_sdk = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7b5adb089460> @pytest.fixture() def vercel_module(vercel_sdk, monkeypatch): monkeypatch.setattr("tools.environments.base.is_interrupted", lambda: False) monkeypatch.setattr("tools.credential_files.get_credential_file_mounts", lambda: []) monkeypatch.setattr("tools.credential_files.iter_skills_files", lambda **kwargs: []) monkeypatch.setattr("tools.credential_files.iter_cache_files", lambda **kwargs: []) > module = importlib.import_module("tools.environments.vercel_sandbox") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_vercel_sandbox_environment.py:223: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/importlib/__init__.py:90: in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :1387: in _gcd_import ??? :1360: in _find_and_load ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'tools.environments.vercel_sandbox' import_ = > ??? E ModuleNotFoundError: No module named 'tools.environments.vercel_sandbox' :1324: ModuleNotFoundError _ ERROR at setup of TestSnapshotPersistence.test_create_restores_from_saved_snapshot _ vercel_sdk = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7b5adb089f70> @pytest.fixture() def vercel_module(vercel_sdk, monkeypatch): monkeypatch.setattr("tools.environments.base.is_interrupted", lambda: False) monkeypatch.setattr("tools.credential_files.get_credential_file_mounts", lambda: []) monkeypatch.setattr("tools.credential_files.iter_skills_files", lambda **kwargs: []) monkeypatch.setattr("tools.credential_files.iter_cache_files", lambda **kwargs: []) > module = importlib.import_module("tools.environments.vercel_sandbox") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_vercel_sandbox_environment.py:223: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/importlib/__init__.py:90: in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :1387: in _gcd_import ??? :1360: in _find_and_load ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'tools.environments.vercel_sandbox' import_ = > ??? E ModuleNotFoundError: No module named 'tools.environments.vercel_sandbox' :1324: ModuleNotFoundError _ ERROR at setup of TestSnapshotPersistence.test_restore_failure_prunes_snapshot_and_falls_back_to_fresh_sandbox _ vercel_sdk = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7b5adb037440> @pytest.fixture() def vercel_module(vercel_sdk, monkeypatch): monkeypatch.setattr("tools.environments.base.is_interrupted", lambda: False) monkeypatch.setattr("tools.credential_files.get_credential_file_mounts", lambda: []) monkeypatch.setattr("tools.credential_files.iter_skills_files", lambda **kwargs: []) monkeypatch.setattr("tools.credential_files.iter_cache_files", lambda **kwargs: []) > module = importlib.import_module("tools.environments.vercel_sandbox") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_vercel_sandbox_environment.py:223: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/importlib/__init__.py:90: in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :1387: in _gcd_import ??? :1360: in _find_and_load ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'tools.environments.vercel_sandbox' import_ = > ??? E ModuleNotFoundError: No module named 'tools.environments.vercel_sandbox' :1324: ModuleNotFoundError _ ERROR at setup of TestSnapshotPersistence.test_cleanup_stops_when_snapshot_fails_without_storing_metadata _ vercel_sdk = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7b5adb047500> @pytest.fixture() def vercel_module(vercel_sdk, monkeypatch): monkeypatch.setattr("tools.environments.base.is_interrupted", lambda: False) monkeypatch.setattr("tools.credential_files.get_credential_file_mounts", lambda: []) monkeypatch.setattr("tools.credential_files.iter_skills_files", lambda **kwargs: []) monkeypatch.setattr("tools.credential_files.iter_cache_files", lambda **kwargs: []) > module = importlib.import_module("tools.environments.vercel_sandbox") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_vercel_sandbox_environment.py:223: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/importlib/__init__.py:90: in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :1387: in _gcd_import ??? :1360: in _find_and_load ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'tools.environments.vercel_sandbox' import_ = > ??? E ModuleNotFoundError: No module named 'tools.environments.vercel_sandbox' :1324: ModuleNotFoundError _ ERROR at setup of TestSnapshotPersistence.test_non_persistent_cleanup_stops_without_snapshot _ vercel_sdk = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7b5adb046690> @pytest.fixture() def vercel_module(vercel_sdk, monkeypatch): monkeypatch.setattr("tools.environments.base.is_interrupted", lambda: False) monkeypatch.setattr("tools.credential_files.get_credential_file_mounts", lambda: []) monkeypatch.setattr("tools.credential_files.iter_skills_files", lambda **kwargs: []) monkeypatch.setattr("tools.credential_files.iter_cache_files", lambda **kwargs: []) > module = importlib.import_module("tools.environments.vercel_sandbox") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_vercel_sandbox_environment.py:223: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/importlib/__init__.py:90: in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :1387: in _gcd_import ??? :1360: in _find_and_load ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'tools.environments.vercel_sandbox' import_ = > ??? E ModuleNotFoundError: No module named 'tools.environments.vercel_sandbox' :1324: ModuleNotFoundError _ ERROR at setup of TestSnapshotPersistence.test_persistent_cleanup_without_task_id_stops_without_snapshot _ vercel_sdk = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7b5adb0340b0> @pytest.fixture() def vercel_module(vercel_sdk, monkeypatch): monkeypatch.setattr("tools.environments.base.is_interrupted", lambda: False) monkeypatch.setattr("tools.credential_files.get_credential_file_mounts", lambda: []) monkeypatch.setattr("tools.credential_files.iter_skills_files", lambda **kwargs: []) monkeypatch.setattr("tools.credential_files.iter_cache_files", lambda **kwargs: []) > module = importlib.import_module("tools.environments.vercel_sandbox") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_vercel_sandbox_environment.py:223: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/importlib/__init__.py:90: in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :1387: in _gcd_import ??? :1360: in _find_and_load ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'tools.environments.vercel_sandbox' import_ = > ??? E ModuleNotFoundError: No module named 'tools.environments.vercel_sandbox' :1324: ModuleNotFoundError __ ERROR at setup of TestCleanup.test_cleanup_continues_when_sync_back_raises __ vercel_sdk = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7b5adb48f9e0> @pytest.fixture() def vercel_module(vercel_sdk, monkeypatch): monkeypatch.setattr("tools.environments.base.is_interrupted", lambda: False) monkeypatch.setattr("tools.credential_files.get_credential_file_mounts", lambda: []) monkeypatch.setattr("tools.credential_files.iter_skills_files", lambda **kwargs: []) monkeypatch.setattr("tools.credential_files.iter_cache_files", lambda **kwargs: []) > module = importlib.import_module("tools.environments.vercel_sandbox") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_vercel_sandbox_environment.py:223: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/importlib/__init__.py:90: in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :1387: in _gcd_import ??? :1360: in _find_and_load ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'tools.environments.vercel_sandbox' import_ = > ??? E ModuleNotFoundError: No module named 'tools.environments.vercel_sandbox' :1324: ModuleNotFoundError =========================== short test summary info ============================ ERROR tests/tools/test_vercel_sandbox_environment.py::TestStartup::test_default_cwd_tracks_remote_workspace_root ERROR tests/tools/test_vercel_sandbox_environment.py::TestStartup::test_tilde_cwd_resolves_against_remote_home ERROR tests/tools/test_vercel_sandbox_environment.py::TestStartup::test_pending_sandbox_timeout_raises_descriptive_error ERROR tests/tools/test_vercel_sandbox_environment.py::TestFileSync::test_initial_sync_uploads_managed_files_under_remote_home ERROR tests/tools/test_vercel_sandbox_environment.py::TestFileSync::test_execute_resyncs_changed_managed_files ERROR tests/tools/test_vercel_sandbox_environment.py::TestFileSync::test_cleanup_syncs_back_snapshots_closes_and_is_idempotent ERROR tests/tools/test_vercel_sandbox_environment.py::TestFileSync::test_cleanup_sync_back_failure_from_download_does_not_block_snapshot ERROR tests/tools/test_vercel_sandbox_environment.py::TestExecute::test_execute_recreates_unhealthy_sandbox_before_running_command[terminal-state] ERROR tests/tools/test_vercel_sandbox_environment.py::TestExecute::test_execute_recreates_unhealthy_sandbox_before_running_command[refresh-failure] ERROR tests/tools/test_vercel_sandbox_environment.py::TestExecute::test_run_bash_handle_uses_captured_sandbox_for_exec_and_cancel ERROR tests/tools/test_vercel_sandbox_environment.py::TestSnapshotPersistence::test_create_restores_from_saved_snapshot ERROR tests/tools/test_vercel_sandbox_environment.py::TestSnapshotPersistence::test_restore_failure_prunes_snapshot_and_falls_back_to_fresh_sandbox ERROR tests/tools/test_vercel_sandbox_environment.py::TestSnapshotPersistence::test_cleanup_stops_when_snapshot_fails_without_storing_metadata ERROR tests/tools/test_vercel_sandbox_environment.py::TestSnapshotPersistence::test_non_persistent_cleanup_stops_without_snapshot ERROR tests/tools/test_vercel_sandbox_environment.py::TestSnapshotPersistence::test_persistent_cleanup_without_task_id_stops_without_snapshot ERROR tests/tools/test_vercel_sandbox_environment.py::TestCleanup::test_cleanup_continues_when_sync_back_raises ============================== 16 errors in 0.81s ============================== --- tests/tools/test_voice_cli_integration.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 84 items tests/tools/test_voice_cli_integration.py ..............s............... [ 35%] ...................................FF.F.F............. [100%] =================================== FAILURES =================================== ______________ TestVoiceSpeakResponseReal.test_markdown_stripped _______________ self = mock_tts = _play = _mkd = _isf = _gsz = _unl = _cp = @patch("cli._cprint") @patch("cli.os.unlink") @patch("cli.os.path.getsize", return_value=1000) @patch("cli.os.path.isfile", return_value=True) @patch("cli.os.makedirs") @patch("tools.voice_mode.play_audio_file") @patch("hermes_agent_tts.tts_tool.text_to_speech_tool", return_value='{"success": true}') def test_markdown_stripped(self, mock_tts, _play, _mkd, _isf, _gsz, _unl, _cp): cli = _make_voice_cli(_voice_tts=True) cli._voice_speak_response("## Title\n**bold** and `code`") > call_text = mock_tts.call_args.kwargs["text"] ^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: 'NoneType' object has no attribute 'kwargs' tests/tools/test_voice_cli_integration.py:1082: AttributeError ------------------------------ Captured log call ------------------------------- WARNING cli:cli.py:10906 Voice TTS playback failed: tts tool provider not registered _____________ TestVoiceSpeakResponseReal.test_code_blocks_removed ______________ self = mock_tts = _mkd = _cp = @patch("cli._cprint") @patch("cli.os.makedirs") @patch("hermes_agent_tts.tts_tool.text_to_speech_tool", return_value='{"success": true}') def test_code_blocks_removed(self, mock_tts, _mkd, _cp): cli = _make_voice_cli(_voice_tts=True) cli._voice_speak_response("```python\nprint('hi')\n```\nSome text") > call_text = mock_tts.call_args.kwargs["text"] ^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: 'NoneType' object has no attribute 'kwargs' tests/tools/test_voice_cli_integration.py:1093: AttributeError ------------------------------ Captured log call ------------------------------- WARNING cli:cli.py:10906 Voice TTS playback failed: tts tool provider not registered _____________ TestVoiceSpeakResponseReal.test_long_text_truncated ______________ self = mock_tts = _mkd = _cp = @patch("cli._cprint") @patch("cli.os.makedirs") @patch("hermes_agent_tts.tts_tool.text_to_speech_tool", return_value='{"success": true}') def test_long_text_truncated(self, mock_tts, _mkd, _cp): cli = _make_voice_cli(_voice_tts=True) cli._voice_speak_response("A" * 5000) > call_text = mock_tts.call_args.kwargs["text"] ^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: 'NoneType' object has no attribute 'kwargs' tests/tools/test_voice_cli_integration.py:1112: AttributeError ------------------------------ Captured log call ------------------------------- WARNING cli:cli.py:10906 Voice TTS playback failed: tts tool provider not registered ______________ TestVoiceSpeakResponseReal.test_play_audio_called _______________ self = _tts = mock_play = _mkd = _isf = _gsz = _unl = _cp = @patch("cli._cprint") @patch("cli.os.unlink") @patch("cli.os.path.getsize", return_value=1000) @patch("cli.os.path.isfile", return_value=True) @patch("cli.os.makedirs") @patch("tools.voice_mode.play_audio_file") @patch("hermes_agent_tts.tts_tool.text_to_speech_tool", return_value='{"success": true}') def test_play_audio_called(self, _tts, mock_play, _mkd, _isf, _gsz, _unl, _cp): cli = _make_voice_cli(_voice_tts=True) cli._voice_speak_response("Hello world") > mock_play.assert_called_once() tests/tools/test_voice_cli_integration.py:1134: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def assert_called_once(self): """assert that the mock was called only once. """ if not self.call_count == 1: msg = ("Expected '%s' to have been called once. Called %s times.%s" % (self._mock_name or 'mock', self.call_count, self._calls_repr())) > raise AssertionError(msg) E AssertionError: Expected 'play_audio_file' to have been called once. Called 0 times. /nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/unittest/mock.py:928: AssertionError ------------------------------ Captured log call ------------------------------- WARNING cli:cli.py:10906 Voice TTS playback failed: tts tool provider not registered =========================== short test summary info ============================ FAILED tests/tools/test_voice_cli_integration.py::TestVoiceSpeakResponseReal::test_markdown_stripped FAILED tests/tools/test_voice_cli_integration.py::TestVoiceSpeakResponseReal::test_code_blocks_removed FAILED tests/tools/test_voice_cli_integration.py::TestVoiceSpeakResponseReal::test_long_text_truncated FAILED tests/tools/test_voice_cli_integration.py::TestVoiceSpeakResponseReal::test_play_audio_called =================== 4 failed, 79 passed, 1 skipped in 3.44s ==================== --- tests/tools/test_voice_mode.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 62 items tests/tools/test_voice_mode.py ..........F.F........sss....FFFFF..s..... [ 66%] .ss..ssss...sssss.... [100%] =================================== FAILURES =================================== _____________ TestCheckVoiceRequirements.test_all_requirements_met _____________ self = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7867adbb2570> def test_all_requirements_met(self, monkeypatch): monkeypatch.setattr("tools.voice_mode._audio_available", lambda: True) monkeypatch.setattr("tools.voice_mode.detect_audio_environment", lambda: {"available": True, "warnings": []}) monkeypatch.setattr("hermes_agent_stt.transcription_tools._get_provider", lambda cfg: "openai") from tools.voice_mode import check_voice_requirements result = check_voice_requirements() > assert result["available"] is True E assert False is True tests/tools/test_voice_mode.py:286: AssertionError _____________ TestCheckVoiceRequirements.test_missing_stt_provider _____________ self = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7867adb4ce00> def test_missing_stt_provider(self, monkeypatch): monkeypatch.setattr("tools.voice_mode._audio_available", lambda: True) monkeypatch.setattr("tools.voice_mode.detect_audio_environment", lambda: {"available": True, "warnings": []}) monkeypatch.setattr("hermes_agent_stt.transcription_tools._get_provider", lambda cfg: "none") from tools.voice_mode import check_voice_requirements result = check_voice_requirements() assert result["available"] is False assert result["stt_available"] is False > assert "STT provider: MISSING" in result["details"] E AssertionError: assert 'STT provider: MISSING' in 'Audio capture: OK\nSTT provider: DISABLED in config (stt.enabled: false)' tests/tools/test_voice_mode.py:316: AssertionError __________ TestTranscribeRecording.test_delegates_to_transcribe_audio __________ self = def test_delegates_to_transcribe_audio(self): mock_transcribe = MagicMock(return_value={ "success": True, "transcript": "hello world", }) with patch("hermes_agent_stt.transcription_tools.transcribe_audio", mock_transcribe): from tools.voice_mode import transcribe_recording > result = transcribe_recording("/tmp/test.wav", model="whisper-1") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_voice_mode.py:576: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ wav_path = '/tmp/test.wav', model = 'whisper-1' def transcribe_recording(wav_path: str, model: Optional[str] = None) -> Dict[str, Any]: """Transcribe a WAV recording using the existing Whisper pipeline. Delegates to ``tools.transcription_tools.transcribe_audio()``. Filters out known Whisper hallucinations on silent audio. Args: wav_path: Path to the WAV file. model: Whisper model name (default: from config or ``whisper-1``). Returns: Dict with ``success``, ``transcript``, and optionally ``error``. """ # Registry lookup (hermes_agent_stt is a plugin) from agent.plugin_registries import registries _stt = registries.get_tool_provider("stt") if _stt: transcribe_audio = _stt.tool_functions.get("transcribe_audio") MAX_FILE_SIZE = _stt.constants.get("MAX_FILE_SIZE", 25 * 1024 * 1024) else: transcribe_audio = None MAX_FILE_SIZE = 25 * 1024 * 1024 if _should_chunk_for_transcription(wav_path, MAX_FILE_SIZE): result = _transcribe_wav_in_chunks(wav_path, model=model, max_file_size=MAX_FILE_SIZE) else: > result = transcribe_audio(wav_path, model=model) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E TypeError: 'NoneType' object is not callable tools/voice_mode.py:816: TypeError __________ TestTranscribeRecording.test_filters_whisper_hallucination __________ self = def test_filters_whisper_hallucination(self): mock_transcribe = MagicMock(return_value={ "success": True, "transcript": "Thank you.", }) with patch("hermes_agent_stt.transcription_tools.transcribe_audio", mock_transcribe): from tools.voice_mode import transcribe_recording > result = transcribe_recording("/tmp/test.wav") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_voice_mode.py:590: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ wav_path = '/tmp/test.wav', model = None def transcribe_recording(wav_path: str, model: Optional[str] = None) -> Dict[str, Any]: """Transcribe a WAV recording using the existing Whisper pipeline. Delegates to ``tools.transcription_tools.transcribe_audio()``. Filters out known Whisper hallucinations on silent audio. Args: wav_path: Path to the WAV file. model: Whisper model name (default: from config or ``whisper-1``). Returns: Dict with ``success``, ``transcript``, and optionally ``error``. """ # Registry lookup (hermes_agent_stt is a plugin) from agent.plugin_registries import registries _stt = registries.get_tool_provider("stt") if _stt: transcribe_audio = _stt.tool_functions.get("transcribe_audio") MAX_FILE_SIZE = _stt.constants.get("MAX_FILE_SIZE", 25 * 1024 * 1024) else: transcribe_audio = None MAX_FILE_SIZE = 25 * 1024 * 1024 if _should_chunk_for_transcription(wav_path, MAX_FILE_SIZE): result = _transcribe_wav_in_chunks(wav_path, model=model, max_file_size=MAX_FILE_SIZE) else: > result = transcribe_audio(wav_path, model=model) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E TypeError: 'NoneType' object is not callable tools/voice_mode.py:816: TypeError ___________ TestTranscribeRecording.test_does_not_filter_real_speech ___________ self = def test_does_not_filter_real_speech(self): mock_transcribe = MagicMock(return_value={ "success": True, "transcript": "Thank you for helping me with this code.", }) with patch("hermes_agent_stt.transcription_tools.transcribe_audio", mock_transcribe): from tools.voice_mode import transcribe_recording > result = transcribe_recording("/tmp/test.wav") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_voice_mode.py:604: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ wav_path = '/tmp/test.wav', model = None def transcribe_recording(wav_path: str, model: Optional[str] = None) -> Dict[str, Any]: """Transcribe a WAV recording using the existing Whisper pipeline. Delegates to ``tools.transcription_tools.transcribe_audio()``. Filters out known Whisper hallucinations on silent audio. Args: wav_path: Path to the WAV file. model: Whisper model name (default: from config or ``whisper-1``). Returns: Dict with ``success``, ``transcript``, and optionally ``error``. """ # Registry lookup (hermes_agent_stt is a plugin) from agent.plugin_registries import registries _stt = registries.get_tool_provider("stt") if _stt: transcribe_audio = _stt.tool_functions.get("transcribe_audio") MAX_FILE_SIZE = _stt.constants.get("MAX_FILE_SIZE", 25 * 1024 * 1024) else: transcribe_audio = None MAX_FILE_SIZE = 25 * 1024 * 1024 if _should_chunk_for_transcription(wav_path, MAX_FILE_SIZE): result = _transcribe_wav_in_chunks(wav_path, model=model, max_file_size=MAX_FILE_SIZE) else: > result = transcribe_audio(wav_path, model=model) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E TypeError: 'NoneType' object is not callable tools/voice_mode.py:816: TypeError ______ TestTranscribeRecording.test_oversized_wav_is_chunked_and_stitched ______ self = tmp_path = PosixPath('/tmp/pytest-of-ethie/pytest-43131/test_oversized_wav_is_chunked_0') monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7867ada6a270> def test_oversized_wav_is_chunked_and_stitched(self, tmp_path, monkeypatch): wav_path = tmp_path / "long.wav" n_frames = 50000 audio = struct.pack(f"<{n_frames}h", *([1000] * n_frames)) with wave.open(str(wav_path), "wb") as wf: wf.setnchannels(1) wf.setsampwidth(2) wf.setframerate(16000) wf.writeframes(audio) temp_dir = tmp_path / "chunks" temp_dir.mkdir() monkeypatch.setattr("tools.voice_mode._TEMP_DIR", str(temp_dir)) monkeypatch.setattr("hermes_agent_stt.transcription_tools.MAX_FILE_SIZE", 70 * 1024) seen_paths = [] def fake_transcribe(path, model=None): seen_paths.append(path) assert model == "base" assert path != str(wav_path) assert os.path.getsize(path) <= 70 * 1024 return { "success": True, "transcript": f"part {len(seen_paths)}", "provider": "local", } with patch("hermes_agent_stt.transcription_tools.transcribe_audio", side_effect=fake_transcribe): from tools.voice_mode import transcribe_recording > result = transcribe_recording(str(wav_path), model="base") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_voice_mode.py:639: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ wav_path = '/tmp/pytest-of-ethie/pytest-43131/test_oversized_wav_is_chunked_0/long.wav' model = 'base' def transcribe_recording(wav_path: str, model: Optional[str] = None) -> Dict[str, Any]: """Transcribe a WAV recording using the existing Whisper pipeline. Delegates to ``tools.transcription_tools.transcribe_audio()``. Filters out known Whisper hallucinations on silent audio. Args: wav_path: Path to the WAV file. model: Whisper model name (default: from config or ``whisper-1``). Returns: Dict with ``success``, ``transcript``, and optionally ``error``. """ # Registry lookup (hermes_agent_stt is a plugin) from agent.plugin_registries import registries _stt = registries.get_tool_provider("stt") if _stt: transcribe_audio = _stt.tool_functions.get("transcribe_audio") MAX_FILE_SIZE = _stt.constants.get("MAX_FILE_SIZE", 25 * 1024 * 1024) else: transcribe_audio = None MAX_FILE_SIZE = 25 * 1024 * 1024 if _should_chunk_for_transcription(wav_path, MAX_FILE_SIZE): result = _transcribe_wav_in_chunks(wav_path, model=model, max_file_size=MAX_FILE_SIZE) else: > result = transcribe_audio(wav_path, model=model) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E TypeError: 'NoneType' object is not callable tools/voice_mode.py:816: TypeError _______ TestTranscribeRecording.test_oversized_wav_reports_failing_chunk _______ self = tmp_path = PosixPath('/tmp/pytest-of-ethie/pytest-43131/test_oversized_wav_reports_fai0') monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7867adc59730> def test_oversized_wav_reports_failing_chunk(self, tmp_path, monkeypatch): wav_path = tmp_path / "long.wav" n_frames = 50000 audio = struct.pack(f"<{n_frames}h", *([1000] * n_frames)) with wave.open(str(wav_path), "wb") as wf: wf.setnchannels(1) wf.setsampwidth(2) wf.setframerate(16000) wf.writeframes(audio) temp_dir = tmp_path / "chunks" temp_dir.mkdir() monkeypatch.setattr("tools.voice_mode._TEMP_DIR", str(temp_dir)) monkeypatch.setattr("hermes_agent_stt.transcription_tools.MAX_FILE_SIZE", 70 * 1024) def fake_transcribe(path, model=None): return {"success": False, "transcript": "", "error": "provider rejected audio"} with patch("hermes_agent_stt.transcription_tools.transcribe_audio", side_effect=fake_transcribe): from tools.voice_mode import transcribe_recording > result = transcribe_recording(str(wav_path), model="base") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests/tools/test_voice_mode.py:669: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ wav_path = '/tmp/pytest-of-ethie/pytest-43131/test_oversized_wav_reports_fai0/long.wav' model = 'base' def transcribe_recording(wav_path: str, model: Optional[str] = None) -> Dict[str, Any]: """Transcribe a WAV recording using the existing Whisper pipeline. Delegates to ``tools.transcription_tools.transcribe_audio()``. Filters out known Whisper hallucinations on silent audio. Args: wav_path: Path to the WAV file. model: Whisper model name (default: from config or ``whisper-1``). Returns: Dict with ``success``, ``transcript``, and optionally ``error``. """ # Registry lookup (hermes_agent_stt is a plugin) from agent.plugin_registries import registries _stt = registries.get_tool_provider("stt") if _stt: transcribe_audio = _stt.tool_functions.get("transcribe_audio") MAX_FILE_SIZE = _stt.constants.get("MAX_FILE_SIZE", 25 * 1024 * 1024) else: transcribe_audio = None MAX_FILE_SIZE = 25 * 1024 * 1024 if _should_chunk_for_transcription(wav_path, MAX_FILE_SIZE): result = _transcribe_wav_in_chunks(wav_path, model=model, max_file_size=MAX_FILE_SIZE) else: > result = transcribe_audio(wav_path, model=model) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E TypeError: 'NoneType' object is not callable tools/voice_mode.py:816: TypeError =============================== warnings summary =============================== tests/tools/test_voice_mode.py::TestAudioRecorderStop::test_stop_writes_wav_file /home/ari/src/hermes-agent/main/tests/tools/test_voice_mode.py:446: PytestDeprecationWarning: Module 'numpy' was found, but when imported by pytest it raised: ImportError('\n\nIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!\n\nImporting the numpy C-extensions failed. This error can happen for\nmany reasons, often due to issues with your setup or how NumPy was\ninstalled.\n\nWe have compiled some common reasons and troubleshooting tips at:\n\n https://numpy.org/devdocs/user/troubleshooting-importerror.html\n\nPlease note and check the following:\n\n * The Python version is: Python 3.12 from "/home/ari/src/hermes-agent/main/.venv/bin/python"\n * The NumPy version is: "2.4.3"\n\nand make sure that they are the versions you expect.\n\nPlease carefully study the information and documentation linked above.\nThis is unlikely to be a NumPy issue but will be caused by a bad install\nor environment on your machine.\n\nOriginal error was: libstdc++.so.6: cannot open shared object file: No such file or directory\n') In pytest 9.1 this warning will become an error by default. You can fix the underlying problem, or alternatively overwrite this behavior and silence this warning by passing exc_type=ImportError explicitly. See https://docs.pytest.org/en/stable/deprecations.html#pytest-importorskip-default-behavior-regarding-importerror np = pytest.importorskip("numpy") tests/tools/test_voice_mode.py::TestAudioRecorderStop::test_stop_returns_none_for_very_short_recording /home/ari/src/hermes-agent/main/tests/tools/test_voice_mode.py:475: PytestDeprecationWarning: Module 'numpy' was found, but when imported by pytest it raised: ImportError('\n\nIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!\n\nImporting the numpy C-extensions failed. This error can happen for\nmany reasons, often due to issues with your setup or how NumPy was\ninstalled.\n\nWe have compiled some common reasons and troubleshooting tips at:\n\n https://numpy.org/devdocs/user/troubleshooting-importerror.html\n\nPlease note and check the following:\n\n * The Python version is: Python 3.12 from "/home/ari/src/hermes-agent/main/.venv/bin/python"\n * The NumPy version is: "2.4.3"\n\nand make sure that they are the versions you expect.\n\nPlease carefully study the information and documentation linked above.\nThis is unlikely to be a NumPy issue but will be caused by a bad install\nor environment on your machine.\n\nOriginal error was: libstdc++.so.6: cannot open shared object file: No such file or directory\n') In pytest 9.1 this warning will become an error by default. You can fix the underlying problem, or alternatively overwrite this behavior and silence this warning by passing exc_type=ImportError explicitly. See https://docs.pytest.org/en/stable/deprecations.html#pytest-importorskip-default-behavior-regarding-importerror np = pytest.importorskip("numpy") tests/tools/test_voice_mode.py::TestAudioRecorderStop::test_stop_returns_none_for_silent_recording /home/ari/src/hermes-agent/main/tests/tools/test_voice_mode.py:493: PytestDeprecationWarning: Module 'numpy' was found, but when imported by pytest it raised: ImportError('\n\nIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!\n\nImporting the numpy C-extensions failed. This error can happen for\nmany reasons, often due to issues with your setup or how NumPy was\ninstalled.\n\nWe have compiled some common reasons and troubleshooting tips at:\n\n https://numpy.org/devdocs/user/troubleshooting-importerror.html\n\nPlease note and check the following:\n\n * The Python version is: Python 3.12 from "/home/ari/src/hermes-agent/main/.venv/bin/python"\n * The NumPy version is: "2.4.3"\n\nand make sure that they are the versions you expect.\n\nPlease carefully study the information and documentation linked above.\nThis is unlikely to be a NumPy issue but will be caused by a bad install\nor environment on your machine.\n\nOriginal error was: libstdc++.so.6: cannot open shared object file: No such file or directory\n') In pytest 9.1 this warning will become an error by default. You can fix the underlying problem, or alternatively overwrite this behavior and silence this warning by passing exc_type=ImportError explicitly. See https://docs.pytest.org/en/stable/deprecations.html#pytest-importorskip-default-behavior-regarding-importerror np = pytest.importorskip("numpy") tests/tools/test_voice_mode.py::TestPlayAudioFile::test_play_wav_via_sounddevice /home/ari/src/hermes-agent/main/tests/tools/test_voice_mode.py:702: PytestDeprecationWarning: Module 'numpy' was found, but when imported by pytest it raised: ImportError('\n\nIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!\n\nImporting the numpy C-extensions failed. This error can happen for\nmany reasons, often due to issues with your setup or how NumPy was\ninstalled.\n\nWe have compiled some common reasons and troubleshooting tips at:\n\n https://numpy.org/devdocs/user/troubleshooting-importerror.html\n\nPlease note and check the following:\n\n * The Python version is: Python 3.12 from "/home/ari/src/hermes-agent/main/.venv/bin/python"\n * The NumPy version is: "2.4.3"\n\nand make sure that they are the versions you expect.\n\nPlease carefully study the information and documentation linked above.\nThis is unlikely to be a NumPy issue but will be caused by a bad install\nor environment on your machine.\n\nOriginal error was: libstdc++.so.6: cannot open shared object file: No such file or directory\n') In pytest 9.1 this warning will become an error by default. You can fix the underlying problem, or alternatively overwrite this behavior and silence this warning by passing exc_type=ImportError explicitly. See https://docs.pytest.org/en/stable/deprecations.html#pytest-importorskip-default-behavior-regarding-importerror np = pytest.importorskip("numpy") tests/tools/test_voice_mode.py::TestPlayBeep::test_beep_calls_sounddevice_play /home/ari/src/hermes-agent/main/tests/tools/test_voice_mode.py:798: PytestDeprecationWarning: Module 'numpy' was found, but when imported by pytest it raised: ImportError('\n\nIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!\n\nImporting the numpy C-extensions failed. This error can happen for\nmany reasons, often due to issues with your setup or how NumPy was\ninstalled.\n\nWe have compiled some common reasons and troubleshooting tips at:\n\n https://numpy.org/devdocs/user/troubleshooting-importerror.html\n\nPlease note and check the following:\n\n * The Python version is: Python 3.12 from "/home/ari/src/hermes-agent/main/.venv/bin/python"\n * The NumPy version is: "2.4.3"\n\nand make sure that they are the versions you expect.\n\nPlease carefully study the information and documentation linked above.\nThis is unlikely to be a NumPy issue but will be caused by a bad install\nor environment on your machine.\n\nOriginal error was: libstdc++.so.6: cannot open shared object file: No such file or directory\n') In pytest 9.1 this warning will become an error by default. You can fix the underlying problem, or alternatively overwrite this behavior and silence this warning by passing exc_type=ImportError explicitly. See https://docs.pytest.org/en/stable/deprecations.html#pytest-importorskip-default-behavior-regarding-importerror np = pytest.importorskip("numpy") tests/tools/test_voice_mode.py::TestPlayBeep::test_beep_double_produces_longer_audio /home/ari/src/hermes-agent/main/tests/tools/test_voice_mode.py:817: PytestDeprecationWarning: Module 'numpy' was found, but when imported by pytest it raised: ImportError('\n\nIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!\n\nImporting the numpy C-extensions failed. This error can happen for\nmany reasons, often due to issues with your setup or how NumPy was\ninstalled.\n\nWe have compiled some common reasons and troubleshooting tips at:\n\n https://numpy.org/devdocs/user/troubleshooting-importerror.html\n\nPlease note and check the following:\n\n * The Python version is: Python 3.12 from "/home/ari/src/hermes-agent/main/.venv/bin/python"\n * The NumPy version is: "2.4.3"\n\nand make sure that they are the versions you expect.\n\nPlease carefully study the information and documentation linked above.\nThis is unlikely to be a NumPy issue but will be caused by a bad install\nor environment on your machine.\n\nOriginal error was: libstdc++.so.6: cannot open shared object file: No such file or directory\n') In pytest 9.1 this warning will become an error by default. You can fix the underlying problem, or alternatively overwrite this behavior and silence this warning by passing exc_type=ImportError explicitly. See https://docs.pytest.org/en/stable/deprecations.html#pytest-importorskip-default-behavior-regarding-importerror np = pytest.importorskip("numpy") tests/tools/test_voice_mode.py::TestSilenceDetection::test_silence_callback_fires_after_speech_then_silence /home/ari/src/hermes-agent/main/tests/tools/test_voice_mode.py:853: PytestDeprecationWarning: Module 'numpy' was found, but when imported by pytest it raised: ImportError('\n\nIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!\n\nImporting the numpy C-extensions failed. This error can happen for\nmany reasons, often due to issues with your setup or how NumPy was\ninstalled.\n\nWe have compiled some common reasons and troubleshooting tips at:\n\n https://numpy.org/devdocs/user/troubleshooting-importerror.html\n\nPlease note and check the following:\n\n * The Python version is: Python 3.12 from "/home/ari/src/hermes-agent/main/.venv/bin/python"\n * The NumPy version is: "2.4.3"\n\nand make sure that they are the versions you expect.\n\nPlease carefully study the information and documentation linked above.\nThis is unlikely to be a NumPy issue but will be caused by a bad install\nor environment on your machine.\n\nOriginal error was: libstdc++.so.6: cannot open shared object file: No such file or directory\n') In pytest 9.1 this warning will become an error by default. You can fix the underlying problem, or alternatively overwrite this behavior and silence this warning by passing exc_type=ImportError explicitly. See https://docs.pytest.org/en/stable/deprecations.html#pytest-importorskip-default-behavior-regarding-importerror np = pytest.importorskip("numpy") tests/tools/test_voice_mode.py::TestSilenceDetection::test_silence_without_speech_does_not_fire /home/ari/src/hermes-agent/main/tests/tools/test_voice_mode.py:899: PytestDeprecationWarning: Module 'numpy' was found, but when imported by pytest it raised: ImportError('\n\nIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!\n\nImporting the numpy C-extensions failed. This error can happen for\nmany reasons, often due to issues with your setup or how NumPy was\ninstalled.\n\nWe have compiled some common reasons and troubleshooting tips at:\n\n https://numpy.org/devdocs/user/troubleshooting-importerror.html\n\nPlease note and check the following:\n\n * The Python version is: Python 3.12 from "/home/ari/src/hermes-agent/main/.venv/bin/python"\n * The NumPy version is: "2.4.3"\n\nand make sure that they are the versions you expect.\n\nPlease carefully study the information and documentation linked above.\nThis is unlikely to be a NumPy issue but will be caused by a bad install\nor environment on your machine.\n\nOriginal error was: libstdc++.so.6: cannot open shared object file: No such file or directory\n') In pytest 9.1 this warning will become an error by default. You can fix the underlying problem, or alternatively overwrite this behavior and silence this warning by passing exc_type=ImportError explicitly. See https://docs.pytest.org/en/stable/deprecations.html#pytest-importorskip-default-behavior-regarding-importerror np = pytest.importorskip("numpy") tests/tools/test_voice_mode.py::TestSilenceDetection::test_micro_pause_tolerance_during_speech /home/ari/src/hermes-agent/main/tests/tools/test_voice_mode.py:929: PytestDeprecationWarning: Module 'numpy' was found, but when imported by pytest it raised: ImportError('\n\nIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!\n\nImporting the numpy C-extensions failed. This error can happen for\nmany reasons, often due to issues with your setup or how NumPy was\ninstalled.\n\nWe have compiled some common reasons and troubleshooting tips at:\n\n https://numpy.org/devdocs/user/troubleshooting-importerror.html\n\nPlease note and check the following:\n\n * The Python version is: Python 3.12 from "/home/ari/src/hermes-agent/main/.venv/bin/python"\n * The NumPy version is: "2.4.3"\n\nand make sure that they are the versions you expect.\n\nPlease carefully study the information and documentation linked above.\nThis is unlikely to be a NumPy issue but will be caused by a bad install\nor environment on your machine.\n\nOriginal error was: libstdc++.so.6: cannot open shared object file: No such file or directory\n') In pytest 9.1 this warning will become an error by default. You can fix the underlying problem, or alternatively overwrite this behavior and silence this warning by passing exc_type=ImportError explicitly. See https://docs.pytest.org/en/stable/deprecations.html#pytest-importorskip-default-behavior-regarding-importerror np = pytest.importorskip("numpy") tests/tools/test_voice_mode.py::TestSilenceDetection::test_no_callback_means_no_silence_detection /home/ari/src/hermes-agent/main/tests/tools/test_voice_mode.py:969: PytestDeprecationWarning: Module 'numpy' was found, but when imported by pytest it raised: ImportError('\n\nIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!\n\nImporting the numpy C-extensions failed. This error can happen for\nmany reasons, often due to issues with your setup or how NumPy was\ninstalled.\n\nWe have compiled some common reasons and troubleshooting tips at:\n\n https://numpy.org/devdocs/user/troubleshooting-importerror.html\n\nPlease note and check the following:\n\n * The Python version is: Python 3.12 from "/home/ari/src/hermes-agent/main/.venv/bin/python"\n * The NumPy version is: "2.4.3"\n\nand make sure that they are the versions you expect.\n\nPlease carefully study the information and documentation linked above.\nThis is unlikely to be a NumPy issue but will be caused by a bad install\nor environment on your machine.\n\nOriginal error was: libstdc++.so.6: cannot open shared object file: No such file or directory\n') In pytest 9.1 this warning will become an error by default. You can fix the underlying problem, or alternatively overwrite this behavior and silence this warning by passing exc_type=ImportError explicitly. See https://docs.pytest.org/en/stable/deprecations.html#pytest-importorskip-default-behavior-regarding-importerror np = pytest.importorskip("numpy") tests/tools/test_voice_mode.py::TestContinuousModeFlow::test_continuous_restart_on_no_speech /home/ari/src/hermes-agent/main/tests/tools/test_voice_mode.py:1055: PytestDeprecationWarning: Module 'numpy' was found, but when imported by pytest it raised: ImportError('\n\nIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!\n\nImporting the numpy C-extensions failed. This error can happen for\nmany reasons, often due to issues with your setup or how NumPy was\ninstalled.\n\nWe have compiled some common reasons and troubleshooting tips at:\n\n https://numpy.org/devdocs/user/troubleshooting-importerror.html\n\nPlease note and check the following:\n\n * The Python version is: Python 3.12 from "/home/ari/src/hermes-agent/main/.venv/bin/python"\n * The NumPy version is: "2.4.3"\n\nand make sure that they are the versions you expect.\n\nPlease carefully study the information and documentation linked above.\nThis is unlikely to be a NumPy issue but will be caused by a bad install\nor environment on your machine.\n\nOriginal error was: libstdc++.so.6: cannot open shared object file: No such file or directory\n') In pytest 9.1 this warning will become an error by default. You can fix the underlying problem, or alternatively overwrite this behavior and silence this warning by passing exc_type=ImportError explicitly. See https://docs.pytest.org/en/stable/deprecations.html#pytest-importorskip-default-behavior-regarding-importerror np = pytest.importorskip("numpy") tests/tools/test_voice_mode.py::TestContinuousModeFlow::test_recorder_reusable_after_stop /home/ari/src/hermes-agent/main/tests/tools/test_voice_mode.py:1095: PytestDeprecationWarning: Module 'numpy' was found, but when imported by pytest it raised: ImportError('\n\nIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!\n\nImporting the numpy C-extensions failed. This error can happen for\nmany reasons, often due to issues with your setup or how NumPy was\ninstalled.\n\nWe have compiled some common reasons and troubleshooting tips at:\n\n https://numpy.org/devdocs/user/troubleshooting-importerror.html\n\nPlease note and check the following:\n\n * The Python version is: Python 3.12 from "/home/ari/src/hermes-agent/main/.venv/bin/python"\n * The NumPy version is: "2.4.3"\n\nand make sure that they are the versions you expect.\n\nPlease carefully study the information and documentation linked above.\nThis is unlikely to be a NumPy issue but will be caused by a bad install\nor environment on your machine.\n\nOriginal error was: libstdc++.so.6: cannot open shared object file: No such file or directory\n') In pytest 9.1 this warning will become an error by default. You can fix the underlying problem, or alternatively overwrite this behavior and silence this warning by passing exc_type=ImportError explicitly. See https://docs.pytest.org/en/stable/deprecations.html#pytest-importorskip-default-behavior-regarding-importerror np = pytest.importorskip("numpy") tests/tools/test_voice_mode.py::TestAudioLevelIndicator::test_rms_updates_with_audio_chunks /home/ari/src/hermes-agent/main/tests/tools/test_voice_mode.py:1128: PytestDeprecationWarning: Module 'numpy' was found, but when imported by pytest it raised: ImportError('\n\nIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!\n\nImporting the numpy C-extensions failed. This error can happen for\nmany reasons, often due to issues with your setup or how NumPy was\ninstalled.\n\nWe have compiled some common reasons and troubleshooting tips at:\n\n https://numpy.org/devdocs/user/troubleshooting-importerror.html\n\nPlease note and check the following:\n\n * The Python version is: Python 3.12 from "/home/ari/src/hermes-agent/main/.venv/bin/python"\n * The NumPy version is: "2.4.3"\n\nand make sure that they are the versions you expect.\n\nPlease carefully study the information and documentation linked above.\nThis is unlikely to be a NumPy issue but will be caused by a bad install\nor environment on your machine.\n\nOriginal error was: libstdc++.so.6: cannot open shared object file: No such file or directory\n') In pytest 9.1 this warning will become an error by default. You can fix the underlying problem, or alternatively overwrite this behavior and silence this warning by passing exc_type=ImportError explicitly. See https://docs.pytest.org/en/stable/deprecations.html#pytest-importorskip-default-behavior-regarding-importerror np = pytest.importorskip("numpy") tests/tools/test_voice_mode.py::TestAudioLevelIndicator::test_peak_rms_tracks_maximum /home/ari/src/hermes-agent/main/tests/tools/test_voice_mode.py:1154: PytestDeprecationWarning: Module 'numpy' was found, but when imported by pytest it raised: ImportError('\n\nIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!\n\nImporting the numpy C-extensions failed. This error can happen for\nmany reasons, often due to issues with your setup or how NumPy was\ninstalled.\n\nWe have compiled some common reasons and troubleshooting tips at:\n\n https://numpy.org/devdocs/user/troubleshooting-importerror.html\n\nPlease note and check the following:\n\n * The Python version is: Python 3.12 from "/home/ari/src/hermes-agent/main/.venv/bin/python"\n * The NumPy version is: "2.4.3"\n\nand make sure that they are the versions you expect.\n\nPlease carefully study the information and documentation linked above.\nThis is unlikely to be a NumPy issue but will be caused by a bad install\nor environment on your machine.\n\nOriginal error was: libstdc++.so.6: cannot open shared object file: No such file or directory\n') In pytest 9.1 this warning will become an error by default. You can fix the underlying problem, or alternatively overwrite this behavior and silence this warning by passing exc_type=ImportError explicitly. See https://docs.pytest.org/en/stable/deprecations.html#pytest-importorskip-default-behavior-regarding-importerror np = pytest.importorskip("numpy") tests/tools/test_voice_mode.py::TestConfigurableSilenceParams::test_custom_threshold_and_duration /home/ari/src/hermes-agent/main/tests/tools/test_voice_mode.py:1190: PytestDeprecationWarning: Module 'numpy' was found, but when imported by pytest it raised: ImportError('\n\nIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!\n\nImporting the numpy C-extensions failed. This error can happen for\nmany reasons, often due to issues with your setup or how NumPy was\ninstalled.\n\nWe have compiled some common reasons and troubleshooting tips at:\n\n https://numpy.org/devdocs/user/troubleshooting-importerror.html\n\nPlease note and check the following:\n\n * The Python version is: Python 3.12 from "/home/ari/src/hermes-agent/main/.venv/bin/python"\n * The NumPy version is: "2.4.3"\n\nand make sure that they are the versions you expect.\n\nPlease carefully study the information and documentation linked above.\nThis is unlikely to be a NumPy issue but will be caused by a bad install\nor environment on your machine.\n\nOriginal error was: libstdc++.so.6: cannot open shared object file: No such file or directory\n') In pytest 9.1 this warning will become an error by default. You can fix the underlying problem, or alternatively overwrite this behavior and silence this warning by passing exc_type=ImportError explicitly. See https://docs.pytest.org/en/stable/deprecations.html#pytest-importorskip-default-behavior-regarding-importerror np = pytest.importorskip("numpy") -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED tests/tools/test_voice_mode.py::TestCheckVoiceRequirements::test_all_requirements_met FAILED tests/tools/test_voice_mode.py::TestCheckVoiceRequirements::test_missing_stt_provider FAILED tests/tools/test_voice_mode.py::TestTranscribeRecording::test_delegates_to_transcribe_audio FAILED tests/tools/test_voice_mode.py::TestTranscribeRecording::test_filters_whisper_hallucination FAILED tests/tools/test_voice_mode.py::TestTranscribeRecording::test_does_not_filter_real_speech FAILED tests/tools/test_voice_mode.py::TestTranscribeRecording::test_oversized_wav_is_chunked_and_stitched FAILED tests/tools/test_voice_mode.py::TestTranscribeRecording::test_oversized_wav_reports_failing_chunk ============ 7 failed, 40 passed, 15 skipped, 15 warnings in 4.16s ============= --- tests/tools/test_send_message_tool.py --- ============================= test session starts ============================== platform linux -- Python 3.12.13, pytest-9.0.2, pluggy-1.6.0 rootdir: /home/ari/src/hermes-agent/main configfile: pyproject.toml plugins: asyncio-1.3.0, anyio-4.12.1, timeout-2.4.0 asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function timeout: 30.0s timeout method: signal timeout func_only: False collected 121 items tests/tools/test_send_message_tool.py .....................F............ [ 28%] ........................................................................ [ 87%] ............... [100%] =================================== FAILURES =================================== ____ TestSendToPlatformChunking.test_send_matrix_via_adapter_sends_document ____ self = tmp_path = PosixPath('/tmp/pytest-of-ethie/pytest-43084/test_send_matrix_via_adapter_s0') def test_send_matrix_via_adapter_sends_document(self, tmp_path): file_path = tmp_path / "report.pdf" file_path.write_bytes(b"%PDF-1.4 test") calls = [] class FakeAdapter: def __init__(self, _config): self.connected = False async def connect(self): self.connected = True calls.append(("connect",)) return True async def send(self, chat_id, message, metadata=None): calls.append(("send", chat_id, message, metadata)) return SimpleNamespace(success=True, message_id="$text") async def send_document(self, chat_id, file_path, metadata=None): calls.append(("send_document", chat_id, file_path, metadata)) return SimpleNamespace(success=True, message_id="$file") async def disconnect(self): calls.append(("disconnect",)) fake_module = SimpleNamespace(MatrixAdapter=FakeAdapter) with patch.dict(sys.modules, {"gateway.platforms.matrix": fake_module}): result = asyncio.run( _send_matrix_via_adapter( SimpleNamespace(enabled=True, token="tok", extra={"homeserver": "https://matrix.example.com"}), "!room:example.com", "report attached", media_files=[(str(file_path), False)], ) ) > assert result == { "success": True, "platform": "matrix", "chat_id": "!room:example.com", "message_id": "$file", } E AssertionError: assert {'error': 'Ma...nnect failed'} == {'chat_id': '...uccess': True} E E Left contains 1 more item: E {'error': 'Matrix connect failed'} E Right contains 4 more items: E {'chat_id': '!room:example.com', E 'message_id': '$file', E 'platform': 'matrix', E 'success': True} E Use -v to get more diff tests/tools/test_send_message_tool.py:786: AssertionError ------------------------------ Captured log call ------------------------------- ERROR hermes_agent_matrix.adapter:adapter.py:661 Matrix: whoami failed — check MATRIX_ACCESS_TOKEN and MATRIX_HOMESERVER: Cannot connect to host matrix.example.com:443 ssl:default [Name or service not known] Traceback (most recent call last): File "/home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/aiohttp/connector.py", line 1562, in _create_direct_connection hosts = await self._resolve_host(host, port, traces=traces) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/aiohttp/connector.py", line 1178, in _resolve_host return await asyncio.shield(resolved_host_task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/aiohttp/connector.py", line 1209, in _resolve_host_with_throttle addrs = await self._resolver.resolve(host, port, family=self._family) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/aiohttp/resolver.py", line 40, in resolve infos = await self._loop.getaddrinfo( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/asyncio/base_events.py", line 905, in getaddrinfo return await self.run_in_executor( ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/concurrent/futures/thread.py", line 59, in run result = self.fn(*self.args, **self.kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/nix/store/3437kliwcg0aq7h30alls8mvsv6laarf-python3-3.12.13/lib/python3.12/socket.py", line 978, in getaddrinfo for res in _socket.getaddrinfo(host, port, family, type, proto, flags): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ socket.gaierror: [Errno -2] Name or service not known The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/mautrix/api.py", line 425, in request resp_data, resp = await self._send( ^^^^^^^^^^^^^^^^^ File "/home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/mautrix/api.py", line 255, in _send async with request as response: ^^^^^^^ File "/home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/aiohttp/client.py", line 1510, in __aenter__ self._resp: _RetType = await self._coro ^^^^^^^^^^^^^^^^ File "/home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/aiohttp/client.py", line 779, in _request resp = await handler(req) ^^^^^^^^^^^^^^^^^^ File "/home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/aiohttp/client.py", line 734, in _connect_and_send_request conn = await self._connector.connect( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/aiohttp/connector.py", line 672, in connect proto = await self._create_connection(req, traces, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/aiohttp/connector.py", line 1239, in _create_connection _, proto = await self._create_direct_connection(req, traces, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/aiohttp/connector.py", line 1568, in _create_direct_connection raise ClientConnectorDNSError(req.connection_key, exc) from exc aiohttp.client_exceptions.ClientConnectorDNSError: Cannot connect to host matrix.example.com:443 ssl:default [Name or service not known] The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/home/ari/src/hermes-agent/main/plugins/platforms/matrix/hermes_agent_matrix/adapter.py", line 643, in connect resp = await client.whoami() ^^^^^^^^^^^^^^^^^^^^^ File "/home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/mautrix/client/api/authentication.py", line 190, in whoami resp = await self.api.request(Method.GET, Path.v3.account.whoami) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/mautrix/api.py", line 447, in request raise MatrixConnectionError(str(e)) from e mautrix.errors.base.MatrixConnectionError: Cannot connect to host matrix.example.com:443 ssl:default [Name or service not known] =============================== warnings summary =============================== .venv/lib/python3.12/site-packages/discord/player.py:30 /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/discord/player.py:30: DeprecationWarning: 'audioop' is deprecated and slated for removal in Python 3.13 import audioop tests/tools/test_send_message_tool.py::TestSendMessageTool::test_cron_duplicate_target_is_skipped_and_explained /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). _EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0) tests/tools/test_send_message_tool.py::TestSendMessageTool::test_cron_duplicate_target_is_skipped_and_explained /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/lark_oapi/ws/client.py:67: DeprecationWarning: websockets.InvalidStatusCode is deprecated def _parse_ws_conn_exception(e: websockets.InvalidStatusCode): tests/tools/test_send_message_tool.py::TestSendMessageTool::test_cron_duplicate_target_is_skipped_and_explained /home/ari/src/hermes-agent/main/.venv/lib/python3.12/site-packages/websockets/legacy/__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions warnings.warn( # deprecated in 14.0 - 2024-11-09 -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED tests/tools/test_send_message_tool.py::TestSendToPlatformChunking::test_send_matrix_via_adapter_sends_document ================== 1 failed, 120 passed, 4 warnings in 12.99s ================== === 16 files with test failures (49 tests failed) === plugins/platforms/slack/tests/test_slack_mention.py (2 tests failed) plugins/model-providers/bedrock/tests/test_bedrock_integration.py (1 test failed) plugins/platforms/slack/tests/test_slack.py (6 tests failed) plugins/platforms/matrix/tests/test_matrix.py (12 tests failed) tests/gateway/test_voice_command.py (1 test failed) tests/gateway/test_stt_config.py (1 test failed) tests/hermes_cli/test_codex_cli_model_picker.py (1 test failed) tests/hermes_cli/test_gateway_platform_gating.py (1 test failed) tests/hermes_cli/test_web_server.py (1 test failed) tests/tools/test_managed_media_gateways.py (5 tests failed) tests/tools/test_image_generation.py (3 tests failed) tests/tools/test_local_background_child_hang.py (2 tests failed) tests/tools/test_process_registry.py (1 test failed) tests/tools/test_voice_cli_integration.py (4 tests failed) tests/tools/test_voice_mode.py (7 tests failed) tests/tools/test_send_message_tool.py (1 test failed) === 1 file where all tests passed but pytest exited non-zero (warnings-as-errors, hook failures, etc.) === plugins/platforms/feishu/tests/test_feishu_approval_buttons.py (20 passed) === 34 files where no tests ran (collection/import error, timeout before collection, etc.) === plugins/platforms/telegram/tests/test_telegram_channel_posts.py plugins/platforms/telegram/tests/test_telegram_audio_vs_voice.py plugins/platforms/telegram/tests/test_telegram_callback_auth_fail_closed.py plugins/platforms/dingtalk/tests/test_dingtalk.py plugins/platforms/telegram/tests/test_telegram_max_doc_bytes.py plugins/platforms/telegram/tests/test_telegram_forum_commands.py plugins/platforms/telegram/tests/test_telegram_conflict.py plugins/platforms/telegram/tests/test_telegram_caption_merge.py plugins/platforms/telegram/tests/test_telegram_model_picker.py plugins/platforms/telegram/tests/test_telegram_reply_quote.py plugins/platforms/telegram/tests/test_telegram_send_path_health.py plugins/platforms/telegram/tests/test_telegram_clarify_buttons.py plugins/platforms/telegram/tests/test_telegram_approval_buttons.py plugins/platforms/telegram/tests/test_telegram_slash_confirm.py plugins/platforms/telegram/tests/test_telegram_status_update.py plugins/platforms/telegram/tests/test_telegram_network_reconnect.py plugins/platforms/telegram/tests/test_telegram_text_batching.py plugins/stt/tests/test_transcription.py plugins/platforms/telegram/tests/test_telegram_mention_boundaries.py plugins/stt/tests/test_transcription_tools.py plugins/platforms/telegram/tests/test_telegram_webhook_secret.py plugins/platforms/telegram/tests/test_telegram_text_batch_perf.py plugins/platforms/telegram/tests/test_telegram_reactions.py plugins/platforms/telegram/tests/test_telegram_progress_edit_transient.py plugins/platforms/telegram/tests/test_telegram_documents.py plugins/platforms/telegram/tests/test_telegram_group_gating.py plugins/platforms/telegram/tests/test_telegram_photo_interrupts.py plugins/platforms/telegram/tests/test_telegram_reply_mode.py plugins/platforms/telegram/tests/test_telegram_network.py plugins/platforms/telegram/tests/test_telegram_noise_filter.py plugins/platforms/telegram/tests/test_telegram_thread_fallback.py plugins/platforms/telegram/tests/test_telegram_topic_mode.py plugins/platforms/telegram/tests/test_telegram_format.py tests/tools/test_vercel_sandbox_environment.py