What is the correct way in proto3 to use HasField?
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 != '': ...