@ -127,6 +127,9 @@ class DescriptorPool(object):
self . _service_descriptors = { }
self . _service_descriptors = { }
self . _file_descriptors = { }
self . _file_descriptors = { }
self . _toplevel_extensions = { }
self . _toplevel_extensions = { }
# TODO(jieluo): Remove _file_desc_by_toplevel_extension after
# maybe year 2020 for compatibility issue (with 3.4.1 only).
self . _file_desc_by_toplevel_extension = { }
# We store extensions in two two-level mappings: The first key is the
# We store extensions in two two-level mappings: The first key is the
# descriptor of the message being extended, the second key is the extension
# descriptor of the message being extended, the second key is the extension
# full name or its tag number.
# full name or its tag number.
@ -252,6 +255,12 @@ class DescriptorPool(object):
"""
"""
self . _AddFileDescriptor ( file_desc )
self . _AddFileDescriptor ( file_desc )
# TODO(jieluo): This is a temporary solution for FieldDescriptor.file.
# FieldDescriptor.file is added in code gen. Remove this solution after
# maybe 2020 for compatibility reason (with 3.4.1 only).
for extension in file_desc . extensions_by_name . values ( ) :
self . _file_desc_by_toplevel_extension [
extension . full_name ] = file_desc
def _AddFileDescriptor ( self , file_desc ) :
def _AddFileDescriptor ( self , file_desc ) :
""" Adds a FileDescriptor to the pool, non-recursively.
""" Adds a FileDescriptor to the pool, non-recursively.
@ -331,7 +340,7 @@ class DescriptorPool(object):
pass
pass
try :
try :
return self . _toplevel_extensions [ symbol ] . file
return self . _file_desc_by_ toplevel_extension [ symbol ]
except KeyError :
except KeyError :
pass
pass