33 from threading
import Thread
34 from rospy
import ServiceProxy, resolve_name
35 from rosservice
import get_service_type
44 Exception.__init__(self,
"Service %s does not exist" % servicename)
49 def __init__(self, service, args, success_callback, error_callback):
50 """ Create a service caller for the specified service. Use start()
51 to start in a separate thread or run() to run in this thread.
54 service -- the name of the service to call
55 args -- arguments to pass to the service. Can be an
56 ordered list, or a dict of name-value pairs. Anything else will be
57 treated as though no arguments were provided (which is still valid for
58 some kinds of service)
59 success_callback -- a callback to call with the JSON result of the
61 error_callback -- a callback to call if an error occurs. The
62 callback will be passed the exception that caused the failure
76 except Exception
as e:
82 """ Populate a service request instance with the provided args
84 args can be a dictionary of values, or a list, or None
86 Propagates any exceptions that may be raised. """
88 if isinstance(args, list):
89 msg = dict(zip(inst.__slots__, args))
90 elif isinstance(args, dict):
101 service = resolve_name(service)
103 service_type = get_service_type(str(service))
104 if service_type
is None:
113 proxy = ServiceProxy(service, service_class)
114 response = proxy.call(inst)