in rostran/core/metadata.py [0:0]
def validate(self):
if not isinstance(self.type, str):
raise InvalidTemplateMetaDataItem(
name=self.type,
reason=f"The type should be str",
)
if self.type in (self.ROS_INTERFACE, self.ROS_DESIGNER) and not isinstance(
self.value, dict
):
raise InvalidTemplateMetaDataItem(
name=self.type,
reason=f"The type of value ({self.value}) should be dict",
)
# validate PredefinedParameters
if self.type == self.PREDEFINED_PARAMETERS:
if not isinstance(self.value, list):
raise InvalidTemplateMetaDataItem(
name=self.type,
reason=f"The type of value ({self.value}) should be list",
)
for i, pp in enumerate(self.value):
if not isinstance(pp, dict):
raise InvalidTemplateMetaDataItem(
name=f"{self.type}[{i}]",
reason=f"The type of value ({pp}) should be dict",
)
if self.NAME not in pp:
raise InvalidTemplateMetaDataItem(
name=f"{self.type}[{i}]",
reason=f"{self.NAME} is missing",
)
name = pp[self.NAME]
if not isinstance(name, str):
raise InvalidTemplateMetaDataItem(
name=f"{self.type}[{i}].{self.NAME}",
reason=f"The type of value ({name}) should be str",
)
if self.PARAMETERS not in pp:
raise InvalidTemplateMetaDataItem(
name=f"{self.type}[{i}]",
reason=f"{self.PARAMETERS} is missing",
)
parameters = pp[self.PARAMETERS]
if not isinstance(parameters, dict):
raise InvalidTemplateMetaDataItem(
name=f"{self.type}[{i}].{self.PARAMETERS}",
reason=f"The type of value ({parameters}) should be dict",
)
# validate ALIYUN::ROS::Interface
if self.type == self.ROS_INTERFACE:
# validate ParameterGroups
if self.PARAMETER_GROUPS in self.value:
param_groups = self.value[self.PARAMETER_GROUPS]
if not isinstance(param_groups, list):
raise InvalidTemplateMetaDataItem(
name=f"{self.ROS_INTERFACE}.{self.PARAMETER_GROUPS}",
reason=f"The type of value ({param_groups}) should be list",
)
for i, param_group in enumerate(param_groups):
if not isinstance(param_group, dict):
raise InvalidTemplateMetaDataItem(
name=f"{self.ROS_INTERFACE}.{self.PARAMETER_GROUPS}[{i}]",
reason=f"The type of value ({param_group}) should be dict",
)
# validate Parameters
if self.PARAMETERS not in param_group:
raise InvalidTemplateMetaDataItem(
name=f"{self.ROS_INTERFACE}.{self.PARAMETER_GROUPS}[{i}]",
reason=f"{self.PARAMETERS} is missing",
)
parameters = param_group[self.PARAMETERS]
if not isinstance(parameters, list):
raise InvalidTemplateMetaDataItem(
name=f"{self.ROS_INTERFACE}.{self.PARAMETER_GROUPS}[{i}].{self.PARAMETERS}",
reason=f"The type of value ({parameters}) should be list",
)
for j, parameter in enumerate(parameters):
if isinstance(parameter, dict):
continue
if not isinstance(parameter, str):
raise InvalidTemplateMetaDataItem(
name=f"{self.ROS_INTERFACE}.{self.PARAMETER_GROUPS}[{i}].{self.PARAMETERS}[{j}]",
reason=f"The type of value ({parameter}) should be str",
)
# validate Label
if self.LABEL in param_group:
label = param_group[self.LABEL]
if not isinstance(label, dict):
raise InvalidTemplateMetaDataItem(
name=f"{self.ROS_INTERFACE}.{self.PARAMETER_GROUPS}[{i}].{self.LABEL}",
reason=f"The type of value ({label}) should be dict",
)
if not any(key in label for key in self.LABEL_KEYS):
label_keys = ", ".join(self.LABEL_KEYS)
raise InvalidTemplateMetaDataItem(
name=f"{self.ROS_INTERFACE}.{self.PARAMETER_GROUPS}[{i}].{self.LABEL}",
reason=f"one of {label_keys} is missing",
)
# validate TemplateTags
if self.TEMPLATE_TAGS in self.value:
template_tags = self.value[self.TEMPLATE_TAGS]
if not isinstance(template_tags, list):
raise InvalidTemplateMetaDataItem(
name=f"{self.ROS_INTERFACE}.{self.TEMPLATE_TAGS}",
reason=f"The type of value ({template_tags}) should be list",
)
for i, template_tag in enumerate(template_tags):
if not isinstance(template_tag, str):
raise InvalidTemplateMetaDataItem(
name=f"{self.ROS_INTERFACE}.{self.TEMPLATE_TAGS}[{i}]",
reason=f"The type of value ({template_tag}) should be str",
)