@@ -681,9 +681,11 @@ def _input_type(
681681 return result
682682
683683 def _output_type (
684- self , method : d .MethodDescriptorProto , use_stream_iterator : bool = True
684+ self , method : d .MethodDescriptorProto , async_service : bool , use_stream_iterator : bool = True
685685 ) -> str :
686686 result = self ._import_message (method .output_type )
687+ if async_service :
688+ result = "{}[{}]" .format (self ._import ("typing" , "Awaitable" ), result )
687689 if use_stream_iterator and method .server_streaming :
688690 result = "{}[{}]" .format (self ._import ("typing" , "Iterator" ), result )
689691 return result
@@ -700,6 +702,7 @@ def write_grpc_methods(
700702 if not methods :
701703 l ("pass" )
702704 l ("" )
705+ async_service = service .options .Extensions [extensions_pb2 .async_service ]
703706 for i , method in methods :
704707 scl = scl_prefix + [d .ServiceDescriptorProto .METHOD_FIELD_NUMBER , i ]
705708 self ._write_comments (scl )
@@ -709,7 +712,7 @@ def write_grpc_methods(
709712 with self ._indent ():
710713 l ("request: {}," , self ._input_type (method ))
711714 l ("context: {}," , self ._import ("grpc" , "ServicerContext" ))
712- l (") -> {}: ..." , self ._output_type (method ))
715+ l (") -> {}: ..." , self ._output_type (method , async_service ))
713716 l ("" )
714717
715718 def write_grpc_stub_methods (
@@ -724,14 +727,15 @@ def write_grpc_stub_methods(
724727 if not methods :
725728 l ("pass" )
726729 l ("" )
730+ async_service = service .options .Extensions [extensions_pb2 .async_service ]
727731 for i , method in methods :
728732 scl = scl_prefix + [d .ServiceDescriptorProto .METHOD_FIELD_NUMBER , i ]
729733 self ._write_comments (scl )
730734
731735 l ("{}:{}[" , method .name , self ._callable_type (method ))
732736 with self ._indent ():
733737 l ("{}," , self ._input_type (method , False ))
734- l ("{}] = ..." , self ._output_type (method , False ))
738+ l ("{}] = ..." , self ._output_type (method , async_service , False ))
735739 l ("" )
736740
737741 def write_grpc_services (
@@ -749,6 +753,8 @@ def write_grpc_services(
749753 if service .name in PYTHON_RESERVED :
750754 continue
751755
756+ async_service = service .options .Extensions [extensions_pb2 .async_service ]
757+
752758 scl = scl_prefix + [i ]
753759 self ._write_comments (scl )
754760
@@ -776,7 +782,7 @@ def write_grpc_services(
776782 "def add_{}Servicer_to_server(servicer: {}Servicer, server: {}) -> None: ..." ,
777783 service .name ,
778784 service .name ,
779- self ._import ("grpc" , "Server" ),
785+ self ._import ("grpc" , "Server" ) if async_service else self . _import ( "grpc" , "Server" ) ,
780786 )
781787 l ("" )
782788
0 commit comments