class_docstr: Abstract base interface for protocol-buffer-based RPC services.
  
  Services themselves are abstract classes (implemented either by servers or as
  stubs), but they subclass this base interface. The methods of this
  interface can be used to call the methods of the service without knowing
  its exact type at compile time (analogous to the Message interface).
class_docstr_tok: ["Abstract","base","interface","for","protocol-buffer-based","RPC","services",".","Services","themselves","are","abstract","classes","(","implemented","either","by","servers","or","as","stubs",")",",","but","they","subclass","this","base","interface",".","The","methods","of","this","interface","can","be","used","to","call","the","methods","of","the","service","without","knowing","its","exact","type","at","compile","time","(","analogous","to","the","Message","interface",")","."]
docstr: Calls a method of the service specified by method_descriptor.
  
  If "done" is None then the call is blocking and the response
  message will be returned directly.  Otherwise the call is asynchronous
  and "done" will later be called with the response value.
  
  In the blocking case, RpcException will be raised on error.
  
  Preconditions:
  * method_descriptor.service == GetDescriptor
  * request is of the exact same classes as returned by
    GetRequestClass(method).
  * After the call has started, the request must not be modified.
  * "rpc_controller" is of the correct type for the RPC implementation being
    used by this Service.  For stubs, the "correct type" depends on the
    RpcChannel which the stub is using.
  
  Postconditions:
  * "done" will be called when the method is complete.  This may be
    before CallMethod() returns or it may be at some point in the future.
  * If the RPC failed, the response value passed to "done" will be None.
    Further details about the failure can be found by querying the
    RpcController.
docstr_tok: ["Calls","a","method","of","the","service","specified","by","method_descriptor",".","If","``","done","''","is","None","then","the","call","is","blocking","and","the","response","message","will","be","returned","directly",".","Otherwise","the","call","is","asynchronous","and","``","done","''","will","later","be","called","with","the","response","value",".","In","the","blocking","case",",","RpcException","will","be","raised","on","error",".","Preconditions",":","*","method_descriptor.service","==","GetDescriptor","*","request","is","of","the","exact","same","classes","as","returned","by","GetRequestClass","(","method",")",".","*","After","the","call","has","started",",","the","request","must","not","be","modified",".","*","``","rpc_controller","''","is","of","the","correct","type","for","the","RPC","implementation","being","used","by","this","Service",".","For","stubs",",","the","``","correct","type","''","depends","on","the","RpcChannel","which","the","stub","is","using",".","Postconditions",":","*","``","done","''","will","be","called","when","the","method","is","complete",".","This","may","be","before","CallMethod","(",")","returns","or","it","may","be","at","some","point","in","the","future",".","*","If","the","RPC","failed",",","the","response","value","passed","to","``","done","''","will","be","None",".","Further","details","about","the","failure","can","be","found","by","querying","the","RpcController","."]
code: def CallMethod(
      self, method_descriptor, rpc_controller, request, done
  ):
      """Calls a method of the service specified by method_descriptor.
  
      If "done" is None then the call is blocking and the response
      message will be returned directly.  Otherwise the call is asynchronous
      and "done" will later be called with the response value.
  
      In the blocking case, RpcException will be raised on error.
  
      Preconditions:
      * method_descriptor.service == GetDescriptor
      * request is of the exact same classes as returned by
        GetRequestClass(method).
      * After the call has started, the request must not be modified.
      * "rpc_controller" is of the correct type for the RPC implementation being
        used by this Service.  For stubs, the "correct type" depends on the
        RpcChannel which the stub is using.
  
      Postconditions:
      * "done" will be called when the method is complete.  This may be
        before CallMethod() returns or it may be at some point in the future.
      * If the RPC failed, the response value passed to "done" will be None.
        Further details about the failure can be found by querying the
        RpcController.
      """
      raise NotImplementedError
  
file_path: turicreate/src/external/coremltools_wrap/coremltools/deps/protobuf/python/google/protobuf/service.py
label_desc: Use image node_id 2 for calling the Service obj's underlying member method code with example usage: obj.CallMethod(method_descriptor, rpc_controller, request, done) without return types