The Client Module¶
Provides a simple Python interface for interacting with the capability server.
Typical usage:
>>> from capabilities.client import Client
>>> client = Client()
>>> # Use the line below if the capability_server has a different name
>>> # client = Client(capability_server_node_name='/capability_server_node_name')
>>> if not client.wait_for_services(3.0): # Wait upto 3.0 seconds for the required ROS services
... import sys
... sys.exit("capability_server, called '{0}', failed to come up.".format(client._name))
>>> client.use_capability('foo_pkg/Foo')
>>> client.use_capability('foo_pkg/Foo')
>>> client.free_capability('foo_pkg/Foo')
>>> client.shutdown()
-
class
capabilities.client.
CapabilitiesClient
(capability_server_node_name='/capability_server')[source]¶ Single point of entry for interacting with a remote capability server.
Instantiation of this class does not check to see if the underlying services are available, call
wait_for_services()
if you want to ensure that the services are available before continuing.Parameters: capability_server_node_name (str) – name of the remote capability server -
establish_bond
(timeout=None)[source]¶ Establishes a bond using the
~establish_bond
service callThe bond id which is returned by the service call is stored internally and used implicitly by the use/free capabilities functions.
If
establish_bond()
had previously been called, then the old bond will be broken, which will result in any capability uses under that bond to be implicitly freed.This function is called implicitly by
use_capability()
if no bond exists.This function will block waiting for the service call to become available and to wait for the bond to be established. In both cases the timeout parameter is used.
None is returned if the timeout occurs while waiting on the service to become available or while waiting for the bond to form.
Parameters: timeout (float) – time in seconds to wait for the service to be available Returns: the bond_id received from the server or None
on failureReturn type: str
-
free_capability
(capability_interface, timeout=None)[source]¶ Free’s a previously used capability.
Calls the
~free_capability
service, which effectively decrements the internal reference count for that capability in the remote capability server.If that results in a reference count of zero, then the capability server will shutdown that capability automatically.
Parameters: Returns: Return type: Raises: CapabilityNotInUseException if the capability has not been previously used
Raises: CapabilityNotRunningException if the capability has already been stopped which can be caused by a capability it depends on stopping
Raises: ServiceNotAvailableException if the required service is not available after the timeout has expired
-
use_capability
(capability_interface, preferred_provider=None, timeout=None)[source]¶ Declares that this capability is being used.
Calls the
~use_capability
service, and opens a bond with capability server if none exists. This will cause the capability to be started, if it has not been already, and the internal reference count for that capability in the capability server is incremented.If the bond fails (i.e. this program crashes) then the reference is decremented automatically. The reference is also decremented if
free_capability()
is called.Parameters: Returns: Return type: Raises: ServiceNotAvailableException if the required service is not available after the timeout has expired
Raise: CannotEstablishBondException is the bond with the capability_server cannot be established
-
wait_for_services
(timeout=None, services=None)[source]¶ Blocks until the requested services are available.
Services are waited on one at a time. Therefore, if a non-None value for timeout is given, and one or more services are being waited on, the full timeout will be given to each wait, meaning that the total run time of this function can exceed the timeout provided.
Parameters: Returns: True
is the services are available,False
otherwise (timeout)Return type:
-