Add all_extension_numbers_of_type in py reflection

pull/10216/head
Mehrdad Afshari 8 years ago
parent 03d9500ec0
commit 9ca61fd05f
  1. 25
      src/python/grpcio_reflection/grpc_reflection/v1alpha/reflection.py

@ -96,15 +96,20 @@ class ReflectionServicer(reflection_pb2.ServerReflectionServicer):
else: else:
return _file_descriptor_response(descriptor) return _file_descriptor_response(descriptor)
def _extension_numbers_of_type(fully_qualified_name): def _all_extension_numbers_of_type(self, containing_type):
# TODO(atash) We're allowed to leave this unsupported according to the try:
# protocol, but we should still eventually implement it. Hits the same issue message_descriptor = self._pool.FindMessageTypeByName(containing_type)
# as `_file_containing_extension`, however. extension_numbers = tuple(sorted(
# https://github.com/google/protobuf/issues/2248 extension.number
return reflection_pb2.ServerReflectionResponse( for extension in self._pool.FindAllExtensions(message_descriptor)))
error_response=reflection_pb2.ErrorResponse( except KeyError:
error_code=grpc.StatusCode.UNIMPLEMENTED.value[0], return _not_found_error()
error_message=grpc.StatusCode.UNIMPLMENTED.value[1].encode(),)) else:
return reflection_pb2.ServerReflectionResponse(
all_extension_numbers_response=reflection_pb2.
ExtensionNumberResponse(
base_type_name=message_descriptor.full_name,
extension_number=extension_numbers))
def _list_services(self): def _list_services(self):
return reflection_pb2.ServerReflectionResponse( return reflection_pb2.ServerReflectionResponse(
@ -125,7 +130,7 @@ class ReflectionServicer(reflection_pb2.ServerReflectionServicer):
request.file_containing_extension.containing_type, request.file_containing_extension.containing_type,
request.file_containing_extension.extension_number) request.file_containing_extension.extension_number)
elif request.HasField('all_extension_numbers_of_type'): elif request.HasField('all_extension_numbers_of_type'):
yield _all_extension_numbers_of_type( yield self._all_extension_numbers_of_type(
request.all_extension_numbers_of_type) request.all_extension_numbers_of_type)
elif request.HasField('list_services'): elif request.HasField('list_services'):
yield self._list_services() yield self._list_services()

Loading…
Cancel
Save