@@ -681,9 +681,14 @@ def _input_type(
681
681
return result
682
682
683
683
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 ,
685
688
) -> str :
686
689
result = self ._import_message (method .output_type )
690
+ if async_service :
691
+ result = "{}[{}]" .format (self ._import ("typing" , "Awaitable" ), result )
687
692
if use_stream_iterator and method .server_streaming :
688
693
result = "{}[{}]" .format (self ._import ("typing" , "Iterator" ), result )
689
694
return result
@@ -700,6 +705,7 @@ def write_grpc_methods(
700
705
if not methods :
701
706
l ("pass" )
702
707
l ("" )
708
+ async_service = service .options .Extensions [extensions_pb2 .async_service ]
703
709
for i , method in methods :
704
710
scl = scl_prefix + [d .ServiceDescriptorProto .METHOD_FIELD_NUMBER , i ]
705
711
self ._write_comments (scl )
@@ -709,7 +715,7 @@ def write_grpc_methods(
709
715
with self ._indent ():
710
716
l ("request: {}," , self ._input_type (method ))
711
717
l ("context: {}," , self ._import ("grpc" , "ServicerContext" ))
712
- l (") -> {}: ..." , self ._output_type (method ))
718
+ l (") -> {}: ..." , self ._output_type (method , async_service ))
713
719
l ("" )
714
720
715
721
def write_grpc_stub_methods (
@@ -724,14 +730,15 @@ def write_grpc_stub_methods(
724
730
if not methods :
725
731
l ("pass" )
726
732
l ("" )
733
+ async_service = service .options .Extensions [extensions_pb2 .async_service ]
727
734
for i , method in methods :
728
735
scl = scl_prefix + [d .ServiceDescriptorProto .METHOD_FIELD_NUMBER , i ]
729
736
self ._write_comments (scl )
730
737
731
738
l ("{}:{}[" , method .name , self ._callable_type (method ))
732
739
with self ._indent ():
733
740
l ("{}," , self ._input_type (method , False ))
734
- l ("{}] = ..." , self ._output_type (method , False ))
741
+ l ("{}] = ..." , self ._output_type (method , async_service , False ))
735
742
l ("" )
736
743
737
744
def write_grpc_services (
@@ -749,6 +756,8 @@ def write_grpc_services(
749
756
if service .name in PYTHON_RESERVED :
750
757
continue
751
758
759
+ async_service = service .options .Extensions [extensions_pb2 .async_service ]
760
+
752
761
scl = scl_prefix + [i ]
753
762
self ._write_comments (scl )
754
763
@@ -776,7 +785,9 @@ def write_grpc_services(
776
785
"def add_{}Servicer_to_server(servicer: {}Servicer, server: {}) -> None: ..." ,
777
786
service .name ,
778
787
service .name ,
779
- self ._import ("grpc" , "Server" ),
788
+ self ._import ("grpc" , "Server" )
789
+ if async_service
790
+ else self ._import ("grpc" , "Server" ),
780
791
)
781
792
l ("" )
782
793
0 commit comments