# Copyright 2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

DISTUTILS_USE_PEP517=hatchling
PYTHON_COMPAT=( python3_{12..13} )

inherit distutils-r1 optfeature

DESCRIPTION="Python wrapper of telegram bots API"
HOMEPAGE="https://docs.python-telegram-bot.org https://github.com/python-telegram-bot/python-telegram-bot"
SRC_URI="https://github.com/python-telegram-bot/python-telegram-bot/archive/v${PV}.tar.gz -> ${P}.tar.gz"

LICENSE="LGPL-3"
SLOT="0"
KEYWORDS="~amd64"

RDEPEND="
        >=dev-python/cachetools-5.3.3[${PYTHON_USEDEP}]
        >=dev-python/cryptography-39.0.1[${PYTHON_USEDEP}]
        >=dev-python/httpx-0.27.0[${PYTHON_USEDEP}]
        >=dev-python/tornado-6.4[${PYTHON_USEDEP}]
"
BDEPEND="
        test? (
                dev-python/beautifulsoup4[${PYTHON_USEDEP}]
                dev-python/flaky[${PYTHON_USEDEP}]
                dev-python/pytest[${PYTHON_USEDEP}]
                dev-python/pytest-asyncio[${PYTHON_USEDEP}]
                dev-python/pytz[${PYTHON_USEDEP}]
                >=dev-python/tornado-6.4[${PYTHON_USEDEP}]
        )
"

# These tests require an internet connection
EPYTEST_DESELECT=(
        tests/_files/test_animation.py::TestAnimationWithoutRequest::test_creation
        tests/_files/test_animation.py::TestAnimationWithoutRequest::test_de_json
        tests/_files/test_animation.py::TestAnimationWithoutRequest::test_expected_values
        tests/_files/test_animation.py::TestAnimationWithoutRequest::test_get_file_instance_method
        tests/_files/test_animation.py::TestAnimationWithoutRequest::test_send_animation_default_quote_parse_mode
        tests/_files/test_animation.py::TestAnimationWithoutRequest::test_send_with_animation
        tests/_files/test_animation.py::TestAnimationWithoutRequest::test_slot_behaviour
        tests/_files/test_animation.py::TestAnimationWithoutRequest::test_to_dict
        tests/_files/test_audio.py::TestAudioWithoutRequest::test_creation
        tests/_files/test_audio.py::TestAudioWithoutRequest::test_de_json
        tests/_files/test_audio.py::TestAudioWithoutRequest::test_equality
        tests/_files/test_audio.py::TestAudioWithoutRequest::test_expected_values
        tests/_files/test_audio.py::TestAudioWithoutRequest::test_get_file_instance_method
        tests/_files/test_audio.py::TestAudioWithoutRequest::test_send_audio_default_quote_parse_mode
        tests/_files/test_audio.py::TestAudioWithoutRequest::test_send_with_audio
        tests/_files/test_audio.py::TestAudioWithoutRequest::test_slot_behaviour
        tests/_files/test_audio.py::TestAudioWithoutRequest::test_to_dict
        tests/_files/test_chatphoto.py::TestChatPhotoWithoutRequest::test_de_json
        tests/_files/test_chatphoto.py::TestChatPhotoWithoutRequest::test_get_big_file_instance_method
        tests/_files/test_chatphoto.py::TestChatPhotoWithoutRequest::test_get_small_file_instance_method
        tests/_files/test_chatphoto.py::TestChatPhotoWithoutRequest::test_send_with_chat_photo
        tests/_files/test_chatphoto.py::TestChatPhotoWithoutRequest::test_slot_behaviour
        tests/_files/test_chatphoto.py::TestChatPhotoWithoutRequest::test_to_dict
        tests/_files/test_document.py::TestDocumentWithoutRequest::test_creation
        tests/_files/test_document.py::TestDocumentWithoutRequest::test_de_json
        tests/_files/test_document.py::TestDocumentWithoutRequest::test_equality
        tests/_files/test_document.py::TestDocumentWithoutRequest::test_expected_values
        tests/_files/test_document.py::TestDocumentWithoutRequest::test_get_file_instance_method
        tests/_files/test_document.py::TestDocumentWithoutRequest::test_send_document_default_quote_parse_mode
        tests/_files/test_document.py::TestDocumentWithoutRequest::test_send_with_document
        tests/_files/test_document.py::TestDocumentWithoutRequest::test_slot_behaviour
        tests/_files/test_document.py::TestDocumentWithoutRequest::test_to_dict
        tests/_files/test_inputmedia.py::TestInputMediaAnimationWithoutRequest::test_with_animation
        tests/_files/test_inputmedia.py::TestInputMediaAudioWithoutRequest::test_with_audio
        tests/_files/test_inputmedia.py::TestInputMediaDocumentWithoutRequest::test_with_document
        tests/_files/test_inputmedia.py::TestInputMediaPhotoWithoutRequest::test_with_photo
        tests/_files/test_inputmedia.py::TestInputMediaVideoWithoutRequest::test_with_video
        tests/_files/test_inputmedia.py::TestSendMediaGroupWithoutRequest::test_send_media_group_default_quote_parse_mode
        tests/_files/test_inputmedia.py::TestSendMediaGroupWithoutRequest::test_send_media_group_throws_error_with_group_caption_and_individual_captions
        tests/_files/test_photo.py::TestPhotoWithoutRequest::test_creation
        tests/_files/test_photo.py::TestPhotoWithoutRequest::test_de_json
        tests/_files/test_photo.py::TestPhotoWithoutRequest::test_equality
        tests/_files/test_photo.py::TestPhotoWithoutRequest::test_expected_values
        tests/_files/test_photo.py::TestPhotoWithoutRequest::test_get_file_instance_method
        tests/_files/test_photo.py::TestPhotoWithoutRequest::test_send_photo_default_quote_parse_mode
        tests/_files/test_photo.py::TestPhotoWithoutRequest::test_send_with_photosize
        tests/_files/test_photo.py::TestPhotoWithoutRequest::test_slot_behaviour
        tests/_files/test_photo.py::TestPhotoWithoutRequest::test_to_dict
        tests/_files/test_sticker.py::TestStickerSetWithoutRequest::test_de_json
        tests/_files/test_sticker.py::TestStickerSetWithoutRequest::test_get_file_instance_method
        tests/_files/test_sticker.py::TestStickerSetWithoutRequest::test_sticker_set_to_dict
        tests/_files/test_sticker.py::TestStickerWithoutRequest::test_creation
        tests/_files/test_sticker.py::TestStickerWithoutRequest::test_de_json
        tests/_files/test_sticker.py::TestStickerWithoutRequest::test_equality
        tests/_files/test_sticker.py::TestStickerWithoutRequest::test_expected_values
        tests/_files/test_sticker.py::TestStickerWithoutRequest::test_send_sticker_default_quote_parse_mode
        tests/_files/test_sticker.py::TestStickerWithoutRequest::test_send_with_sticker
        tests/_files/test_sticker.py::TestStickerWithoutRequest::test_slot_behaviour
        tests/_files/test_sticker.py::TestStickerWithoutRequest::test_to_dict
        tests/_files/test_video.py::TestVideoWithoutRequest::test_creation
        tests/_files/test_video.py::TestVideoWithoutRequest::test_equality
        tests/_files/test_video.py::TestVideoWithoutRequest::test_expected_values
        tests/_files/test_video.py::TestVideoWithoutRequest::test_get_file_instance_method
        tests/_files/test_video.py::TestVideoWithoutRequest::test_send_video_default_quote_parse_mode
        tests/_files/test_video.py::TestVideoWithoutRequest::test_send_with_video
        tests/_files/test_video.py::TestVideoWithoutRequest::test_slot_behaviour
        tests/_files/test_video.py::TestVideoWithoutRequest::test_to_dict
        tests/_files/test_videonote.py::TestVideoNoteWithoutRequest::test_creation
        tests/_files/test_videonote.py::TestVideoNoteWithoutRequest::test_equality
        tests/_files/test_videonote.py::TestVideoNoteWithoutRequest::test_expected_values
        tests/_files/test_videonote.py::TestVideoNoteWithoutRequest::test_get_file_instance_method
        tests/_files/test_videonote.py::TestVideoNoteWithoutRequest::test_send_video_note_default_quote_parse_mode
        tests/_files/test_videonote.py::TestVideoNoteWithoutRequest::test_send_with_video_note
        tests/_files/test_videonote.py::TestVideoNoteWithoutRequest::test_slot_behaviour
        tests/_files/test_videonote.py::TestVideoNoteWithoutRequest::test_to_dict
        tests/_files/test_voice.py::TestVoiceWithoutRequest::test_creation
        tests/_files/test_voice.py::TestVoiceWithoutRequest::test_equality
        tests/_files/test_voice.py::TestVoiceWithoutRequest::test_expected_values
        tests/_files/test_voice.py::TestVoiceWithoutRequest::test_get_file_instance_method
        tests/_files/test_voice.py::TestVoiceWithoutRequest::test_send_voice_default_quote_parse_mode
        tests/_files/test_voice.py::TestVoiceWithoutRequest::test_send_with_voice
        tests/_files/test_voice.py::TestVoiceWithoutRequest::test_slot_behaviour
        tests/_files/test_voice.py::TestVoiceWithoutRequest::test_to_dict
        tests/request/test_request.py::TestHTTPXRequestWithoutRequest::test_do_request_after_shutdown
        tests/request/test_request.py::TestHTTPXRequestWithoutRequest::test_do_request_exceptions
        tests/request/test_request.py::TestHTTPXRequestWithoutRequest::test_do_request_manual_timeouts
        tests/request/test_request.py::TestHTTPXRequestWithoutRequest::test_do_request_params_no_data
        tests/request/test_request.py::TestHTTPXRequestWithoutRequest::test_do_request_params_with_data
        tests/request/test_request.py::TestHTTPXRequestWithoutRequest::test_do_request_return_value
        tests/request/test_request.py::TestHTTPXRequestWithoutRequest::test_http_1_response
        tests/request/test_request.py::TestHTTPXRequestWithoutRequest::test_multiple_init_cycles
        tests/request/test_request.py::TestRequestWithoutRequest::test_chat_migrated
        tests/request/test_request.py::TestRequestWithoutRequest::test_error_description
        tests/request/test_request.py::TestRequestWithoutRequest::test_exceptions_in_do_request
        tests/request/test_request.py::TestRequestWithoutRequest::test_illegal_json_response
        tests/request/test_request.py::TestRequestWithoutRequest::test_replaced_unprintable_char
        tests/request/test_request.py::TestRequestWithoutRequest::test_retrieve
        tests/request/test_request.py::TestRequestWithoutRequest::test_retry_after
        tests/request/test_request.py::TestRequestWithoutRequest::test_special_errors
        tests/request/test_request.py::TestRequestWithoutRequest::test_timeout_propagation
        tests/request/test_request.py::TestRequestWithoutRequest::test_unknown_request_params
        tests/test_bot.py::TestBotWithoutRequest::test_bot_method_logging
        tests/test_bot.py::TestBotWithoutRequest::test_copy_message
        tests/test_bot.py::TestBotWithoutRequest::test_equality
        tests/test_bot.py::TestBotWithoutRequest::test_get_me_and_properties
        tests/test_bot.py::TestBotWithoutRequest::test_log_decorator
        tests/test_bot.py::TestBotWithoutRequest::test_send_message_default_quote_parse_mode
        tests/test_forum.py::TestForumTopicCreatedWithoutRequest::test_equality
        tests/test_forum.py::TestForumTopicWithoutRequest::test_de_json
        tests/test_forum.py::TestForumTopicWithoutRequest::test_equality
        tests/test_forum.py::TestForumTopicWithoutRequest::test_expected_values
        tests/test_forum.py::TestForumTopicWithoutRequest::test_slot_behaviour
        tests/test_forum.py::TestForumTopicWithoutRequest::test_to_dict
)

distutils_enable_tests pytest

# Run only the tests that don't require a connection
python_test() {
        epytest -m no_req
}

pkg_postinst() {
        optfeature "using telegram.ext.JobQueue" dev-python/APScheduler
}