diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 49d0ec065..9466cc511 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,12 +14,14 @@ repos: hooks: - id: flake8 - repo: https://github.com/PyCQA/pylint - rev: v2.11.1 + rev: v2.12.1 hooks: - id: pylint files: ^(telegram|examples)/.*\.py$ args: - --rcfile=setup.cfg + # run pylint across multiple cpu cores to speed it up- + - --jobs=0 # See https://pylint.pycqa.org/en/latest/user_guide/run.html?#parallel-execution to know more additional_dependencies: - certifi - tornado>=6.1 diff --git a/requirements-dev.txt b/requirements-dev.txt index 4509641df..03ae811a1 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -5,7 +5,7 @@ pre-commit # Make sure that the versions specified here match the pre-commit settings! black==21.9b0 flake8==4.0.1 -pylint==2.11.1 +pylint==2.12.1 mypy==0.910 pyupgrade==2.29.0 diff --git a/telegram/_callbackquery.py b/telegram/_callbackquery.py index e2f5839fa..d3b459149 100644 --- a/telegram/_callbackquery.py +++ b/telegram/_callbackquery.py @@ -104,7 +104,7 @@ class CallbackQuery(TelegramObject): def __init__( self, - id: str, # pylint: disable=redefined-builtin + id: str, # pylint: disable=invalid-name from_user: User, chat_instance: str, message: Message = None, diff --git a/telegram/_chat.py b/telegram/_chat.py index c710a08f1..fccdac0c1 100644 --- a/telegram/_chat.py +++ b/telegram/_chat.py @@ -204,7 +204,7 @@ class Chat(TelegramObject): def __init__( self, - id: int, + id: int, # pylint: disable=invalid-name type: str, title: str = None, username: str = None, diff --git a/telegram/_inline/inlinequery.py b/telegram/_inline/inlinequery.py index 8209f0e61..0eeb78948 100644 --- a/telegram/_inline/inlinequery.py +++ b/telegram/_inline/inlinequery.py @@ -75,7 +75,7 @@ class InlineQuery(TelegramObject): def __init__( self, - id: str, # pylint: disable=redefined-builtin + id: str, # pylint: disable=redefined-builtin, invalid-name from_user: User, query: str, offset: str, diff --git a/telegram/_inline/inlinequeryresult.py b/telegram/_inline/inlinequeryresult.py index 71a4e5a69..d5df34703 100644 --- a/telegram/_inline/inlinequeryresult.py +++ b/telegram/_inline/inlinequeryresult.py @@ -48,7 +48,7 @@ class InlineQueryResult(TelegramObject): __slots__ = ('type', 'id') - def __init__(self, type: str, id: str, **_kwargs: Any): + def __init__(self, type: str, id: str, **_kwargs: Any): # pylint: disable=invalid-name # Required self.type = type self.id = str(id) # pylint: disable=invalid-name diff --git a/telegram/_payment/precheckoutquery.py b/telegram/_payment/precheckoutquery.py index 82f8a0422..06ddd51aa 100644 --- a/telegram/_payment/precheckoutquery.py +++ b/telegram/_payment/precheckoutquery.py @@ -79,7 +79,7 @@ class PreCheckoutQuery(TelegramObject): def __init__( self, - id: str, # pylint: disable=redefined-builtin + id: str, # pylint: disable=redefined-builtin, invalid-name from_user: User, currency: str, total_amount: int, diff --git a/telegram/_payment/shippingoption.py b/telegram/_payment/shippingoption.py index 596f04e1d..0d6f36196 100644 --- a/telegram/_payment/shippingoption.py +++ b/telegram/_payment/shippingoption.py @@ -50,7 +50,7 @@ class ShippingOption(TelegramObject): def __init__( self, - id: str, # pylint: disable=redefined-builtin + id: str, # pylint: disable=redefined-builtin, invalid-name title: str, prices: List['LabeledPrice'], **_kwargs: Any, diff --git a/telegram/_payment/shippingquery.py b/telegram/_payment/shippingquery.py index 7483d77a4..7d0b2f34a 100644 --- a/telegram/_payment/shippingquery.py +++ b/telegram/_payment/shippingquery.py @@ -58,7 +58,7 @@ class ShippingQuery(TelegramObject): def __init__( self, - id: str, # pylint: disable=redefined-builtin + id: str, # pylint: disable=redefined-builtin, invalid-name from_user: User, invoice_payload: str, shipping_address: ShippingAddress, diff --git a/telegram/_poll.py b/telegram/_poll.py index 115cb5ded..2ca5e3d85 100644 --- a/telegram/_poll.py +++ b/telegram/_poll.py @@ -168,7 +168,7 @@ class Poll(TelegramObject): def __init__( self, - id: str, # pylint: disable=redefined-builtin + id: str, # pylint: disable=redefined-builtin, invalid-name question: str, options: List[PollOption], total_voter_count: int, diff --git a/telegram/_user.py b/telegram/_user.py index 84938d3ae..21950fbec 100644 --- a/telegram/_user.py +++ b/telegram/_user.py @@ -110,7 +110,7 @@ class User(TelegramObject): def __init__( self, - id: int, + id: int, # pylint: disable=invalid-name first_name: str, is_bot: bool, last_name: str = None, diff --git a/tests/test_bot.py b/tests/test_bot.py index c7d2146c1..c033d90e4 100644 --- a/tests/test_bot.py +++ b/tests/test_bot.py @@ -16,12 +16,12 @@ # # You should have received a copy of the GNU Lesser Public License # along with this program. If not, see [http://www.gnu.org/licenses/]. +import datetime import inspect import logging import time import datetime as dtm from collections import defaultdict -from platform import python_implementation import pytest import pytz @@ -54,7 +54,7 @@ from telegram import ( ) from telegram.constants import ChatAction, ParseMode, InlineQueryLimit from telegram.ext import ExtBot, InvalidCallbackData -from telegram.error import BadRequest, InvalidToken, NetworkError, RetryAfter, TelegramError +from telegram.error import BadRequest, InvalidToken, NetworkError, TelegramError from telegram._utils.datetime import from_timestamp, to_timestamp from telegram._utils.defaultvalue import DefaultValue from telegram.helpers import escape_markdown @@ -470,10 +470,6 @@ class TestBot: assert message.has_protected_content @flaky(3, 1) - @pytest.mark.xfail(raises=RetryAfter) - @pytest.mark.skipif( - python_implementation() == 'PyPy', reason='Unstable on pypy for some reason' - ) def test_send_contact(self, bot, chat_id): phone_number = '+11234567890' first_name = 'Leandro' @@ -602,7 +598,7 @@ class TestBot: assert new_message.poll.id == message.poll.id assert new_message.poll.is_closed - @flaky(5, 1) + @flaky(3, 1) def test_send_close_date_default_tz(self, tz_bot, super_group_id): question = 'Is this a test?' answers = ['Yes', 'No', 'Maybe'] @@ -613,24 +609,26 @@ class TestBot: aware_close_date = dtm.datetime.now(tz=tz_bot.defaults.tzinfo) + dtm.timedelta(seconds=5) close_date = aware_close_date.replace(tzinfo=None) - message = tz_bot.send_poll( + msg = tz_bot.send_poll( # The timezone returned from this is always converted to UTC chat_id=super_group_id, question=question, options=answers, close_date=close_date, timeout=60, ) - assert message.poll.close_date == aware_close_date.replace(microsecond=0) + # Sometimes there can be a few seconds delay, so don't let the test fail due to that- + msg.poll.close_date = msg.poll.close_date.astimezone(aware_close_date.tzinfo) + assert abs(msg.poll.close_date - aware_close_date) <= datetime.timedelta(seconds=5) time.sleep(5.1) new_message = tz_bot.edit_message_reply_markup( chat_id=super_group_id, - message_id=message.message_id, + message_id=msg.message_id, reply_markup=reply_markup, timeout=60, ) - assert new_message.poll.id == message.poll.id + assert new_message.poll.id == msg.poll.id assert new_message.poll.is_closed @flaky(3, 1)