mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2024-11-10 19:46:36 +03:00
Fix infering random_id lists failing for ForwardMessages
This commit is contained in:
parent
a76c31ede2
commit
3a5eab2e83
|
@ -268,30 +268,7 @@ class TLGenerator:
|
|||
builder.writeln()
|
||||
|
||||
for arg in args:
|
||||
if arg.can_be_inferred:
|
||||
# Currently the only argument that can be
|
||||
# inferred are those called 'random_id'
|
||||
if arg.name == 'random_id':
|
||||
builder.writeln(
|
||||
"self.random_id = random_id if random_id "
|
||||
"is not None else int.from_bytes("
|
||||
"os.urandom({}), signed=True, "
|
||||
"byteorder='little')"
|
||||
.format(8 if arg.type == 'long' else 4)
|
||||
)
|
||||
else:
|
||||
raise ValueError('Cannot infer a value for ', arg)
|
||||
|
||||
# Well-known cases, auto-cast it to the right type
|
||||
elif arg.type == 'InputPeer' and tlobject.is_function:
|
||||
TLGenerator.write_get_input(builder, arg, 'get_input_peer')
|
||||
elif arg.type == 'InputChannel' and tlobject.is_function:
|
||||
TLGenerator.write_get_input(builder, arg, 'get_input_channel')
|
||||
elif arg.type == 'InputUser' and tlobject.is_function:
|
||||
TLGenerator.write_get_input(builder, arg, 'get_input_user')
|
||||
|
||||
else:
|
||||
builder.writeln('self.{0} = {0}'.format(arg.name))
|
||||
TLGenerator._write_self_assigns(builder, tlobject, arg, args)
|
||||
|
||||
builder.end_block()
|
||||
|
||||
|
@ -387,6 +364,43 @@ class TLGenerator:
|
|||
builder.writeln('return TLObject.pretty_format(self, indent=0)')
|
||||
# builder.end_block() # No need to end the last block
|
||||
|
||||
@staticmethod
|
||||
def _write_self_assigns(builder, tlobject, arg, args):
|
||||
if arg.can_be_inferred:
|
||||
# Currently the only argument that can be
|
||||
# inferred are those called 'random_id'
|
||||
if arg.name == 'random_id':
|
||||
# Endianness doesn't really matter, and 'big' is shorter
|
||||
code = "int.from_bytes(os.urandom({}), 'big', signed=True)"\
|
||||
.format(8 if arg.type == 'long' else 4)
|
||||
|
||||
if arg.is_vector:
|
||||
# Currently for the case of "messages.forwardMessages"
|
||||
# Ensure we can infer the length from id:Vector<>
|
||||
if not next(a for a in args if a.name == 'id').is_vector:
|
||||
raise ValueError(
|
||||
'Cannot infer list of random ids for ', tlobject
|
||||
)
|
||||
code = '[{} for _ in range(len(id))]'.format(code)
|
||||
|
||||
builder.writeln(
|
||||
"self.random_id = random_id if random_id "
|
||||
"is not None else {}".format(code)
|
||||
)
|
||||
else:
|
||||
raise ValueError('Cannot infer a value for ', arg)
|
||||
|
||||
# Well-known cases, auto-cast it to the right type
|
||||
elif arg.type == 'InputPeer' and tlobject.is_function:
|
||||
TLGenerator.write_get_input(builder, arg, 'get_input_peer')
|
||||
elif arg.type == 'InputChannel' and tlobject.is_function:
|
||||
TLGenerator.write_get_input(builder, arg, 'get_input_channel')
|
||||
elif arg.type == 'InputUser' and tlobject.is_function:
|
||||
TLGenerator.write_get_input(builder, arg, 'get_input_user')
|
||||
|
||||
else:
|
||||
builder.writeln('self.{0} = {0}'.format(arg.name))
|
||||
|
||||
@staticmethod
|
||||
def write_get_input(builder, arg, get_input_code):
|
||||
"""Returns "True" if the get_input_* code was written when assigning
|
||||
|
|
Loading…
Reference in New Issue
Block a user