From 0e5b718a70368f656ede3a27174ef74ca324ab65 Mon Sep 17 00:00:00 2001 From: Craig Labenz Date: Tue, 25 May 2021 09:58:10 -0700 Subject: [PATCH] fix(perf): improve performance unmarshalling entities from protobuf2 (#175) Uses direct access of pb2 object when iterating over Entity.properties. This reduces the time required to hydrate query results by 50% --- google/cloud/datastore/helpers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/google/cloud/datastore/helpers.py b/google/cloud/datastore/helpers.py index c1d022e3..5627d8a3 100644 --- a/google/cloud/datastore/helpers.py +++ b/google/cloud/datastore/helpers.py @@ -138,7 +138,7 @@ def entity_from_protobuf(pb): entity_meanings = {} exclude_from_indexes = [] - for prop_name, value_pb in _property_tuples(proto_pb): + for prop_name, value_pb in _property_tuples(proto_pb._pb): value = _get_value_from_value_pb(value_pb) entity_props[prop_name] = value @@ -154,7 +154,7 @@ def entity_from_protobuf(pb): if is_list and len(value) > 0: exclude_values = set( value_pb.exclude_from_indexes - for value_pb in value_pb._pb.array_value.values + for value_pb in value_pb.array_value.values ) if len(exclude_values) != 1: raise ValueError(