Enum arrays do not work with an empty default value
@WesleyTangNationalInstruments 已经在做这个了。
开始于 2023年9月6日。
评估
这个 Issue 还没有评估数据。
描述
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-serviceversion: 1.1.0, 1.2 main branch- MeasurementLink version: 2023 Q3 (23.5)
- Python version: 3.9.13
- 主要语言
- Python
- 星标
- 21
- 派生
- 20
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
ni/measurement-plugin-python 的其他 Issue
-
Clean up the unused `build_in_import_modules` dictionary in ni-measurement-plugin-client-generator未关闭tech debt
难度 1/5 1 小时以内 新手友好度 68/100
ni/measurement-plugin-python#979 ·
-
tech debt
难度 2/5 1-3 小时 新手友好度 65/100
ni/measurement-plugin-python#926 ·
-
AUTO Session Initialization Fails in Python Measurement Plugin with VISA Devices可能重新可做 @bkeryan 于 339 天前认领,目前没有进行中的 PR。 未关闭bug
ni/measurement-plugin-python#1263 · 1 条评论 · 已指派 1 人 ·
-
enhancement
难度 4/5 3-5 天 新手友好度 45/100
ni/measurement-plugin-python#1227 ·
-
tech debt
难度 3/5 1-2 天 新手友好度 45/100
ni/measurement-plugin-python#978 ·
查看 ni/measurement-plugin-python 的全部 Issue
相似的 Issue
-
documentation good first issue help wanted
难度 2/5 1-3 小时 新手友好度 72/100
drevendev/HungryCrab#273 ·
维护者通常 1 天内回复
-
good first issue help wanted
难度 2/5 1-3 小时 新手友好度 76/100
drevendev/BeautifulRepo#19 ·
维护者通常 2 天内回复
-
Moonshot: Kimi K3 always sends `reasoning_effort="max"`, though the API now accepts `low` and `high`未关闭accepted
难度 2/5 1-3 小时 新手友好度 78/100
UKGovernmentBEIS/inspect_ai#5939 ·
维护者通常 1 天内回复
-
bug linux
难度 2/5 1-3 小时 新手友好度 75/100
维护者通常 1 天内回复
-
area:data data-quality
难度 2/5 1-3 小时 新手友好度 68/100
reacher-z/Awesome-CUA#1468 ·
维护者通常 1 天内回复