From ce48c9752eaeddf8981b57db486ee6f4198bf945 Mon Sep 17 00:00:00 2001 From: Lonami Exo Date: Sat, 30 Sep 2017 19:47:19 +0200 Subject: [PATCH] Assert flag params with same flag index are all set/unset --- telethon_generator/tl_generator.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/telethon_generator/tl_generator.py b/telethon_generator/tl_generator.py index 7b1924fd..1ee0831a 100644 --- a/telethon_generator/tl_generator.py +++ b/telethon_generator/tl_generator.py @@ -301,6 +301,26 @@ class TLGenerator: # Write the .to_bytes() function builder.writeln('def to_bytes(self):') + + # Some objects require more than one flag parameter to be set + # at the same time. In this case, add an assertion. + repeated_args = defaultdict(list) + for arg in tlobject.args: + if arg.is_flag: + repeated_args[arg.flag_index].append(arg) + + for args in repeated_args.values(): + if len(args) > 1: + cnd1 = ('self.{} is None'.format(a.name) for a in args) + cnd2 = ('self.{} is not None'.format(a.name) for a in args) + builder.writeln( + "assert ({}) or ({}), '{} parameters must all " + "be None or neither be None'".format( + ' and '.join(cnd1), ' and '.join(cnd2), + ', '.join(a.name for a in args) + ) + ) + builder.writeln("return b''.join((") builder.current_indent += 1