|
17 | 17 | # You should have received a copy of the GNU Lesser General Public License |
18 | 18 | # along with Hydrogram. If not, see <http://www.gnu.org/licenses/>. |
19 | 19 |
|
| 20 | +from __future__ import annotations |
| 21 | + |
20 | 22 | import asyncio |
21 | 23 | import contextlib |
22 | 24 | import functools |
|
27 | 29 | import re |
28 | 30 | import shutil |
29 | 31 | import sys |
30 | | -from collections.abc import AsyncGenerator |
31 | 32 | from concurrent.futures.thread import ThreadPoolExecutor |
32 | 33 | from datetime import datetime, timedelta |
33 | 34 | from hashlib import sha256 |
34 | 35 | from importlib import import_module |
35 | 36 | from io import BytesIO, StringIO |
36 | 37 | from mimetypes import MimeTypes |
37 | 38 | from pathlib import Path |
38 | | -from typing import Callable, Optional, Union |
| 39 | +from typing import TYPE_CHECKING, Callable |
39 | 40 |
|
40 | 41 | import hydrogram |
41 | 42 | from hydrogram import __license__, __version__, enums, raw, utils |
|
61 | 62 | from .parser import Parser |
62 | 63 | from .session.internals import MsgId |
63 | 64 |
|
| 65 | +if TYPE_CHECKING: |
| 66 | + from collections.abc import AsyncGenerator |
| 67 | + |
64 | 68 | log = logging.getLogger(__name__) |
65 | 69 |
|
66 | 70 |
|
@@ -211,28 +215,28 @@ class Client(Methods): |
211 | 215 | def __init__( |
212 | 216 | self, |
213 | 217 | name: str, |
214 | | - api_id: Optional[Union[int, str]] = None, |
215 | | - api_hash: Optional[str] = None, |
| 218 | + api_id: int | str | None = None, |
| 219 | + api_hash: str | None = None, |
216 | 220 | app_version: str = APP_VERSION, |
217 | 221 | device_model: str = DEVICE_MODEL, |
218 | 222 | system_version: str = SYSTEM_VERSION, |
219 | 223 | lang_code: str = LANG_CODE, |
220 | 224 | ipv6: bool = False, |
221 | | - proxy: Optional[dict] = None, |
| 225 | + proxy: dict | None = None, |
222 | 226 | test_mode: bool = False, |
223 | | - bot_token: Optional[str] = None, |
224 | | - session_string: Optional[str] = None, |
225 | | - session_storage_engine: Optional[BaseStorage] = None, |
226 | | - in_memory: Optional[bool] = None, |
227 | | - phone_number: Optional[str] = None, |
228 | | - phone_code: Optional[str] = None, |
229 | | - password: Optional[str] = None, |
| 227 | + bot_token: str | None = None, |
| 228 | + session_string: str | None = None, |
| 229 | + session_storage_engine: BaseStorage | None = None, |
| 230 | + in_memory: bool | None = None, |
| 231 | + phone_number: str | None = None, |
| 232 | + phone_code: str | None = None, |
| 233 | + password: str | None = None, |
230 | 234 | workers: int = WORKERS, |
231 | 235 | workdir: str = str(WORKDIR), |
232 | | - plugins: Optional[dict] = None, |
233 | | - parse_mode: "enums.ParseMode" = enums.ParseMode.DEFAULT, |
234 | | - no_updates: Optional[bool] = None, |
235 | | - takeout: Optional[bool] = None, |
| 236 | + plugins: dict | None = None, |
| 237 | + parse_mode: enums.ParseMode = enums.ParseMode.DEFAULT, |
| 238 | + no_updates: bool | None = None, |
| 239 | + takeout: bool | None = None, |
236 | 240 | sleep_threshold: int = Session.SLEEP_THRESHOLD, |
237 | 241 | hide_password: bool = False, |
238 | 242 | max_concurrent_transmissions: int = MAX_CONCURRENT_TRANSMISSIONS, |
@@ -299,7 +303,7 @@ def __init__( |
299 | 303 |
|
300 | 304 | self.disconnect_handler = None |
301 | 305 |
|
302 | | - self.me: Optional[User] = None |
| 306 | + self.me: User | None = None |
303 | 307 |
|
304 | 308 | self.message_cache = Cache(10000) |
305 | 309 |
|
@@ -463,7 +467,7 @@ async def authorize(self) -> User: |
463 | 467 |
|
464 | 468 | return signed_up |
465 | 469 |
|
466 | | - def set_parse_mode(self, parse_mode: Optional["enums.ParseMode"]): |
| 470 | + def set_parse_mode(self, parse_mode: enums.ParseMode | None): |
467 | 471 | """Set the parse mode to be used globally by the client. |
468 | 472 |
|
469 | 473 | When setting the parse mode with this method, all other methods having a *parse_mode* parameter will follow the |
@@ -502,7 +506,7 @@ def set_parse_mode(self, parse_mode: Optional["enums.ParseMode"]): |
502 | 506 | self.parse_mode = parse_mode |
503 | 507 |
|
504 | 508 | async def fetch_peers( |
505 | | - self, peers: list[Union[raw.types.User, raw.types.Chat, raw.types.Channel]] |
| 509 | + self, peers: list[raw.types.User | raw.types.Chat | raw.types.Channel] |
506 | 510 | ) -> bool: |
507 | 511 | is_min = False |
508 | 512 | parsed_peers = [] |
@@ -884,9 +888,9 @@ async def get_file( |
884 | 888 | file_size: int = 0, |
885 | 889 | limit: int = 0, |
886 | 890 | offset: int = 0, |
887 | | - progress: Optional[Callable] = None, |
| 891 | + progress: Callable | None = None, |
888 | 892 | progress_args: tuple = (), |
889 | | - ) -> Optional[AsyncGenerator[bytes, None]]: |
| 893 | + ) -> AsyncGenerator[bytes, None] | None: |
890 | 894 | async with self.get_file_semaphore: |
891 | 895 | file_type = file_id.file_type |
892 | 896 |
|
@@ -1067,10 +1071,10 @@ async def get_file( |
1067 | 1071 | finally: |
1068 | 1072 | await session.stop() |
1069 | 1073 |
|
1070 | | - def guess_mime_type(self, filename: str) -> Optional[str]: |
| 1074 | + def guess_mime_type(self, filename: str) -> str | None: |
1071 | 1075 | return self.mimetypes.guess_type(filename)[0] |
1072 | 1076 |
|
1073 | | - def guess_extension(self, mime_type: str) -> Optional[str]: |
| 1077 | + def guess_extension(self, mime_type: str) -> str | None: |
1074 | 1078 | return self.mimetypes.guess_extension(mime_type) |
1075 | 1079 |
|
1076 | 1080 |
|
|
0 commit comments