Closed
Description
Originally came up in #1329. HasField
with proto3
fails on simple / singular / non-message fields.
@nathanielmanistaatgoogle Mentioned that @haberman might be able to shine some light. Josh, what should we be doing here? The current approach isn't great:
# NOTE: As of proto3, HasField() only works for message fields, not for
# singular (non-message) fields. First try to use HasField and
# if it fails (with a ValueError) we manually consult the fields.
try:
return message_pb.HasField(property_name)
except ValueError:
all_fields = set([field.name for field in message_pb._fields])
return property_name in all_fields
Should we bother with checking "has field", e.g.
if _has_field(key_pb.partition_id, 'dataset_id'):
...
or should we instead just check Truth-iness
if key_pb.partition_id.dataset_id:
...
# OR MORE STRICT
if key_pb.partition_id.dataset_id != '':
...