From cddd14fd09521b8479b0bdbf5c1b5597b4276083 Mon Sep 17 00:00:00 2001 From: JafarAbdi Date: Sat, 18 Feb 2023 16:48:05 +0000 Subject: [PATCH 1/3] Support !degree & !randians yaml prefixes --- launch_param_builder/utils.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/launch_param_builder/utils.py b/launch_param_builder/utils.py index b2a517e..634f2ee 100644 --- a/launch_param_builder/utils.py +++ b/launch_param_builder/utils.py @@ -32,6 +32,7 @@ from typing import List, Union import xacro from ament_index_python.packages import get_package_share_directory +import math class ParameterBuilderFileNotFoundError(KeyError): @@ -52,6 +53,20 @@ class ParameterBuilderFileNotFoundError(KeyError): ] +def construct_angle_radians(loader, node): + """Utility function to construct radian values from yaml.""" + value = loader.construct_scalar(node) + try: + return float(value) + except SyntaxError: + raise Exception(f"invalid expression: {value}") + + +def construct_angle_degrees(loader, node): + """Utility function for converting degrees into radians from yaml.""" + return math.radians(construct_angle_radians(loader, node)) + + def raise_if_file_not_found(file_path: Path): if not file_path.exists(): raise ParameterBuilderFileNotFoundError(f"File {file_path} doesn't exist") @@ -62,17 +77,23 @@ def load_file(file_path: Path): try: with open(file_path, "r") as file: return file.read() - except EnvironmentError: # parent of IOError, OSError *and* WindowsError where available + except OSError: # parent of IOError, OSError *and* WindowsError where available return None def load_yaml(file_path: Path): raise_if_file_not_found(file_path) + try: + yaml.SafeLoader.add_constructor("!radians", construct_angle_radians) + yaml.SafeLoader.add_constructor("!degrees", construct_angle_degrees) + except Exception: + raise Exception("yaml support not available; install python-yaml") + try: with open(file_path, "r") as file: - return yaml.load(file, Loader=yaml.FullLoader) - except EnvironmentError: # parent of IOError, OSError *and* WindowsError where available + return yaml.safe_load(file) + except OSError: # parent of IOError, OSError *and* WindowsError where available return None From 6c61e6ee6a8051d6ed5ee7c52e6766646c8dd9a3 Mon Sep 17 00:00:00 2001 From: Jafar Date: Mon, 27 Feb 2023 22:52:07 +0000 Subject: [PATCH 2/3] Update launch_param_builder/utils.py Co-authored-by: Sebastian Castro <4603398+sea-bass@users.noreply.github.com> --- launch_param_builder/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launch_param_builder/utils.py b/launch_param_builder/utils.py index 634f2ee..ae9063f 100644 --- a/launch_param_builder/utils.py +++ b/launch_param_builder/utils.py @@ -54,7 +54,7 @@ class ParameterBuilderFileNotFoundError(KeyError): def construct_angle_radians(loader, node): - """Utility function to construct radian values from yaml.""" + """Utility function to construct radian values from YAML.""" value = loader.construct_scalar(node) try: return float(value) From 49a106d3701da1ad903a16b0b2f604dab233065a Mon Sep 17 00:00:00 2001 From: Jafar Date: Mon, 27 Feb 2023 22:52:11 +0000 Subject: [PATCH 3/3] Update launch_param_builder/utils.py Co-authored-by: Sebastian Castro <4603398+sea-bass@users.noreply.github.com> --- launch_param_builder/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launch_param_builder/utils.py b/launch_param_builder/utils.py index ae9063f..f6afc0b 100644 --- a/launch_param_builder/utils.py +++ b/launch_param_builder/utils.py @@ -63,7 +63,7 @@ def construct_angle_radians(loader, node): def construct_angle_degrees(loader, node): - """Utility function for converting degrees into radians from yaml.""" + """Utility function for converting degrees into radians from YAML.""" return math.radians(construct_angle_radians(loader, node))