diff --git a/telegram_upload/client/telegram_manager_client.py b/telegram_upload/client/telegram_manager_client.py index 77ce25de..77237772 100644 --- a/telegram_upload/client/telegram_manager_client.py +++ b/telegram_upload/client/telegram_manager_client.py @@ -3,7 +3,6 @@ import os import re import sys -from distutils.version import StrictVersion from typing import Union from urllib.parse import urlparse @@ -18,7 +17,27 @@ from telegram_upload.config import SESSION_FILE from telegram_upload.exceptions import TelegramProxyError, InvalidApiFileError -if StrictVersion(telethon_version) >= StrictVersion('1.0'): + +def _version_parts(version): + match = re.match(r'\d+(?:\.\d+)*', str(version).strip()) + if match is None: + return () + return tuple(int(part) for part in match.group(0).split('.')) + + +def _is_telethon_v1_or_newer(version): + version_parts = _version_parts(version) + if not version_parts: + return False + + minimum_parts = (1, 0) + padded_length = max(len(version_parts), len(minimum_parts)) + padded_version = version_parts + (0,) * (padded_length - len(version_parts)) + padded_minimum = minimum_parts + (0,) * (padded_length - len(minimum_parts)) + return padded_version >= padded_minimum + + +if _is_telethon_v1_or_newer(telethon_version): import telethon.sync # noqa diff --git a/tests/test_client/test_telegram_manager_client.py b/tests/test_client/test_telegram_manager_client.py index c239354f..ee2133a0 100644 --- a/tests/test_client/test_telegram_manager_client.py +++ b/tests/test_client/test_telegram_manager_client.py @@ -6,8 +6,16 @@ from telethon.network import ConnectionTcpMTProxyRandomizedIntermediate from telegram_upload.client import TelegramManagerClient -from telegram_upload.client.telegram_manager_client import phone_match, parse_proxy_string, USER_MAX_FILE_SIZE, \ - BOT_USER_MAX_FILE_SIZE, PREMIUM_USER_MAX_FILE_SIZE, USER_MAX_CAPTION_LENGTH, PREMIUM_USER_MAX_CAPTION_LENGTH +from telegram_upload.client.telegram_manager_client import ( + BOT_USER_MAX_FILE_SIZE, + PREMIUM_USER_MAX_CAPTION_LENGTH, + PREMIUM_USER_MAX_FILE_SIZE, + USER_MAX_CAPTION_LENGTH, + USER_MAX_FILE_SIZE, + _is_telethon_v1_or_newer, + parse_proxy_string, + phone_match, +) from telegram_upload.config import SESSION_FILE from telegram_upload.exceptions import TelegramProxyError @@ -53,6 +61,15 @@ def test_proxy(self): ) +class TestTelethonVersion(unittest.TestCase): + def test_telethon_v1_or_newer(self): + self.assertFalse(_is_telethon_v1_or_newer('0.19.1')) + self.assertTrue(_is_telethon_v1_or_newer('1.0')) + self.assertTrue(_is_telethon_v1_or_newer('1.41.1')) + self.assertTrue(_is_telethon_v1_or_newer('1.0.0rc1')) + self.assertFalse(_is_telethon_v1_or_newer('dev')) + + class TestTelegramManagerClient(unittest.TestCase): @patch('builtins.open', mock_open(read_data=json.dumps(CONFIG_DATA))) @patch('telegram_upload.client.telegram_manager_client.TelegramUploadClient.__init__')