mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2024-11-28 20:33:45 +03:00
Enable and use ruff
This commit is contained in:
parent
7fabf7da0a
commit
034bf304bb
|
@ -31,6 +31,7 @@ dev = [
|
|||
"isort~=5.12",
|
||||
"black~=23.3.0",
|
||||
"mypy~=1.3",
|
||||
"ruff~=0.0.292",
|
||||
"pytest~=7.3",
|
||||
"pytest-asyncio~=0.21",
|
||||
]
|
||||
|
@ -51,3 +52,8 @@ build-backend = "setuptools.build_meta"
|
|||
|
||||
[tool.setuptools.dynamic]
|
||||
version = {attr = "telethon.version.__version__"}
|
||||
|
||||
[tool.ruff]
|
||||
ignore = [
|
||||
"E501", # formatter takes care of lines that are too long besides documentation
|
||||
]
|
||||
|
|
|
@ -5,6 +5,5 @@ from ._impl import tl as _tl
|
|||
from ._impl.client import Client
|
||||
from ._impl.client.errors import errors
|
||||
from ._impl.mtproto import RpcError
|
||||
from .version import __version__
|
||||
|
||||
__all__ = ["_tl", "Client", "errors", "RpcError"]
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
from .bots import InlineResult, InlineResults
|
||||
from .client import Client
|
||||
from .net import Config
|
||||
|
||||
__all__ = [
|
||||
"InlineResult",
|
||||
"InlineResults",
|
||||
"Client",
|
||||
"Config",
|
||||
]
|
||||
|
|
|
@ -4,7 +4,6 @@ from typing import TYPE_CHECKING, AsyncIterator, List, Optional, Self
|
|||
|
||||
from ...tl import abcs, functions, types
|
||||
from ..types import ChatLike, InlineResult, NoPublicConstructor
|
||||
from ..utils import generate_random_id
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from .client import Client
|
||||
|
|
|
@ -42,6 +42,7 @@ from ..types import (
|
|||
Draft,
|
||||
File,
|
||||
InFileLike,
|
||||
InlineResult,
|
||||
LoginToken,
|
||||
Message,
|
||||
OutFileLike,
|
||||
|
@ -59,7 +60,7 @@ from .auth import (
|
|||
sign_in,
|
||||
sign_out,
|
||||
)
|
||||
from .bots import InlineResult, inline_query
|
||||
from .bots import inline_query
|
||||
from .chats import (
|
||||
get_admin_log,
|
||||
get_participants,
|
||||
|
@ -92,7 +93,6 @@ from .messages import (
|
|||
unpin_message,
|
||||
)
|
||||
from .net import (
|
||||
DEFAULT_DC,
|
||||
Config,
|
||||
connect,
|
||||
connected,
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import hashlib
|
||||
import math
|
||||
import mimetypes
|
||||
import urllib.parse
|
||||
from inspect import isawaitable
|
||||
|
|
|
@ -2,7 +2,7 @@ from __future__ import annotations
|
|||
|
||||
import datetime
|
||||
import sys
|
||||
from typing import TYPE_CHECKING, Dict, List, Literal, Optional, Tuple, TypeVar, Union
|
||||
from typing import TYPE_CHECKING, Dict, List, Literal, Optional, Tuple, Union
|
||||
|
||||
from ...session import PackedChat
|
||||
from ...tl import abcs, functions, types
|
||||
|
|
|
@ -12,7 +12,7 @@ from ...mtproto import Full, RpcError
|
|||
from ...mtsender import Sender
|
||||
from ...mtsender import connect as connect_without_auth
|
||||
from ...mtsender import connect_with_auth
|
||||
from ...session import DataCenter, Session
|
||||
from ...session import DataCenter
|
||||
from ...session import User as SessionUser
|
||||
from ...tl import LAYER, Request, functions, types
|
||||
from ..errors import adapt_rpc
|
||||
|
@ -154,7 +154,7 @@ async def connect(self: Client) -> None:
|
|||
except RpcError as e:
|
||||
if e.code == 401:
|
||||
self._session.user = None
|
||||
except Exception as e:
|
||||
except Exception:
|
||||
pass
|
||||
else:
|
||||
if not self._session.user:
|
||||
|
|
|
@ -130,7 +130,7 @@ async def dispatcher(client: Client) -> None:
|
|||
except asyncio.CancelledError:
|
||||
return
|
||||
except Exception as e:
|
||||
if isinstance(e, RuntimeError) and loop.is_closed:
|
||||
if isinstance(e, RuntimeError) and loop.is_closed():
|
||||
# User probably forgot to call disconnect.
|
||||
logging.warning(
|
||||
"client was not closed cleanly, make sure to call client.disconnect()! %s",
|
||||
|
|
|
@ -50,7 +50,7 @@ def resolved_peer_to_chat(resolved: abcs.contacts.ResolvedPeer) -> Chat:
|
|||
if chat := map.get(peer_id(resolved.peer)):
|
||||
return chat
|
||||
else:
|
||||
raise ValueError(f"no matching chat found in response")
|
||||
raise ValueError("no matching chat found in response")
|
||||
|
||||
|
||||
async def resolve_phone(client: Client, phone: str) -> Chat:
|
||||
|
|
|
@ -3,12 +3,12 @@ from .chat import Channel, Chat, ChatLike, Group, RestrictionReason, User
|
|||
from .dialog import Dialog
|
||||
from .draft import Draft
|
||||
from .file import File, InFileLike, OutFileLike, OutWrapper
|
||||
from .inline_result import InlineResult
|
||||
from .login_token import LoginToken
|
||||
from .message import Message
|
||||
from .meta import NoPublicConstructor
|
||||
from .participant import Participant
|
||||
from .password_token import PasswordToken
|
||||
from .inline_result import InlineResult
|
||||
from .recent_action import RecentAction
|
||||
|
||||
__all__ = [
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
from typing import Dict, List, Optional, Self
|
||||
from typing import Dict, Self
|
||||
|
||||
from ...session import PackedChat, PackedType
|
||||
from ...tl import abcs, types
|
||||
from ...tl import abcs
|
||||
from .chat import Chat
|
||||
from .meta import NoPublicConstructor
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
from typing import Dict, List, Optional, Self
|
||||
from typing import Dict, Self
|
||||
|
||||
from ...session import PackedChat, PackedType
|
||||
from ...tl import abcs, types
|
||||
from ...tl import types
|
||||
from .chat import Chat
|
||||
from .meta import NoPublicConstructor
|
||||
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import mimetypes
|
||||
import os
|
||||
from inspect import isawaitable
|
||||
from io import BufferedReader, BufferedWriter
|
||||
from mimetypes import guess_type
|
||||
from io import BufferedWriter
|
||||
from pathlib import Path
|
||||
from typing import TYPE_CHECKING, Any, Coroutine, List, Optional, Protocol, Self, Union
|
||||
|
||||
|
|
|
@ -2,11 +2,11 @@ from __future__ import annotations
|
|||
|
||||
from typing import TYPE_CHECKING, Optional, Union
|
||||
|
||||
from ...tl import abcs, functions, types
|
||||
from ..utils import generate_random_id
|
||||
from ...tl import abcs, types, functions
|
||||
from .chat import ChatLike
|
||||
from .meta import NoPublicConstructor
|
||||
from .message import Message
|
||||
from .meta import NoPublicConstructor
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ..client import Client
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
from typing import Dict, List, Optional, Self, Union
|
||||
from typing import Dict, Self, Union
|
||||
|
||||
from ...session import PackedChat, PackedType
|
||||
from ...tl import abcs, types
|
||||
from .chat import Chat
|
||||
from .meta import NoPublicConstructor
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
from typing import Dict, List, Optional, Self, Union
|
||||
from typing import Dict
|
||||
|
||||
from ...session import PackedChat, PackedType
|
||||
from ...tl import abcs, types
|
||||
from .chat import Chat
|
||||
from .meta import NoPublicConstructor
|
||||
|
|
|
@ -2,17 +2,7 @@ import itertools
|
|||
import sys
|
||||
import time
|
||||
from collections import defaultdict
|
||||
from typing import (
|
||||
Any,
|
||||
Callable,
|
||||
DefaultDict,
|
||||
Dict,
|
||||
Iterator,
|
||||
List,
|
||||
Optional,
|
||||
Union,
|
||||
cast,
|
||||
)
|
||||
from typing import DefaultDict, Dict, List, Optional, Union
|
||||
|
||||
from ..tl import abcs, types
|
||||
from .types import Channel, Chat, Group, User
|
||||
|
|
|
@ -56,11 +56,17 @@ def ige_decrypt(ciphertext: bytes, key: bytes, iv: bytes) -> bytes:
|
|||
try:
|
||||
import cryptg
|
||||
|
||||
ige_encrypt = lambda t, k, i: cryptg.encrypt_ige(
|
||||
bytes(t) if not isinstance(t, bytes) else t, k, i
|
||||
def ige_encrypt(plaintext: bytes, key: bytes, iv: bytes) -> bytes: # noqa: F811
|
||||
return cryptg.encrypt_ige(
|
||||
bytes(plaintext) if not isinstance(plaintext, bytes) else plaintext, key, iv
|
||||
)
|
||||
ige_decrypt = lambda t, k, i: cryptg.decrypt_ige(
|
||||
bytes(t) if not isinstance(t, bytes) else t, k, i
|
||||
|
||||
def ige_decrypt(ciphertext: bytes, key: bytes, iv: bytes) -> bytes: # noqa: F811
|
||||
return cryptg.decrypt_ige(
|
||||
bytes(ciphertext) if not isinstance(ciphertext, bytes) else ciphertext,
|
||||
key,
|
||||
iv,
|
||||
)
|
||||
|
||||
except ImportError:
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import base64
|
||||
from typing import Any, Dict, List, Optional, Self
|
||||
from typing import List, Optional
|
||||
|
||||
|
||||
class DataCenter:
|
||||
|
|
|
@ -6,10 +6,11 @@ from .storage import Storage
|
|||
try:
|
||||
from .sqlite import SqliteSession
|
||||
except ImportError as e:
|
||||
import_err = e
|
||||
|
||||
class SqliteSession(Storage): # type: ignore [no-redef]
|
||||
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
||||
raise e from None
|
||||
raise import_err from None
|
||||
|
||||
|
||||
__all__ = ["MemorySession", "Storage", "SqliteSession"]
|
||||
|
|
|
@ -1 +1 @@
|
|||
from ..core import *
|
||||
from ..core import * # noqa: F403
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
"""
|
||||
Classes for the various objects the library returns.
|
||||
"""
|
||||
from ._impl.client.client import Config, InlineResult
|
||||
from ._impl.client.client import Config
|
||||
from ._impl.client.types import (
|
||||
AsyncList,
|
||||
Channel,
|
||||
|
@ -11,6 +11,7 @@ from ._impl.client.types import (
|
|||
File,
|
||||
Group,
|
||||
InFileLike,
|
||||
InlineResult,
|
||||
LoginToken,
|
||||
Message,
|
||||
OutFileLike,
|
||||
|
|
|
@ -4,7 +4,6 @@ import logging
|
|||
from pytest import LogCaptureFixture, mark
|
||||
from telethon._impl.mtproto import Full
|
||||
from telethon._impl.mtsender import connect
|
||||
from telethon._impl.session import DataCenter
|
||||
from telethon._impl.tl import LAYER, abcs, functions, types
|
||||
|
||||
TELEGRAM_TEST_DC = 2, "149.154.167.40:443"
|
||||
|
|
|
@ -36,3 +36,8 @@ build-backend = "setuptools.build_meta"
|
|||
|
||||
[tool.setuptools.dynamic]
|
||||
version = {attr = "telethon_generator.__version__"}
|
||||
|
||||
[tool.ruff]
|
||||
ignore = [
|
||||
"E501", # formatter takes care of lines that are too long besides documentation
|
||||
]
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
from . import codegen, tl_parser
|
||||
from .version import __version__
|
||||
|
||||
__all__ = ["codegen", "tl_parser"]
|
||||
|
|
|
@ -94,10 +94,10 @@ def generate(fs: FakeFs, tl: ParsedTl) -> None:
|
|||
writer = fs.open(type_path)
|
||||
|
||||
if type_path not in fs:
|
||||
writer.write(f"import struct")
|
||||
writer.write(f"from typing import List, Optional, Self")
|
||||
writer.write(f"from .. import abcs")
|
||||
writer.write(f"from ..core import Reader, Serializable, serialize_bytes_to")
|
||||
writer.write("import struct")
|
||||
writer.write("from typing import List, Optional, Self")
|
||||
writer.write("from .. import abcs")
|
||||
writer.write("from ..core import Reader, Serializable, serialize_bytes_to")
|
||||
|
||||
ns = f"{typedef.namespace[0]}." if typedef.namespace else ""
|
||||
generated_type_names.add(f"{ns}{to_class_name(typedef.name)}")
|
||||
|
@ -112,8 +112,8 @@ def generate(fs: FakeFs, tl: ParsedTl) -> None:
|
|||
writer.write(f" __slots__ = ({slots})")
|
||||
|
||||
# def constructor_id()
|
||||
writer.write(f" @classmethod")
|
||||
writer.write(f" def constructor_id(_) -> int:")
|
||||
writer.write(" @classmethod")
|
||||
writer.write(" def constructor_id(_) -> int:")
|
||||
writer.write(f" return {hex(typedef.id)}")
|
||||
|
||||
# def __init__()
|
||||
|
@ -126,8 +126,8 @@ def generate(fs: FakeFs, tl: ParsedTl) -> None:
|
|||
writer.write(f" _s.{p.name} = {p.name}")
|
||||
|
||||
# def _read_from()
|
||||
writer.write(f" @classmethod")
|
||||
writer.write(f" def _read_from(cls, reader: Reader) -> Self:")
|
||||
writer.write(" @classmethod")
|
||||
writer.write(" def _read_from(cls, reader: Reader) -> Self:")
|
||||
writer.indent(2)
|
||||
generate_read(writer, typedef)
|
||||
params = ", ".join(f"{p.name}={param_value_fmt(p)}" for p in property_params)
|
||||
|
@ -135,13 +135,13 @@ def generate(fs: FakeFs, tl: ParsedTl) -> None:
|
|||
writer.dedent(2)
|
||||
|
||||
# def _write_to()
|
||||
writer.write(f" def _write_to(self, buffer: bytearray) -> None:")
|
||||
writer.write(" def _write_to(self, buffer: bytearray) -> None:")
|
||||
if typedef.params:
|
||||
writer.indent(2)
|
||||
generate_write(writer, typedef)
|
||||
writer.dedent(2)
|
||||
else:
|
||||
writer.write(f" pass")
|
||||
writer.write(" pass")
|
||||
|
||||
for functiondef in tl.functiondefs:
|
||||
if len(functiondef.namespace) >= 2:
|
||||
|
@ -158,10 +158,10 @@ def generate(fs: FakeFs, tl: ParsedTl) -> None:
|
|||
writer = fs.open(function_path)
|
||||
|
||||
if function_path not in fs:
|
||||
writer.write(f"import struct")
|
||||
writer.write(f"from typing import List, Optional, Self")
|
||||
writer.write(f"from .. import abcs")
|
||||
writer.write(f"from ..core import Request, serialize_bytes_to")
|
||||
writer.write("import struct")
|
||||
writer.write("from typing import List, Optional, Self")
|
||||
writer.write("from .. import abcs")
|
||||
writer.write("from ..core import Request, serialize_bytes_to")
|
||||
|
||||
# def name(params, ...)
|
||||
required_params = [p for p in functiondef.params if not is_computed(p.ty)]
|
||||
|
@ -182,11 +182,11 @@ def generate(fs: FakeFs, tl: ParsedTl) -> None:
|
|||
)
|
||||
|
||||
writer = fs.open(Path("layer.py"))
|
||||
writer.write(f"from . import abcs, types")
|
||||
writer.write("from . import abcs, types")
|
||||
writer.write(
|
||||
f"from .core import Serializable, Reader, deserialize_bool, deserialize_i32_list, deserialize_i64_list, deserialize_identity, single_deserializer, list_deserializer"
|
||||
"from .core import Serializable, Reader, deserialize_bool, deserialize_i32_list, deserialize_i64_list, deserialize_identity, single_deserializer, list_deserializer"
|
||||
)
|
||||
writer.write(f"from typing import cast, Tuple, Type")
|
||||
writer.write("from typing import cast, Tuple, Type")
|
||||
writer.write(f"LAYER = {tl.layer!r}")
|
||||
writer.write(
|
||||
"TYPE_MAPPING = {t.constructor_id(): t for t in cast(Tuple[Type[Serializable]], ("
|
||||
|
@ -200,4 +200,4 @@ def generate(fs: FakeFs, tl: ParsedTl) -> None:
|
|||
f" {hex(functiondef.id)}: {function_deserializer_fmt(functiondef)},"
|
||||
)
|
||||
writer.write("}")
|
||||
writer.write(f"__all__ = ['LAYER', 'TYPE_MAPPING', 'RESPONSE_MAPPING']")
|
||||
writer.write("__all__ = ['LAYER', 'TYPE_MAPPING', 'RESPONSE_MAPPING']")
|
||||
|
|
|
@ -20,13 +20,13 @@ def reader_read_fmt(ty: Type, constructor_id: int) -> Tuple[str, Optional[str]]:
|
|||
size = struct.calcsize(f"<{fmt}")
|
||||
return f"reader.read_fmt(f'<{fmt}', {size})[0]", None
|
||||
elif ty.name == "string":
|
||||
return f"str(reader.read_bytes(), 'utf-8', 'replace')", None
|
||||
return "str(reader.read_bytes(), 'utf-8', 'replace')", None
|
||||
elif ty.name == "bytes":
|
||||
return f"b'' + reader.read_bytes()", None
|
||||
return "b'' + reader.read_bytes()", None
|
||||
elif ty.name == "int128":
|
||||
return f"int.from_bytes(reader.read(16))", None
|
||||
return "int.from_bytes(reader.read(16))", None
|
||||
elif ty.name == "int256":
|
||||
return f"int.from_bytes(reader.read(32))", None
|
||||
return "int.from_bytes(reader.read(32))", None
|
||||
elif ty.bare:
|
||||
return f"{to_class_name(ty.name)}._read_from(reader)", None
|
||||
elif ty.name == "Object":
|
||||
|
@ -60,11 +60,11 @@ def generate_normal_param_read(
|
|||
)
|
||||
|
||||
if param.ty.bare:
|
||||
writer.write(f"__len = reader.read_fmt('<i', 4)[0]")
|
||||
writer.write(f"assert __len >= 0")
|
||||
writer.write("__len = reader.read_fmt('<i', 4)[0]")
|
||||
writer.write("assert __len >= 0")
|
||||
else:
|
||||
writer.write(f"__vid, __len = reader.read_fmt('<ii', 8)")
|
||||
writer.write(f"assert __vid == 0x1cb5c415 and __len >= 0")
|
||||
writer.write("__vid, __len = reader.read_fmt('<ii', 8)")
|
||||
writer.write("assert __vid == 0x1cb5c415 and __len >= 0")
|
||||
|
||||
generic = NormalParameter(ty=param.ty.generic_arg, flag=None)
|
||||
if is_trivial(generic):
|
||||
|
@ -91,7 +91,7 @@ def generate_normal_param_read(
|
|||
|
||||
if flag_check:
|
||||
writer.dedent()
|
||||
writer.write(f"else:")
|
||||
writer.write("else:")
|
||||
writer.write(f" _{name} = None")
|
||||
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@ def main() -> None:
|
|||
run("isort", ".", "-c", "--profile", "black", "--gitignore")
|
||||
or run("black", ".", "--check", "--extend-exclude", BLACK_IGNORE)
|
||||
or run("mypy", "--strict", ".")
|
||||
or run("ruff", "check", ".")
|
||||
or run("sphinx", "-M", "dummy", "client/doc", tmp_dir, "-n", "-W")
|
||||
or run("pytest", ".", "-m", "not net")
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue
Block a user