Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Enum arrays do not work with an empty default value

未关闭
#366 0 条评论 0 个 reaction 已指派 1 人 在 GitHub 查看

@WesleyTangNationalInstruments 已经在做这个了。

开始于 2023年9月6日。

评估

这个 Issue 还没有评估数据。

描述

bug

Bug Report

Deserializing an enum array does not work when the configuration's default_value parameter is set to [] (empty list).

Repro or Code Sample

--- a/examples/sample_measurement/measurement.py
+++ b/examples/sample_measurement/measurement.py
@@ -55,6 +55,9 @@ class Color(Enum):
 @sample_measurement_service.configuration(
     "String Array In", nims.DataType.StringArray1D, ["String1", "String2"]
 )
+@sample_measurement_service.configuration(
+    "Enum Array In", nims.DataType.EnumArray1D, [], enum_type=Color
+)
 @sample_measurement_service.output("Float out", nims.DataType.Float)
 @sample_measurement_service.output("Double Array out", nims.DataType.DoubleArray1D)
 @sample_measurement_service.output("Bool out", nims.DataType.Boolean)
@@ -72,6 +75,7 @@ def measure(
     enum_input,
     protobuf_enum_input,
     string_array_in,
+    enum_array_in,
 ):
     """Perform a loopback measurement with various data types."""
     logging.info("Executing measurement")
@@ -81,6 +85,8 @@ def measure(

     sample_measurement_service.context.add_cancel_callback(cancel_callback)

+    logging.info("enum_array_in: %r", enum_array_in)
+
     float_output = float_input
     float_array_output = double_array_input
     bool_output = bool_input

Steps:

  • Open MeasurementLink UI Editor.
  • Drop a Numeric Array Input.
  • Bind it to Enum Array In.
  • Set the first element to 1.
  • Run the measurement.

Expected Behavior

The measurement logs this message:

enum_array_in: [<Color.RED: 1>]

Current Behavior

The measurement produces this error:

PS D:\dev\measurementlink-python\examples\sample_measurement> poetry run python .\measurement.py -v
2023-09-01 17:48:26,593 INFO: Measurement service hosted on port: 52794
2023-09-01 17:48:27,123 INFO: Successfully registered with discovery service.
Press enter to close the measurement service.
2023-09-01 17:49:09,385 INFO: gRPC server call /ni.measurementlink.measurement.v2.MeasurementService/GetMetadata responded OK in 0.9639 ms
2023-09-01 17:50:07,890 INFO: gRPC server call /ni.measurementlink.measurement.v2.MeasurementService/Measure responded OK in 0.6051 ms
2023-09-01 17:50:07,890 ERROR: Exception iterating responses: 'int' object is not iterable
Traceback (most recent call last):
  File "D:\dev\measurementlink-python\examples\sample_measurement\.venv\lib\site-packages\grpc\_server.py", line 589, in _take_response_from_response_iterator
    return next(response_iterator), True
  File "D:\dev\measurementlink-python\ni_measurementlink_service\_loggers.py", line 391, in __next__
    response = next(self._inner_iterator)
  File "D:\dev\measurementlink-python\ni_measurementlink_service\_internal\grpc_servicer.py", line 385, in Measure
    mapping_by_id = serializer.deserialize_parameters(
  File "D:\dev\measurementlink-python\ni_measurementlink_service\_internal\parameter\serializer.py", line 41, in deserialize_parameters
    _deserialize_enum_parameters(parameter_metadata_dict, overlapping_parameter_by_id)
  File "D:\dev\measurementlink-python\ni_measurementlink_service\_internal\parameter\serializer.py", line 231, in _deserialize_enum_parameters
    parameter_by_id[id][index] = enum_type(member_value)
TypeError: 'int' object is not iterable

Workaround

Make the default value non-empty (e.g. [Color.BLUE]).

Possible Solution

I think we should save the passed-in enum_type and use it during deserialization, instead of using the type of the default value.

Inferring the enum type from the default value as described in https://github.com/ni/measurementlink-python/issues/364 could still work, but not when the default value is an empty list.

Context

https://github.com/ni/measurementlink-python/issues/364

Your Environment

  • OS & Device: Windows
  • ni-measurementlink-service version: 1.1.0, 1.2 main branch
  • MeasurementLink version: 2023 Q3 (23.5)
  • Python version: 3.9.13

AB#2509973

AB#2514631

主要语言
Python
星标
21
派生
20
PR 合并指标
30 天内没有已合并 PR

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

ni/measurement-plugin-python 的其他 Issue

查看 ni/measurement-plugin-python 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。