Rename Object to TLObject
This commit is contained in:
parent
4d97aae933
commit
d5517f4d5f
@ -53,10 +53,10 @@ def get_docstring_arg_type(t: str, is_list: bool = False, is_pyrogram_type: bool
|
||||
return "``{}``".format(t.lower())
|
||||
elif t == "true":
|
||||
return "``bool``"
|
||||
elif t == "Object" or t == "X":
|
||||
return "Any object from :obj:`pyrogram.api.types`"
|
||||
elif t == "TLObject" or t == "X":
|
||||
return "Any object from :obj:`~pyrogram.api.types`"
|
||||
elif t == "!X":
|
||||
return "Any method from :obj:`pyrogram.api.functions`"
|
||||
return "Any method from :obj:`~pyrogram.api.functions`"
|
||||
elif t.startswith("Vector"):
|
||||
return "List of " + get_docstring_arg_type(t.split("<", 1)[1][:-1], True, is_pyrogram_type)
|
||||
else:
|
||||
@ -394,7 +394,7 @@ def start():
|
||||
)
|
||||
|
||||
read_types += "\n "
|
||||
read_types += "{} = Object.read(b{}) if flags & (1 << {}) else []\n ".format(
|
||||
read_types += "{} = TLObject.read(b{}) if flags & (1 << {}) else []\n ".format(
|
||||
arg_name, ", {}".format(sub_type.title()) if sub_type in core_types else "", index
|
||||
)
|
||||
else:
|
||||
@ -403,7 +403,7 @@ def start():
|
||||
write_types += "b.write(self.{}.write())\n ".format(arg_name)
|
||||
|
||||
read_types += "\n "
|
||||
read_types += "{} = Object.read(b) if flags & (1 << {}) else None\n ".format(
|
||||
read_types += "{} = TLObject.read(b) if flags & (1 << {}) else None\n ".format(
|
||||
arg_name, index
|
||||
)
|
||||
else:
|
||||
@ -422,7 +422,7 @@ def start():
|
||||
)
|
||||
|
||||
read_types += "\n "
|
||||
read_types += "{} = Object.read(b{})\n ".format(
|
||||
read_types += "{} = TLObject.read(b{})\n ".format(
|
||||
arg_name, ", {}".format(sub_type.title()) if sub_type in core_types else ""
|
||||
)
|
||||
else:
|
||||
@ -430,7 +430,7 @@ def start():
|
||||
write_types += "b.write(self.{}.write())\n ".format(arg_name)
|
||||
|
||||
read_types += "\n "
|
||||
read_types += "{} = Object.read(b)\n ".format(arg_name)
|
||||
read_types += "{} = TLObject.read(b)\n ".format(arg_name)
|
||||
|
||||
if c.docs:
|
||||
description = c.docs.split("|")[0].split("§")[1]
|
||||
|
@ -5,7 +5,7 @@ from io import BytesIO
|
||||
from pyrogram.api.core import *
|
||||
|
||||
|
||||
class {class_name}(Object):
|
||||
class {class_name}(TLObject):
|
||||
"""{docstring_args}
|
||||
"""
|
||||
|
||||
|
@ -19,8 +19,8 @@
|
||||
from importlib import import_module
|
||||
|
||||
from .all import objects
|
||||
from .core.object import Object
|
||||
from .core.tl_object import TLObject
|
||||
|
||||
for k, v in objects.items():
|
||||
path, name = v.rsplit(".", 1)
|
||||
Object.all[k] = getattr(import_module(path), name)
|
||||
TLObject.all[k] = getattr(import_module(path), name)
|
||||
|
@ -22,7 +22,7 @@ from .gzip_packed import GzipPacked
|
||||
from .list import List
|
||||
from .message import Message
|
||||
from .msg_container import MsgContainer
|
||||
from .object import Object
|
||||
from .tl_object import TLObject
|
||||
from .primitives import (
|
||||
Bool, BoolTrue, BoolFalse, Bytes, Double,
|
||||
Int, Long, Int128, Int256, Null, String, Vector
|
||||
|
@ -18,11 +18,11 @@
|
||||
|
||||
from io import BytesIO
|
||||
|
||||
from .object import Object
|
||||
from .tl_object import TLObject
|
||||
from .primitives import Int, Long
|
||||
|
||||
|
||||
class FutureSalt(Object):
|
||||
class FutureSalt(TLObject):
|
||||
ID = 0x0949d9dc
|
||||
|
||||
__slots__ = ["valid_since", "valid_until", "salt"]
|
||||
|
@ -19,11 +19,11 @@
|
||||
from io import BytesIO
|
||||
|
||||
from . import FutureSalt
|
||||
from .object import Object
|
||||
from .tl_object import TLObject
|
||||
from .primitives import Int, Long
|
||||
|
||||
|
||||
class FutureSalts(Object):
|
||||
class FutureSalts(TLObject):
|
||||
ID = 0xae500895
|
||||
|
||||
__slots__ = ["req_msg_id", "now", "salts"]
|
||||
|
@ -19,24 +19,24 @@
|
||||
from gzip import compress, decompress
|
||||
from io import BytesIO
|
||||
|
||||
from .object import Object
|
||||
from .tl_object import TLObject
|
||||
from .primitives import Int, Bytes
|
||||
|
||||
|
||||
class GzipPacked(Object):
|
||||
class GzipPacked(TLObject):
|
||||
ID = 0x3072cfa1
|
||||
|
||||
__slots__ = ["packed_data"]
|
||||
|
||||
QUALNAME = "GzipPacked"
|
||||
|
||||
def __init__(self, packed_data: Object):
|
||||
def __init__(self, packed_data: TLObject):
|
||||
self.packed_data = packed_data
|
||||
|
||||
@staticmethod
|
||||
def read(b: BytesIO, *args) -> "GzipPacked":
|
||||
# Return the Object itself instead of a GzipPacked wrapping it
|
||||
return Object.read(
|
||||
return TLObject.read(
|
||||
BytesIO(
|
||||
decompress(
|
||||
Bytes.read(b)
|
||||
|
@ -16,13 +16,13 @@
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from .object import Object
|
||||
from .tl_object import TLObject
|
||||
|
||||
|
||||
class List(list, Object):
|
||||
class List(list, TLObject):
|
||||
__slots__ = []
|
||||
|
||||
def __repr__(self):
|
||||
return "pyrogram.api.core.List([{}])".format(
|
||||
",".join(Object.__repr__(i) for i in self)
|
||||
",".join(TLObject.__repr__(i) for i in self)
|
||||
)
|
||||
|
@ -18,18 +18,18 @@
|
||||
|
||||
from io import BytesIO
|
||||
|
||||
from .object import Object
|
||||
from .tl_object import TLObject
|
||||
from .primitives import Int, Long
|
||||
|
||||
|
||||
class Message(Object):
|
||||
class Message(TLObject):
|
||||
ID = 0x5bb8e511 # hex(crc32(b"message msg_id:long seqno:int bytes:int body:Object = Message"))
|
||||
|
||||
__slots__ = ["msg_id", "seq_no", "length", "body"]
|
||||
|
||||
QUALNAME = "Message"
|
||||
|
||||
def __init__(self, body: Object, msg_id: int, seq_no: int, length: int):
|
||||
def __init__(self, body: TLObject, msg_id: int, seq_no: int, length: int):
|
||||
self.msg_id = msg_id
|
||||
self.seq_no = seq_no
|
||||
self.length = length
|
||||
@ -42,7 +42,7 @@ class Message(Object):
|
||||
length = Int.read(b)
|
||||
body = b.read(length)
|
||||
|
||||
return Message(Object.read(BytesIO(body)), msg_id, seq_no, length)
|
||||
return Message(TLObject.read(BytesIO(body)), msg_id, seq_no, length)
|
||||
|
||||
def write(self) -> bytes:
|
||||
b = BytesIO()
|
||||
|
@ -19,11 +19,11 @@
|
||||
from io import BytesIO
|
||||
|
||||
from .message import Message
|
||||
from .object import Object
|
||||
from .tl_object import TLObject
|
||||
from .primitives import Int
|
||||
|
||||
|
||||
class MsgContainer(Object):
|
||||
class MsgContainer(TLObject):
|
||||
ID = 0x73f1f8dc
|
||||
|
||||
__slots__ = ["messages"]
|
||||
|
@ -18,10 +18,10 @@
|
||||
|
||||
from io import BytesIO
|
||||
|
||||
from ..object import Object
|
||||
from ..tl_object import TLObject
|
||||
|
||||
|
||||
class BoolFalse(Object):
|
||||
class BoolFalse(TLObject):
|
||||
ID = 0xbc799737
|
||||
value = False
|
||||
|
||||
@ -38,7 +38,7 @@ class BoolTrue(BoolFalse):
|
||||
value = True
|
||||
|
||||
|
||||
class Bool(Object):
|
||||
class Bool(TLObject):
|
||||
@classmethod
|
||||
def read(cls, b: BytesIO) -> bool:
|
||||
return int.from_bytes(b.read(4), "little") == BoolTrue.ID
|
||||
|
@ -18,10 +18,10 @@
|
||||
|
||||
from io import BytesIO
|
||||
|
||||
from ..object import Object
|
||||
from ..tl_object import TLObject
|
||||
|
||||
|
||||
class Bytes(Object):
|
||||
class Bytes(TLObject):
|
||||
@staticmethod
|
||||
def read(b: BytesIO, *args) -> bytes:
|
||||
length = int.from_bytes(b.read(1), "little")
|
||||
|
@ -19,10 +19,10 @@
|
||||
from io import BytesIO
|
||||
from struct import unpack, pack
|
||||
|
||||
from ..object import Object
|
||||
from ..tl_object import TLObject
|
||||
|
||||
|
||||
class Double(Object):
|
||||
class Double(TLObject):
|
||||
@staticmethod
|
||||
def read(b: BytesIO, *args) -> float:
|
||||
return unpack("d", b.read(8))[0]
|
||||
|
@ -18,10 +18,10 @@
|
||||
|
||||
from io import BytesIO
|
||||
|
||||
from ..object import Object
|
||||
from ..tl_object import TLObject
|
||||
|
||||
|
||||
class Int(Object):
|
||||
class Int(TLObject):
|
||||
SIZE = 4
|
||||
|
||||
@classmethod
|
||||
|
@ -18,10 +18,10 @@
|
||||
|
||||
from io import BytesIO
|
||||
|
||||
from ..object import Object
|
||||
from ..tl_object import TLObject
|
||||
|
||||
|
||||
class Null(Object):
|
||||
class Null(TLObject):
|
||||
ID = 0x56730bcc
|
||||
|
||||
@staticmethod
|
||||
|
@ -20,31 +20,31 @@ from io import BytesIO
|
||||
|
||||
from . import Int
|
||||
from ..list import List
|
||||
from ..object import Object
|
||||
from ..tl_object import TLObject
|
||||
|
||||
|
||||
class Vector(Object):
|
||||
class Vector(TLObject):
|
||||
ID = 0x1cb5c415
|
||||
|
||||
# Method added to handle the special case when a query returns a bare Vector (of Ints);
|
||||
# i.e., RpcResult body starts with 0x1cb5c415 (Vector Id) - e.g., messages.GetMessagesViews.
|
||||
@staticmethod
|
||||
def _read(b: BytesIO) -> Object or int:
|
||||
def _read(b: BytesIO) -> TLObject or int:
|
||||
try:
|
||||
return Object.read(b)
|
||||
return TLObject.read(b)
|
||||
except KeyError:
|
||||
b.seek(-4, 1)
|
||||
return Int.read(b)
|
||||
|
||||
@staticmethod
|
||||
def read(b: BytesIO, t: Object = None) -> list:
|
||||
def read(b: BytesIO, t: TLObject = None) -> list:
|
||||
return List(
|
||||
t.read(b) if t
|
||||
else Vector._read(b)
|
||||
for _ in range(Int.read(b))
|
||||
)
|
||||
|
||||
def __new__(cls, value: list, t: Object = None) -> bytes:
|
||||
def __new__(cls, value: list, t: TLObject = None) -> bytes:
|
||||
return b"".join(
|
||||
[Int(cls.ID, False), Int(len(value))]
|
||||
+ [
|
||||
|
@ -21,7 +21,7 @@ from io import BytesIO
|
||||
from json import dumps
|
||||
|
||||
|
||||
class Object:
|
||||
class TLObject:
|
||||
all = {}
|
||||
|
||||
__slots__ = []
|
||||
@ -30,13 +30,13 @@ class Object:
|
||||
|
||||
@staticmethod
|
||||
def read(b: BytesIO, *args): # TODO: Rename b -> data
|
||||
return Object.all[int.from_bytes(b.read(4), "little")].read(b, *args)
|
||||
return TLObject.all[int.from_bytes(b.read(4), "little")].read(b, *args)
|
||||
|
||||
def write(self, *args) -> bytes:
|
||||
pass
|
||||
|
||||
@staticmethod
|
||||
def default(obj: "Object"):
|
||||
def default(obj: "TLObject"):
|
||||
if isinstance(obj, bytes):
|
||||
return repr(obj)
|
||||
|
||||
@ -50,7 +50,7 @@ class Object:
|
||||
)
|
||||
|
||||
def __str__(self) -> str:
|
||||
return dumps(self, indent=4, default=Object.default, ensure_ascii=False)
|
||||
return dumps(self, indent=4, default=TLObject.default, ensure_ascii=False)
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return "pyrogram.api.{}({})".format(
|
||||
@ -62,7 +62,7 @@ class Object:
|
||||
)
|
||||
)
|
||||
|
||||
def __eq__(self, other: "Object") -> bool:
|
||||
def __eq__(self, other: "TLObject") -> bool:
|
||||
for attr in self.__slots__:
|
||||
try:
|
||||
if getattr(self, attr) != getattr(other, attr):
|
||||
@ -77,3 +77,6 @@ class Object:
|
||||
|
||||
def __getitem__(self, item):
|
||||
return getattr(self, item)
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
setattr(self, key, value)
|
@ -37,7 +37,7 @@ from threading import Thread
|
||||
from typing import Union, List
|
||||
|
||||
from pyrogram.api import functions, types
|
||||
from pyrogram.api.core import Object
|
||||
from pyrogram.api.core import TLObject
|
||||
from pyrogram.client.handlers import DisconnectHandler
|
||||
from pyrogram.client.handlers.handler import Handler
|
||||
from pyrogram.client.methods.password.utils import compute_check
|
||||
@ -998,7 +998,7 @@ class Client(Methods, BaseClient):
|
||||
|
||||
log.debug("{} stopped".format(name))
|
||||
|
||||
def send(self, data: Object, retries: int = Session.MAX_RETRIES, timeout: float = Session.WAIT_TIMEOUT):
|
||||
def send(self, data: TLObject, retries: int = Session.MAX_RETRIES, timeout: float = Session.WAIT_TIMEOUT):
|
||||
"""Send raw Telegram queries.
|
||||
|
||||
This method makes it possible to manually call every single Telegram API method in a low-level manner.
|
||||
|
@ -23,7 +23,7 @@ from io import BytesIO
|
||||
from os import urandom
|
||||
|
||||
from pyrogram.api import functions, types
|
||||
from pyrogram.api.core import Object, Long, Int
|
||||
from pyrogram.api.core import TLObject, Long, Int
|
||||
from pyrogram.connection import Connection
|
||||
from pyrogram.crypto import AES, RSA, Prime
|
||||
from .internals import MsgId
|
||||
@ -43,7 +43,7 @@ class Auth:
|
||||
self.connection = None
|
||||
|
||||
@staticmethod
|
||||
def pack(data: Object) -> bytes:
|
||||
def pack(data: TLObject) -> bytes:
|
||||
return (
|
||||
bytes(8)
|
||||
+ Long(MsgId())
|
||||
@ -54,9 +54,9 @@ class Auth:
|
||||
@staticmethod
|
||||
def unpack(b: BytesIO):
|
||||
b.seek(20) # Skip auth_key_id (8), message_id (8) and message_length (4)
|
||||
return Object.read(b)
|
||||
return TLObject.read(b)
|
||||
|
||||
def send(self, data: Object):
|
||||
def send(self, data: TLObject):
|
||||
data = self.pack(data)
|
||||
self.connection.send(data)
|
||||
response = BytesIO(self.connection.recv())
|
||||
@ -158,7 +158,7 @@ class Auth:
|
||||
answer_with_hash = AES.ige256_decrypt(encrypted_answer, tmp_aes_key, tmp_aes_iv)
|
||||
answer = answer_with_hash[20:]
|
||||
|
||||
server_dh_inner_data = Object.read(BytesIO(answer))
|
||||
server_dh_inner_data = TLObject.read(BytesIO(answer))
|
||||
|
||||
log.debug("Done decrypting answer")
|
||||
|
||||
|
@ -16,7 +16,7 @@
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from pyrogram.api.core import Message, MsgContainer, Object
|
||||
from pyrogram.api.core import Message, MsgContainer, TLObject
|
||||
from pyrogram.api.functions import Ping
|
||||
from pyrogram.api.types import MsgsAck, HttpWait
|
||||
from .msg_id import MsgId
|
||||
@ -29,7 +29,7 @@ class MsgFactory:
|
||||
def __init__(self):
|
||||
self.seq_no = SeqNo()
|
||||
|
||||
def __call__(self, body: Object) -> Message:
|
||||
def __call__(self, body: TLObject) -> Message:
|
||||
return Message(
|
||||
body,
|
||||
MsgId(),
|
||||
|
@ -30,7 +30,7 @@ import pyrogram
|
||||
from pyrogram import __copyright__, __license__, __version__
|
||||
from pyrogram.api import functions, types, core
|
||||
from pyrogram.api.all import layer
|
||||
from pyrogram.api.core import Message, Object, MsgContainer, Long, FutureSalt, Int
|
||||
from pyrogram.api.core import Message, TLObject, MsgContainer, Long, FutureSalt, Int
|
||||
from pyrogram.connection import Connection
|
||||
from pyrogram.crypto import AES, KDF
|
||||
from pyrogram.errors import RPCError, InternalServerError, AuthKeyDuplicated
|
||||
@ -391,7 +391,7 @@ class Session:
|
||||
|
||||
log.debug("RecvThread stopped")
|
||||
|
||||
def _send(self, data: Object, wait_response: bool = True, timeout: float = WAIT_TIMEOUT):
|
||||
def _send(self, data: TLObject, wait_response: bool = True, timeout: float = WAIT_TIMEOUT):
|
||||
message = self.msg_factory(data)
|
||||
msg_id = message.msg_id
|
||||
|
||||
@ -422,7 +422,7 @@ class Session:
|
||||
else:
|
||||
return result
|
||||
|
||||
def send(self, data: Object, retries: int = MAX_RETRIES, timeout: float = WAIT_TIMEOUT):
|
||||
def send(self, data: TLObject, retries: int = MAX_RETRIES, timeout: float = WAIT_TIMEOUT):
|
||||
self.is_connected.wait(self.WAIT_TIMEOUT)
|
||||
|
||||
try:
|
||||
|
Loading…
Reference in New Issue
Block a user