aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/python/grpcio_reflection
diff options
context:
space:
mode:
Diffstat (limited to 'src/python/grpcio_reflection')
-rw-r--r--src/python/grpcio_reflection/grpc_reflection/__init__.py1
-rw-r--r--src/python/grpcio_reflection/grpc_reflection/v1alpha/__init__.py1
-rw-r--r--src/python/grpcio_reflection/grpc_reflection/v1alpha/reflection.py168
-rw-r--r--src/python/grpcio_reflection/reflection_commands.py57
-rw-r--r--src/python/grpcio_reflection/setup.py14
5 files changed, 112 insertions, 129 deletions
diff --git a/src/python/grpcio_reflection/grpc_reflection/__init__.py b/src/python/grpcio_reflection/grpc_reflection/__init__.py
index d5ad73a74a..100a624dc9 100644
--- a/src/python/grpcio_reflection/grpc_reflection/__init__.py
+++ b/src/python/grpcio_reflection/grpc_reflection/__init__.py
@@ -26,4 +26,3 @@
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
diff --git a/src/python/grpcio_reflection/grpc_reflection/v1alpha/__init__.py b/src/python/grpcio_reflection/grpc_reflection/v1alpha/__init__.py
index d5ad73a74a..100a624dc9 100644
--- a/src/python/grpcio_reflection/grpc_reflection/v1alpha/__init__.py
+++ b/src/python/grpcio_reflection/grpc_reflection/v1alpha/__init__.py
@@ -26,4 +26,3 @@
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
diff --git a/src/python/grpcio_reflection/grpc_reflection/v1alpha/reflection.py b/src/python/grpcio_reflection/grpc_reflection/v1alpha/reflection.py
index bfcbce8e04..87f28396ce 100644
--- a/src/python/grpcio_reflection/grpc_reflection/v1alpha/reflection.py
+++ b/src/python/grpcio_reflection/grpc_reflection/v1alpha/reflection.py
@@ -26,7 +26,6 @@
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
"""Reference implementation for reflection in gRPC Python."""
import threading
@@ -39,105 +38,96 @@ from grpc_reflection.v1alpha import reflection_pb2
_POOL = descriptor_pool.Default()
+
def _not_found_error():
- return reflection_pb2.ServerReflectionResponse(
- error_response=reflection_pb2.ErrorResponse(
- error_code=grpc.StatusCode.NOT_FOUND.value[0],
- error_message=grpc.StatusCode.NOT_FOUND.value[1].encode(),
- )
- )
+ return reflection_pb2.ServerReflectionResponse(
+ error_response=reflection_pb2.ErrorResponse(
+ error_code=grpc.StatusCode.NOT_FOUND.value[0],
+ error_message=grpc.StatusCode.NOT_FOUND.value[1].encode(),))
+
def _file_descriptor_response(descriptor):
- proto = descriptor_pb2.FileDescriptorProto()
- descriptor.CopyToProto(proto)
- serialized_proto = proto.SerializeToString()
- return reflection_pb2.ServerReflectionResponse(
- file_descriptor_response=reflection_pb2.FileDescriptorResponse(
- file_descriptor_proto=(serialized_proto,)
- ),
- )
+ proto = descriptor_pb2.FileDescriptorProto()
+ descriptor.CopyToProto(proto)
+ serialized_proto = proto.SerializeToString()
+ return reflection_pb2.ServerReflectionResponse(
+ file_descriptor_response=reflection_pb2.FileDescriptorResponse(
+ file_descriptor_proto=(serialized_proto,)),)
class ReflectionServicer(reflection_pb2.ServerReflectionServicer):
- """Servicer handling RPCs for service statuses."""
+ """Servicer handling RPCs for service statuses."""
- def __init__(self, service_names, pool=None):
- """Constructor.
+ def __init__(self, service_names, pool=None):
+ """Constructor.
Args:
service_names: Iterable of fully-qualified service names available.
"""
- self._service_names = list(service_names)
- self._pool = _POOL if pool is None else pool
-
- def _file_by_filename(self, filename):
- try:
- descriptor = self._pool.FindFileByName(filename)
- except KeyError:
- return _not_found_error()
- else:
- return _file_descriptor_response(descriptor)
-
- def _file_containing_symbol(self, fully_qualified_name):
- try:
- descriptor = self._pool.FindFileContainingSymbol(fully_qualified_name)
- except KeyError:
- return _not_found_error()
- else:
- return _file_descriptor_response(descriptor)
-
- def _file_containing_extension(containing_type, extension_number):
- # TODO(atash) Python protobuf currently doesn't support querying extensions.
- # https://github.com/google/protobuf/issues/2248
- return reflection_pb2.ServerReflectionResponse(
- error_response=reflection_pb2.ErrorResponse(
- error_code=grpc.StatusCode.UNIMPLEMENTED.value[0],
- error_message=grpc.StatusCode.UNIMPLMENTED.value[1].encode(),
- )
- )
-
- def _extension_numbers_of_type(fully_qualified_name):
- # TODO(atash) We're allowed to leave this unsupported according to the
- # protocol, but we should still eventually implement it. Hits the same issue
- # as `_file_containing_extension`, however.
- # https://github.com/google/protobuf/issues/2248
- return reflection_pb2.ServerReflectionResponse(
- error_response=reflection_pb2.ErrorResponse(
- error_code=grpc.StatusCode.UNIMPLEMENTED.value[0],
- error_message=grpc.StatusCode.UNIMPLMENTED.value[1].encode(),
- )
- )
+ self._service_names = list(service_names)
+ self._pool = _POOL if pool is None else pool
+
+ def _file_by_filename(self, filename):
+ try:
+ descriptor = self._pool.FindFileByName(filename)
+ except KeyError:
+ return _not_found_error()
+ else:
+ return _file_descriptor_response(descriptor)
+
+ def _file_containing_symbol(self, fully_qualified_name):
+ try:
+ descriptor = self._pool.FindFileContainingSymbol(
+ fully_qualified_name)
+ except KeyError:
+ return _not_found_error()
+ else:
+ return _file_descriptor_response(descriptor)
+
+ def _file_containing_extension(containing_type, extension_number):
+ # TODO(atash) Python protobuf currently doesn't support querying extensions.
+ # https://github.com/google/protobuf/issues/2248
+ return reflection_pb2.ServerReflectionResponse(
+ error_response=reflection_pb2.ErrorResponse(
+ error_code=grpc.StatusCode.UNIMPLEMENTED.value[0],
+ error_message=grpc.StatusCode.UNIMPLMENTED.value[1].encode(),))
+
+ def _extension_numbers_of_type(fully_qualified_name):
+ # TODO(atash) We're allowed to leave this unsupported according to the
+ # protocol, but we should still eventually implement it. Hits the same issue
+ # as `_file_containing_extension`, however.
+ # https://github.com/google/protobuf/issues/2248
+ return reflection_pb2.ServerReflectionResponse(
+ error_response=reflection_pb2.ErrorResponse(
+ error_code=grpc.StatusCode.UNIMPLEMENTED.value[0],
+ error_message=grpc.StatusCode.UNIMPLMENTED.value[1].encode(),))
- def _list_services(self):
- return reflection_pb2.ServerReflectionResponse(
- list_services_response=reflection_pb2.ListServiceResponse(
- service=[
+ def _list_services(self):
+ return reflection_pb2.ServerReflectionResponse(
+ list_services_response=reflection_pb2.ListServiceResponse(service=[
reflection_pb2.ServiceResponse(name=service_name)
for service_name in self._service_names
- ]
- )
- )
-
- def ServerReflectionInfo(self, request_iterator, context):
- for request in request_iterator:
- if request.HasField('file_by_filename'):
- yield self._file_by_filename(request.file_by_filename)
- elif request.HasField('file_containing_symbol'):
- yield self._file_containing_symbol(request.file_containing_symbol)
- elif request.HasField('file_containing_extension'):
- yield self._file_containing_extension(
- request.file_containing_extension.containing_type,
- request.file_containing_extension.extension_number)
- elif request.HasField('all_extension_numbers_of_type'):
- yield _all_extension_numbers_of_type(
- request.all_extension_numbers_of_type)
- elif request.HasField('list_services'):
- yield self._list_services()
- else:
- yield reflection_pb2.ServerReflectionResponse(
- error_response=reflection_pb2.ErrorResponse(
- error_code=grpc.StatusCode.INVALID_ARGUMENT.value[0],
- error_message=grpc.StatusCode.INVALID_ARGUMENT.value[1].encode(),
- )
- )
-
+ ]))
+
+ def ServerReflectionInfo(self, request_iterator, context):
+ for request in request_iterator:
+ if request.HasField('file_by_filename'):
+ yield self._file_by_filename(request.file_by_filename)
+ elif request.HasField('file_containing_symbol'):
+ yield self._file_containing_symbol(
+ request.file_containing_symbol)
+ elif request.HasField('file_containing_extension'):
+ yield self._file_containing_extension(
+ request.file_containing_extension.containing_type,
+ request.file_containing_extension.extension_number)
+ elif request.HasField('all_extension_numbers_of_type'):
+ yield _all_extension_numbers_of_type(
+ request.all_extension_numbers_of_type)
+ elif request.HasField('list_services'):
+ yield self._list_services()
+ else:
+ yield reflection_pb2.ServerReflectionResponse(
+ error_response=reflection_pb2.ErrorResponse(
+ error_code=grpc.StatusCode.INVALID_ARGUMENT.value[0],
+ error_message=grpc.StatusCode.INVALID_ARGUMENT.value[1]
+ .encode(),))
diff --git a/src/python/grpcio_reflection/reflection_commands.py b/src/python/grpcio_reflection/reflection_commands.py
index dee5491e0a..62237e0971 100644
--- a/src/python/grpcio_reflection/reflection_commands.py
+++ b/src/python/grpcio_reflection/reflection_commands.py
@@ -26,7 +26,6 @@
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
"""Provides distutils command classes for the GRPC Python setup process."""
import os
@@ -35,44 +34,46 @@ import shutil
import setuptools
ROOT_DIR = os.path.abspath(os.path.dirname(os.path.abspath(__file__)))
-HEALTH_PROTO = os.path.join(ROOT_DIR, '../../proto/grpc/reflection/v1alpha/reflection.proto')
+HEALTH_PROTO = os.path.join(
+ ROOT_DIR, '../../proto/grpc/reflection/v1alpha/reflection.proto')
class CopyProtoModules(setuptools.Command):
- """Command to copy proto modules from grpc/src/proto."""
+ """Command to copy proto modules from grpc/src/proto."""
- description = ''
- user_options = []
+ description = ''
+ user_options = []
- def initialize_options(self):
- pass
+ def initialize_options(self):
+ pass
- def finalize_options(self):
- pass
+ def finalize_options(self):
+ pass
- def run(self):
- if os.path.isfile(HEALTH_PROTO):
- shutil.copyfile(
- HEALTH_PROTO,
- os.path.join(ROOT_DIR, 'grpc_reflection/v1alpha/reflection.proto'))
+ def run(self):
+ if os.path.isfile(HEALTH_PROTO):
+ shutil.copyfile(
+ HEALTH_PROTO,
+ os.path.join(ROOT_DIR,
+ 'grpc_reflection/v1alpha/reflection.proto'))
class BuildPackageProtos(setuptools.Command):
- """Command to generate project *_pb2.py modules from proto files."""
+ """Command to generate project *_pb2.py modules from proto files."""
- description = 'build grpc protobuf modules'
- user_options = []
+ description = 'build grpc protobuf modules'
+ user_options = []
- def initialize_options(self):
- pass
+ def initialize_options(self):
+ pass
- def finalize_options(self):
- pass
+ def finalize_options(self):
+ pass
- def run(self):
- # due to limitations of the proto generator, we require that only *one*
- # directory is provided as an 'include' directory. We assume it's the '' key
- # to `self.distribution.package_dir` (and get a key error if it's not
- # there).
- from grpc_tools import command
- command.build_package_protos(self.distribution.package_dir[''])
+ def run(self):
+ # due to limitations of the proto generator, we require that only *one*
+ # directory is provided as an 'include' directory. We assume it's the '' key
+ # to `self.distribution.package_dir` (and get a key error if it's not
+ # there).
+ from grpc_tools import command
+ command.build_package_protos(self.distribution.package_dir[''])
diff --git a/src/python/grpcio_reflection/setup.py b/src/python/grpcio_reflection/setup.py
index cfc41f4fe7..2926923029 100644
--- a/src/python/grpcio_reflection/setup.py
+++ b/src/python/grpcio_reflection/setup.py
@@ -26,7 +26,6 @@
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
"""Setup module for the GRPC Python package's optional reflection."""
import os
@@ -41,18 +40,14 @@ os.chdir(os.path.dirname(os.path.abspath(__file__)))
import reflection_commands
import grpc_version
-PACKAGE_DIRECTORIES = {
- '': '.',
-}
+PACKAGE_DIRECTORIES = {'': '.',}
SETUP_REQUIRES = (
- 'grpcio-tools>={version}'.format(version=grpc_version.VERSION),
-)
+ 'grpcio-tools>={version}'.format(version=grpc_version.VERSION),)
INSTALL_REQUIRES = (
'protobuf>=3.0.0',
- 'grpcio>={version}'.format(version=grpc_version.VERSION),
-)
+ 'grpcio>={version}'.format(version=grpc_version.VERSION),)
COMMAND_CLASS = {
# Run preprocess from the repository *before* doing any packaging!
@@ -68,5 +63,4 @@ setuptools.setup(
packages=setuptools.find_packages('.'),
install_requires=INSTALL_REQUIRES,
setup_requires=SETUP_REQUIRES,
- cmdclass=COMMAND_CLASS
-)
+ cmdclass=COMMAND_CLASS)