diff options
author | kpayson64 <kpayson@google.com> | 2016-12-09 12:51:34 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-09 12:51:34 -0800 |
commit | 5431135ce56f3515d07b4b9bde6dae5f3ca177cd (patch) | |
tree | 095ac82de2a27bbcc29d1d2f66c5d96bcf75294c /src | |
parent | a98778f33dc602ad474b19e2f5243972722e758e (diff) | |
parent | a44d3145c9f4fa761c975b1b3cc66a812fdb33f6 (diff) |
Merge pull request #8742 from kpayson64/service_names_hint
Allow handlers to hint at the services they export
Diffstat (limited to 'src')
-rw-r--r-- | src/python/grpcio/grpc/__init__.py | 20 | ||||
-rw-r--r-- | src/python/grpcio/grpc/_utilities.py | 6 |
2 files changed, 25 insertions, 1 deletions
diff --git a/src/python/grpcio/grpc/__init__.py b/src/python/grpcio/grpc/__init__.py index 6087276d51..1c8508bbde 100644 --- a/src/python/grpcio/grpc/__init__.py +++ b/src/python/grpcio/grpc/__init__.py @@ -849,6 +849,26 @@ class GenericRpcHandler(six.with_metaclass(abc.ABCMeta)): raise NotImplementedError() +class ServiceRpcHandler(six.with_metaclass(abc.ABCMeta, GenericRpcHandler)): + """An implementation of RPC methods belonging to a service. + + A service handles RPC methods with structured names of the form + '/Service.Name/Service.MethodX', where 'Service.Name' is the value + returned by service_name(), and 'Service.MethodX' is the service method + name. A service can have multiple service methods names, but only a single + service name. + """ + + @abc.abstractmethod + def service_name(self): + """Returns this services name. + + Returns: + The service name. + """ + raise NotImplementedError() + + ############################# Server Interface ############################### diff --git a/src/python/grpcio/grpc/_utilities.py b/src/python/grpcio/grpc/_utilities.py index 4850967fbc..a375896e6e 100644 --- a/src/python/grpcio/grpc/_utilities.py +++ b/src/python/grpcio/grpc/_utilities.py @@ -53,13 +53,17 @@ class RpcMethodHandler( pass -class DictionaryGenericHandler(grpc.GenericRpcHandler): +class DictionaryGenericHandler(grpc.ServiceRpcHandler): def __init__(self, service, method_handlers): + self._name = service self._method_handlers = { _common.fully_qualified_method(service, method): method_handler for method, method_handler in six.iteritems(method_handlers)} + def service_name(self): + return self._name + def service(self, handler_call_details): return self._method_handlers.get(handler_call_details.method) |