1 # Copyright 2023 gRPC authors. 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); 4 # you may not use this file except in compliance with the License. 5 # You may obtain a copy of the License at 6 # 7 # http://www.apache.org/licenses/LICENSE-2.0 8 # 9 # Unless required by applicable law or agreed to in writing, software 10 # distributed under the License is distributed on an "AS IS" BASIS, 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 """The Python implementation of the GRPC helloworld.Greeter client with reflection.""" 15 16 import logging 17 18 from google.protobuf.descriptor_pool import DescriptorPool 19 import grpc 20 from grpc_reflection.v1alpha.proto_reflection_descriptor_database import ( 21 ProtoReflectionDescriptorDatabase, 22 ) 23 24 25 def run(): 26 print("Will try to greet world ...") 27 with grpc.insecure_channel("localhost:50051") as channel: 28 reflection_db = ProtoReflectionDescriptorDatabase(channel) 29 services = reflection_db.get_services() 30 print(f"found services: {services}") 31 32 desc_pool = DescriptorPool(reflection_db) 33 service_desc = desc_pool.FindServiceByName("helloworld.Greeter") 34 print(f"found Greeter service with name: {service_desc.full_name}") 35 for methods in service_desc.methods: 36 print(f"found method name: {methods.full_name}") 37 input_type = methods.input_type 38 print(f"input type for this method: {input_type.full_name}") 39 40 request_desc = desc_pool.FindMessageTypeByName( 41 "helloworld.HelloRequest" 42 ) 43 print(f"found request name: {request_desc.full_name}") 44 45 46 if __name__ == "__main__": 47 logging.basicConfig() 48 run() 49