common/protob: update pb2py to generate slots in messages

slots
Pavol Rusnak 4 years ago
parent 56fe5adcfc
commit 4859b23fc0
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D

@ -232,6 +232,12 @@ class Descriptor:
yield f" self.{field.name} = {field.name}"
# fmt: on
def create_fields_slots(self, fields):
# fmt: off
yield " __slots__ = ['" + "', '".join([f.name for f in fields]) + "']"
yield ""
# fmt: on
def create_fields_method(self, fields):
# fmt: off
yield " @classmethod"
@ -265,7 +271,7 @@ class Descriptor:
yield " }"
# fmt: on
def process_message(self, message):
def process_message(self, message, slots):
logging.debug("Processing message {}".format(message.name))
msg_id = self.message_types.get(message.name)
@ -302,6 +308,8 @@ class Descriptor:
yield ""
yield from self.create_init_method(fields)
yield ""
if slots:
yield from self.create_fields_slots(fields)
yield from self.create_fields_method(fields)
if not fields and not msg_id:
@ -331,9 +339,9 @@ class Descriptor:
self.enum_types[enum.name][value.name] = value.number
yield f"{name} = {value.number} # type: Literal[{value.number}]"
def process_messages(self, messages):
def process_messages(self, messages, slots):
for message in sorted(messages, key=lambda m: m.name):
self.write_to_file(message.name, self.process_message(message))
self.write_to_file(message.name, self.process_message(message, slots))
def process_enums(self, enums):
for enum in sorted(enums, key=lambda e: e.name):
@ -358,10 +366,10 @@ class Descriptor:
for enum in sorted(self.enums, key=lambda m: m.name):
init_py.write("from . import {}\n".format(enum.name))
def write_classes(self, out_dir, init_py=True):
def write_classes(self, out_dir, init_py=True, slots=False):
self.out_dir = out_dir
self.process_enums(self.enums)
self.process_messages(self.messages)
self.process_messages(self.messages, slots)
if init_py:
self.write_init_py()
@ -373,6 +381,7 @@ if __name__ == "__main__":
parser.add_argument("-o", "--out-dir", help="Directory for generated source code")
parser.add_argument("-P", "--protobuf-module", default="protobuf", help="Name of protobuf module")
parser.add_argument("-l", "--no-init-py", action="store_true", help="Do not generate __init__.py with list of modules")
parser.add_argument("-s", "--use-slots", action="store_true", help="Use __slots__")
parser.add_argument("--message-type", default="MessageType", help="Name of enum with message IDs")
parser.add_argument("-I", "--protoc-include", action="append", help="protoc include path")
parser.add_argument("-v", "--verbose", action="store_true", help="Print debug messages")
@ -387,7 +396,7 @@ if __name__ == "__main__":
descriptor = Descriptor(descriptor_proto, args.message_type, args.protobuf_module)
with tempfile.TemporaryDirectory() as tmpdir:
descriptor.write_classes(tmpdir, not args.no_init_py)
descriptor.write_classes(tmpdir, not args.no_init_py, args.use_slots)
for filename in os.listdir(args.out_dir):
pathname = os.path.join(args.out_dir, filename)

@ -113,7 +113,7 @@ else
func=do_rebuild
fi
$func core/src/trezor/messages "$CORE_PROTOBUF_SOURCES" "$CORE_MESSAGES_IGNORE" TRUE --no-init-py
$func core/src/trezor/messages "$CORE_PROTOBUF_SOURCES" "$CORE_MESSAGES_IGNORE" TRUE --no-init-py --use-slots
$func python/src/trezorlib/messages "$PYTHON_PROTOBUF_SOURCES" "$PYTHON_MESSAGES_IGNORE" FALSE -P ..protobuf
exit $RETURN

Loading…
Cancel
Save