mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2026-08-25 20:58:30 +00:00
Patched code generator and updated README.rst removing markdown leftovers
This commit is contained in:
@@ -2,6 +2,9 @@ import re
|
||||
|
||||
|
||||
class TLObject:
|
||||
""".tl core types IDs (such as vector, booleans, etc.)"""
|
||||
CORE_TYPES = (0x1cb5c415, 0xbc799737, 0x997275b5, 0x3fedd339)
|
||||
|
||||
def __init__(self, fullname, id, args, result, is_function):
|
||||
"""
|
||||
Initializes a new TLObject, given its properties.
|
||||
@@ -73,6 +76,11 @@ class TLObject:
|
||||
result=match.group(3),
|
||||
is_function=is_function)
|
||||
|
||||
def is_core_type(self):
|
||||
"""Determines whether the TLObject is a "core type"
|
||||
(and thus should be embedded in the generated code) or not"""
|
||||
return self.id in TLObject.CORE_TYPES
|
||||
|
||||
def __repr__(self):
|
||||
fullname = ('{}.{}'.format(self.namespace, self.name) if self.namespace is not None
|
||||
else self.name)
|
||||
|
||||
@@ -410,7 +410,7 @@ updateShortMessage#914fbf11 flags:# out:flags.1?true mentioned:flags.4?true medi
|
||||
updateShortChatMessage#16812688 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int from_id:int chat_id:int message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int entities:flags.7?Vector<MessageEntity> = Updates;
|
||||
updateShort#78d4dec1 update:Update date:int = Updates;
|
||||
updatesCombined#725b04c3 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq_start:int seq:int = Updates;
|
||||
updates_tg#74ae4240 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq:int = Updates;
|
||||
updates#74ae4240 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq:int = Updates;
|
||||
updateShortSentMessage#11f1331c flags:# out:flags.1?true id:int pts:int pts_count:int date:int media:flags.9?MessageMedia entities:flags.7?Vector<MessageEntity> = Updates;
|
||||
|
||||
photos.photos#8dca6aa5 photos:Vector<Photo> users:Vector<User> = photos.Photos;
|
||||
|
||||
@@ -35,9 +35,30 @@ class TLGenerator:
|
||||
os.makedirs(get_output_path('functions'), exist_ok=True)
|
||||
os.makedirs(get_output_path('types'), exist_ok=True)
|
||||
|
||||
# Store the parsed file in a tuple for iterating it more than once
|
||||
# Step 0: Store the parsed file in a tuple to avoid parsing it on each iteration
|
||||
tlobjects = tuple(TLParser.parse_file(scheme_file))
|
||||
|
||||
# Step 1: Ensure that no object has the same name as a namespace
|
||||
# We must check this because Python will complain if it sees a
|
||||
# file and a directory with the same name, which happens for example with "updates"
|
||||
namespace_directories = set()
|
||||
for tlobject in tlobjects:
|
||||
namespace_directories.add(tlobject.namespace)
|
||||
|
||||
for tlobject in tlobjects:
|
||||
if TLGenerator.get_file_name(tlobject, add_extension=False) \
|
||||
in namespace_directories:
|
||||
# If this TLObject isn't under the same directory as its name (i.e. "contacts"),
|
||||
# append "_tg" to avoid confusion between the file and the directory (i.e. "updates")
|
||||
if tlobject.namespace != tlobject.name:
|
||||
tlobject.name += '_tg'
|
||||
|
||||
# Step 2: Generate the actual code
|
||||
for tlobject in tlobjects:
|
||||
# Omit core types, these are embedded in the generated code
|
||||
if tlobject.is_core_type():
|
||||
continue
|
||||
|
||||
# Determine the output directory and create it
|
||||
out_dir = get_output_path('functions' if tlobject.is_function
|
||||
else 'types')
|
||||
@@ -168,7 +189,7 @@ class TLGenerator:
|
||||
builder.writeln("return {}".format(str(tlobject)))
|
||||
# builder.end_block() # There is no need to end the last block
|
||||
|
||||
# Once all the objects have been generated, we can now group them in a single file
|
||||
# Step 3: Once all the objects have been generated, we can now group them in a single file
|
||||
filename = os.path.join(get_output_path('all_tlobjects.py'))
|
||||
with open(filename, 'w', encoding='utf-8') as file:
|
||||
with SourceBuilder(file) as builder:
|
||||
|
||||
Reference in New Issue
Block a user