diff --git a/packages/generator/ni_measurement_plugin_sdk_generator/client/__init__.py b/packages/generator/ni_measurement_plugin_sdk_generator/client/__init__.py index 5f071d241..6853f77ad 100644 --- a/packages/generator/ni_measurement_plugin_sdk_generator/client/__init__.py +++ b/packages/generator/ni_measurement_plugin_sdk_generator/client/__init__.py @@ -20,7 +20,7 @@ extract_base_service_class, get_configuration_and_output_metadata_by_index, get_configuration_parameters_with_type_and_default_values, - get_measurement_service_stub, + get_measurement_service_stub_and_version, get_output_parameters_with_type, get_all_registered_measurement_info, get_selected_measurement_service_class, @@ -65,7 +65,7 @@ def _create_client( enum_values_by_type: Dict[Type[Enum], Dict[str, int]] = {} type_url_prefix = "type.googleapis.com/" - measurement_service_stub = get_measurement_service_stub( + measurement_service_stub, measurement_version = get_measurement_service_stub_and_version( discovery_client, channel_pool, measurement_service_class ) metadata = measurement_service_stub.GetMetadata(v2_measurement_service_pb2.GetMetadataRequest()) @@ -88,7 +88,7 @@ def _create_client( directory_out=directory_out, class_name=class_name, display_name=metadata.measurement_details.display_name, - version=metadata.measurement_details.version, + version=measurement_version, configuration_metadata=configuration_metadata, output_metadata=output_metadata, service_class=measurement_service_class, diff --git a/packages/generator/ni_measurement_plugin_sdk_generator/client/_support.py b/packages/generator/ni_measurement_plugin_sdk_generator/client/_support.py index e35c285a9..c05a3e81b 100644 --- a/packages/generator/ni_measurement_plugin_sdk_generator/client/_support.py +++ b/packages/generator/ni_measurement_plugin_sdk_generator/client/_support.py @@ -64,14 +64,14 @@ ] -def get_measurement_service_stub( +def get_measurement_service_stub_and_version( discovery_client: DiscoveryClient, channel_pool: GrpcChannelPool, service_class: str, -) -> v2_measurement_service_pb2_grpc.MeasurementServiceStub: - """Returns the measurement service stub of the given service class.""" +) -> Tuple[v2_measurement_service_pb2_grpc.MeasurementServiceStub, str]: + """Returns the measurement service stub and version of the given service class.""" try: - service_location = discovery_client.resolve_service( + service_location, service_info = discovery_client.resolve_service_with_information( _V2_MEASUREMENT_SERVICE_INTERFACE, service_class ) except grpc.RpcError as e: @@ -79,10 +79,23 @@ def get_measurement_service_stub( raise click.ClickException( f"Could not find any registered measurement with the service class: '{service_class}'." ) + elif e.code() == grpc.StatusCode.UNIMPLEMENTED: + raise click.ClickException( + "The Measurement Plug-In Client generator requires InstrumentStudio Professional version 2024 Q4 or higher." + ) else: raise channel = channel_pool.get_channel(service_location.insecure_address) - return v2_measurement_service_pb2_grpc.MeasurementServiceStub(channel) + + if not service_info.versions: + raise click.ClickException( + "The Measurement Plug-In Client generator requires InstrumentStudio Professional version 2024 Q4 or higher." + ) + + return ( + v2_measurement_service_pb2_grpc.MeasurementServiceStub(channel), + service_info.versions[0], + ) def get_all_registered_measurement_info(