Skip to content

Commit

Permalink
Merge pull request #325 from ros2/issue/#321_enhance_parameter_api
Browse files Browse the repository at this point in the history
Parameter API enhancements
  • Loading branch information
Juan Ignacio Ubeira authored May 4, 2019
2 parents 4ba8c1b + 8e7ebfe commit d340737
Show file tree
Hide file tree
Showing 11 changed files with 670 additions and 39 deletions.
11 changes: 9 additions & 2 deletions rclpy/rclpy/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,9 @@ def create_node(
namespace: str = None,
use_global_arguments: bool = True,
start_parameter_services: bool = True,
initial_parameters: List[Parameter] = None
initial_parameters: List[Parameter] = None,
allow_undeclared_parameters: bool = False,
automatically_declare_initial_parameters: bool = True
) -> 'Node':
"""
Create an instance of :class:`.Node`.
Expand All @@ -126,6 +128,9 @@ def create_node(
arguments.
:param start_parameter_services: ``False`` if the node should not create parameter services.
:param initial_parameters: A list of :class:`.Parameter` to be set during node creation.
:param allow_undeclared_parameters: True if undeclared parameters are allowed, False otherwise.
:param automatically_declare_initial_parameters: True if initial parameters have to be declared
upon node creation, false otherwise.
:return: An instance of the newly created node.
"""
# imported locally to avoid loading extensions on module import
Expand All @@ -134,7 +139,9 @@ def create_node(
node_name, context=context, cli_args=cli_args, namespace=namespace,
use_global_arguments=use_global_arguments,
start_parameter_services=start_parameter_services,
initial_parameters=initial_parameters)
initial_parameters=initial_parameters,
allow_undeclared_parameters=allow_undeclared_parameters,
automatically_declare_initial_parameters=automatically_declare_initial_parameters)


def spin_once(node: 'Node', *, executor: 'Executor' = None, timeout_sec: float = None) -> None:
Expand Down
45 changes: 45 additions & 0 deletions rclpy/rclpy/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,48 @@ class InvalidServiceNameException(NameValidationException):

def __init__(self, name, error_msg, invalid_index, *args):
NameValidationException.__init__(self, 'service name', name, error_msg, invalid_index)


class ParameterException(Exception):
"""Base exception for parameter-related errors."""

def __init__(self, error_msg, parameters, *args):
Exception.__init__(self, '{error_msg}: {parameters}'.format(error_msg, parameters), *args)


class ParameterNotDeclaredException(ParameterException):
"""Raised when handling an undeclared parameter when it is not allowed."""

def __init__(self, parameters, *args):
Exception.__init__(self, 'Invalid access to undeclared parameter(s)', parameters, *args)


class ParameterAlreadyDeclaredException(ParameterException):
"""Raised when declaring a parameter that had been declared before."""

def __init__(self, parameters, *args):
Exception.__init__(self, 'Parameter(s) already declared', parameters, *args)


class InvalidParameterException(ParameterException):
"""Raised when a parameter to be declared has an invalid name."""

def __init__(self, parameter, *args):
Exception.__init__(self, 'Invalid parameter name', parameter, *args)


class InvalidParameterValueException(ParameterException):
"""Raised when a parameter to be declared is rejected by a callback."""

def __init__(self, parameter, value, *args):
Exception.__init__(
self,
'Invalid parameter value ({value}) for parameter'.format(
value=value), parameter, *args)


class ParameterImmutableException(ParameterException):
"""Raised when a read-only parameter is modified."""

def __init__(self, parameter, *args):
Exception.__init__(self, 'Attempted to modify read-only parameter', parameter, *args)
Loading

0 comments on commit d340737

Please sign in to comment.