@@ -349,30 +349,35 @@ def decode_value(
349
349
NotImplementedError: If the ``value_type`` is ``reference_value``.
350
350
ValueError: If the ``value_type`` is unknown.
351
351
"""
352
- value_type = value ._pb .WhichOneof ("value_type" )
352
+ value_pb = getattr (value , "_pb" , value )
353
+ value_type = value_pb .WhichOneof ("value_type" )
353
354
354
355
if value_type == "null_value" :
355
356
return None
356
357
elif value_type == "boolean_value" :
357
- return value .boolean_value
358
+ return value_pb .boolean_value
358
359
elif value_type == "integer_value" :
359
- return value .integer_value
360
+ return value_pb .integer_value
360
361
elif value_type == "double_value" :
361
- return value .double_value
362
+ return value_pb .double_value
362
363
elif value_type == "timestamp_value" :
363
- return DatetimeWithNanoseconds .from_timestamp_pb (value . _pb .timestamp_value )
364
+ return DatetimeWithNanoseconds .from_timestamp_pb (value_pb .timestamp_value )
364
365
elif value_type == "string_value" :
365
- return value .string_value
366
+ return value_pb .string_value
366
367
elif value_type == "bytes_value" :
367
- return value .bytes_value
368
+ return value_pb .bytes_value
368
369
elif value_type == "reference_value" :
369
- return reference_value_to_document (value .reference_value , client )
370
+ return reference_value_to_document (value_pb .reference_value , client )
370
371
elif value_type == "geo_point_value" :
371
- return GeoPoint (value .geo_point_value .latitude , value .geo_point_value .longitude )
372
+ return GeoPoint (
373
+ value_pb .geo_point_value .latitude , value_pb .geo_point_value .longitude
374
+ )
372
375
elif value_type == "array_value" :
373
- return [decode_value (element , client ) for element in value .array_value .values ]
376
+ return [
377
+ decode_value (element , client ) for element in value_pb .array_value .values
378
+ ]
374
379
elif value_type == "map_value" :
375
- return decode_dict (value .map_value .fields , client )
380
+ return decode_dict (value_pb .map_value .fields , client )
376
381
else :
377
382
raise ValueError ("Unknown ``value_type``" , value_type )
378
383
@@ -391,7 +396,9 @@ def decode_dict(value_fields, client) -> dict:
391
396
str, bytes, dict, ~google.cloud.Firestore.GeoPoint]]: A dictionary
392
397
of native Python values converted from the ``value_fields``.
393
398
"""
394
- return {key : decode_value (value , client ) for key , value in value_fields .items ()}
399
+ value_fields_pb = getattr (value_fields , "_pb" , value_fields )
400
+
401
+ return {key : decode_value (value , client ) for key , value in value_fields_pb .items ()}
395
402
396
403
397
404
def get_doc_id (document_pb , expected_prefix ) -> str :
0 commit comments