@@ -681,9 +681,14 @@ def _input_type(
681681 return result
682682
683683 def _output_type (
684- self , method : d .MethodDescriptorProto , use_stream_iterator : bool = True
684+ self ,
685+ method : d .MethodDescriptorProto ,
686+ async_service : bool ,
687+ use_stream_iterator : bool = True ,
685688 ) -> str :
686689 result = self ._import_message (method .output_type )
690+ if async_service :
691+ result = "{}[{}]" .format (self ._import ("typing" , "Awaitable" ), result )
687692 if use_stream_iterator and method .server_streaming :
688693 result = "{}[{}]" .format (self ._import ("typing" , "Iterator" ), result )
689694 return result
@@ -700,6 +705,7 @@ def write_grpc_methods(
700705 if not methods :
701706 l ("pass" )
702707 l ("" )
708+ async_service = service .options .Extensions [extensions_pb2 .async_service ]
703709 for i , method in methods :
704710 scl = scl_prefix + [d .ServiceDescriptorProto .METHOD_FIELD_NUMBER , i ]
705711 self ._write_comments (scl )
@@ -709,7 +715,7 @@ def write_grpc_methods(
709715 with self ._indent ():
710716 l ("request: {}," , self ._input_type (method ))
711717 l ("context: {}," , self ._import ("grpc" , "ServicerContext" ))
712- l (") -> {}: ..." , self ._output_type (method ))
718+ l (") -> {}: ..." , self ._output_type (method , async_service ))
713719 l ("" )
714720
715721 def write_grpc_stub_methods (
@@ -724,14 +730,15 @@ def write_grpc_stub_methods(
724730 if not methods :
725731 l ("pass" )
726732 l ("" )
733+ async_service = service .options .Extensions [extensions_pb2 .async_service ]
727734 for i , method in methods :
728735 scl = scl_prefix + [d .ServiceDescriptorProto .METHOD_FIELD_NUMBER , i ]
729736 self ._write_comments (scl )
730737
731738 l ("{}:{}[" , method .name , self ._callable_type (method ))
732739 with self ._indent ():
733740 l ("{}," , self ._input_type (method , False ))
734- l ("{}] = ..." , self ._output_type (method , False ))
741+ l ("{}] = ..." , self ._output_type (method , async_service , False ))
735742 l ("" )
736743
737744 def write_grpc_services (
@@ -749,6 +756,8 @@ def write_grpc_services(
749756 if service .name in PYTHON_RESERVED :
750757 continue
751758
759+ async_service = service .options .Extensions [extensions_pb2 .async_service ]
760+
752761 scl = scl_prefix + [i ]
753762 self ._write_comments (scl )
754763
@@ -776,7 +785,9 @@ def write_grpc_services(
776785 "def add_{}Servicer_to_server(servicer: {}Servicer, server: {}) -> None: ..." ,
777786 service .name ,
778787 service .name ,
779- self ._import ("grpc" , "Server" ),
788+ self ._import ("grpc" , "Server" )
789+ if async_service
790+ else self ._import ("grpc" , "Server" ),
780791 )
781792 l ("" )
782793
0 commit comments