"""Contains classes that represents metadata."""
from typing import Any, Dict, NamedTuple
from google.protobuf import type_pb2
from ni_measurementlink_service._internal.parameter.serialization_strategy import Context
[docs]def validate_default_value_type(parameter_metadata: ParameterMetadata) -> None:
"""Validate and raise exception if the default value does not match the type info.
Args
----
parameter_metadata (ParameterMetadata): Parameter metadata
Raises
------
TypeError: If default value does not match the Datatype.
"""
display_name = parameter_metadata.display_name
default_value = parameter_metadata.default_value
if default_value is None:
return None
expected_type = type(
Context.get_type_default(parameter_metadata.type, parameter_metadata.repeated)
)
if not isinstance(default_value, expected_type):
raise TypeError(
f"Unexpected type {type(default_value)} in the default value for '{display_name}'. Expected type: {expected_type}."
)
if parameter_metadata.repeated:
expected_element_type = type(Context.get_type_default(parameter_metadata.type, False))
for element in default_value:
if not isinstance(element, expected_element_type):
raise TypeError(
f"Unexpected element of type {type(element)} in the default value for '{display_name}'. Expected element type: {expected_element_type}."
)
return None