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()
|
builder.writeln()
|
||||||
|
|
||||||
for arg in args:
|
for arg in args:
|
||||||
if arg.can_be_inferred:
|
TLGenerator._write_self_assigns(builder, tlobject, arg, args)
|
||||||
# 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))
|
|
||||||
|
|
||||||
builder.end_block()
|
builder.end_block()
|
||||||
|
|
||||||
|
@ -387,6 +364,43 @@ class TLGenerator:
|
||||||
builder.writeln('return TLObject.pretty_format(self, indent=0)')
|
builder.writeln('return TLObject.pretty_format(self, indent=0)')
|
||||||
# builder.end_block() # No need to end the last block
|
# 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
|
@staticmethod
|
||||||
def write_get_input(builder, arg, get_input_code):
|
def write_get_input(builder, arg, get_input_code):
|
||||||
"""Returns "True" if the get_input_* code was written when assigning
|
"""Returns "True" if the get_input_* code was written when assigning
|
||||||
|
|
Loading…
Reference in New Issue
Block a user