mirror of https://github.com/grpc/grpc.git
parent
30cc99d42c
commit
f527cfbbac
9 changed files with 192 additions and 212 deletions
@ -0,0 +1,25 @@ |
|||||||
|
# Copyright 2019 The gRPC Authors |
||||||
|
# |
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
# you may not use this file except in compliance with the License. |
||||||
|
# You may obtain a copy of the License at |
||||||
|
# |
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
# |
||||||
|
# Unless required by applicable law or agreed to in writing, software |
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
# See the License for the specific language governing permissions and |
||||||
|
# limitations under the License. |
||||||
|
|
||||||
|
load("@grpc_python_dependencies//:requirements.bzl", "requirement") |
||||||
|
load("@org_pubref_rules_protobuf//python:rules.bzl", "py_proto_library") |
||||||
|
|
||||||
|
package(default_visibility = ["//visibility:public"]) |
||||||
|
|
||||||
|
py_proto_library( |
||||||
|
name = "py_helloworld_proto", |
||||||
|
protos = ["helloworld.proto",], |
||||||
|
with_grpc = True, |
||||||
|
deps = [requirement('protobuf'),], |
||||||
|
) |
@ -0,0 +1,54 @@ |
|||||||
|
# Copyright 2019 The gRPC Authors |
||||||
|
# |
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
# you may not use this file except in compliance with the License. |
||||||
|
# You may obtain a copy of the License at |
||||||
|
# |
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
# |
||||||
|
# Unless required by applicable law or agreed to in writing, software |
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
# See the License for the specific language governing permissions and |
||||||
|
# limitations under the License. |
||||||
|
|
||||||
|
load("@grpc_python_dependencies//:requirements.bzl", "requirement") |
||||||
|
load("@org_pubref_rules_protobuf//python:rules.bzl", "py_proto_library") |
||||||
|
|
||||||
|
py_library( |
||||||
|
name = "client", |
||||||
|
testonly = 1, |
||||||
|
srcs = ["client.py"], |
||||||
|
deps = [ |
||||||
|
"//src/python/grpcio/grpc:grpcio", |
||||||
|
"//src/python/grpcio_status/grpc_status:grpc_status", |
||||||
|
"//examples/protos:py_helloworld_proto", |
||||||
|
requirement('googleapis-common-protos'), |
||||||
|
], |
||||||
|
) |
||||||
|
|
||||||
|
py_library( |
||||||
|
name = "server", |
||||||
|
testonly = 1, |
||||||
|
srcs = ["server.py"], |
||||||
|
deps = [ |
||||||
|
"//src/python/grpcio/grpc:grpcio", |
||||||
|
"//src/python/grpcio_status/grpc_status:grpc_status", |
||||||
|
"//examples/protos:py_helloworld_proto", |
||||||
|
] + select({ |
||||||
|
"//conditions:default": [requirement("futures")], |
||||||
|
"//:python3": [], |
||||||
|
}), |
||||||
|
) |
||||||
|
|
||||||
|
py_test( |
||||||
|
name = "test/_error_handling_example_test", |
||||||
|
srcs = ["test/_error_handling_example_test.py"], |
||||||
|
data = [ |
||||||
|
":client", |
||||||
|
":server", |
||||||
|
"//src/python/grpcio_tests/tests:bazel_namespace_package_hack", |
||||||
|
], |
||||||
|
size = "small", |
||||||
|
imports = ["../../../src/python/grpcio_status",], |
||||||
|
) |
@ -1,134 +0,0 @@ |
|||||||
# Generated by the protocol buffer compiler. DO NOT EDIT! |
|
||||||
# source: helloworld.proto |
|
||||||
|
|
||||||
import sys |
|
||||||
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) |
|
||||||
from google.protobuf import descriptor as _descriptor |
|
||||||
from google.protobuf import message as _message |
|
||||||
from google.protobuf import reflection as _reflection |
|
||||||
from google.protobuf import symbol_database as _symbol_database |
|
||||||
from google.protobuf import descriptor_pb2 |
|
||||||
# @@protoc_insertion_point(imports) |
|
||||||
|
|
||||||
_sym_db = _symbol_database.Default() |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTOR = _descriptor.FileDescriptor( |
|
||||||
name='helloworld.proto', |
|
||||||
package='helloworld', |
|
||||||
syntax='proto3', |
|
||||||
serialized_pb=_b('\n\x10helloworld.proto\x12\nhelloworld\"\x1c\n\x0cHelloRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x1d\n\nHelloReply\x12\x0f\n\x07message\x18\x01 \x01(\t2I\n\x07Greeter\x12>\n\x08SayHello\x12\x18.helloworld.HelloRequest\x1a\x16.helloworld.HelloReply\"\x00\x42\x36\n\x1bio.grpc.examples.helloworldB\x0fHelloWorldProtoP\x01\xa2\x02\x03HLWb\x06proto3') |
|
||||||
) |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_HELLOREQUEST = _descriptor.Descriptor( |
|
||||||
name='HelloRequest', |
|
||||||
full_name='helloworld.HelloRequest', |
|
||||||
filename=None, |
|
||||||
file=DESCRIPTOR, |
|
||||||
containing_type=None, |
|
||||||
fields=[ |
|
||||||
_descriptor.FieldDescriptor( |
|
||||||
name='name', full_name='helloworld.HelloRequest.name', index=0, |
|
||||||
number=1, type=9, cpp_type=9, label=1, |
|
||||||
has_default_value=False, default_value=_b("").decode('utf-8'), |
|
||||||
message_type=None, enum_type=None, containing_type=None, |
|
||||||
is_extension=False, extension_scope=None, |
|
||||||
options=None), |
|
||||||
], |
|
||||||
extensions=[ |
|
||||||
], |
|
||||||
nested_types=[], |
|
||||||
enum_types=[ |
|
||||||
], |
|
||||||
options=None, |
|
||||||
is_extendable=False, |
|
||||||
syntax='proto3', |
|
||||||
extension_ranges=[], |
|
||||||
oneofs=[ |
|
||||||
], |
|
||||||
serialized_start=32, |
|
||||||
serialized_end=60, |
|
||||||
) |
|
||||||
|
|
||||||
|
|
||||||
_HELLOREPLY = _descriptor.Descriptor( |
|
||||||
name='HelloReply', |
|
||||||
full_name='helloworld.HelloReply', |
|
||||||
filename=None, |
|
||||||
file=DESCRIPTOR, |
|
||||||
containing_type=None, |
|
||||||
fields=[ |
|
||||||
_descriptor.FieldDescriptor( |
|
||||||
name='message', full_name='helloworld.HelloReply.message', index=0, |
|
||||||
number=1, type=9, cpp_type=9, label=1, |
|
||||||
has_default_value=False, default_value=_b("").decode('utf-8'), |
|
||||||
message_type=None, enum_type=None, containing_type=None, |
|
||||||
is_extension=False, extension_scope=None, |
|
||||||
options=None), |
|
||||||
], |
|
||||||
extensions=[ |
|
||||||
], |
|
||||||
nested_types=[], |
|
||||||
enum_types=[ |
|
||||||
], |
|
||||||
options=None, |
|
||||||
is_extendable=False, |
|
||||||
syntax='proto3', |
|
||||||
extension_ranges=[], |
|
||||||
oneofs=[ |
|
||||||
], |
|
||||||
serialized_start=62, |
|
||||||
serialized_end=91, |
|
||||||
) |
|
||||||
|
|
||||||
DESCRIPTOR.message_types_by_name['HelloRequest'] = _HELLOREQUEST |
|
||||||
DESCRIPTOR.message_types_by_name['HelloReply'] = _HELLOREPLY |
|
||||||
_sym_db.RegisterFileDescriptor(DESCRIPTOR) |
|
||||||
|
|
||||||
HelloRequest = _reflection.GeneratedProtocolMessageType('HelloRequest', (_message.Message,), dict( |
|
||||||
DESCRIPTOR = _HELLOREQUEST, |
|
||||||
__module__ = 'helloworld_pb2' |
|
||||||
# @@protoc_insertion_point(class_scope:helloworld.HelloRequest) |
|
||||||
)) |
|
||||||
_sym_db.RegisterMessage(HelloRequest) |
|
||||||
|
|
||||||
HelloReply = _reflection.GeneratedProtocolMessageType('HelloReply', (_message.Message,), dict( |
|
||||||
DESCRIPTOR = _HELLOREPLY, |
|
||||||
__module__ = 'helloworld_pb2' |
|
||||||
# @@protoc_insertion_point(class_scope:helloworld.HelloReply) |
|
||||||
)) |
|
||||||
_sym_db.RegisterMessage(HelloReply) |
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTOR.has_options = True |
|
||||||
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\033io.grpc.examples.helloworldB\017HelloWorldProtoP\001\242\002\003HLW')) |
|
||||||
|
|
||||||
_GREETER = _descriptor.ServiceDescriptor( |
|
||||||
name='Greeter', |
|
||||||
full_name='helloworld.Greeter', |
|
||||||
file=DESCRIPTOR, |
|
||||||
index=0, |
|
||||||
options=None, |
|
||||||
serialized_start=93, |
|
||||||
serialized_end=166, |
|
||||||
methods=[ |
|
||||||
_descriptor.MethodDescriptor( |
|
||||||
name='SayHello', |
|
||||||
full_name='helloworld.Greeter.SayHello', |
|
||||||
index=0, |
|
||||||
containing_service=None, |
|
||||||
input_type=_HELLOREQUEST, |
|
||||||
output_type=_HELLOREPLY, |
|
||||||
options=None, |
|
||||||
), |
|
||||||
]) |
|
||||||
_sym_db.RegisterServiceDescriptor(_GREETER) |
|
||||||
|
|
||||||
DESCRIPTOR.services_by_name['Greeter'] = _GREETER |
|
||||||
|
|
||||||
# @@protoc_insertion_point(module_scope) |
|
@ -1,46 +0,0 @@ |
|||||||
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! |
|
||||||
import grpc |
|
||||||
|
|
||||||
import helloworld_pb2 as helloworld__pb2 |
|
||||||
|
|
||||||
|
|
||||||
class GreeterStub(object): |
|
||||||
"""The greeting service definition. |
|
||||||
""" |
|
||||||
|
|
||||||
def __init__(self, channel): |
|
||||||
"""Constructor. |
|
||||||
|
|
||||||
Args: |
|
||||||
channel: A grpc.Channel. |
|
||||||
""" |
|
||||||
self.SayHello = channel.unary_unary( |
|
||||||
'/helloworld.Greeter/SayHello', |
|
||||||
request_serializer=helloworld__pb2.HelloRequest.SerializeToString, |
|
||||||
response_deserializer=helloworld__pb2.HelloReply.FromString, |
|
||||||
) |
|
||||||
|
|
||||||
|
|
||||||
class GreeterServicer(object): |
|
||||||
"""The greeting service definition. |
|
||||||
""" |
|
||||||
|
|
||||||
def SayHello(self, request, context): |
|
||||||
"""Sends a greeting |
|
||||||
""" |
|
||||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED) |
|
||||||
context.set_details('Method not implemented!') |
|
||||||
raise NotImplementedError('Method not implemented!') |
|
||||||
|
|
||||||
|
|
||||||
def add_GreeterServicer_to_server(servicer, server): |
|
||||||
rpc_method_handlers = { |
|
||||||
'SayHello': grpc.unary_unary_rpc_method_handler( |
|
||||||
servicer.SayHello, |
|
||||||
request_deserializer=helloworld__pb2.HelloRequest.FromString, |
|
||||||
response_serializer=helloworld__pb2.HelloReply.SerializeToString, |
|
||||||
), |
|
||||||
} |
|
||||||
generic_handler = grpc.method_handlers_generic_handler( |
|
||||||
'helloworld.Greeter', rpc_method_handlers) |
|
||||||
server.add_generic_rpc_handlers((generic_handler,)) |
|
@ -0,0 +1,54 @@ |
|||||||
|
# Copyright 2019 The gRPC Authors |
||||||
|
# |
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
# you may not use this file except in compliance with the License. |
||||||
|
# You may obtain a copy of the License at |
||||||
|
# |
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
# |
||||||
|
# Unless required by applicable law or agreed to in writing, software |
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
# See the License for the specific language governing permissions and |
||||||
|
# limitations under the License. |
||||||
|
"""Tests of the error handling example.""" |
||||||
|
|
||||||
|
import unittest |
||||||
|
import logging |
||||||
|
|
||||||
|
import grpc |
||||||
|
|
||||||
|
from examples.protos import helloworld_pb2_grpc |
||||||
|
from examples.python.errors import client as error_handling_client |
||||||
|
from examples.python.errors import server as error_handling_server |
||||||
|
|
||||||
|
# NOTE(lidiz) This module only exists in Bazel BUILD file, for more details |
||||||
|
# please refer to comments in the "bazel_namespace_package_hack" module. |
||||||
|
try: |
||||||
|
from tests import bazel_namespace_package_hack |
||||||
|
bazel_namespace_package_hack.sys_path_to_site_dir_hack() |
||||||
|
except ImportError: |
||||||
|
pass |
||||||
|
|
||||||
|
|
||||||
|
class ErrorHandlingExampleTest(unittest.TestCase): |
||||||
|
|
||||||
|
def setUp(self): |
||||||
|
self._server, port = error_handling_server.create_server('[::]:0') |
||||||
|
self._server.start() |
||||||
|
self._channel = grpc.insecure_channel('localhost:%d' % port) |
||||||
|
|
||||||
|
def tearDown(self): |
||||||
|
self._channel.close() |
||||||
|
self._server.stop(None) |
||||||
|
|
||||||
|
def test_error_handling_example(self): |
||||||
|
stub = helloworld_pb2_grpc.GreeterStub(self._channel) |
||||||
|
error_handling_client.process(stub) |
||||||
|
error_handling_client.process(stub) |
||||||
|
# No unhandled exception raised, test passed! |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
logging.basicConfig() |
||||||
|
unittest.main(verbosity=2) |
Loading…
Reference in new issue