Use a proper condition check when dealing with flag vectors

When reading flag vectors, non-existent vectors are being translated
to [] (empty list). When writing them, the flag condition was
strictly checking for None and an empty list [] would result in an
empty vector being serialized, which should not happen.
Related to #871.
This commit is contained in:
Dan 2022-01-11 17:24:17 +01:00
parent db9489b318
commit a6299f8401

View File

@ -408,7 +408,7 @@ def start(format: bool = False):
flag = FLAGS_RE_2.match(i[1]) flag = FLAGS_RE_2.match(i[1])
if flag: if flag:
if flag.group(2) == "true": if flag.group(2) == "true" or flag.group(2).startswith("Vector"):
write_flags.append(f"flags |= (1 << {flag.group(1)}) if self.{i[0]} else 0") write_flags.append(f"flags |= (1 << {flag.group(1)}) if self.{i[0]} else 0")
else: else:
write_flags.append(f"flags |= (1 << {flag.group(1)}) if self.{i[0]} is not None else 0") write_flags.append(f"flags |= (1 << {flag.group(1)}) if self.{i[0]} is not None else 0")
@ -441,7 +441,7 @@ def start(format: bool = False):
sub_type = arg_type.split("<")[1][:-1] sub_type = arg_type.split("<")[1][:-1]
write_types += "\n " write_types += "\n "
write_types += f"if self.{arg_name} is not None:\n " write_types += f"if self.{arg_name}:\n "
write_types += "b.write(Vector(self.{}{}))\n ".format( write_types += "b.write(Vector(self.{}{}))\n ".format(
arg_name, f", {sub_type.title()}" if sub_type in CORE_TYPES else "" arg_name, f", {sub_type.title()}" if sub_type in CORE_TYPES else ""
) )