From 976b14a5b8cef7ec04196f68f7bfc7fc80be7f11 Mon Sep 17 00:00:00 2001 From: Jan Pochyla Date: Wed, 28 Sep 2016 18:10:15 +0200 Subject: [PATCH] protobuf: skip None values while dumping --- src/lib/protobuf.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/lib/protobuf.py b/src/lib/protobuf.py index a81761f1..7e2ab55b 100644 --- a/src/lib/protobuf.py +++ b/src/lib/protobuf.py @@ -204,7 +204,8 @@ class MessageType: raise TypeError('Incompatible type') for tag, field in self.__fields.items(): field_type, field_flags, field_name = field - if field_name not in value.__dict__: + field_value = getattr(value, field_name, None) + if field_value is None: if field_flags & FLAG_REQUIRED: raise ValueError( 'The field with the tag %s is required but a value is missing.' % tag) @@ -214,13 +215,13 @@ class MessageType: # repeated value key = _pack_key(tag, field_type.WIRE_TYPE) # send the values sequentially - for single_value in getattr(value, field_name): + for single_value in field_value: yield from UVarintType.dump(target, key) yield from field_type.dump(target, single_value) else: # single value yield from UVarintType.dump(target, _pack_key(tag, field_type.WIRE_TYPE)) - yield from field_type.dump(target, getattr(value, field_name)) + yield from field_type.dump(target, field_value) def load(self, target, source=None): if source is None: