From da21d1a2997adc3cb4a049c9ca19cfe7743e2317 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 08:36:39 +0000 Subject: [PATCH 1/5] chore(deps): update third_party/ni-apis digest to 2a2c336 --- third_party/ni-apis | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/ni-apis b/third_party/ni-apis index 40057588..2a2c336a 160000 --- a/third_party/ni-apis +++ b/third_party/ni-apis @@ -1 +1 @@ -Subproject commit 4005758864f7120471074503962db3cf9a436ca2 +Subproject commit 2a2c336aed8a0654b274e91a5b51735b032b3c52 From 74508bb3c6a5c2a67ceead4793da86cba3377aed Mon Sep 17 00:00:00 2001 From: Michael Johansen Date: Wed, 8 Apr 2026 10:28:39 -0500 Subject: [PATCH 2/5] Regenerate stubs based on proto changes Signed-off-by: Michael Johansen --- .../v1/discovery_service_pb2/__init__.py | 20 ++- .../v1/discovery_service_pb2/__init__.pyi | 82 +++++++++++ .../v1/discovery_service_pb2_grpc/__init__.py | 42 ++++++ .../discovery_service_pb2_grpc/__init__.pyi | 47 ++++++ .../v1/data_store_service_pb2/__init__.py | 137 +++++++++--------- .../v1/data_store_service_pb2/__init__.pyi | 61 +++++++- .../data_store_service_pb2_grpc/__init__.py | 2 +- .../data_store_service_pb2_grpc/__init__.pyi | 6 +- .../ni/protobuf/types/vector_wrappers_pb2.py | 27 ++++ .../ni/protobuf/types/vector_wrappers_pb2.pyi | 34 +++++ .../protobuf/types/waveform_wrappers_pb2.py | 4 +- .../protobuf/types/waveform_wrappers_pb2.pyi | 18 +++ .../ni/protobuf/types/xydata_wrappers_pb2.py | 27 ++++ .../ni/protobuf/types/xydata_wrappers_pb2.pyi | 34 +++++ 14 files changed, 458 insertions(+), 83 deletions(-) create mode 100644 packages/ni.protobuf.types/src/ni/protobuf/types/vector_wrappers_pb2.py create mode 100644 packages/ni.protobuf.types/src/ni/protobuf/types/vector_wrappers_pb2.pyi create mode 100644 packages/ni.protobuf.types/src/ni/protobuf/types/xydata_wrappers_pb2.py create mode 100644 packages/ni.protobuf.types/src/ni/protobuf/types/xydata_wrappers_pb2.pyi diff --git a/packages/ni.measurementlink.discovery.v1.proto/src/ni/measurementlink/discovery/v1/discovery_service_pb2/__init__.py b/packages/ni.measurementlink.discovery.v1.proto/src/ni/measurementlink/discovery/v1/discovery_service_pb2/__init__.py index fbc4fc49..5171503b 100644 --- a/packages/ni.measurementlink.discovery.v1.proto/src/ni/measurementlink/discovery/v1/discovery_service_pb2/__init__.py +++ b/packages/ni.measurementlink.discovery.v1.proto/src/ni/measurementlink/discovery/v1/discovery_service_pb2/__init__.py @@ -13,7 +13,7 @@ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n7ni/measurementlink/discovery/v1/discovery_service.proto\x12\x1fni.measurementlink.discovery.v1\"\x96\x02\n\x11ServiceDescriptor\x12\x14\n\x0c\x64isplay_name\x18\x01 \x01(\t\x12\x17\n\x0f\x64\x65scription_url\x18\x02 \x01(\t\x12\x1b\n\x13provided_interfaces\x18\x03 \x03(\t\x12\x15\n\rservice_class\x18\x04 \x01(\t\x12X\n\x0b\x61nnotations\x18\x05 \x03(\x0b\x32\x43.ni.measurementlink.discovery.v1.ServiceDescriptor.AnnotationsEntry\x12\x10\n\x08versions\x18\x06 \x03(\t\x1a\x32\n\x10\x41nnotationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"Z\n\x0fServiceLocation\x12\x10\n\x08location\x18\x01 \x01(\t\x12\x15\n\rinsecure_port\x18\x02 \x01(\t\x12\x1e\n\x16ssl_authenticated_port\x18\x03 \x01(\t\"\xad\x01\n\x16RegisterServiceRequest\x12O\n\x13service_description\x18\x01 \x01(\x0b\x32\x32.ni.measurementlink.discovery.v1.ServiceDescriptor\x12\x42\n\x08location\x18\x02 \x01(\x0b\x32\x30.ni.measurementlink.discovery.v1.ServiceLocation\"2\n\x17RegisterServiceResponse\x12\x17\n\x0fregistration_id\x18\x01 \x01(\t\"3\n\x18UnregisterServiceRequest\x12\x17\n\x0fregistration_id\x18\x01 \x01(\t\"\x1b\n\x19UnregisterServiceResponse\"M\n\x18\x45numerateServicesRequest\x12\x1a\n\x12provided_interface\x18\x01 \x01(\t\x12\x15\n\rservice_class\x18\x02 \x01(\t\"\x80\x01\n\x19\x45numerateServicesResponse\x12N\n\x12\x61vailable_services\x18\x01 \x03(\x0b\x32\x32.ni.measurementlink.discovery.v1.ServiceDescriptor\x12\x13\n\x0bunreachable\x18\x02 \x03(\t\"v\n\x15ResolveServiceRequest\x12\x1a\n\x12provided_interface\x18\x01 \x01(\t\x12\x15\n\rservice_class\x18\x02 \x01(\t\x12\x19\n\x11\x64\x65ployment_target\x18\x03 \x01(\t\x12\x0f\n\x07version\x18\x04 \x01(\t\"\x85\x01\n$ResolveServiceWithInformationRequest\x12\x1a\n\x12provided_interface\x18\x01 \x01(\t\x12\x15\n\rservice_class\x18\x02 \x01(\t\x12\x19\n\x11\x64\x65ployment_target\x18\x03 \x01(\t\x12\x0f\n\x07version\x18\x04 \x01(\t\"\xc3\x01\n%ResolveServiceWithInformationResponse\x12J\n\x10service_location\x18\x01 \x01(\x0b\x32\x30.ni.measurementlink.discovery.v1.ServiceLocation\x12N\n\x12service_descriptor\x18\x02 \x01(\x0b\x32\x32.ni.measurementlink.discovery.v1.ServiceDescriptor\"6\n\x15\x43omputeNodeDescriptor\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x10\n\x08is_local\x18\x02 \x01(\x08\"\x1e\n\x1c\x45numerateComputeNodesRequest\"n\n\x1d\x45numerateComputeNodesResponse\x12M\n\rcompute_nodes\x18\x01 \x03(\x0b\x32\x36.ni.measurementlink.discovery.v1.ComputeNodeDescriptor2\xf9\x06\n\x10\x44iscoveryService\x12\x84\x01\n\x0fRegisterService\x12\x37.ni.measurementlink.discovery.v1.RegisterServiceRequest\x1a\x38.ni.measurementlink.discovery.v1.RegisterServiceResponse\x12\x8a\x01\n\x11UnregisterService\x12\x39.ni.measurementlink.discovery.v1.UnregisterServiceRequest\x1a:.ni.measurementlink.discovery.v1.UnregisterServiceResponse\x12\x8a\x01\n\x11\x45numerateServices\x12\x39.ni.measurementlink.discovery.v1.EnumerateServicesRequest\x1a:.ni.measurementlink.discovery.v1.EnumerateServicesResponse\x12z\n\x0eResolveService\x12\x36.ni.measurementlink.discovery.v1.ResolveServiceRequest\x1a\x30.ni.measurementlink.discovery.v1.ServiceLocation\x12\xae\x01\n\x1dResolveServiceWithInformation\x12\x45.ni.measurementlink.discovery.v1.ResolveServiceWithInformationRequest\x1a\x46.ni.measurementlink.discovery.v1.ResolveServiceWithInformationResponse\x12\x96\x01\n\x15\x45numerateComputeNodes\x12=.ni.measurementlink.discovery.v1.EnumerateComputeNodesRequest\x1a>.ni.measurementlink.discovery.v1.EnumerateComputeNodesResponseB\xcc\x01\n#com.ni.measurementlink.discovery.v1B\x15\x44iscoveryServiceProtoP\x01Z\x0b\x64iscoveryv1\xa2\x02\x04NIMD\xaa\x02\x30NationalInstruments.MeasurementLink.Discovery.V1\xca\x02\x1fNI\\MeasurementLink\\Discovery\\V1\xea\x02\"NI::MeasurementLink::Discovery::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n7ni/measurementlink/discovery/v1/discovery_service.proto\x12\x1fni.measurementlink.discovery.v1\"\x96\x02\n\x11ServiceDescriptor\x12\x14\n\x0c\x64isplay_name\x18\x01 \x01(\t\x12\x17\n\x0f\x64\x65scription_url\x18\x02 \x01(\t\x12\x1b\n\x13provided_interfaces\x18\x03 \x03(\t\x12\x15\n\rservice_class\x18\x04 \x01(\t\x12X\n\x0b\x61nnotations\x18\x05 \x03(\x0b\x32\x43.ni.measurementlink.discovery.v1.ServiceDescriptor.AnnotationsEntry\x12\x10\n\x08versions\x18\x06 \x03(\t\x1a\x32\n\x10\x41nnotationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"Z\n\x0fServiceLocation\x12\x10\n\x08location\x18\x01 \x01(\t\x12\x15\n\rinsecure_port\x18\x02 \x01(\t\x12\x1e\n\x16ssl_authenticated_port\x18\x03 \x01(\t\"\xad\x01\n\x16RegisterServiceRequest\x12O\n\x13service_description\x18\x01 \x01(\x0b\x32\x32.ni.measurementlink.discovery.v1.ServiceDescriptor\x12\x42\n\x08location\x18\x02 \x01(\x0b\x32\x30.ni.measurementlink.discovery.v1.ServiceLocation\"2\n\x17RegisterServiceResponse\x12\x17\n\x0fregistration_id\x18\x01 \x01(\t\"3\n\x18UnregisterServiceRequest\x12\x17\n\x0fregistration_id\x18\x01 \x01(\t\"\x1b\n\x19UnregisterServiceResponse\"M\n\x18\x45numerateServicesRequest\x12\x1a\n\x12provided_interface\x18\x01 \x01(\t\x12\x15\n\rservice_class\x18\x02 \x01(\t\"\x80\x01\n\x19\x45numerateServicesResponse\x12N\n\x12\x61vailable_services\x18\x01 \x03(\x0b\x32\x32.ni.measurementlink.discovery.v1.ServiceDescriptor\x12\x13\n\x0bunreachable\x18\x02 \x03(\t\"v\n\x15ResolveServiceRequest\x12\x1a\n\x12provided_interface\x18\x01 \x01(\t\x12\x15\n\rservice_class\x18\x02 \x01(\t\x12\x19\n\x11\x64\x65ployment_target\x18\x03 \x01(\t\x12\x0f\n\x07version\x18\x04 \x01(\t\"\x85\x01\n$ResolveServiceWithInformationRequest\x12\x1a\n\x12provided_interface\x18\x01 \x01(\t\x12\x15\n\rservice_class\x18\x02 \x01(\t\x12\x19\n\x11\x64\x65ployment_target\x18\x03 \x01(\t\x12\x0f\n\x07version\x18\x04 \x01(\t\"\xc3\x01\n%ResolveServiceWithInformationResponse\x12J\n\x10service_location\x18\x01 \x01(\x0b\x32\x30.ni.measurementlink.discovery.v1.ServiceLocation\x12N\n\x12service_descriptor\x18\x02 \x01(\x0b\x32\x32.ni.measurementlink.discovery.v1.ServiceDescriptor\"6\n\x15\x43omputeNodeDescriptor\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x10\n\x08is_local\x18\x02 \x01(\x08\"S\n\x1e\x45numerateActiveServicesRequest\x12\x1a\n\x12provided_interface\x18\x01 \x01(\t\x12\x15\n\rservice_class\x18\x02 \x01(\t\"\xb6\x01\n\x18\x41\x63tiveServiceInformation\x12N\n\x12service_descriptor\x18\x01 \x01(\x0b\x32\x32.ni.measurementlink.discovery.v1.ServiceDescriptor\x12J\n\x10service_location\x18\x02 \x01(\x0b\x32\x30.ni.measurementlink.discovery.v1.ServiceLocation\"u\n\x1f\x45numerateActiveServicesResponse\x12R\n\x0f\x61\x63tive_services\x18\x01 \x03(\x0b\x32\x39.ni.measurementlink.discovery.v1.ActiveServiceInformation\"\x1e\n\x1c\x45numerateComputeNodesRequest\"n\n\x1d\x45numerateComputeNodesResponse\x12M\n\rcompute_nodes\x18\x01 \x03(\x0b\x32\x36.ni.measurementlink.discovery.v1.ComputeNodeDescriptor2\x98\x08\n\x10\x44iscoveryService\x12\x84\x01\n\x0fRegisterService\x12\x37.ni.measurementlink.discovery.v1.RegisterServiceRequest\x1a\x38.ni.measurementlink.discovery.v1.RegisterServiceResponse\x12\x8a\x01\n\x11UnregisterService\x12\x39.ni.measurementlink.discovery.v1.UnregisterServiceRequest\x1a:.ni.measurementlink.discovery.v1.UnregisterServiceResponse\x12\x8a\x01\n\x11\x45numerateServices\x12\x39.ni.measurementlink.discovery.v1.EnumerateServicesRequest\x1a:.ni.measurementlink.discovery.v1.EnumerateServicesResponse\x12z\n\x0eResolveService\x12\x36.ni.measurementlink.discovery.v1.ResolveServiceRequest\x1a\x30.ni.measurementlink.discovery.v1.ServiceLocation\x12\xae\x01\n\x1dResolveServiceWithInformation\x12\x45.ni.measurementlink.discovery.v1.ResolveServiceWithInformationRequest\x1a\x46.ni.measurementlink.discovery.v1.ResolveServiceWithInformationResponse\x12\x96\x01\n\x15\x45numerateComputeNodes\x12=.ni.measurementlink.discovery.v1.EnumerateComputeNodesRequest\x1a>.ni.measurementlink.discovery.v1.EnumerateComputeNodesResponse\x12\x9c\x01\n\x17\x45numerateActiveServices\x12?.ni.measurementlink.discovery.v1.EnumerateActiveServicesRequest\x1a@.ni.measurementlink.discovery.v1.EnumerateActiveServicesResponseB\xcc\x01\n#com.ni.measurementlink.discovery.v1B\x15\x44iscoveryServiceProtoP\x01Z\x0b\x64iscoveryv1\xa2\x02\x04NIMD\xaa\x02\x30NationalInstruments.MeasurementLink.Discovery.V1\xca\x02\x1fNI\\MeasurementLink\\Discovery\\V1\xea\x02\"NI::MeasurementLink::Discovery::V1b\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ni.measurementlink.discovery.v1.discovery_service_pb2', globals()) @@ -49,10 +49,16 @@ _RESOLVESERVICEWITHINFORMATIONRESPONSE._serialized_end=1437 _COMPUTENODEDESCRIPTOR._serialized_start=1439 _COMPUTENODEDESCRIPTOR._serialized_end=1493 - _ENUMERATECOMPUTENODESREQUEST._serialized_start=1495 - _ENUMERATECOMPUTENODESREQUEST._serialized_end=1525 - _ENUMERATECOMPUTENODESRESPONSE._serialized_start=1527 - _ENUMERATECOMPUTENODESRESPONSE._serialized_end=1637 - _DISCOVERYSERVICE._serialized_start=1640 - _DISCOVERYSERVICE._serialized_end=2529 + _ENUMERATEACTIVESERVICESREQUEST._serialized_start=1495 + _ENUMERATEACTIVESERVICESREQUEST._serialized_end=1578 + _ACTIVESERVICEINFORMATION._serialized_start=1581 + _ACTIVESERVICEINFORMATION._serialized_end=1763 + _ENUMERATEACTIVESERVICESRESPONSE._serialized_start=1765 + _ENUMERATEACTIVESERVICESRESPONSE._serialized_end=1882 + _ENUMERATECOMPUTENODESREQUEST._serialized_start=1884 + _ENUMERATECOMPUTENODESREQUEST._serialized_end=1914 + _ENUMERATECOMPUTENODESRESPONSE._serialized_start=1916 + _ENUMERATECOMPUTENODESRESPONSE._serialized_end=2026 + _DISCOVERYSERVICE._serialized_start=2029 + _DISCOVERYSERVICE._serialized_end=3077 # @@protoc_insertion_point(module_scope) diff --git a/packages/ni.measurementlink.discovery.v1.proto/src/ni/measurementlink/discovery/v1/discovery_service_pb2/__init__.pyi b/packages/ni.measurementlink.discovery.v1.proto/src/ni/measurementlink/discovery/v1/discovery_service_pb2/__init__.pyi index 44173235..3890b9b0 100644 --- a/packages/ni.measurementlink.discovery.v1.proto/src/ni/measurementlink/discovery/v1/discovery_service_pb2/__init__.pyi +++ b/packages/ni.measurementlink.discovery.v1.proto/src/ni/measurementlink/discovery/v1/discovery_service_pb2/__init__.pyi @@ -389,6 +389,88 @@ class ComputeNodeDescriptor(google.protobuf.message.Message): global___ComputeNodeDescriptor = ComputeNodeDescriptor +@typing.final +class EnumerateActiveServicesRequest(google.protobuf.message.Message): + """Message sent to enumerate the active (currently running) service instances.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + PROVIDED_INTERFACE_FIELD_NUMBER: builtins.int + SERVICE_CLASS_FIELD_NUMBER: builtins.int + provided_interface: builtins.str + """Optional. The gRPC full name of the service interface that is needed. If empty, + information for all active services registered with the discovery service will be, + returned, unless the 'service_class' field has been specified. + """ + service_class: builtins.str + """Optional. The "class" of the service that should be matched. If used in conjunction with + the 'provided_interface' field, the 'service_class' field will be used to filter the results + to only those services that match the provided interface and service class. + """ + def __init__( + self, + *, + provided_interface: builtins.str = ..., + service_class: builtins.str = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["provided_interface", b"provided_interface", "service_class", b"service_class"]) -> None: ... + +global___EnumerateActiveServicesRequest = EnumerateActiveServicesRequest + +@typing.final +class ActiveServiceInformation(google.protobuf.message.Message): + """Combines a service descriptor with its location to describe an active service. + Used in EnumerateActiveServicesResponse to represent a single active service instance. + """ + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + SERVICE_DESCRIPTOR_FIELD_NUMBER: builtins.int + SERVICE_LOCATION_FIELD_NUMBER: builtins.int + @property + def service_descriptor(self) -> global___ServiceDescriptor: + """The description of the service.""" + + @property + def service_location(self) -> global___ServiceLocation: + """The location of the service.""" + + def __init__( + self, + *, + service_descriptor: global___ServiceDescriptor | None = ..., + service_location: global___ServiceLocation | None = ..., + ) -> None: ... + def HasField(self, field_name: typing.Literal["service_descriptor", b"service_descriptor", "service_location", b"service_location"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["service_descriptor", b"service_descriptor", "service_location", b"service_location"]) -> None: ... + +global___ActiveServiceInformation = ActiveServiceInformation + +@typing.final +class EnumerateActiveServicesResponse(google.protobuf.message.Message): + """Message returned from the EnumerateActiveServices method.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + ACTIVE_SERVICES_FIELD_NUMBER: builtins.int + @property + def active_services(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ActiveServiceInformation]: + """The list of currently active service instances which implement the specified service interface. + This information is intended for diagnostic and informational purposes only. + To communicate with a service, use ResolveService or ResolveServiceWithInformation instead. + Unlike EnumerateServices, multiple entries may share the same service_class when multiple + versions of the same service are running side by side. + """ + + def __init__( + self, + *, + active_services: collections.abc.Iterable[global___ActiveServiceInformation] | None = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["active_services", b"active_services"]) -> None: ... + +global___EnumerateActiveServicesResponse = EnumerateActiveServicesResponse + @typing.final class EnumerateComputeNodesRequest(google.protobuf.message.Message): """Message sent to enumerate the compute nodes that have registered themselves in the current session.""" diff --git a/packages/ni.measurementlink.discovery.v1.proto/src/ni/measurementlink/discovery/v1/discovery_service_pb2_grpc/__init__.py b/packages/ni.measurementlink.discovery.v1.proto/src/ni/measurementlink/discovery/v1/discovery_service_pb2_grpc/__init__.py index 303ca72d..a7071c39 100644 --- a/packages/ni.measurementlink.discovery.v1.proto/src/ni/measurementlink/discovery/v1/discovery_service_pb2_grpc/__init__.py +++ b/packages/ni.measurementlink.discovery.v1.proto/src/ni/measurementlink/discovery/v1/discovery_service_pb2_grpc/__init__.py @@ -46,6 +46,11 @@ def __init__(self, channel): request_serializer=ni_dot_measurementlink_dot_discovery_dot_v1_dot_discovery__service__pb2.EnumerateComputeNodesRequest.SerializeToString, response_deserializer=ni_dot_measurementlink_dot_discovery_dot_v1_dot_discovery__service__pb2.EnumerateComputeNodesResponse.FromString, ) + self.EnumerateActiveServices = channel.unary_unary( + '/ni.measurementlink.discovery.v1.DiscoveryService/EnumerateActiveServices', + request_serializer=ni_dot_measurementlink_dot_discovery_dot_v1_dot_discovery__service__pb2.EnumerateActiveServicesRequest.SerializeToString, + response_deserializer=ni_dot_measurementlink_dot_discovery_dot_v1_dot_discovery__service__pb2.EnumerateActiveServicesResponse.FromString, + ) class DiscoveryServiceServicer(object): @@ -123,6 +128,21 @@ def EnumerateComputeNodes(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def EnumerateActiveServices(self, request, context): + """Enumerate all service instances that are currently active (running). + This RPC is intended for diagnostic and informational purposes, such as displaying the + status of registered services to a user. It should not be used to obtain a service location + for the purpose of communicating with that service; use ResolveService or + ResolveServiceWithInformation for that purpose. + + Unlike EnumerateServices, this RPC returns individual active service instances rather than + collapsing multiple registered versions into a single ServiceDescriptor entry, allowing + callers to see each running instance independently when multiple versions are active side by side. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_DiscoveryServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -156,6 +176,11 @@ def add_DiscoveryServiceServicer_to_server(servicer, server): request_deserializer=ni_dot_measurementlink_dot_discovery_dot_v1_dot_discovery__service__pb2.EnumerateComputeNodesRequest.FromString, response_serializer=ni_dot_measurementlink_dot_discovery_dot_v1_dot_discovery__service__pb2.EnumerateComputeNodesResponse.SerializeToString, ), + 'EnumerateActiveServices': grpc.unary_unary_rpc_method_handler( + servicer.EnumerateActiveServices, + request_deserializer=ni_dot_measurementlink_dot_discovery_dot_v1_dot_discovery__service__pb2.EnumerateActiveServicesRequest.FromString, + response_serializer=ni_dot_measurementlink_dot_discovery_dot_v1_dot_discovery__service__pb2.EnumerateActiveServicesResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'ni.measurementlink.discovery.v1.DiscoveryService', rpc_method_handlers) @@ -269,3 +294,20 @@ def EnumerateComputeNodes(request, ni_dot_measurementlink_dot_discovery_dot_v1_dot_discovery__service__pb2.EnumerateComputeNodesResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def EnumerateActiveServices(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/ni.measurementlink.discovery.v1.DiscoveryService/EnumerateActiveServices', + ni_dot_measurementlink_dot_discovery_dot_v1_dot_discovery__service__pb2.EnumerateActiveServicesRequest.SerializeToString, + ni_dot_measurementlink_dot_discovery_dot_v1_dot_discovery__service__pb2.EnumerateActiveServicesResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/packages/ni.measurementlink.discovery.v1.proto/src/ni/measurementlink/discovery/v1/discovery_service_pb2_grpc/__init__.pyi b/packages/ni.measurementlink.discovery.v1.proto/src/ni/measurementlink/discovery/v1/discovery_service_pb2_grpc/__init__.pyi index 6c0216f4..eb6ceedb 100644 --- a/packages/ni.measurementlink.discovery.v1.proto/src/ni/measurementlink/discovery/v1/discovery_service_pb2_grpc/__init__.pyi +++ b/packages/ni.measurementlink.discovery.v1.proto/src/ni/measurementlink/discovery/v1/discovery_service_pb2_grpc/__init__.pyi @@ -94,6 +94,21 @@ class DiscoveryServiceStub: get the service location for a service running on that compute node. """ + EnumerateActiveServices: grpc.UnaryUnaryMultiCallable[ + ni.measurementlink.discovery.v1.discovery_service_pb2.EnumerateActiveServicesRequest, + ni.measurementlink.discovery.v1.discovery_service_pb2.EnumerateActiveServicesResponse, + ] + """Enumerate all service instances that are currently active (running). + This RPC is intended for diagnostic and informational purposes, such as displaying the + status of registered services to a user. It should not be used to obtain a service location + for the purpose of communicating with that service; use ResolveService or + ResolveServiceWithInformation for that purpose. + + Unlike EnumerateServices, this RPC returns individual active service instances rather than + collapsing multiple registered versions into a single ServiceDescriptor entry, allowing + callers to see each running instance independently when multiple versions are active side by side. + """ + class DiscoveryServiceAsyncStub: """The service used as a registry for other services. This service can be used to discover and activate other services present in the system. @@ -168,6 +183,21 @@ class DiscoveryServiceAsyncStub: get the service location for a service running on that compute node. """ + EnumerateActiveServices: grpc.aio.UnaryUnaryMultiCallable[ + ni.measurementlink.discovery.v1.discovery_service_pb2.EnumerateActiveServicesRequest, + ni.measurementlink.discovery.v1.discovery_service_pb2.EnumerateActiveServicesResponse, + ] + """Enumerate all service instances that are currently active (running). + This RPC is intended for diagnostic and informational purposes, such as displaying the + status of registered services to a user. It should not be used to obtain a service location + for the purpose of communicating with that service; use ResolveService or + ResolveServiceWithInformation for that purpose. + + Unlike EnumerateServices, this RPC returns individual active service instances rather than + collapsing multiple registered versions into a single ServiceDescriptor entry, allowing + callers to see each running instance independently when multiple versions are active side by side. + """ + class DiscoveryServiceServicer(metaclass=abc.ABCMeta): """The service used as a registry for other services. This service can be used to discover and activate other services present in the system. @@ -254,4 +284,21 @@ class DiscoveryServiceServicer(metaclass=abc.ABCMeta): get the service location for a service running on that compute node. """ + @abc.abstractmethod + def EnumerateActiveServices( + self, + request: ni.measurementlink.discovery.v1.discovery_service_pb2.EnumerateActiveServicesRequest, + context: _ServicerContext, + ) -> typing.Union[ni.measurementlink.discovery.v1.discovery_service_pb2.EnumerateActiveServicesResponse, collections.abc.Awaitable[ni.measurementlink.discovery.v1.discovery_service_pb2.EnumerateActiveServicesResponse]]: + """Enumerate all service instances that are currently active (running). + This RPC is intended for diagnostic and informational purposes, such as displaying the + status of registered services to a user. It should not be used to obtain a service location + for the purpose of communicating with that service; use ResolveService or + ResolveServiceWithInformation for that purpose. + + Unlike EnumerateServices, this RPC returns individual active service instances rather than + collapsing multiple registered versions into a single ServiceDescriptor entry, allowing + callers to see each running instance independently when multiple versions are active side by side. + """ + def add_DiscoveryServiceServicer_to_server(servicer: DiscoveryServiceServicer, server: typing.Union[grpc.Server, grpc.aio.Server]) -> None: ... diff --git a/packages/ni.measurements.data.v1.proto/src/ni/measurements/data/v1/data_store_service_pb2/__init__.py b/packages/ni.measurements.data.v1.proto/src/ni/measurements/data/v1/data_store_service_pb2/__init__.py index 71040ca0..5b416cf0 100644 --- a/packages/ni.measurements.data.v1.proto/src/ni/measurements/data/v1/data_store_service_pb2/__init__.py +++ b/packages/ni.measurements.data.v1.proto/src/ni/measurements/data/v1/data_store_service_pb2/__init__.py @@ -15,11 +15,14 @@ from ni.measurements.data.v1 import data_store_pb2 as ni_dot_measurements_dot_data_dot_v1_dot_data__store__pb2 from ni.protobuf.types import scalar_pb2 as ni_dot_protobuf_dot_types_dot_scalar__pb2 from ni.protobuf.types import vector_pb2 as ni_dot_protobuf_dot_types_dot_vector__pb2 +from ni.protobuf.types import vector_wrappers_pb2 as ni_dot_protobuf_dot_types_dot_vector__wrappers__pb2 from ni.protobuf.types import waveform_pb2 as ni_dot_protobuf_dot_types_dot_waveform__pb2 +from ni.protobuf.types import waveform_wrappers_pb2 as ni_dot_protobuf_dot_types_dot_waveform__wrappers__pb2 from ni.protobuf.types import xydata_pb2 as ni_dot_protobuf_dot_types_dot_xydata__pb2 +from ni.protobuf.types import xydata_wrappers_pb2 as ni_dot_protobuf_dot_types_dot_xydata__wrappers__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n0ni/measurements/data/v1/data_store_service.proto\x12\x17ni.measurements.data.v1\x1a+ni/protobuf/types/precision_timestamp.proto\x1a(ni/measurements/data/v1/data_store.proto\x1a\x1eni/protobuf/types/scalar.proto\x1a\x1eni/protobuf/types/vector.proto\x1a ni/protobuf/types/waveform.proto\x1a\x1eni/protobuf/types/xydata.proto\"S\n\x17\x43reateTestResultRequest\x12\x38\n\x0btest_result\x18\x01 \x01(\x0b\x32#.ni.measurements.data.v1.TestResult\"2\n\x18\x43reateTestResultResponse\x12\x16\n\x0etest_result_id\x18\x01 \x01(\t\".\n\x14GetTestResultRequest\x12\x16\n\x0etest_result_id\x18\x01 \x01(\t\"Q\n\x15GetTestResultResponse\x12\x38\n\x0btest_result\x18\x01 \x01(\x0b\x32#.ni.measurements.data.v1.TestResult\".\n\x17QueryTestResultsRequest\x12\x13\n\x0bodata_query\x18\x01 \x01(\t\"U\n\x18QueryTestResultsResponse\x12\x39\n\x0ctest_results\x18\x01 \x03(\x0b\x32#.ni.measurements.data.v1.TestResult\"@\n\x11\x43reateStepRequest\x12+\n\x04step\x18\x01 \x01(\x0b\x32\x1d.ni.measurements.data.v1.Step\"%\n\x12\x43reateStepResponse\x12\x0f\n\x07step_id\x18\x01 \x01(\t\"!\n\x0eGetStepRequest\x12\x0f\n\x07step_id\x18\x01 \x01(\t\">\n\x0fGetStepResponse\x12+\n\x04step\x18\x01 \x01(\x0b\x32\x1d.ni.measurements.data.v1.Step\"(\n\x11QueryStepsRequest\x12\x13\n\x0bodata_query\x18\x01 \x01(\t\"B\n\x12QueryStepsResponse\x12,\n\x05steps\x18\x01 \x03(\x0b\x32\x1d.ni.measurements.data.v1.Step\"\x86\x01\n\x17PublishConditionRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x16\n\x0e\x63ondition_type\x18\x02 \x01(\t\x12+\n\x06scalar\x18\x03 \x01(\x0b\x32\x19.ni.protobuf.types.ScalarH\x00\x12\x0f\n\x07step_id\x18\x04 \x01(\tB\x07\n\x05value\"0\n\x18PublishConditionResponse\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\"\x93\x01\n\x1cPublishConditionBatchRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x16\n\x0e\x63ondition_type\x18\x02 \x01(\t\x12\x32\n\rscalar_values\x18\x03 \x01(\x0b\x32\x19.ni.protobuf.types.VectorH\x00\x12\x0f\n\x07step_id\x18\x04 \x01(\tB\x08\n\x06values\"5\n\x1dPublishConditionBatchResponse\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\"\x86\x07\n\x19PublishMeasurementRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12+\n\x06scalar\x18\x02 \x01(\x0b\x32\x19.ni.protobuf.types.ScalarH\x00\x12+\n\x06vector\x18\x03 \x01(\x0b\x32\x19.ni.protobuf.types.VectorH\x00\x12I\n\x16\x64ouble_analog_waveform\x18\x04 \x01(\x0b\x32\'.ni.protobuf.types.DoubleAnalogWaveformH\x00\x12\x33\n\x08x_y_data\x18\x05 \x01(\x0b\x32\x1f.ni.protobuf.types.DoubleXYDataH\x00\x12\x43\n\x13i16_analog_waveform\x18\x06 \x01(\x0b\x32$.ni.protobuf.types.I16AnalogWaveformH\x00\x12K\n\x17\x64ouble_complex_waveform\x18\x07 \x01(\x0b\x32(.ni.protobuf.types.DoubleComplexWaveformH\x00\x12\x45\n\x14i16_complex_waveform\x18\x08 \x01(\x0b\x32%.ni.protobuf.types.I16ComplexWaveformH\x00\x12<\n\x0f\x64ouble_spectrum\x18\t \x01(\x0b\x32!.ni.protobuf.types.DoubleSpectrumH\x00\x12>\n\x10\x64igital_waveform\x18\n \x01(\x0b\x32\".ni.protobuf.types.DigitalWaveformH\x00\x12\r\n\x05notes\x18\x0b \x01(\t\x12\x38\n\ttimestamp\x18\x0c \x01(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x12\x31\n\x07outcome\x18\r \x01(\x0e\x32 .ni.measurements.data.v1.Outcome\x12\x44\n\x11\x65rror_information\x18\x0e \x01(\x0b\x32).ni.measurements.data.v1.ErrorInformation\x12\x0f\n\x07step_id\x18\x0f \x01(\t\x12\x19\n\x11hardware_item_ids\x18\x10 \x03(\t\x12\x18\n\x10test_adapter_ids\x18\x11 \x03(\t\x12\x19\n\x11software_item_ids\x18\x12 \x03(\tB\x07\n\x05value\"4\n\x1aPublishMeasurementResponse\x12\x16\n\x0emeasurement_id\x18\x01 \x01(\t\"\x91\x03\n\x1ePublishMeasurementBatchRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x32\n\rscalar_values\x18\x02 \x01(\x0b\x32\x19.ni.protobuf.types.VectorH\x00\x12\r\n\x05notes\x18\x03 \x01(\t\x12\x39\n\ntimestamps\x18\x04 \x03(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x12\x32\n\x08outcomes\x18\x05 \x03(\x0e\x32 .ni.measurements.data.v1.Outcome\x12\x44\n\x11\x65rror_information\x18\x06 \x03(\x0b\x32).ni.measurements.data.v1.ErrorInformation\x12\x0f\n\x07step_id\x18\x07 \x01(\t\x12\x19\n\x11hardware_item_ids\x18\x08 \x03(\t\x12\x18\n\x10test_adapter_ids\x18\t \x03(\t\x12\x19\n\x11software_item_ids\x18\n \x03(\tB\x08\n\x06values\":\n\x1fPublishMeasurementBatchResponse\x12\x17\n\x0fmeasurement_ids\x18\x01 \x03(\t\"/\n\x15GetMeasurementRequest\x12\x16\n\x0emeasurement_id\x18\x01 \x01(\t\"f\n\x16GetMeasurementResponse\x12L\n\x15published_measurement\x18\x01 \x01(\x0b\x32-.ni.measurements.data.v1.PublishedMeasurement\"+\n\x13GetConditionRequest\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\"`\n\x14GetConditionResponse\x12H\n\x13published_condition\x18\x01 \x01(\x0b\x32+.ni.measurements.data.v1.PublishedCondition\"-\n\x16QueryConditionsRequest\x12\x13\n\x0bodata_query\x18\x01 \x01(\t\"d\n\x17QueryConditionsResponse\x12I\n\x14published_conditions\x18\x01 \x03(\x0b\x32+.ni.measurements.data.v1.PublishedCondition\"/\n\x18QueryMeasurementsRequest\x12\x13\n\x0bodata_query\x18\x01 \x01(\t\"j\n\x19QueryMeasurementsResponse\x12M\n\x16published_measurements\x18\x01 \x03(\x0b\x32-.ni.measurements.data.v1.PublishedMeasurement\"1\n\x19ReadConditionValueRequest\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\"R\n\x1aReadConditionValueResponse\x12+\n\x06vector\x18\x01 \x01(\x0b\x32\x19.ni.protobuf.types.VectorH\x00\x42\x07\n\x05value\"5\n\x1bReadMeasurementValueRequest\x12\x16\n\x0emeasurement_id\x18\x01 \x01(\t\"\xab\x04\n\x1cReadMeasurementValueResponse\x12+\n\x06vector\x18\x01 \x01(\x0b\x32\x19.ni.protobuf.types.VectorH\x00\x12I\n\x16\x64ouble_analog_waveform\x18\x02 \x01(\x0b\x32\'.ni.protobuf.types.DoubleAnalogWaveformH\x00\x12\x33\n\x08x_y_data\x18\x03 \x01(\x0b\x32\x1f.ni.protobuf.types.DoubleXYDataH\x00\x12\x43\n\x13i16_analog_waveform\x18\x04 \x01(\x0b\x32$.ni.protobuf.types.I16AnalogWaveformH\x00\x12K\n\x17\x64ouble_complex_waveform\x18\x05 \x01(\x0b\x32(.ni.protobuf.types.DoubleComplexWaveformH\x00\x12\x45\n\x14i16_complex_waveform\x18\x06 \x01(\x0b\x32%.ni.protobuf.types.I16ComplexWaveformH\x00\x12<\n\x0f\x64ouble_spectrum\x18\x07 \x01(\x0b\x32!.ni.protobuf.types.DoubleSpectrumH\x00\x12>\n\x10\x64igital_waveform\x18\x08 \x01(\x0b\x32\".ni.protobuf.types.DigitalWaveformH\x00\x42\x07\n\x05value2\x87\x0f\n\x10\x44\x61taStoreService\x12w\n\x10\x43reateTestResult\x12\x30.ni.measurements.data.v1.CreateTestResultRequest\x1a\x31.ni.measurements.data.v1.CreateTestResultResponse\x12n\n\rGetTestResult\x12-.ni.measurements.data.v1.GetTestResultRequest\x1a..ni.measurements.data.v1.GetTestResultResponse\x12w\n\x10QueryTestResults\x12\x30.ni.measurements.data.v1.QueryTestResultsRequest\x1a\x31.ni.measurements.data.v1.QueryTestResultsResponse\x12\x65\n\nCreateStep\x12*.ni.measurements.data.v1.CreateStepRequest\x1a+.ni.measurements.data.v1.CreateStepResponse\x12\\\n\x07GetStep\x12\'.ni.measurements.data.v1.GetStepRequest\x1a(.ni.measurements.data.v1.GetStepResponse\x12\x65\n\nQuerySteps\x12*.ni.measurements.data.v1.QueryStepsRequest\x1a+.ni.measurements.data.v1.QueryStepsResponse\x12w\n\x10PublishCondition\x12\x30.ni.measurements.data.v1.PublishConditionRequest\x1a\x31.ni.measurements.data.v1.PublishConditionResponse\x12\x86\x01\n\x15PublishConditionBatch\x12\x35.ni.measurements.data.v1.PublishConditionBatchRequest\x1a\x36.ni.measurements.data.v1.PublishConditionBatchResponse\x12}\n\x12PublishMeasurement\x12\x32.ni.measurements.data.v1.PublishMeasurementRequest\x1a\x33.ni.measurements.data.v1.PublishMeasurementResponse\x12\x8c\x01\n\x17PublishMeasurementBatch\x12\x37.ni.measurements.data.v1.PublishMeasurementBatchRequest\x1a\x38.ni.measurements.data.v1.PublishMeasurementBatchResponse\x12q\n\x0eGetMeasurement\x12..ni.measurements.data.v1.GetMeasurementRequest\x1a/.ni.measurements.data.v1.GetMeasurementResponse\x12k\n\x0cGetCondition\x12,.ni.measurements.data.v1.GetConditionRequest\x1a-.ni.measurements.data.v1.GetConditionResponse\x12t\n\x0fQueryConditions\x12/.ni.measurements.data.v1.QueryConditionsRequest\x1a\x30.ni.measurements.data.v1.QueryConditionsResponse\x12z\n\x11QueryMeasurements\x12\x31.ni.measurements.data.v1.QueryMeasurementsRequest\x1a\x32.ni.measurements.data.v1.QueryMeasurementsResponse\x12}\n\x12ReadConditionValue\x12\x32.ni.measurements.data.v1.ReadConditionValueRequest\x1a\x33.ni.measurements.data.v1.ReadConditionValueResponse\x12\x83\x01\n\x14ReadMeasurementValue\x12\x34.ni.measurements.data.v1.ReadMeasurementValueRequest\x1a\x35.ni.measurements.data.v1.ReadMeasurementValueResponseB\xa7\x01\n\x1b\x63om.ni.measurements.data.v1B\x15\x44\x61taStoreServiceProtoP\x01Z\x06\x64\x61tav1\xa2\x02\x04NIMD\xaa\x02(NationalInstruments.Measurements.Data.V1\xca\x02\x17NI\\Measurements\\Data\\V1\xea\x02\x1aNI::Measurements::Data::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n0ni/measurements/data/v1/data_store_service.proto\x12\x17ni.measurements.data.v1\x1a+ni/protobuf/types/precision_timestamp.proto\x1a(ni/measurements/data/v1/data_store.proto\x1a\x1eni/protobuf/types/scalar.proto\x1a\x1eni/protobuf/types/vector.proto\x1a\'ni/protobuf/types/vector_wrappers.proto\x1a ni/protobuf/types/waveform.proto\x1a)ni/protobuf/types/waveform_wrappers.proto\x1a\x1eni/protobuf/types/xydata.proto\x1a\'ni/protobuf/types/xydata_wrappers.proto\"S\n\x17\x43reateTestResultRequest\x12\x38\n\x0btest_result\x18\x01 \x01(\x0b\x32#.ni.measurements.data.v1.TestResult\"2\n\x18\x43reateTestResultResponse\x12\x16\n\x0etest_result_id\x18\x01 \x01(\t\".\n\x14GetTestResultRequest\x12\x16\n\x0etest_result_id\x18\x01 \x01(\t\"Q\n\x15GetTestResultResponse\x12\x38\n\x0btest_result\x18\x01 \x01(\x0b\x32#.ni.measurements.data.v1.TestResult\".\n\x17QueryTestResultsRequest\x12\x13\n\x0bodata_query\x18\x01 \x01(\t\"U\n\x18QueryTestResultsResponse\x12\x39\n\x0ctest_results\x18\x01 \x03(\x0b\x32#.ni.measurements.data.v1.TestResult\"@\n\x11\x43reateStepRequest\x12+\n\x04step\x18\x01 \x01(\x0b\x32\x1d.ni.measurements.data.v1.Step\"%\n\x12\x43reateStepResponse\x12\x0f\n\x07step_id\x18\x01 \x01(\t\"!\n\x0eGetStepRequest\x12\x0f\n\x07step_id\x18\x01 \x01(\t\">\n\x0fGetStepResponse\x12+\n\x04step\x18\x01 \x01(\x0b\x32\x1d.ni.measurements.data.v1.Step\"(\n\x11QueryStepsRequest\x12\x13\n\x0bodata_query\x18\x01 \x01(\t\"B\n\x12QueryStepsResponse\x12,\n\x05steps\x18\x01 \x03(\x0b\x32\x1d.ni.measurements.data.v1.Step\"\x86\x01\n\x17PublishConditionRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x16\n\x0e\x63ondition_type\x18\x02 \x01(\t\x12+\n\x06scalar\x18\x03 \x01(\x0b\x32\x19.ni.protobuf.types.ScalarH\x00\x12\x0f\n\x07step_id\x18\x04 \x01(\tB\x07\n\x05value\"0\n\x18PublishConditionResponse\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\"\x93\x01\n\x1cPublishConditionBatchRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x16\n\x0e\x63ondition_type\x18\x02 \x01(\t\x12\x32\n\rscalar_values\x18\x03 \x01(\x0b\x32\x19.ni.protobuf.types.VectorH\x00\x12\x0f\n\x07step_id\x18\x04 \x01(\tB\x08\n\x06values\"5\n\x1dPublishConditionBatchResponse\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\"\x86\x07\n\x19PublishMeasurementRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12+\n\x06scalar\x18\x02 \x01(\x0b\x32\x19.ni.protobuf.types.ScalarH\x00\x12+\n\x06vector\x18\x03 \x01(\x0b\x32\x19.ni.protobuf.types.VectorH\x00\x12I\n\x16\x64ouble_analog_waveform\x18\x04 \x01(\x0b\x32\'.ni.protobuf.types.DoubleAnalogWaveformH\x00\x12\x33\n\x08x_y_data\x18\x05 \x01(\x0b\x32\x1f.ni.protobuf.types.DoubleXYDataH\x00\x12\x43\n\x13i16_analog_waveform\x18\x06 \x01(\x0b\x32$.ni.protobuf.types.I16AnalogWaveformH\x00\x12K\n\x17\x64ouble_complex_waveform\x18\x07 \x01(\x0b\x32(.ni.protobuf.types.DoubleComplexWaveformH\x00\x12\x45\n\x14i16_complex_waveform\x18\x08 \x01(\x0b\x32%.ni.protobuf.types.I16ComplexWaveformH\x00\x12<\n\x0f\x64ouble_spectrum\x18\t \x01(\x0b\x32!.ni.protobuf.types.DoubleSpectrumH\x00\x12>\n\x10\x64igital_waveform\x18\n \x01(\x0b\x32\".ni.protobuf.types.DigitalWaveformH\x00\x12\r\n\x05notes\x18\x0b \x01(\t\x12\x38\n\ttimestamp\x18\x0c \x01(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x12\x31\n\x07outcome\x18\r \x01(\x0e\x32 .ni.measurements.data.v1.Outcome\x12\x44\n\x11\x65rror_information\x18\x0e \x01(\x0b\x32).ni.measurements.data.v1.ErrorInformation\x12\x0f\n\x07step_id\x18\x0f \x01(\t\x12\x19\n\x11hardware_item_ids\x18\x10 \x03(\t\x12\x18\n\x10test_adapter_ids\x18\x11 \x03(\t\x12\x19\n\x11software_item_ids\x18\x12 \x03(\tB\x07\n\x05value\"4\n\x1aPublishMeasurementResponse\x12\x16\n\x0emeasurement_id\x18\x01 \x01(\t\"\x9d\x08\n\x1ePublishMeasurementBatchRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x32\n\rscalar_values\x18\x02 \x01(\x0b\x32\x19.ni.protobuf.types.VectorH\x00\x12<\n\rvector_values\x18\x0b \x01(\x0b\x32#.ni.protobuf.types.VectorArrayValueH\x00\x12Z\n\x1d\x64ouble_analog_waveform_values\x18\x0c \x01(\x0b\x32\x31.ni.protobuf.types.DoubleAnalogWaveformArrayValueH\x00\x12\x44\n\x0fx_y_data_values\x18\r \x01(\x0b\x32).ni.protobuf.types.DoubleXYDataArrayValueH\x00\x12T\n\x1ai16_analog_waveform_values\x18\x0e \x01(\x0b\x32..ni.protobuf.types.I16AnalogWaveformArrayValueH\x00\x12\\\n\x1e\x64ouble_complex_waveform_values\x18\x0f \x01(\x0b\x32\x32.ni.protobuf.types.DoubleComplexWaveformArrayValueH\x00\x12V\n\x1bi16_complex_waveform_values\x18\x10 \x01(\x0b\x32/.ni.protobuf.types.I16ComplexWaveformArrayValueH\x00\x12M\n\x16\x64ouble_spectrum_values\x18\x11 \x01(\x0b\x32+.ni.protobuf.types.DoubleSpectrumArrayValueH\x00\x12O\n\x17\x64igital_waveform_values\x18\x12 \x01(\x0b\x32,.ni.protobuf.types.DigitalWaveformArrayValueH\x00\x12\r\n\x05notes\x18\x03 \x01(\t\x12\x39\n\ntimestamps\x18\x04 \x03(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x12\x32\n\x08outcomes\x18\x05 \x03(\x0e\x32 .ni.measurements.data.v1.Outcome\x12\x44\n\x11\x65rror_information\x18\x06 \x03(\x0b\x32).ni.measurements.data.v1.ErrorInformation\x12\x0f\n\x07step_id\x18\x07 \x01(\t\x12\x19\n\x11hardware_item_ids\x18\x08 \x03(\t\x12\x18\n\x10test_adapter_ids\x18\t \x03(\t\x12\x19\n\x11software_item_ids\x18\n \x03(\tB\x08\n\x06values\":\n\x1fPublishMeasurementBatchResponse\x12\x17\n\x0fmeasurement_ids\x18\x01 \x03(\t\"/\n\x15GetMeasurementRequest\x12\x16\n\x0emeasurement_id\x18\x01 \x01(\t\"f\n\x16GetMeasurementResponse\x12L\n\x15published_measurement\x18\x01 \x01(\x0b\x32-.ni.measurements.data.v1.PublishedMeasurement\"+\n\x13GetConditionRequest\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\"`\n\x14GetConditionResponse\x12H\n\x13published_condition\x18\x01 \x01(\x0b\x32+.ni.measurements.data.v1.PublishedCondition\"-\n\x16QueryConditionsRequest\x12\x13\n\x0bodata_query\x18\x01 \x01(\t\"d\n\x17QueryConditionsResponse\x12I\n\x14published_conditions\x18\x01 \x03(\x0b\x32+.ni.measurements.data.v1.PublishedCondition\"/\n\x18QueryMeasurementsRequest\x12\x13\n\x0bodata_query\x18\x01 \x01(\t\"j\n\x19QueryMeasurementsResponse\x12M\n\x16published_measurements\x18\x01 \x03(\x0b\x32-.ni.measurements.data.v1.PublishedMeasurement\"1\n\x19ReadConditionValueRequest\x12\x14\n\x0c\x63ondition_id\x18\x01 \x01(\t\"R\n\x1aReadConditionValueResponse\x12+\n\x06vector\x18\x01 \x01(\x0b\x32\x19.ni.protobuf.types.VectorH\x00\x42\x07\n\x05value\"5\n\x1bReadMeasurementValueRequest\x12\x16\n\x0emeasurement_id\x18\x01 \x01(\t\"\xab\x04\n\x1cReadMeasurementValueResponse\x12+\n\x06vector\x18\x01 \x01(\x0b\x32\x19.ni.protobuf.types.VectorH\x00\x12I\n\x16\x64ouble_analog_waveform\x18\x02 \x01(\x0b\x32\'.ni.protobuf.types.DoubleAnalogWaveformH\x00\x12\x33\n\x08x_y_data\x18\x03 \x01(\x0b\x32\x1f.ni.protobuf.types.DoubleXYDataH\x00\x12\x43\n\x13i16_analog_waveform\x18\x04 \x01(\x0b\x32$.ni.protobuf.types.I16AnalogWaveformH\x00\x12K\n\x17\x64ouble_complex_waveform\x18\x05 \x01(\x0b\x32(.ni.protobuf.types.DoubleComplexWaveformH\x00\x12\x45\n\x14i16_complex_waveform\x18\x06 \x01(\x0b\x32%.ni.protobuf.types.I16ComplexWaveformH\x00\x12<\n\x0f\x64ouble_spectrum\x18\x07 \x01(\x0b\x32!.ni.protobuf.types.DoubleSpectrumH\x00\x12>\n\x10\x64igital_waveform\x18\x08 \x01(\x0b\x32\".ni.protobuf.types.DigitalWaveformH\x00\x42\x07\n\x05value2\x87\x0f\n\x10\x44\x61taStoreService\x12w\n\x10\x43reateTestResult\x12\x30.ni.measurements.data.v1.CreateTestResultRequest\x1a\x31.ni.measurements.data.v1.CreateTestResultResponse\x12n\n\rGetTestResult\x12-.ni.measurements.data.v1.GetTestResultRequest\x1a..ni.measurements.data.v1.GetTestResultResponse\x12w\n\x10QueryTestResults\x12\x30.ni.measurements.data.v1.QueryTestResultsRequest\x1a\x31.ni.measurements.data.v1.QueryTestResultsResponse\x12\x65\n\nCreateStep\x12*.ni.measurements.data.v1.CreateStepRequest\x1a+.ni.measurements.data.v1.CreateStepResponse\x12\\\n\x07GetStep\x12\'.ni.measurements.data.v1.GetStepRequest\x1a(.ni.measurements.data.v1.GetStepResponse\x12\x65\n\nQuerySteps\x12*.ni.measurements.data.v1.QueryStepsRequest\x1a+.ni.measurements.data.v1.QueryStepsResponse\x12w\n\x10PublishCondition\x12\x30.ni.measurements.data.v1.PublishConditionRequest\x1a\x31.ni.measurements.data.v1.PublishConditionResponse\x12\x86\x01\n\x15PublishConditionBatch\x12\x35.ni.measurements.data.v1.PublishConditionBatchRequest\x1a\x36.ni.measurements.data.v1.PublishConditionBatchResponse\x12}\n\x12PublishMeasurement\x12\x32.ni.measurements.data.v1.PublishMeasurementRequest\x1a\x33.ni.measurements.data.v1.PublishMeasurementResponse\x12\x8c\x01\n\x17PublishMeasurementBatch\x12\x37.ni.measurements.data.v1.PublishMeasurementBatchRequest\x1a\x38.ni.measurements.data.v1.PublishMeasurementBatchResponse\x12q\n\x0eGetMeasurement\x12..ni.measurements.data.v1.GetMeasurementRequest\x1a/.ni.measurements.data.v1.GetMeasurementResponse\x12k\n\x0cGetCondition\x12,.ni.measurements.data.v1.GetConditionRequest\x1a-.ni.measurements.data.v1.GetConditionResponse\x12t\n\x0fQueryConditions\x12/.ni.measurements.data.v1.QueryConditionsRequest\x1a\x30.ni.measurements.data.v1.QueryConditionsResponse\x12z\n\x11QueryMeasurements\x12\x31.ni.measurements.data.v1.QueryMeasurementsRequest\x1a\x32.ni.measurements.data.v1.QueryMeasurementsResponse\x12}\n\x12ReadConditionValue\x12\x32.ni.measurements.data.v1.ReadConditionValueRequest\x1a\x33.ni.measurements.data.v1.ReadConditionValueResponse\x12\x83\x01\n\x14ReadMeasurementValue\x12\x34.ni.measurements.data.v1.ReadMeasurementValueRequest\x1a\x35.ni.measurements.data.v1.ReadMeasurementValueResponseB\xa7\x01\n\x1b\x63om.ni.measurements.data.v1B\x15\x44\x61taStoreServiceProtoP\x01Z\x06\x64\x61tav1\xa2\x02\x04NIMD\xaa\x02(NationalInstruments.Measurements.Data.V1\xca\x02\x17NI\\Measurements\\Data\\V1\xea\x02\x1aNI::Measurements::Data::V1b\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ni.measurements.data.v1.data_store_service_pb2', globals()) @@ -27,70 +30,70 @@ DESCRIPTOR._options = None DESCRIPTOR._serialized_options = b'\n\033com.ni.measurements.data.v1B\025DataStoreServiceProtoP\001Z\006datav1\242\002\004NIMD\252\002(NationalInstruments.Measurements.Data.V1\312\002\027NI\\Measurements\\Data\\V1\352\002\032NI::Measurements::Data::V1' - _CREATETESTRESULTREQUEST._serialized_start=294 - _CREATETESTRESULTREQUEST._serialized_end=377 - _CREATETESTRESULTRESPONSE._serialized_start=379 - _CREATETESTRESULTRESPONSE._serialized_end=429 - _GETTESTRESULTREQUEST._serialized_start=431 - _GETTESTRESULTREQUEST._serialized_end=477 - _GETTESTRESULTRESPONSE._serialized_start=479 - _GETTESTRESULTRESPONSE._serialized_end=560 - _QUERYTESTRESULTSREQUEST._serialized_start=562 - _QUERYTESTRESULTSREQUEST._serialized_end=608 - _QUERYTESTRESULTSRESPONSE._serialized_start=610 - _QUERYTESTRESULTSRESPONSE._serialized_end=695 - _CREATESTEPREQUEST._serialized_start=697 - _CREATESTEPREQUEST._serialized_end=761 - _CREATESTEPRESPONSE._serialized_start=763 - _CREATESTEPRESPONSE._serialized_end=800 - _GETSTEPREQUEST._serialized_start=802 - _GETSTEPREQUEST._serialized_end=835 - _GETSTEPRESPONSE._serialized_start=837 - _GETSTEPRESPONSE._serialized_end=899 - _QUERYSTEPSREQUEST._serialized_start=901 - _QUERYSTEPSREQUEST._serialized_end=941 - _QUERYSTEPSRESPONSE._serialized_start=943 - _QUERYSTEPSRESPONSE._serialized_end=1009 - _PUBLISHCONDITIONREQUEST._serialized_start=1012 - _PUBLISHCONDITIONREQUEST._serialized_end=1146 - _PUBLISHCONDITIONRESPONSE._serialized_start=1148 - _PUBLISHCONDITIONRESPONSE._serialized_end=1196 - _PUBLISHCONDITIONBATCHREQUEST._serialized_start=1199 - _PUBLISHCONDITIONBATCHREQUEST._serialized_end=1346 - _PUBLISHCONDITIONBATCHRESPONSE._serialized_start=1348 - _PUBLISHCONDITIONBATCHRESPONSE._serialized_end=1401 - _PUBLISHMEASUREMENTREQUEST._serialized_start=1404 - _PUBLISHMEASUREMENTREQUEST._serialized_end=2306 - _PUBLISHMEASUREMENTRESPONSE._serialized_start=2308 - _PUBLISHMEASUREMENTRESPONSE._serialized_end=2360 - _PUBLISHMEASUREMENTBATCHREQUEST._serialized_start=2363 - _PUBLISHMEASUREMENTBATCHREQUEST._serialized_end=2764 - _PUBLISHMEASUREMENTBATCHRESPONSE._serialized_start=2766 - _PUBLISHMEASUREMENTBATCHRESPONSE._serialized_end=2824 - _GETMEASUREMENTREQUEST._serialized_start=2826 - _GETMEASUREMENTREQUEST._serialized_end=2873 - _GETMEASUREMENTRESPONSE._serialized_start=2875 - _GETMEASUREMENTRESPONSE._serialized_end=2977 - _GETCONDITIONREQUEST._serialized_start=2979 - _GETCONDITIONREQUEST._serialized_end=3022 - _GETCONDITIONRESPONSE._serialized_start=3024 - _GETCONDITIONRESPONSE._serialized_end=3120 - _QUERYCONDITIONSREQUEST._serialized_start=3122 - _QUERYCONDITIONSREQUEST._serialized_end=3167 - _QUERYCONDITIONSRESPONSE._serialized_start=3169 - _QUERYCONDITIONSRESPONSE._serialized_end=3269 - _QUERYMEASUREMENTSREQUEST._serialized_start=3271 - _QUERYMEASUREMENTSREQUEST._serialized_end=3318 - _QUERYMEASUREMENTSRESPONSE._serialized_start=3320 - _QUERYMEASUREMENTSRESPONSE._serialized_end=3426 - _READCONDITIONVALUEREQUEST._serialized_start=3428 - _READCONDITIONVALUEREQUEST._serialized_end=3477 - _READCONDITIONVALUERESPONSE._serialized_start=3479 - _READCONDITIONVALUERESPONSE._serialized_end=3561 - _READMEASUREMENTVALUEREQUEST._serialized_start=3563 - _READMEASUREMENTVALUEREQUEST._serialized_end=3616 - _READMEASUREMENTVALUERESPONSE._serialized_start=3619 - _READMEASUREMENTVALUERESPONSE._serialized_end=4174 - _DATASTORESERVICE._serialized_start=4177 - _DATASTORESERVICE._serialized_end=6104 + _CREATETESTRESULTREQUEST._serialized_start=419 + _CREATETESTRESULTREQUEST._serialized_end=502 + _CREATETESTRESULTRESPONSE._serialized_start=504 + _CREATETESTRESULTRESPONSE._serialized_end=554 + _GETTESTRESULTREQUEST._serialized_start=556 + _GETTESTRESULTREQUEST._serialized_end=602 + _GETTESTRESULTRESPONSE._serialized_start=604 + _GETTESTRESULTRESPONSE._serialized_end=685 + _QUERYTESTRESULTSREQUEST._serialized_start=687 + _QUERYTESTRESULTSREQUEST._serialized_end=733 + _QUERYTESTRESULTSRESPONSE._serialized_start=735 + _QUERYTESTRESULTSRESPONSE._serialized_end=820 + _CREATESTEPREQUEST._serialized_start=822 + _CREATESTEPREQUEST._serialized_end=886 + _CREATESTEPRESPONSE._serialized_start=888 + _CREATESTEPRESPONSE._serialized_end=925 + _GETSTEPREQUEST._serialized_start=927 + _GETSTEPREQUEST._serialized_end=960 + _GETSTEPRESPONSE._serialized_start=962 + _GETSTEPRESPONSE._serialized_end=1024 + _QUERYSTEPSREQUEST._serialized_start=1026 + _QUERYSTEPSREQUEST._serialized_end=1066 + _QUERYSTEPSRESPONSE._serialized_start=1068 + _QUERYSTEPSRESPONSE._serialized_end=1134 + _PUBLISHCONDITIONREQUEST._serialized_start=1137 + _PUBLISHCONDITIONREQUEST._serialized_end=1271 + _PUBLISHCONDITIONRESPONSE._serialized_start=1273 + _PUBLISHCONDITIONRESPONSE._serialized_end=1321 + _PUBLISHCONDITIONBATCHREQUEST._serialized_start=1324 + _PUBLISHCONDITIONBATCHREQUEST._serialized_end=1471 + _PUBLISHCONDITIONBATCHRESPONSE._serialized_start=1473 + _PUBLISHCONDITIONBATCHRESPONSE._serialized_end=1526 + _PUBLISHMEASUREMENTREQUEST._serialized_start=1529 + _PUBLISHMEASUREMENTREQUEST._serialized_end=2431 + _PUBLISHMEASUREMENTRESPONSE._serialized_start=2433 + _PUBLISHMEASUREMENTRESPONSE._serialized_end=2485 + _PUBLISHMEASUREMENTBATCHREQUEST._serialized_start=2488 + _PUBLISHMEASUREMENTBATCHREQUEST._serialized_end=3541 + _PUBLISHMEASUREMENTBATCHRESPONSE._serialized_start=3543 + _PUBLISHMEASUREMENTBATCHRESPONSE._serialized_end=3601 + _GETMEASUREMENTREQUEST._serialized_start=3603 + _GETMEASUREMENTREQUEST._serialized_end=3650 + _GETMEASUREMENTRESPONSE._serialized_start=3652 + _GETMEASUREMENTRESPONSE._serialized_end=3754 + _GETCONDITIONREQUEST._serialized_start=3756 + _GETCONDITIONREQUEST._serialized_end=3799 + _GETCONDITIONRESPONSE._serialized_start=3801 + _GETCONDITIONRESPONSE._serialized_end=3897 + _QUERYCONDITIONSREQUEST._serialized_start=3899 + _QUERYCONDITIONSREQUEST._serialized_end=3944 + _QUERYCONDITIONSRESPONSE._serialized_start=3946 + _QUERYCONDITIONSRESPONSE._serialized_end=4046 + _QUERYMEASUREMENTSREQUEST._serialized_start=4048 + _QUERYMEASUREMENTSREQUEST._serialized_end=4095 + _QUERYMEASUREMENTSRESPONSE._serialized_start=4097 + _QUERYMEASUREMENTSRESPONSE._serialized_end=4203 + _READCONDITIONVALUEREQUEST._serialized_start=4205 + _READCONDITIONVALUEREQUEST._serialized_end=4254 + _READCONDITIONVALUERESPONSE._serialized_start=4256 + _READCONDITIONVALUERESPONSE._serialized_end=4338 + _READMEASUREMENTVALUEREQUEST._serialized_start=4340 + _READMEASUREMENTVALUEREQUEST._serialized_end=4393 + _READMEASUREMENTVALUERESPONSE._serialized_start=4396 + _READMEASUREMENTVALUERESPONSE._serialized_end=4951 + _DATASTORESERVICE._serialized_start=4954 + _DATASTORESERVICE._serialized_end=6881 # @@protoc_insertion_point(module_scope) diff --git a/packages/ni.measurements.data.v1.proto/src/ni/measurements/data/v1/data_store_service_pb2/__init__.pyi b/packages/ni.measurements.data.v1.proto/src/ni/measurements/data/v1/data_store_service_pb2/__init__.pyi index f518e7d0..d34d8026 100644 --- a/packages/ni.measurements.data.v1.proto/src/ni/measurements/data/v1/data_store_service_pb2/__init__.pyi +++ b/packages/ni.measurements.data.v1.proto/src/ni/measurements/data/v1/data_store_service_pb2/__init__.pyi @@ -12,8 +12,11 @@ import ni.measurements.data.v1.data_store_pb2 import ni.protobuf.types.precision_timestamp_pb2 import ni.protobuf.types.scalar_pb2 import ni.protobuf.types.vector_pb2 +import ni.protobuf.types.vector_wrappers_pb2 import ni.protobuf.types.waveform_pb2 +import ni.protobuf.types.waveform_wrappers_pb2 import ni.protobuf.types.xydata_pb2 +import ni.protobuf.types.xydata_wrappers_pb2 import typing DESCRIPTOR: google.protobuf.descriptor.FileDescriptor @@ -467,6 +470,14 @@ class PublishMeasurementBatchRequest(google.protobuf.message.Message): NAME_FIELD_NUMBER: builtins.int SCALAR_VALUES_FIELD_NUMBER: builtins.int + VECTOR_VALUES_FIELD_NUMBER: builtins.int + DOUBLE_ANALOG_WAVEFORM_VALUES_FIELD_NUMBER: builtins.int + X_Y_DATA_VALUES_FIELD_NUMBER: builtins.int + I16_ANALOG_WAVEFORM_VALUES_FIELD_NUMBER: builtins.int + DOUBLE_COMPLEX_WAVEFORM_VALUES_FIELD_NUMBER: builtins.int + I16_COMPLEX_WAVEFORM_VALUES_FIELD_NUMBER: builtins.int + DOUBLE_SPECTRUM_VALUES_FIELD_NUMBER: builtins.int + DIGITAL_WAVEFORM_VALUES_FIELD_NUMBER: builtins.int NOTES_FIELD_NUMBER: builtins.int TIMESTAMPS_FIELD_NUMBER: builtins.int OUTCOMES_FIELD_NUMBER: builtins.int @@ -487,7 +498,41 @@ class PublishMeasurementBatchRequest(google.protobuf.message.Message): This value is expected to be a parsable GUID. """ @property - def scalar_values(self) -> ni.protobuf.types.vector_pb2.Vector: ... + def scalar_values(self) -> ni.protobuf.types.vector_pb2.Vector: + """Scalar values packed into a vector (e.g., N doubles in a DoubleArray).""" + + @property + def vector_values(self) -> ni.protobuf.types.vector_wrappers_pb2.VectorArrayValue: + """N vector values, one per iteration.""" + + @property + def double_analog_waveform_values(self) -> ni.protobuf.types.waveform_wrappers_pb2.DoubleAnalogWaveformArrayValue: + """N double-precision analog waveforms, one per iteration.""" + + @property + def x_y_data_values(self) -> ni.protobuf.types.xydata_wrappers_pb2.DoubleXYDataArrayValue: + """N XY data sets, one per iteration.""" + + @property + def i16_analog_waveform_values(self) -> ni.protobuf.types.waveform_wrappers_pb2.I16AnalogWaveformArrayValue: + """N 16-bit integer analog waveforms, one per iteration.""" + + @property + def double_complex_waveform_values(self) -> ni.protobuf.types.waveform_wrappers_pb2.DoubleComplexWaveformArrayValue: + """N double-precision complex waveforms, one per iteration.""" + + @property + def i16_complex_waveform_values(self) -> ni.protobuf.types.waveform_wrappers_pb2.I16ComplexWaveformArrayValue: + """N 16-bit integer complex waveforms, one per iteration.""" + + @property + def double_spectrum_values(self) -> ni.protobuf.types.waveform_wrappers_pb2.DoubleSpectrumArrayValue: + """N double-precision spectrums, one per iteration.""" + + @property + def digital_waveform_values(self) -> ni.protobuf.types.waveform_wrappers_pb2.DigitalWaveformArrayValue: + """N digital waveforms, one per iteration.""" + @property def timestamps(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp]: """Optional. The timestamps corresponding to the N iterations of batched measurement being published. @@ -544,6 +589,14 @@ class PublishMeasurementBatchRequest(google.protobuf.message.Message): *, name: builtins.str = ..., scalar_values: ni.protobuf.types.vector_pb2.Vector | None = ..., + vector_values: ni.protobuf.types.vector_wrappers_pb2.VectorArrayValue | None = ..., + double_analog_waveform_values: ni.protobuf.types.waveform_wrappers_pb2.DoubleAnalogWaveformArrayValue | None = ..., + x_y_data_values: ni.protobuf.types.xydata_wrappers_pb2.DoubleXYDataArrayValue | None = ..., + i16_analog_waveform_values: ni.protobuf.types.waveform_wrappers_pb2.I16AnalogWaveformArrayValue | None = ..., + double_complex_waveform_values: ni.protobuf.types.waveform_wrappers_pb2.DoubleComplexWaveformArrayValue | None = ..., + i16_complex_waveform_values: ni.protobuf.types.waveform_wrappers_pb2.I16ComplexWaveformArrayValue | None = ..., + double_spectrum_values: ni.protobuf.types.waveform_wrappers_pb2.DoubleSpectrumArrayValue | None = ..., + digital_waveform_values: ni.protobuf.types.waveform_wrappers_pb2.DigitalWaveformArrayValue | None = ..., notes: builtins.str = ..., timestamps: collections.abc.Iterable[ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp] | None = ..., outcomes: collections.abc.Iterable[ni.measurements.data.v1.data_store_pb2.Outcome.ValueType] | None = ..., @@ -553,9 +606,9 @@ class PublishMeasurementBatchRequest(google.protobuf.message.Message): test_adapter_ids: collections.abc.Iterable[builtins.str] | None = ..., software_item_ids: collections.abc.Iterable[builtins.str] | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["scalar_values", b"scalar_values", "values", b"values"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["error_information", b"error_information", "hardware_item_ids", b"hardware_item_ids", "name", b"name", "notes", b"notes", "outcomes", b"outcomes", "scalar_values", b"scalar_values", "software_item_ids", b"software_item_ids", "step_id", b"step_id", "test_adapter_ids", b"test_adapter_ids", "timestamps", b"timestamps", "values", b"values"]) -> None: ... - def WhichOneof(self, oneof_group: typing.Literal["values", b"values"]) -> typing.Literal["scalar_values"] | None: ... + def HasField(self, field_name: typing.Literal["digital_waveform_values", b"digital_waveform_values", "double_analog_waveform_values", b"double_analog_waveform_values", "double_complex_waveform_values", b"double_complex_waveform_values", "double_spectrum_values", b"double_spectrum_values", "i16_analog_waveform_values", b"i16_analog_waveform_values", "i16_complex_waveform_values", b"i16_complex_waveform_values", "scalar_values", b"scalar_values", "values", b"values", "vector_values", b"vector_values", "x_y_data_values", b"x_y_data_values"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["digital_waveform_values", b"digital_waveform_values", "double_analog_waveform_values", b"double_analog_waveform_values", "double_complex_waveform_values", b"double_complex_waveform_values", "double_spectrum_values", b"double_spectrum_values", "error_information", b"error_information", "hardware_item_ids", b"hardware_item_ids", "i16_analog_waveform_values", b"i16_analog_waveform_values", "i16_complex_waveform_values", b"i16_complex_waveform_values", "name", b"name", "notes", b"notes", "outcomes", b"outcomes", "scalar_values", b"scalar_values", "software_item_ids", b"software_item_ids", "step_id", b"step_id", "test_adapter_ids", b"test_adapter_ids", "timestamps", b"timestamps", "values", b"values", "vector_values", b"vector_values", "x_y_data_values", b"x_y_data_values"]) -> None: ... + def WhichOneof(self, oneof_group: typing.Literal["values", b"values"]) -> typing.Literal["scalar_values", "vector_values", "double_analog_waveform_values", "x_y_data_values", "i16_analog_waveform_values", "double_complex_waveform_values", "i16_complex_waveform_values", "double_spectrum_values", "digital_waveform_values"] | None: ... global___PublishMeasurementBatchRequest = PublishMeasurementBatchRequest diff --git a/packages/ni.measurements.data.v1.proto/src/ni/measurements/data/v1/data_store_service_pb2_grpc/__init__.py b/packages/ni.measurements.data.v1.proto/src/ni/measurements/data/v1/data_store_service_pb2_grpc/__init__.py index 9a3b0a05..99061de4 100644 --- a/packages/ni.measurements.data.v1.proto/src/ni/measurements/data/v1/data_store_service_pb2_grpc/__init__.py +++ b/packages/ni.measurements.data.v1.proto/src/ni/measurements/data/v1/data_store_service_pb2_grpc/__init__.py @@ -180,7 +180,7 @@ def PublishMeasurement(self, request, context): raise NotImplementedError('Method not implemented!') def PublishMeasurementBatch(self, request, context): - """Publishes multiple scalar measurements at once for parametric sweeps. + """Publishes multiple measurements at once for parametric sweeps. """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') diff --git a/packages/ni.measurements.data.v1.proto/src/ni/measurements/data/v1/data_store_service_pb2_grpc/__init__.pyi b/packages/ni.measurements.data.v1.proto/src/ni/measurements/data/v1/data_store_service_pb2_grpc/__init__.pyi index 7059b267..670ec052 100644 --- a/packages/ni.measurements.data.v1.proto/src/ni/measurements/data/v1/data_store_service_pb2_grpc/__init__.pyi +++ b/packages/ni.measurements.data.v1.proto/src/ni/measurements/data/v1/data_store_service_pb2_grpc/__init__.pyi @@ -98,7 +98,7 @@ class DataStoreServiceStub: ni.measurements.data.v1.data_store_service_pb2.PublishMeasurementBatchRequest, ni.measurements.data.v1.data_store_service_pb2.PublishMeasurementBatchResponse, ] - """Publishes multiple scalar measurements at once for parametric sweeps.""" + """Publishes multiple measurements at once for parametric sweeps.""" GetMeasurement: grpc.UnaryUnaryMultiCallable[ ni.measurements.data.v1.data_store_service_pb2.GetMeasurementRequest, @@ -220,7 +220,7 @@ class DataStoreServiceAsyncStub: ni.measurements.data.v1.data_store_service_pb2.PublishMeasurementBatchRequest, ni.measurements.data.v1.data_store_service_pb2.PublishMeasurementBatchResponse, ] - """Publishes multiple scalar measurements at once for parametric sweeps.""" + """Publishes multiple measurements at once for parametric sweeps.""" GetMeasurement: grpc.aio.UnaryUnaryMultiCallable[ ni.measurements.data.v1.data_store_service_pb2.GetMeasurementRequest, @@ -362,7 +362,7 @@ class DataStoreServiceServicer(metaclass=abc.ABCMeta): request: ni.measurements.data.v1.data_store_service_pb2.PublishMeasurementBatchRequest, context: _ServicerContext, ) -> typing.Union[ni.measurements.data.v1.data_store_service_pb2.PublishMeasurementBatchResponse, collections.abc.Awaitable[ni.measurements.data.v1.data_store_service_pb2.PublishMeasurementBatchResponse]]: - """Publishes multiple scalar measurements at once for parametric sweeps.""" + """Publishes multiple measurements at once for parametric sweeps.""" @abc.abstractmethod def GetMeasurement( diff --git a/packages/ni.protobuf.types/src/ni/protobuf/types/vector_wrappers_pb2.py b/packages/ni.protobuf.types/src/ni/protobuf/types/vector_wrappers_pb2.py new file mode 100644 index 00000000..547a5884 --- /dev/null +++ b/packages/ni.protobuf.types/src/ni/protobuf/types/vector_wrappers_pb2.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: ni/protobuf/types/vector_wrappers.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from ni.protobuf.types import vector_pb2 as ni_dot_protobuf_dot_types_dot_vector__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'ni/protobuf/types/vector_wrappers.proto\x12\x11ni.protobuf.types\x1a\x1eni/protobuf/types/vector.proto\">\n\x10VectorArrayValue\x12*\n\x07vectors\x18\x01 \x03(\x0b\x32\x19.ni.protobuf.types.VectorB\x8b\x01\n\x15\x63om.ni.protobuf.typesB\x13VectorWrappersProtoP\x01Z\x05types\xa2\x02\x04NIPT\xaa\x02\"NationalInstruments.Protobuf.Types\xca\x02\x11NI\\PROTOBUF\\TYPES\xea\x02\x13NI::Protobuf::Typesb\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ni.protobuf.types.vector_wrappers_pb2', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.ni.protobuf.typesB\023VectorWrappersProtoP\001Z\005types\242\002\004NIPT\252\002\"NationalInstruments.Protobuf.Types\312\002\021NI\\PROTOBUF\\TYPES\352\002\023NI::Protobuf::Types' + _VECTORARRAYVALUE._serialized_start=94 + _VECTORARRAYVALUE._serialized_end=156 +# @@protoc_insertion_point(module_scope) diff --git a/packages/ni.protobuf.types/src/ni/protobuf/types/vector_wrappers_pb2.pyi b/packages/ni.protobuf.types/src/ni/protobuf/types/vector_wrappers_pb2.pyi new file mode 100644 index 00000000..147978a0 --- /dev/null +++ b/packages/ni.protobuf.types/src/ni/protobuf/types/vector_wrappers_pb2.pyi @@ -0,0 +1,34 @@ +""" +@generated by mypy-protobuf. Do not edit manually! +isort:skip_file +--------------------------------------------------------------------- +--------------------------------------------------------------------- +""" + +import builtins +import collections.abc +import google.protobuf.descriptor +import google.protobuf.internal.containers +import google.protobuf.message +import ni.protobuf.types.vector_pb2 +import typing + +DESCRIPTOR: google.protobuf.descriptor.FileDescriptor + +@typing.final +class VectorArrayValue(google.protobuf.message.Message): + """An array of vectors.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + VECTORS_FIELD_NUMBER: builtins.int + @property + def vectors(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[ni.protobuf.types.vector_pb2.Vector]: ... + def __init__( + self, + *, + vectors: collections.abc.Iterable[ni.protobuf.types.vector_pb2.Vector] | None = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["vectors", b"vectors"]) -> None: ... + +global___VectorArrayValue = VectorArrayValue diff --git a/packages/ni.protobuf.types/src/ni/protobuf/types/waveform_wrappers_pb2.py b/packages/ni.protobuf.types/src/ni/protobuf/types/waveform_wrappers_pb2.py index 1c8fa557..39254ef3 100644 --- a/packages/ni.protobuf.types/src/ni/protobuf/types/waveform_wrappers_pb2.py +++ b/packages/ni.protobuf.types/src/ni/protobuf/types/waveform_wrappers_pb2.py @@ -14,7 +14,7 @@ from ni.protobuf.types import waveform_pb2 as ni_dot_protobuf_dot_types_dot_waveform__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)ni/protobuf/types/waveform_wrappers.proto\x12\x11ni.protobuf.types\x1a ni/protobuf/types/waveform.proto\"\\\n\x1e\x44oubleAnalogWaveformArrayValue\x12:\n\twaveforms\x18\x01 \x03(\x0b\x32\'.ni.protobuf.types.DoubleAnalogWaveform\"V\n\x1bI16AnalogWaveformArrayValue\x12\x37\n\twaveforms\x18\x01 \x03(\x0b\x32$.ni.protobuf.types.I16AnalogWaveform\"^\n\x1f\x44oubleComplexWaveformArrayValue\x12;\n\twaveforms\x18\x01 \x03(\x0b\x32(.ni.protobuf.types.DoubleComplexWaveform\"X\n\x1cI16ComplexWaveformArrayValue\x12\x38\n\twaveforms\x18\x01 \x03(\x0b\x32%.ni.protobuf.types.I16ComplexWaveform\"P\n\x18\x44oubleSpectrumArrayValue\x12\x34\n\twaveforms\x18\x01 \x03(\x0b\x32!.ni.protobuf.types.DoubleSpectrumB\x8d\x01\n\x15\x63om.ni.protobuf.typesB\x15WaveformWrappersProtoP\x01Z\x05types\xa2\x02\x04NIPT\xaa\x02\"NationalInstruments.Protobuf.Types\xca\x02\x11NI\\PROTOBUF\\TYPES\xea\x02\x13NI::Protobuf::Typesb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)ni/protobuf/types/waveform_wrappers.proto\x12\x11ni.protobuf.types\x1a ni/protobuf/types/waveform.proto\"\\\n\x1e\x44oubleAnalogWaveformArrayValue\x12:\n\twaveforms\x18\x01 \x03(\x0b\x32\'.ni.protobuf.types.DoubleAnalogWaveform\"V\n\x1bI16AnalogWaveformArrayValue\x12\x37\n\twaveforms\x18\x01 \x03(\x0b\x32$.ni.protobuf.types.I16AnalogWaveform\"^\n\x1f\x44oubleComplexWaveformArrayValue\x12;\n\twaveforms\x18\x01 \x03(\x0b\x32(.ni.protobuf.types.DoubleComplexWaveform\"X\n\x1cI16ComplexWaveformArrayValue\x12\x38\n\twaveforms\x18\x01 \x03(\x0b\x32%.ni.protobuf.types.I16ComplexWaveform\"P\n\x18\x44oubleSpectrumArrayValue\x12\x34\n\twaveforms\x18\x01 \x03(\x0b\x32!.ni.protobuf.types.DoubleSpectrum\"R\n\x19\x44igitalWaveformArrayValue\x12\x35\n\twaveforms\x18\x01 \x03(\x0b\x32\".ni.protobuf.types.DigitalWaveformB\x8d\x01\n\x15\x63om.ni.protobuf.typesB\x15WaveformWrappersProtoP\x01Z\x05types\xa2\x02\x04NIPT\xaa\x02\"NationalInstruments.Protobuf.Types\xca\x02\x11NI\\PROTOBUF\\TYPES\xea\x02\x13NI::Protobuf::Typesb\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ni.protobuf.types.waveform_wrappers_pb2', globals()) @@ -32,4 +32,6 @@ _I16COMPLEXWAVEFORMARRAYVALUE._serialized_end=464 _DOUBLESPECTRUMARRAYVALUE._serialized_start=466 _DOUBLESPECTRUMARRAYVALUE._serialized_end=546 + _DIGITALWAVEFORMARRAYVALUE._serialized_start=548 + _DIGITALWAVEFORMARRAYVALUE._serialized_end=630 # @@protoc_insertion_point(module_scope) diff --git a/packages/ni.protobuf.types/src/ni/protobuf/types/waveform_wrappers_pb2.pyi b/packages/ni.protobuf.types/src/ni/protobuf/types/waveform_wrappers_pb2.pyi index c241d3c8..fcc493a8 100644 --- a/packages/ni.protobuf.types/src/ni/protobuf/types/waveform_wrappers_pb2.pyi +++ b/packages/ni.protobuf.types/src/ni/protobuf/types/waveform_wrappers_pb2.pyi @@ -104,3 +104,21 @@ class DoubleSpectrumArrayValue(google.protobuf.message.Message): def ClearField(self, field_name: typing.Literal["waveforms", b"waveforms"]) -> None: ... global___DoubleSpectrumArrayValue = DoubleSpectrumArrayValue + +@typing.final +class DigitalWaveformArrayValue(google.protobuf.message.Message): + """An array of digital waveforms.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + WAVEFORMS_FIELD_NUMBER: builtins.int + @property + def waveforms(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[ni.protobuf.types.waveform_pb2.DigitalWaveform]: ... + def __init__( + self, + *, + waveforms: collections.abc.Iterable[ni.protobuf.types.waveform_pb2.DigitalWaveform] | None = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["waveforms", b"waveforms"]) -> None: ... + +global___DigitalWaveformArrayValue = DigitalWaveformArrayValue diff --git a/packages/ni.protobuf.types/src/ni/protobuf/types/xydata_wrappers_pb2.py b/packages/ni.protobuf.types/src/ni/protobuf/types/xydata_wrappers_pb2.py new file mode 100644 index 00000000..4ca8b24f --- /dev/null +++ b/packages/ni.protobuf.types/src/ni/protobuf/types/xydata_wrappers_pb2.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: ni/protobuf/types/xydata_wrappers.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from ni.protobuf.types import xydata_pb2 as ni_dot_protobuf_dot_types_dot_xydata__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'ni/protobuf/types/xydata_wrappers.proto\x12\x11ni.protobuf.types\x1a\x1eni/protobuf/types/xydata.proto\"K\n\x16\x44oubleXYDataArrayValue\x12\x31\n\x08x_y_data\x18\x01 \x03(\x0b\x32\x1f.ni.protobuf.types.DoubleXYDataB\x8b\x01\n\x15\x63om.ni.protobuf.typesB\x13XYDataWrappersProtoP\x01Z\x05types\xa2\x02\x04NIPT\xaa\x02\"NationalInstruments.Protobuf.Types\xca\x02\x11NI\\PROTOBUF\\TYPES\xea\x02\x13NI::Protobuf::Typesb\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ni.protobuf.types.xydata_wrappers_pb2', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.ni.protobuf.typesB\023XYDataWrappersProtoP\001Z\005types\242\002\004NIPT\252\002\"NationalInstruments.Protobuf.Types\312\002\021NI\\PROTOBUF\\TYPES\352\002\023NI::Protobuf::Types' + _DOUBLEXYDATAARRAYVALUE._serialized_start=94 + _DOUBLEXYDATAARRAYVALUE._serialized_end=169 +# @@protoc_insertion_point(module_scope) diff --git a/packages/ni.protobuf.types/src/ni/protobuf/types/xydata_wrappers_pb2.pyi b/packages/ni.protobuf.types/src/ni/protobuf/types/xydata_wrappers_pb2.pyi new file mode 100644 index 00000000..416619da --- /dev/null +++ b/packages/ni.protobuf.types/src/ni/protobuf/types/xydata_wrappers_pb2.pyi @@ -0,0 +1,34 @@ +""" +@generated by mypy-protobuf. Do not edit manually! +isort:skip_file +--------------------------------------------------------------------- +--------------------------------------------------------------------- +""" + +import builtins +import collections.abc +import google.protobuf.descriptor +import google.protobuf.internal.containers +import google.protobuf.message +import ni.protobuf.types.xydata_pb2 +import typing + +DESCRIPTOR: google.protobuf.descriptor.FileDescriptor + +@typing.final +class DoubleXYDataArrayValue(google.protobuf.message.Message): + """An array of XY data sets.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + X_Y_DATA_FIELD_NUMBER: builtins.int + @property + def x_y_data(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[ni.protobuf.types.xydata_pb2.DoubleXYData]: ... + def __init__( + self, + *, + x_y_data: collections.abc.Iterable[ni.protobuf.types.xydata_pb2.DoubleXYData] | None = ..., + ) -> None: ... + def ClearField(self, field_name: typing.Literal["x_y_data", b"x_y_data"]) -> None: ... + +global___DoubleXYDataArrayValue = DoubleXYDataArrayValue From f1cf90cf26982cb5056217a346636644e446504a Mon Sep 17 00:00:00 2001 From: Michael Johansen Date: Wed, 8 Apr 2026 11:43:35 -0500 Subject: [PATCH 3/5] Specify a dev dependency from data.client to ni.protobuf.types Signed-off-by: Michael Johansen --- .../ni.measurements.data.v1.client/poetry.lock | 16 +++++++++------- .../pyproject.toml | 1 + 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/ni.measurements.data.v1.client/poetry.lock b/packages/ni.measurements.data.v1.client/poetry.lock index 458076f9..150f8f74 100644 --- a/packages/ni.measurements.data.v1.client/poetry.lock +++ b/packages/ni.measurements.data.v1.client/poetry.lock @@ -1144,20 +1144,22 @@ url = "../ni.measurements.metadata.v1.proto" [[package]] name = "ni-protobuf-types" -version = "1.1.0" +version = "1.1.1.dev0" description = "Protobuf data types for NI gRPC APIs" optional = false -python-versions = "<4.0,>=3.10" +python-versions = ">=3.10,<4.0" groups = ["main", "dev"] -files = [ - {file = "ni_protobuf_types-1.1.0-py3-none-any.whl", hash = "sha256:0c21c096cf8577483dade081c571305fe8d4cc759ce2c780e7437129a375942c"}, - {file = "ni_protobuf_types-1.1.0.tar.gz", hash = "sha256:98f0583405e219f6e128133c2f6c033f03cd83ebd3ce8098ad74ab99b8a253c1"}, -] +files = [] +develop = true [package.dependencies] nitypes = ">=1.1.0dev1" protobuf = ">=4.21" +[package.source] +type = "directory" +url = "../ni.protobuf.types" + [[package]] name = "ni-python-styleguide" version = "0.4.9" @@ -2342,4 +2344,4 @@ zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""] [metadata] lock-version = "2.1" python-versions = ">=3.10,<4.0" -content-hash = "bdd65601f2df846a78d85cf9750cc72e6fdbd6d5de52f9b4b6224526d30a3703" +content-hash = "19fcd10ccacf58742b946b7cc60dd52bed7029f12d5902bf689da972f7a28f2c" diff --git a/packages/ni.measurements.data.v1.client/pyproject.toml b/packages/ni.measurements.data.v1.client/pyproject.toml index 94095685..64b9e73e 100644 --- a/packages/ni.measurements.data.v1.client/pyproject.toml +++ b/packages/ni.measurements.data.v1.client/pyproject.toml @@ -47,6 +47,7 @@ ni-measurementlink-discovery-v1-client = { path = "../ni.measurementlink.discove ni-datamonikers-v1-proto = { path = "../ni.datamonikers.v1.proto", develop = true } ni-measurements-metadata-v1-proto = { path = "../ni.measurements.metadata.v1.proto", develop = true } ni-measurements-data-v1-proto = { path = "../ni.measurements.data.v1.proto", develop = true } +ni-protobuf-types = { path = "../ni.protobuf.types", develop = true } [tool.poetry.group.lint.dependencies] bandit = { version = ">=1.7", extras = ["toml"] } From 338b5bb0bc0b757bf8e401c5ae54d1f9c0a36ba4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 05:40:17 +0000 Subject: [PATCH 4/5] chore(deps): update third_party/ni-apis digest to 20f5ab8 --- third_party/ni-apis | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/ni-apis b/third_party/ni-apis index 85046c40..20f5ab82 160000 --- a/third_party/ni-apis +++ b/third_party/ni-apis @@ -1 +1 @@ -Subproject commit 85046c4057888c647921e544b5403d99f640bb8d +Subproject commit 20f5ab82ffbf0bb37558381c9d06c422568f8932 From 23bd3470b3875a98d1e33d6adc43a223c0cec915 Mon Sep 17 00:00:00 2001 From: Michael Johansen Date: Mon, 20 Apr 2026 10:14:54 -0500 Subject: [PATCH 5/5] Regenerate ni-apis stubs Signed-off-by: Michael Johansen --- .../src/ni/protobuf/types/waveform_pb2.py | 60 +++--- .../src/ni/protobuf/types/waveform_pb2.pyi | 200 ++++++++++++++++-- 2 files changed, 215 insertions(+), 45 deletions(-) diff --git a/packages/ni.protobuf.types/src/ni/protobuf/types/waveform_pb2.py b/packages/ni.protobuf.types/src/ni/protobuf/types/waveform_pb2.py index e5f6d7eb..798575fb 100644 --- a/packages/ni.protobuf.types/src/ni/protobuf/types/waveform_pb2.py +++ b/packages/ni.protobuf.types/src/ni/protobuf/types/waveform_pb2.py @@ -14,7 +14,7 @@ from ni.protobuf.types import precision_timestamp_pb2 as ni_dot_protobuf_dot_types_dot_precision__timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n ni/protobuf/types/waveform.proto\x12\x11ni.protobuf.types\x1a+ni/protobuf/types/precision_timestamp.proto\"\x90\x02\n\x14\x44oubleAnalogWaveform\x12\x31\n\x02t0\x18\x01 \x01(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x12\n\n\x02\x64t\x18\x02 \x01(\x01\x12\x0e\n\x06y_data\x18\x03 \x03(\x01\x12K\n\nattributes\x18\x04 \x03(\x0b\x32\x37.ni.protobuf.types.DoubleAnalogWaveform.AttributesEntry\x1a\\\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x38\n\x05value\x18\x02 \x01(\x0b\x32).ni.protobuf.types.WaveformAttributeValue:\x02\x38\x01\"\xb3\x02\n\x11I16AnalogWaveform\x12\x31\n\x02t0\x18\x01 \x01(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x12\n\n\x02\x64t\x18\x02 \x01(\x01\x12\x0e\n\x06y_data\x18\x03 \x03(\x11\x12H\n\nattributes\x18\x04 \x03(\x0b\x32\x34.ni.protobuf.types.I16AnalogWaveform.AttributesEntry\x12\'\n\x05scale\x18\x05 \x01(\x0b\x32\x18.ni.protobuf.types.Scale\x1a\\\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x38\n\x05value\x18\x02 \x01(\x0b\x32).ni.protobuf.types.WaveformAttributeValue:\x02\x38\x01\"\x92\x02\n\x15\x44oubleComplexWaveform\x12\x31\n\x02t0\x18\x01 \x01(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x12\n\n\x02\x64t\x18\x02 \x01(\x01\x12\x0e\n\x06y_data\x18\x03 \x03(\x01\x12L\n\nattributes\x18\x04 \x03(\x0b\x32\x38.ni.protobuf.types.DoubleComplexWaveform.AttributesEntry\x1a\\\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x38\n\x05value\x18\x02 \x01(\x0b\x32).ni.protobuf.types.WaveformAttributeValue:\x02\x38\x01\"\xb5\x02\n\x12I16ComplexWaveform\x12\x31\n\x02t0\x18\x01 \x01(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x12\n\n\x02\x64t\x18\x02 \x01(\x01\x12\x0e\n\x06y_data\x18\x03 \x03(\x11\x12I\n\nattributes\x18\x04 \x03(\x0b\x32\x35.ni.protobuf.types.I16ComplexWaveform.AttributesEntry\x12\'\n\x05scale\x18\x05 \x01(\x0b\x32\x18.ni.protobuf.types.Scale\x1a\\\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x38\n\x05value\x18\x02 \x01(\x0b\x32).ni.protobuf.types.WaveformAttributeValue:\x02\x38\x01\"\xf9\x01\n\x0e\x44oubleSpectrum\x12\x17\n\x0fstart_frequency\x18\x01 \x01(\x01\x12\x1b\n\x13\x66requency_increment\x18\x02 \x01(\x01\x12\x0c\n\x04\x64\x61ta\x18\x03 \x03(\x01\x12\x45\n\nattributes\x18\x04 \x03(\x0b\x32\x31.ni.protobuf.types.DoubleSpectrum.AttributesEntry\x1a\\\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x38\n\x05value\x18\x02 \x01(\x0b\x32).ni.protobuf.types.WaveformAttributeValue:\x02\x38\x01\"\x84\x01\n\x16WaveformAttributeValue\x12\x14\n\nbool_value\x18\x01 \x01(\x08H\x00\x12\x17\n\rinteger_value\x18\x02 \x01(\x05H\x00\x12\x16\n\x0c\x64ouble_value\x18\x03 \x01(\x01H\x00\x12\x16\n\x0cstring_value\x18\x04 \x01(\tH\x00\x42\x0b\n\tattribute\"\x9c\x02\n\x0f\x44igitalWaveform\x12\x31\n\x02t0\x18\x01 \x01(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x12\n\n\x02\x64t\x18\x02 \x01(\x01\x12\x14\n\x0csignal_count\x18\x03 \x01(\x05\x12\x0e\n\x06y_data\x18\x04 \x01(\x0c\x12\x46\n\nattributes\x18\x05 \x03(\x0b\x32\x32.ni.protobuf.types.DigitalWaveform.AttributesEntry\x1a\\\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x38\n\x05value\x18\x02 \x01(\x0b\x32).ni.protobuf.types.WaveformAttributeValue:\x02\x38\x01\"G\n\x05Scale\x12\x36\n\x0clinear_scale\x18\x01 \x01(\x0b\x32\x1e.ni.protobuf.types.LinearScaleH\x00\x42\x06\n\x04mode\"+\n\x0bLinearScale\x12\x0c\n\x04gain\x18\x01 \x01(\x01\x12\x0e\n\x06offset\x18\x02 \x01(\x01\x42\x85\x01\n\x15\x63om.ni.protobuf.typesB\rWaveformProtoP\x01Z\x05types\xa2\x02\x04NIPT\xaa\x02\"NationalInstruments.Protobuf.Types\xca\x02\x11NI\\PROTOBUF\\TYPES\xea\x02\x13NI::Protobuf::Typesb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n ni/protobuf/types/waveform.proto\x12\x11ni.protobuf.types\x1a+ni/protobuf/types/precision_timestamp.proto\"\x9a\x03\n\x14\x44oubleAnalogWaveform\x12\x31\n\x02t0\x18\x01 \x01(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x12\n\n\x02\x64t\x18\x02 \x01(\x01\x12\x0e\n\x06y_data\x18\x03 \x03(\x01\x12K\n\nattributes\x18\x04 \x03(\x0b\x32\x37.ni.protobuf.types.DoubleAnalogWaveform.AttributesEntry\x12\x38\n\ttimestamp\x18\x05 \x01(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x12\x13\n\x0btime_offset\x18\x06 \x01(\x01\x12\x39\n\ntimestamps\x18\x07 \x03(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x1a\\\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x38\n\x05value\x18\x02 \x01(\x0b\x32).ni.protobuf.types.WaveformAttributeValue:\x02\x38\x01\"\xbd\x03\n\x11I16AnalogWaveform\x12\x31\n\x02t0\x18\x01 \x01(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x12\n\n\x02\x64t\x18\x02 \x01(\x01\x12\x0e\n\x06y_data\x18\x03 \x03(\x11\x12H\n\nattributes\x18\x04 \x03(\x0b\x32\x34.ni.protobuf.types.I16AnalogWaveform.AttributesEntry\x12\'\n\x05scale\x18\x05 \x01(\x0b\x32\x18.ni.protobuf.types.Scale\x12\x38\n\ttimestamp\x18\x06 \x01(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x12\x13\n\x0btime_offset\x18\x07 \x01(\x01\x12\x39\n\ntimestamps\x18\x08 \x03(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x1a\\\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x38\n\x05value\x18\x02 \x01(\x0b\x32).ni.protobuf.types.WaveformAttributeValue:\x02\x38\x01\"\x9c\x03\n\x15\x44oubleComplexWaveform\x12\x31\n\x02t0\x18\x01 \x01(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x12\n\n\x02\x64t\x18\x02 \x01(\x01\x12\x0e\n\x06y_data\x18\x03 \x03(\x01\x12L\n\nattributes\x18\x04 \x03(\x0b\x32\x38.ni.protobuf.types.DoubleComplexWaveform.AttributesEntry\x12\x38\n\ttimestamp\x18\x05 \x01(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x12\x13\n\x0btime_offset\x18\x06 \x01(\x01\x12\x39\n\ntimestamps\x18\x07 \x03(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x1a\\\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x38\n\x05value\x18\x02 \x01(\x0b\x32).ni.protobuf.types.WaveformAttributeValue:\x02\x38\x01\"\xbf\x03\n\x12I16ComplexWaveform\x12\x31\n\x02t0\x18\x01 \x01(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x12\n\n\x02\x64t\x18\x02 \x01(\x01\x12\x0e\n\x06y_data\x18\x03 \x03(\x11\x12I\n\nattributes\x18\x04 \x03(\x0b\x32\x35.ni.protobuf.types.I16ComplexWaveform.AttributesEntry\x12\'\n\x05scale\x18\x05 \x01(\x0b\x32\x18.ni.protobuf.types.Scale\x12\x38\n\ttimestamp\x18\x06 \x01(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x12\x13\n\x0btime_offset\x18\x07 \x01(\x01\x12\x39\n\ntimestamps\x18\x08 \x03(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x1a\\\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x38\n\x05value\x18\x02 \x01(\x0b\x32).ni.protobuf.types.WaveformAttributeValue:\x02\x38\x01\"\xf9\x01\n\x0e\x44oubleSpectrum\x12\x17\n\x0fstart_frequency\x18\x01 \x01(\x01\x12\x1b\n\x13\x66requency_increment\x18\x02 \x01(\x01\x12\x0c\n\x04\x64\x61ta\x18\x03 \x03(\x01\x12\x45\n\nattributes\x18\x04 \x03(\x0b\x32\x31.ni.protobuf.types.DoubleSpectrum.AttributesEntry\x1a\\\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x38\n\x05value\x18\x02 \x01(\x0b\x32).ni.protobuf.types.WaveformAttributeValue:\x02\x38\x01\"\x84\x01\n\x16WaveformAttributeValue\x12\x14\n\nbool_value\x18\x01 \x01(\x08H\x00\x12\x17\n\rinteger_value\x18\x02 \x01(\x05H\x00\x12\x16\n\x0c\x64ouble_value\x18\x03 \x01(\x01H\x00\x12\x16\n\x0cstring_value\x18\x04 \x01(\tH\x00\x42\x0b\n\tattribute\"\xa6\x03\n\x0f\x44igitalWaveform\x12\x31\n\x02t0\x18\x01 \x01(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x12\n\n\x02\x64t\x18\x02 \x01(\x01\x12\x14\n\x0csignal_count\x18\x03 \x01(\x05\x12\x0e\n\x06y_data\x18\x04 \x01(\x0c\x12\x46\n\nattributes\x18\x05 \x03(\x0b\x32\x32.ni.protobuf.types.DigitalWaveform.AttributesEntry\x12\x38\n\ttimestamp\x18\x06 \x01(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x12\x13\n\x0btime_offset\x18\x07 \x01(\x01\x12\x39\n\ntimestamps\x18\x08 \x03(\x0b\x32%.ni.protobuf.types.PrecisionTimestamp\x1a\\\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x38\n\x05value\x18\x02 \x01(\x0b\x32).ni.protobuf.types.WaveformAttributeValue:\x02\x38\x01\"G\n\x05Scale\x12\x36\n\x0clinear_scale\x18\x01 \x01(\x0b\x32\x1e.ni.protobuf.types.LinearScaleH\x00\x42\x06\n\x04mode\"+\n\x0bLinearScale\x12\x0c\n\x04gain\x18\x01 \x01(\x01\x12\x0e\n\x06offset\x18\x02 \x01(\x01\x42\x85\x01\n\x15\x63om.ni.protobuf.typesB\rWaveformProtoP\x01Z\x05types\xa2\x02\x04NIPT\xaa\x02\"NationalInstruments.Protobuf.Types\xca\x02\x11NI\\PROTOBUF\\TYPES\xea\x02\x13NI::Protobuf::Typesb\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ni.protobuf.types.waveform_pb2', globals()) @@ -35,33 +35,33 @@ _DIGITALWAVEFORM_ATTRIBUTESENTRY._options = None _DIGITALWAVEFORM_ATTRIBUTESENTRY._serialized_options = b'8\001' _DOUBLEANALOGWAVEFORM._serialized_start=101 - _DOUBLEANALOGWAVEFORM._serialized_end=373 - _DOUBLEANALOGWAVEFORM_ATTRIBUTESENTRY._serialized_start=281 - _DOUBLEANALOGWAVEFORM_ATTRIBUTESENTRY._serialized_end=373 - _I16ANALOGWAVEFORM._serialized_start=376 - _I16ANALOGWAVEFORM._serialized_end=683 - _I16ANALOGWAVEFORM_ATTRIBUTESENTRY._serialized_start=281 - _I16ANALOGWAVEFORM_ATTRIBUTESENTRY._serialized_end=373 - _DOUBLECOMPLEXWAVEFORM._serialized_start=686 - _DOUBLECOMPLEXWAVEFORM._serialized_end=960 - _DOUBLECOMPLEXWAVEFORM_ATTRIBUTESENTRY._serialized_start=281 - _DOUBLECOMPLEXWAVEFORM_ATTRIBUTESENTRY._serialized_end=373 - _I16COMPLEXWAVEFORM._serialized_start=963 - _I16COMPLEXWAVEFORM._serialized_end=1272 - _I16COMPLEXWAVEFORM_ATTRIBUTESENTRY._serialized_start=281 - _I16COMPLEXWAVEFORM_ATTRIBUTESENTRY._serialized_end=373 - _DOUBLESPECTRUM._serialized_start=1275 - _DOUBLESPECTRUM._serialized_end=1524 - _DOUBLESPECTRUM_ATTRIBUTESENTRY._serialized_start=281 - _DOUBLESPECTRUM_ATTRIBUTESENTRY._serialized_end=373 - _WAVEFORMATTRIBUTEVALUE._serialized_start=1527 - _WAVEFORMATTRIBUTEVALUE._serialized_end=1659 - _DIGITALWAVEFORM._serialized_start=1662 - _DIGITALWAVEFORM._serialized_end=1946 - _DIGITALWAVEFORM_ATTRIBUTESENTRY._serialized_start=281 - _DIGITALWAVEFORM_ATTRIBUTESENTRY._serialized_end=373 - _SCALE._serialized_start=1948 - _SCALE._serialized_end=2019 - _LINEARSCALE._serialized_start=2021 - _LINEARSCALE._serialized_end=2064 + _DOUBLEANALOGWAVEFORM._serialized_end=511 + _DOUBLEANALOGWAVEFORM_ATTRIBUTESENTRY._serialized_start=419 + _DOUBLEANALOGWAVEFORM_ATTRIBUTESENTRY._serialized_end=511 + _I16ANALOGWAVEFORM._serialized_start=514 + _I16ANALOGWAVEFORM._serialized_end=959 + _I16ANALOGWAVEFORM_ATTRIBUTESENTRY._serialized_start=419 + _I16ANALOGWAVEFORM_ATTRIBUTESENTRY._serialized_end=511 + _DOUBLECOMPLEXWAVEFORM._serialized_start=962 + _DOUBLECOMPLEXWAVEFORM._serialized_end=1374 + _DOUBLECOMPLEXWAVEFORM_ATTRIBUTESENTRY._serialized_start=419 + _DOUBLECOMPLEXWAVEFORM_ATTRIBUTESENTRY._serialized_end=511 + _I16COMPLEXWAVEFORM._serialized_start=1377 + _I16COMPLEXWAVEFORM._serialized_end=1824 + _I16COMPLEXWAVEFORM_ATTRIBUTESENTRY._serialized_start=419 + _I16COMPLEXWAVEFORM_ATTRIBUTESENTRY._serialized_end=511 + _DOUBLESPECTRUM._serialized_start=1827 + _DOUBLESPECTRUM._serialized_end=2076 + _DOUBLESPECTRUM_ATTRIBUTESENTRY._serialized_start=419 + _DOUBLESPECTRUM_ATTRIBUTESENTRY._serialized_end=511 + _WAVEFORMATTRIBUTEVALUE._serialized_start=2079 + _WAVEFORMATTRIBUTEVALUE._serialized_end=2211 + _DIGITALWAVEFORM._serialized_start=2214 + _DIGITALWAVEFORM._serialized_end=2636 + _DIGITALWAVEFORM_ATTRIBUTESENTRY._serialized_start=419 + _DIGITALWAVEFORM_ATTRIBUTESENTRY._serialized_end=511 + _SCALE._serialized_start=2638 + _SCALE._serialized_end=2709 + _LINEARSCALE._serialized_start=2711 + _LINEARSCALE._serialized_end=2754 # @@protoc_insertion_point(module_scope) diff --git a/packages/ni.protobuf.types/src/ni/protobuf/types/waveform_pb2.pyi b/packages/ni.protobuf.types/src/ni/protobuf/types/waveform_pb2.pyi index a770cab3..7cb04608 100644 --- a/packages/ni.protobuf.types/src/ni/protobuf/types/waveform_pb2.pyi +++ b/packages/ni.protobuf.types/src/ni/protobuf/types/waveform_pb2.pyi @@ -43,11 +43,24 @@ class DoubleAnalogWaveform(google.protobuf.message.Message): DT_FIELD_NUMBER: builtins.int Y_DATA_FIELD_NUMBER: builtins.int ATTRIBUTES_FIELD_NUMBER: builtins.int + TIMESTAMP_FIELD_NUMBER: builtins.int + TIME_OFFSET_FIELD_NUMBER: builtins.int + TIMESTAMPS_FIELD_NUMBER: builtins.int dt: builtins.float """The time interval in seconds between data points in the waveform.""" + time_offset: builtins.float + """The offset, in seconds, relative to timestamp when the first sample occurs. + + When setting time_offset, either both t0 and timestamp should remain unset + or both should be set such that t0 = timestamp + time_offset. + """ @property def t0(self) -> ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp: - """The time of the first sample in y_data.""" + """The time of the first sample in y_data. + + Leave t0 unset only when the start time is unknown or when the waveform + has irregular timing and the timestamps field is used instead. + """ @property def y_data(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: @@ -57,6 +70,24 @@ class DoubleAnalogWaveform(google.protobuf.message.Message): def attributes(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, global___WaveformAttributeValue]: """Attribute names and values. See WaveformAttributeValue for more details.""" + @property + def timestamp(self) -> ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp: + """A timestamp denoting some external stimulus like a trigger. + + When setting timestamp, you should also always set t0 and time_offset such + that t0 = timestamp + time_offset. If timestamp is unset, it is inferred + that timestamp is the same as t0. + """ + + @property + def timestamps(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp]: + """The timestamps for each sample in y_data. + + The length of this field and y_data should match. This is for use in cases where + the waveform has irregular timing. This timestamps field is mutually exclusive + with t0/timestamp/time_offset/dt. + """ + def __init__( self, *, @@ -64,9 +95,12 @@ class DoubleAnalogWaveform(google.protobuf.message.Message): dt: builtins.float = ..., y_data: collections.abc.Iterable[builtins.float] | None = ..., attributes: collections.abc.Mapping[builtins.str, global___WaveformAttributeValue] | None = ..., + timestamp: ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp | None = ..., + time_offset: builtins.float = ..., + timestamps: collections.abc.Iterable[ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp] | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["t0", b"t0"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["attributes", b"attributes", "dt", b"dt", "t0", b"t0", "y_data", b"y_data"]) -> None: ... + def HasField(self, field_name: typing.Literal["t0", b"t0", "timestamp", b"timestamp"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["attributes", b"attributes", "dt", b"dt", "t0", b"t0", "time_offset", b"time_offset", "timestamp", b"timestamp", "timestamps", b"timestamps", "y_data", b"y_data"]) -> None: ... global___DoubleAnalogWaveform = DoubleAnalogWaveform @@ -99,11 +133,24 @@ class I16AnalogWaveform(google.protobuf.message.Message): Y_DATA_FIELD_NUMBER: builtins.int ATTRIBUTES_FIELD_NUMBER: builtins.int SCALE_FIELD_NUMBER: builtins.int + TIMESTAMP_FIELD_NUMBER: builtins.int + TIME_OFFSET_FIELD_NUMBER: builtins.int + TIMESTAMPS_FIELD_NUMBER: builtins.int dt: builtins.float """The time interval in seconds between data points in the waveform.""" + time_offset: builtins.float + """The offset, in seconds, relative to timestamp when the first sample occurs. + + When setting time_offset, either both t0 and timestamp should remain unset + or both should be set such that t0 = timestamp + time_offset. + """ @property def t0(self) -> ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp: - """The time of the first sample in y_data.""" + """The time of the first sample in y_data. + + Leave t0 unset only when the start time is unknown or when the waveform + has irregular timing and the timestamps field is used instead. + """ @property def y_data(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: @@ -117,6 +164,24 @@ class I16AnalogWaveform(google.protobuf.message.Message): def scale(self) -> global___Scale: """Optional scaling information used to convert raw data to scaled data.""" + @property + def timestamp(self) -> ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp: + """A timestamp denoting some external stimulus like a trigger. + + When setting timestamp, you should also always set t0 and time_offset such + that t0 = timestamp + time_offset. If timestamp is unset, it is inferred + that timestamp is the same as t0. + """ + + @property + def timestamps(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp]: + """The timestamps for each sample in y_data. + + The length of this field and y_data should match. This is for use in cases where + the waveform has irregular timing. This timestamps field is mutually exclusive + with t0/timestamp/time_offset/dt. + """ + def __init__( self, *, @@ -125,9 +190,12 @@ class I16AnalogWaveform(google.protobuf.message.Message): y_data: collections.abc.Iterable[builtins.int] | None = ..., attributes: collections.abc.Mapping[builtins.str, global___WaveformAttributeValue] | None = ..., scale: global___Scale | None = ..., + timestamp: ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp | None = ..., + time_offset: builtins.float = ..., + timestamps: collections.abc.Iterable[ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp] | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["scale", b"scale", "t0", b"t0"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["attributes", b"attributes", "dt", b"dt", "scale", b"scale", "t0", b"t0", "y_data", b"y_data"]) -> None: ... + def HasField(self, field_name: typing.Literal["scale", b"scale", "t0", b"t0", "timestamp", b"timestamp"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["attributes", b"attributes", "dt", b"dt", "scale", b"scale", "t0", b"t0", "time_offset", b"time_offset", "timestamp", b"timestamp", "timestamps", b"timestamps", "y_data", b"y_data"]) -> None: ... global___I16AnalogWaveform = I16AnalogWaveform @@ -159,11 +227,24 @@ class DoubleComplexWaveform(google.protobuf.message.Message): DT_FIELD_NUMBER: builtins.int Y_DATA_FIELD_NUMBER: builtins.int ATTRIBUTES_FIELD_NUMBER: builtins.int + TIMESTAMP_FIELD_NUMBER: builtins.int + TIME_OFFSET_FIELD_NUMBER: builtins.int + TIMESTAMPS_FIELD_NUMBER: builtins.int dt: builtins.float """The time interval in seconds between data points in the waveform.""" + time_offset: builtins.float + """The offset, in seconds, relative to timestamp when the first sample occurs. + + When setting time_offset, either both t0 and timestamp should remain unset + or both should be set such that t0 = timestamp + time_offset. + """ @property def t0(self) -> ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp: - """The time of the first sample in y_data.""" + """The time of the first sample in y_data. + + Leave t0 unset only when the start time is unknown or when the waveform + has irregular timing and the timestamps field is used instead. + """ @property def y_data(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: @@ -177,6 +258,24 @@ class DoubleComplexWaveform(google.protobuf.message.Message): def attributes(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, global___WaveformAttributeValue]: """Attribute names and values. See WaveformAttributeValue for more details.""" + @property + def timestamp(self) -> ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp: + """A timestamp denoting some external stimulus like a trigger. + + When setting timestamp, you should also always set t0 and time_offset such + that t0 = timestamp + time_offset. If timestamp is unset, it is inferred + that timestamp is the same as t0. + """ + + @property + def timestamps(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp]: + """The timestamps for each sample in y_data. + + The length of this field and y_data should match. This is for use in cases where + the waveform has irregular timing. This timestamps field is mutually exclusive + with t0/timestamp/time_offset/dt. + """ + def __init__( self, *, @@ -184,9 +283,12 @@ class DoubleComplexWaveform(google.protobuf.message.Message): dt: builtins.float = ..., y_data: collections.abc.Iterable[builtins.float] | None = ..., attributes: collections.abc.Mapping[builtins.str, global___WaveformAttributeValue] | None = ..., + timestamp: ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp | None = ..., + time_offset: builtins.float = ..., + timestamps: collections.abc.Iterable[ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp] | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["t0", b"t0"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["attributes", b"attributes", "dt", b"dt", "t0", b"t0", "y_data", b"y_data"]) -> None: ... + def HasField(self, field_name: typing.Literal["t0", b"t0", "timestamp", b"timestamp"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["attributes", b"attributes", "dt", b"dt", "t0", b"t0", "time_offset", b"time_offset", "timestamp", b"timestamp", "timestamps", b"timestamps", "y_data", b"y_data"]) -> None: ... global___DoubleComplexWaveform = DoubleComplexWaveform @@ -219,11 +321,24 @@ class I16ComplexWaveform(google.protobuf.message.Message): Y_DATA_FIELD_NUMBER: builtins.int ATTRIBUTES_FIELD_NUMBER: builtins.int SCALE_FIELD_NUMBER: builtins.int + TIMESTAMP_FIELD_NUMBER: builtins.int + TIME_OFFSET_FIELD_NUMBER: builtins.int + TIMESTAMPS_FIELD_NUMBER: builtins.int dt: builtins.float """The time interval in seconds between data points in the waveform.""" + time_offset: builtins.float + """The offset, in seconds, relative to timestamp when the first sample occurs. + + When setting time_offset, either both t0 and timestamp should remain unset + or both should be set such that t0 = timestamp + time_offset. + """ @property def t0(self) -> ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp: - """The time of the first sample in y_data.""" + """The time of the first sample in y_data. + + Leave t0 unset only when the start time is unknown or when the waveform + has irregular timing and the timestamps field is used instead. + """ @property def y_data(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: @@ -241,6 +356,24 @@ class I16ComplexWaveform(google.protobuf.message.Message): def scale(self) -> global___Scale: """Optional scaling information used to convert raw data to scaled data.""" + @property + def timestamp(self) -> ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp: + """A timestamp denoting some external stimulus like a trigger. + + When setting timestamp, you should also always set t0 and time_offset such + that t0 = timestamp + time_offset. If timestamp is unset, it is inferred + that timestamp is the same as t0. + """ + + @property + def timestamps(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp]: + """The timestamps for each sample in y_data. + + The length of this field and y_data should match. This is for use in cases where + the waveform has irregular timing. This timestamps field is mutually exclusive + with t0/timestamp/time_offset/dt. + """ + def __init__( self, *, @@ -249,9 +382,12 @@ class I16ComplexWaveform(google.protobuf.message.Message): y_data: collections.abc.Iterable[builtins.int] | None = ..., attributes: collections.abc.Mapping[builtins.str, global___WaveformAttributeValue] | None = ..., scale: global___Scale | None = ..., + timestamp: ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp | None = ..., + time_offset: builtins.float = ..., + timestamps: collections.abc.Iterable[ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp] | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["scale", b"scale", "t0", b"t0"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["attributes", b"attributes", "dt", b"dt", "scale", b"scale", "t0", b"t0", "y_data", b"y_data"]) -> None: ... + def HasField(self, field_name: typing.Literal["scale", b"scale", "t0", b"t0", "timestamp", b"timestamp"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["attributes", b"attributes", "dt", b"dt", "scale", b"scale", "t0", b"t0", "time_offset", b"time_offset", "timestamp", b"timestamp", "timestamps", b"timestamps", "y_data", b"y_data"]) -> None: ... global___I16ComplexWaveform = I16ComplexWaveform @@ -379,6 +515,9 @@ class DigitalWaveform(google.protobuf.message.Message): SIGNAL_COUNT_FIELD_NUMBER: builtins.int Y_DATA_FIELD_NUMBER: builtins.int ATTRIBUTES_FIELD_NUMBER: builtins.int + TIMESTAMP_FIELD_NUMBER: builtins.int + TIME_OFFSET_FIELD_NUMBER: builtins.int + TIMESTAMPS_FIELD_NUMBER: builtins.int dt: builtins.float """The time interval in seconds between data points in the waveform.""" signal_count: builtins.int @@ -389,14 +528,42 @@ class DigitalWaveform(google.protobuf.message.Message): This data is a flattened array of bytes that are ordered such that each signal_count bytes represents a sample. """ + time_offset: builtins.float + """The offset, in seconds, relative to timestamp when the first sample occurs. + + When setting time_offset, either both t0 and timestamp should remain unset + or both should be set such that t0 = timestamp + time_offset. + """ @property def t0(self) -> ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp: - """The time of the first sample in y_data.""" + """The time of the first sample in y_data. + + Leave t0 unset only when the start time is unknown or when the waveform + has irregular timing and the timestamps field is used instead. + """ @property def attributes(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, global___WaveformAttributeValue]: """Attribute names and values. See WaveformAttributeValue for more details.""" + @property + def timestamp(self) -> ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp: + """A timestamp denoting some external stimulus like a trigger. + + When setting timestamp, you should also always set t0 and time_offset such + that t0 = timestamp + time_offset. If timestamp is unset, it is inferred + that timestamp is the same as t0. + """ + + @property + def timestamps(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp]: + """The timestamps for each sample in y_data. + + The length of this field and y_data should match. This is for use in cases where + the waveform has irregular timing. This timestamps field is mutually exclusive + with t0/timestamp/time_offset/dt. + """ + def __init__( self, *, @@ -405,9 +572,12 @@ class DigitalWaveform(google.protobuf.message.Message): signal_count: builtins.int = ..., y_data: builtins.bytes = ..., attributes: collections.abc.Mapping[builtins.str, global___WaveformAttributeValue] | None = ..., + timestamp: ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp | None = ..., + time_offset: builtins.float = ..., + timestamps: collections.abc.Iterable[ni.protobuf.types.precision_timestamp_pb2.PrecisionTimestamp] | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["t0", b"t0"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["attributes", b"attributes", "dt", b"dt", "signal_count", b"signal_count", "t0", b"t0", "y_data", b"y_data"]) -> None: ... + def HasField(self, field_name: typing.Literal["t0", b"t0", "timestamp", b"timestamp"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["attributes", b"attributes", "dt", b"dt", "signal_count", b"signal_count", "t0", b"t0", "time_offset", b"time_offset", "timestamp", b"timestamp", "timestamps", b"timestamps", "y_data", b"y_data"]) -> None: ... global___DigitalWaveform = DigitalWaveform