diff --git a/examples/notebooks/custom-metadata/custom_metadata.ipynb b/examples/notebooks/custom-metadata/custom_metadata.ipynb index 4af6bbc..3bed949 100644 --- a/examples/notebooks/custom-metadata/custom_metadata.ipynb +++ b/examples/notebooks/custom-metadata/custom_metadata.ipynb @@ -141,7 +141,7 @@ "\n", "step = Step(name=\"Initial step\", test_result_id=test_result_id)\n", "step_id = data_store_client.create_step(step)\n", - "published_measurement = data_store_client.publish_measurement(\n", + "data_store_client.publish_measurement(\n", " name=\"scope reading\",\n", " value=waveform,\n", " step_id=step_id,\n", diff --git a/examples/notebooks/overview/publish_measurement.ipynb b/examples/notebooks/overview/publish_measurement.ipynb index 7e94ec8..48e562e 100644 --- a/examples/notebooks/overview/publish_measurement.ipynb +++ b/examples/notebooks/overview/publish_measurement.ipynb @@ -223,13 +223,12 @@ ")\n", "step = Step(name=\"Initial step\", test_result_id=test_result_id)\n", "step_id = data_store_client.create_step(step)\n", - "published_measurement = data_store_client.publish_measurement(\n", + "published_measurement_id = data_store_client.publish_measurement(\n", " name=name,\n", " value=waveform,\n", " step_id=step_id,\n", ")\n", - "\n", - "print(f\"The published measurement id is {published_measurement.id}\")" + "print(f\"The published measurement id is {published_measurement_id}\")" ] }, { @@ -251,7 +250,7 @@ "source": [ "from nitypes.waveform import AnalogWaveform\n", "\n", - "published_measurements = data_store_client.query_measurements(odata_query=f\"$filter=id eq {published_measurement.id}\")\n", + "published_measurements = data_store_client.query_measurements(odata_query=f\"$filter=id eq {published_measurement_id}\")\n", "found_measurement = next(iter(published_measurements), None)\n", "\n", "if found_measurement is not None:\n", diff --git a/examples/overview/poetry.lock b/examples/overview/poetry.lock index 576d22c..dab64b3 100644 --- a/examples/overview/poetry.lock +++ b/examples/overview/poetry.lock @@ -639,7 +639,7 @@ version = "0.1.0.dev1" description = "gRPC Client for NI Data Moniker Service" optional = false python-versions = "<4.0,>=3.9" -groups = ["main", "dev"] +groups = ["dev"] files = [ {file = "ni_datamonikers_v1_client-0.1.0.dev1-py3-none-any.whl", hash = "sha256:2820039151831aba11e3acd7071a7eaaa9ead2ce28b00f0da7d4b1179fc46150"}, {file = "ni_datamonikers_v1_client-0.1.0.dev1.tar.gz", hash = "sha256:dad00b527795517eb0cb786dde7c3989ccac7f9ee5636b1112e9fdd73f4251ae"}, @@ -655,7 +655,7 @@ version = "0.1.0.dev0" description = "Protobuf data types and service stub for NI data moniker gRPC APIs" optional = false python-versions = "<4.0,>=3.9" -groups = ["main", "dev"] +groups = ["dev"] files = [ {file = "ni_datamonikers_v1_proto-0.1.0.dev0-py3-none-any.whl", hash = "sha256:5ae96df50a010de68b40527e75696eeca2fc1522ab9d8a169a5993f031eb2185"}, {file = "ni_datamonikers_v1_proto-0.1.0.dev0.tar.gz", hash = "sha256:cdcf9b4d1fc463f4b2664949f6037bdcc0a6556679eddb3350b5630873da4147"}, @@ -677,7 +677,7 @@ develop = true [package.dependencies] hightime = ">=0.3.0.dev0" ni-datamonikers-v1-client = ">=0.1.0.dev1" -ni-measurements-data-v1-client = ">=0.2.0.dev2" +ni-measurements-data-v1-client = ">=0.2.0.dev4" ni-measurements-metadata-v1-client = ">=0.2.0.dev2" ni-protobuf-types = ">=1.0.1.dev0" protobuf = ">=4.21" @@ -692,7 +692,7 @@ version = "1.0.0" description = "gRPC Extensions" optional = false python-versions = "<4.0,>=3.9" -groups = ["main", "dev"] +groups = ["dev"] files = [ {file = "ni_grpc_extensions-1.0.0-py3-none-any.whl", hash = "sha256:6b8181284370a53546ffd371d334f15e293cae5e9ff06fa2e467d1714bf7a03f"}, {file = "ni_grpc_extensions-1.0.0.tar.gz", hash = "sha256:6e066246ce9a4b4420f5e503769b23c31a49c430be6ebd72324c5b5a15c34ebb"}, @@ -708,7 +708,7 @@ version = "1.0.0" description = "gRPC Client for NI Discovery Service" optional = false python-versions = "<4.0,>=3.9" -groups = ["main", "dev"] +groups = ["dev"] files = [ {file = "ni_measurementlink_discovery_v1_client-1.0.0-py3-none-any.whl", hash = "sha256:6a4c45d2517a7c6017a3b7dd817a6d7ebc8ebec318243c4f17778115a1a192a6"}, {file = "ni_measurementlink_discovery_v1_client-1.0.0.tar.gz", hash = "sha256:2aa2a0c55f6599ffa3ff05e67e6ff89360f22bf0082e512348a41997ddfde3f8"}, @@ -726,7 +726,7 @@ version = "1.0.0" description = "Protobuf data types for NI discovery gRPC APIs" optional = false python-versions = "<4.0,>=3.9" -groups = ["main", "dev"] +groups = ["dev"] files = [ {file = "ni_measurementlink_discovery_v1_proto-1.0.0-py3-none-any.whl", hash = "sha256:093eb4ffd27338fbea4909aea30afbd3090f482f3a1dcc98e63bbaf1a6b4da8b"}, {file = "ni_measurementlink_discovery_v1_proto-1.0.0.tar.gz", hash = "sha256:11353eefdecc49244783d76a332bc855589eb0bb8c882f53c8f9b0a47ca91115"}, @@ -737,30 +737,30 @@ protobuf = ">=4.21" [[package]] name = "ni-measurements-data-v1-client" -version = "0.2.0.dev2" +version = "0.2.0.dev4" description = "gRPC Client for NI Data Store Service" optional = false python-versions = "<4.0,>=3.10" -groups = ["main", "dev"] +groups = ["dev"] files = [ - {file = "ni_measurements_data_v1_client-0.2.0.dev2-py3-none-any.whl", hash = "sha256:5502c5dfc7bb5543eda2e640978c24ae8069ce0f0af1ee6b6c7e6de3ff0db32e"}, - {file = "ni_measurements_data_v1_client-0.2.0.dev2.tar.gz", hash = "sha256:ea5b5c4dce54cb213fb8348c196feab1aaed6d6100f02d8e21cca26acf7d2935"}, + {file = "ni_measurements_data_v1_client-0.2.0.dev4-py3-none-any.whl", hash = "sha256:e0c5c8e34a77be7e148bd7ce3a898ca87d98497e72c9483278ee9ade5d4b8b7d"}, + {file = "ni_measurements_data_v1_client-0.2.0.dev4.tar.gz", hash = "sha256:e31631edd75618f7f64651e02b2883691190ad608cfa14be7d15748f40b0a592"}, ] [package.dependencies] ni-measurementlink-discovery-v1-client = ">=0.1.0.dev0" -ni-measurements-data-v1-proto = ">=0.1.0.dev6" +ni-measurements-data-v1-proto = ">=0.1.0.dev7" [[package]] name = "ni-measurements-data-v1-proto" -version = "0.1.0.dev6" +version = "0.1.0.dev7" description = "Protobuf data types and service stubs for NI data store gRPC APIs" optional = false python-versions = "<4.0,>=3.10" -groups = ["main", "dev"] +groups = ["dev"] files = [ - {file = "ni_measurements_data_v1_proto-0.1.0.dev6-py3-none-any.whl", hash = "sha256:4ad861df9a621930742ecfa4868d616186650159ea229ef811679392c7d76b35"}, - {file = "ni_measurements_data_v1_proto-0.1.0.dev6.tar.gz", hash = "sha256:8ebe2e605dd7d1428e6eeeec80b57a62ecaaa8f4d63aa994ffecf80428a0e73b"}, + {file = "ni_measurements_data_v1_proto-0.1.0.dev7-py3-none-any.whl", hash = "sha256:3342ad080ce97f28a5df6906d6f427826e2079f5281f20bc2a99a58ca471c40c"}, + {file = "ni_measurements_data_v1_proto-0.1.0.dev7.tar.gz", hash = "sha256:979b897cd92ea832dc3ad2afbeaa42f005c9161fdf2089bd043ededbf38249ca"}, ] [package.dependencies] @@ -775,7 +775,7 @@ version = "0.2.0.dev2" description = "gRPC Client for NI Metadata Store Service" optional = false python-versions = "<4.0,>=3.10" -groups = ["main", "dev"] +groups = ["dev"] files = [ {file = "ni_measurements_metadata_v1_client-0.2.0.dev2-py3-none-any.whl", hash = "sha256:20e1494e63d9f0f42dfba249e9f242935c75afc8a24721bf8e124d4b06667b51"}, {file = "ni_measurements_metadata_v1_client-0.2.0.dev2.tar.gz", hash = "sha256:33f004bef74d10fef0c16382263c1863ee160650f14e146654bccda62313c97e"}, @@ -791,7 +791,7 @@ version = "0.1.0.dev5" description = "Protobuf data types and service stub for NI metadata store gRPC APIs" optional = false python-versions = "<4.0,>=3.10" -groups = ["main", "dev"] +groups = ["dev"] files = [ {file = "ni_measurements_metadata_v1_proto-0.1.0.dev5-py3-none-any.whl", hash = "sha256:b361fa1060d50f8868ef24f944cbab90b5f158a9cee31d5acb76927853f74367"}, {file = "ni_measurements_metadata_v1_proto-0.1.0.dev5.tar.gz", hash = "sha256:99dcd79a34d111a545235ab361ffda477b721a29a3697d080743e9b357cc4d21"}, @@ -1230,7 +1230,7 @@ version = "311" description = "Python for Window Extensions" optional = false python-versions = "*" -groups = ["main", "dev"] +groups = ["dev"] markers = "sys_platform == \"win32\"" files = [ {file = "pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3"}, @@ -1359,7 +1359,7 @@ version = "1.0.1" description = "Generates Event Tracing for Windows events using TraceLogging" optional = false python-versions = ">=3.6" -groups = ["main", "dev"] +groups = ["dev"] markers = "sys_platform == \"win32\"" files = [ {file = "traceloggingdynamic-1.0.1-py3-none-any.whl", hash = "sha256:0e19da491a8960725b3622366487ae35f49d8f595bb2e4e5ce1795eb5928db7c"}, @@ -1405,4 +1405,4 @@ files = [ [metadata] lock-version = "2.1" python-versions = "^3.10" -content-hash = "454de401cb17890615821379675d889a2909bb10f8eb28d03765c3a3d05df88d" +content-hash = "1d505e9779821403c2d276dccbbf8ccdfcf52a11c2e07d9d556fb74f6f1870a7" diff --git a/examples/overview/pyproject.toml b/examples/overview/pyproject.toml index 920340d..d13bc16 100644 --- a/examples/overview/pyproject.toml +++ b/examples/overview/pyproject.toml @@ -41,9 +41,6 @@ requires-poetry = '>=2.1,<3.0' [tool.poetry.dependencies] python = "^3.10" protobuf = {version=">=4.21"} -ni-datamonikers-v1-client = { version = ">=0.1.0.dev1", allow-prereleases = true } -ni-measurements-data-v1-client = { version = ">=0.2.0.dev2", allow-prereleases = true } -ni-measurements-metadata-v1-client = { version = ">=0.2.0.dev2", allow-prereleases = true } ni-protobuf-types = { version = ">=1.0.1.dev0", allow-prereleases = true } hightime = { version = ">=0.3.0.dev0", allow-prereleases = true } grpcio-tools = [ diff --git a/examples/overview/src/overview.py b/examples/overview/src/overview.py index 01f63a7..3257e43 100644 --- a/examples/overview/src/overview.py +++ b/examples/overview/src/overview.py @@ -77,16 +77,17 @@ def publish_data() -> str: # Publish the test step with the waveform data step = Step(name="Initial step", test_result_id=test_result_id) step_id = data_store_client.create_step(step) - published_measurement = data_store_client.publish_measurement( + published_measurement_id = data_store_client.publish_measurement( name=name, value=waveform, step_id=step_id, ) + published_measurement = data_store_client.get_measurement(published_measurement_id) print( f"Published measurement: '{published_measurement.name}' with id {published_measurement.id}" ) - return published_measurement.id + return published_measurement_id def query_data(published_measurement_id: str) -> None: diff --git a/examples/system/poetry.lock b/examples/system/poetry.lock index 3c45741..d1ea63e 100644 --- a/examples/system/poetry.lock +++ b/examples/system/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.4 and should not be changed by hand. [[package]] name = "black" @@ -402,8 +402,8 @@ develop = true [package.dependencies] hightime = ">=0.3.0.dev0" ni-datamonikers-v1-client = ">=0.1.0.dev1" -ni-measurements-data-v1-client = ">=0.2.0.dev1" -ni-measurements-metadata-v1-client = ">=0.2.0.dev1" +ni-measurements-data-v1-client = ">=0.2.0.dev4" +ni-measurements-metadata-v1-client = ">=0.2.0.dev2" ni-protobuf-types = ">=1.0.1.dev0" protobuf = ">=4.21" @@ -462,30 +462,30 @@ protobuf = ">=4.21" [[package]] name = "ni-measurements-data-v1-client" -version = "0.2.0.dev2" +version = "0.2.0.dev4" description = "gRPC Client for NI Data Store Service" optional = false python-versions = "<4.0,>=3.10" groups = ["dev"] files = [ - {file = "ni_measurements_data_v1_client-0.2.0.dev2-py3-none-any.whl", hash = "sha256:5502c5dfc7bb5543eda2e640978c24ae8069ce0f0af1ee6b6c7e6de3ff0db32e"}, - {file = "ni_measurements_data_v1_client-0.2.0.dev2.tar.gz", hash = "sha256:ea5b5c4dce54cb213fb8348c196feab1aaed6d6100f02d8e21cca26acf7d2935"}, + {file = "ni_measurements_data_v1_client-0.2.0.dev4-py3-none-any.whl", hash = "sha256:e0c5c8e34a77be7e148bd7ce3a898ca87d98497e72c9483278ee9ade5d4b8b7d"}, + {file = "ni_measurements_data_v1_client-0.2.0.dev4.tar.gz", hash = "sha256:e31631edd75618f7f64651e02b2883691190ad608cfa14be7d15748f40b0a592"}, ] [package.dependencies] ni-measurementlink-discovery-v1-client = ">=0.1.0.dev0" -ni-measurements-data-v1-proto = ">=0.1.0.dev6" +ni-measurements-data-v1-proto = ">=0.1.0.dev7" [[package]] name = "ni-measurements-data-v1-proto" -version = "0.1.0.dev6" +version = "0.1.0.dev7" description = "Protobuf data types and service stubs for NI data store gRPC APIs" optional = false python-versions = "<4.0,>=3.10" groups = ["dev"] files = [ - {file = "ni_measurements_data_v1_proto-0.1.0.dev6-py3-none-any.whl", hash = "sha256:4ad861df9a621930742ecfa4868d616186650159ea229ef811679392c7d76b35"}, - {file = "ni_measurements_data_v1_proto-0.1.0.dev6.tar.gz", hash = "sha256:8ebe2e605dd7d1428e6eeeec80b57a62ecaaa8f4d63aa994ffecf80428a0e73b"}, + {file = "ni_measurements_data_v1_proto-0.1.0.dev7-py3-none-any.whl", hash = "sha256:3342ad080ce97f28a5df6906d6f427826e2079f5281f20bc2a99a58ca471c40c"}, + {file = "ni_measurements_data_v1_proto-0.1.0.dev7.tar.gz", hash = "sha256:979b897cd92ea832dc3ad2afbeaa42f005c9161fdf2089bd043ededbf38249ca"}, ] [package.dependencies] diff --git a/poetry.lock b/poetry.lock index cd88e83..38bad17 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2334,30 +2334,30 @@ protobuf = ">=4.21" [[package]] name = "ni-measurements-data-v1-client" -version = "0.2.0.dev2" +version = "0.2.0.dev4" description = "gRPC Client for NI Data Store Service" optional = false python-versions = "<4.0,>=3.10" groups = ["main"] files = [ - {file = "ni_measurements_data_v1_client-0.2.0.dev2-py3-none-any.whl", hash = "sha256:5502c5dfc7bb5543eda2e640978c24ae8069ce0f0af1ee6b6c7e6de3ff0db32e"}, - {file = "ni_measurements_data_v1_client-0.2.0.dev2.tar.gz", hash = "sha256:ea5b5c4dce54cb213fb8348c196feab1aaed6d6100f02d8e21cca26acf7d2935"}, + {file = "ni_measurements_data_v1_client-0.2.0.dev4-py3-none-any.whl", hash = "sha256:e0c5c8e34a77be7e148bd7ce3a898ca87d98497e72c9483278ee9ade5d4b8b7d"}, + {file = "ni_measurements_data_v1_client-0.2.0.dev4.tar.gz", hash = "sha256:e31631edd75618f7f64651e02b2883691190ad608cfa14be7d15748f40b0a592"}, ] [package.dependencies] ni-measurementlink-discovery-v1-client = ">=0.1.0.dev0" -ni-measurements-data-v1-proto = ">=0.1.0.dev6" +ni-measurements-data-v1-proto = ">=0.1.0.dev7" [[package]] name = "ni-measurements-data-v1-proto" -version = "0.1.0.dev6" +version = "0.1.0.dev7" description = "Protobuf data types and service stubs for NI data store gRPC APIs" optional = false python-versions = "<4.0,>=3.10" groups = ["main"] files = [ - {file = "ni_measurements_data_v1_proto-0.1.0.dev6-py3-none-any.whl", hash = "sha256:4ad861df9a621930742ecfa4868d616186650159ea229ef811679392c7d76b35"}, - {file = "ni_measurements_data_v1_proto-0.1.0.dev6.tar.gz", hash = "sha256:8ebe2e605dd7d1428e6eeeec80b57a62ecaaa8f4d63aa994ffecf80428a0e73b"}, + {file = "ni_measurements_data_v1_proto-0.1.0.dev7-py3-none-any.whl", hash = "sha256:3342ad080ce97f28a5df6906d6f427826e2079f5281f20bc2a99a58ca471c40c"}, + {file = "ni_measurements_data_v1_proto-0.1.0.dev7.tar.gz", hash = "sha256:979b897cd92ea832dc3ad2afbeaa42f005c9161fdf2089bd043ededbf38249ca"}, ] [package.dependencies] @@ -4330,4 +4330,4 @@ files = [ [metadata] lock-version = "2.1" python-versions = "^3.10" -content-hash = "efe0dea79627daeb1f4197bcaec5a84367665efba45840b3fa61edcc48e692bf" +content-hash = "ae4af02bb65871b98e66105376073b0f741667aaee43786fc101263425d20277" diff --git a/pyproject.toml b/pyproject.toml index 7df9c63..472a68e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ requires-poetry = '>=2.1,<3.0' python = "^3.10" protobuf = {version=">=4.21"} ni-datamonikers-v1-client = { version = ">=0.1.0.dev1", allow-prereleases = true } -ni-measurements-data-v1-client = { version = ">=0.2.0.dev2", allow-prereleases = true } +ni-measurements-data-v1-client = { version = ">=0.2.0.dev4", allow-prereleases = true } ni-measurements-metadata-v1-client = { version = ">=0.2.0.dev2", allow-prereleases = true } ni-protobuf-types = { version = ">=1.0.1.dev0", allow-prereleases = true } hightime = { version = ">=0.3.0.dev0", allow-prereleases = true } diff --git a/src/ni/datastore/data/_data_store_client.py b/src/ni/datastore/data/_data_store_client.py index 2612b38..9fa4ab2 100644 --- a/src/ni/datastore/data/_data_store_client.py +++ b/src/ni/datastore/data/_data_store_client.py @@ -33,6 +33,8 @@ from ni.measurements.data.v1.data_store_service_pb2 import ( CreateStepRequest, CreateTestResultRequest, + GetConditionRequest, + GetMeasurementRequest, GetStepRequest, GetTestResultRequest, PublishConditionBatchRequest, @@ -74,7 +76,10 @@ class DataStoreClient: "_moniker_clients_lock", ) - _DATA_STORE_CLIENT_CLOSED_ERROR = "This DataStoreClient has been closed. Create a new DataStoreClient for further interaction with the data store." + _DATA_STORE_CLIENT_CLOSED_ERROR = ( + "This DataStoreClient has been closed. Create a new DataStoreClient for further " + "interaction with the data store." + ) _closed: bool _discovery_client: DiscoveryClient | None @@ -148,7 +153,7 @@ def publish_condition( condition_type: str, value: object, step_id: str, - ) -> PublishedCondition: + ) -> str: """Publish a condition value to the data store. Args: @@ -166,12 +171,8 @@ def publish_condition( value is expected to be a parsable GUID. Returns: - PublishedCondition: The published condition containing: - - A moniker for retrieving the condition data (returns a - Vector) - - The unique ID of the condition for referencing in queries - - Metadata including condition name, type, step ID and test - result ID + str: The condition id - the unique ID of the condition for + referencing in queries """ publish_request = PublishConditionRequest( name=name, @@ -180,11 +181,11 @@ def publish_condition( ) populate_publish_condition_request_value(publish_request, value) publish_response = self._get_data_store_client().publish_condition(publish_request) - return PublishedCondition.from_protobuf(publish_response.published_condition) + return publish_response.condition_id def publish_condition_batch( self, name: str, condition_type: str, values: object, step_id: str - ) -> PublishedCondition: + ) -> str: """Publish a batch of N values for a condition to the data store. Args: @@ -201,14 +202,8 @@ def publish_condition_batch( values. This value is expected to be a parsable GUID. Returns: - PublishedCondition: Represents all the values published with - this call, containing: - - - A moniker for retrieving the condition data (returns a - Vector) - - The unique ID of the condition for referencing in queries - - Metadata including condition name, type, step ID and test - result ID + str: The condition id - the unique ID of the condition for + referencing in queries """ publish_request = PublishConditionBatchRequest( name=name, @@ -217,7 +212,7 @@ def publish_condition_batch( ) populate_publish_condition_batch_request_values(publish_request, values) publish_response = self._get_data_store_client().publish_condition_batch(publish_request) - return PublishedCondition.from_protobuf(publish_response.published_condition) + return publish_response.condition_id def publish_measurement( self, @@ -231,7 +226,7 @@ def publish_measurement( test_adapter_ids: Iterable[str] = tuple(), software_item_ids: Iterable[str] = tuple(), notes: str = "", - ) -> PublishedMeasurement: + ) -> str: """Publish a single measurement value associated with a test step. Args: @@ -279,12 +274,7 @@ def publish_measurement( notes: Any notes to be associated with the captured measurement. Returns: - PublishedMeasurement: The moniker of the published measurement and - its metadata, including: - - A moniker for retrieving the measurement data - - Associated conditions from the test step - - Measurement metadata (name, type, timestamps, outcome) - - Associated hardware, software, and test adapter IDs + str: The published measurement id. """ publish_request = PublishMeasurementRequest( name=name, @@ -303,7 +293,7 @@ def publish_measurement( get_publish_measurement_timestamp(publish_request, timestamp) ) publish_response = self._get_data_store_client().publish_measurement(publish_request) - return PublishedMeasurement.from_protobuf(publish_response.published_measurement) + return publish_response.measurement_id def publish_measurement_batch( self, @@ -317,7 +307,7 @@ def publish_measurement_batch( test_adapter_ids: Iterable[str] = tuple(), software_item_ids: Iterable[str] = tuple(), notes: str = "", - ) -> Sequence[PublishedMeasurement]: + ) -> Sequence[str]: """Publish multiple scalar measurements at once for parametric sweeps. Args: @@ -362,10 +352,9 @@ def publish_measurement_batch( notes: Any notes to be associated with the published measurements. Returns: - Sequence[PublishedMeasurement]: The monikers of the published - measurements and their corresponding metadata. NOTE: Using - a Sequence is for future flexibility. This sequence - will currently always have a single PublishedMeasurement + Sequence[str]: The ids of the published measurement ids. + NOTE: Using a Sequence is for future flexibility. + This sequence will currently always have a single measurement id returned. """ publish_request = PublishMeasurementBatchRequest( @@ -383,9 +372,7 @@ def publish_measurement_batch( ) populate_publish_measurement_batch_request_values(publish_request, values) publish_response = self._get_data_store_client().publish_measurement_batch(publish_request) - return [ - PublishedMeasurement.from_protobuf(pm) for pm in publish_response.published_measurements - ] + return publish_response.measurement_ids @overload def read_data( @@ -484,6 +471,32 @@ def get_step(self, step_id: str) -> Step: get_response = self._get_data_store_client().get_step(get_request) return Step.from_protobuf(get_response.step) + def get_measurement(self, measurement_id: str) -> PublishedMeasurement: + """Get the measurement associated with the given identifier. + + Args: + measurement_id: The identifier of the desired measurement. + + Returns: + PublishedMeasurement: The metadata of the requested measurement. + """ + get_request = GetMeasurementRequest(measurement_id=measurement_id) + get_response = self._get_data_store_client().get_measurement(get_request) + return PublishedMeasurement.from_protobuf(get_response.published_measurement) + + def get_condition(self, condition_id: str) -> PublishedCondition: + """Get the condition associated with the given identifier. + + Args: + condition_id: The identifier of the desired condition. + + Returns: + PublishedCondition: The metadata of the requested condition. + """ + get_request = GetConditionRequest(condition_id=condition_id) + get_response = self._get_data_store_client().get_condition(get_request) + return PublishedCondition.from_protobuf(get_response.published_condition) + def create_test_result(self, test_result: TestResult) -> str: """Create a test result object for publishing measurements. diff --git a/tests/acceptance/test_publish_condition_and_read_data.py b/tests/acceptance/test_publish_condition_and_read_data.py index 9316004..73b4f96 100644 --- a/tests/acceptance/test_publish_condition_and_read_data.py +++ b/tests/acceptance/test_publish_condition_and_read_data.py @@ -12,7 +12,7 @@ def test___publish_float_condition___read_data_returns_vector() -> None: with DataStoreClient() as data_store_client: step_id = _create_step(data_store_client, "float condition") - published_condition = data_store_client.publish_condition( + published_condition_id = data_store_client.publish_condition( name="python float condition", condition_type="Upper Limit", value=123.45, @@ -20,6 +20,7 @@ def test___publish_float_condition___read_data_returns_vector() -> None: ) # A published float will be read back as a Vector. + published_condition = data_store_client.get_condition(published_condition_id) vector = data_store_client.read_data(published_condition, expected_type=Vector) assert len(vector) == 1 assert vector[0] == 123.45 @@ -29,7 +30,7 @@ def test___publish_float_condition___read_data_returns_vector() -> None: def test___publish_integer_condition___read_data_returns_vector() -> None: with DataStoreClient() as data_store_client: step_id = _create_step(data_store_client, "integer condition") - published_condition = data_store_client.publish_condition( + published_condition_id = data_store_client.publish_condition( name="python integer condition", condition_type="Lower Limit", value=123, @@ -37,6 +38,7 @@ def test___publish_integer_condition___read_data_returns_vector() -> None: ) # A published integer will be read back as a Vector. + published_condition = data_store_client.get_condition(published_condition_id) vector = data_store_client.read_data(published_condition, expected_type=Vector) assert len(vector) == 1 assert vector[0] == 123 @@ -46,7 +48,7 @@ def test___publish_integer_condition___read_data_returns_vector() -> None: def test___publish_bool_condition___read_data_returns_vector() -> None: with DataStoreClient() as data_store_client: step_id = _create_step(data_store_client, "bool condition") - published_condition = data_store_client.publish_condition( + published_condition_id = data_store_client.publish_condition( name="python bool condition", condition_type="Flag", value=True, @@ -54,6 +56,7 @@ def test___publish_bool_condition___read_data_returns_vector() -> None: ) # A published bool will be read back as a Vector. + published_condition = data_store_client.get_condition(published_condition_id) vector = data_store_client.read_data(published_condition, expected_type=Vector) assert len(vector) == 1 assert vector[0] is True @@ -63,7 +66,7 @@ def test___publish_bool_condition___read_data_returns_vector() -> None: def test___publish_str_condition___read_data_returns_vector() -> None: with DataStoreClient() as data_store_client: step_id = _create_step(data_store_client, "str condition") - published_condition = data_store_client.publish_condition( + published_condition_id = data_store_client.publish_condition( name="python str condition", condition_type="Environment", value="condition value", @@ -71,6 +74,7 @@ def test___publish_str_condition___read_data_returns_vector() -> None: ) # A published str will be read back as a Vector. + published_condition = data_store_client.get_condition(published_condition_id) vector = data_store_client.read_data(published_condition, expected_type=Vector) assert len(vector) == 1 assert vector[0] == "condition value" @@ -81,7 +85,7 @@ def test___publish_scalar_condition___read_data_returns_vector() -> None: with DataStoreClient() as data_store_client: step_id = _create_step(data_store_client, "scalar condition") expected_scalar = Scalar(value=25, units="Volts") - published_condition = data_store_client.publish_condition( + published_condition_id = data_store_client.publish_condition( name="python scalar condition", condition_type="Lower Limit", value=expected_scalar, @@ -89,6 +93,7 @@ def test___publish_scalar_condition___read_data_returns_vector() -> None: ) # A published Scalar will be read back as a Vector. + published_condition = data_store_client.get_condition(published_condition_id) vector = data_store_client.read_data(published_condition, expected_type=Vector) assert vector[0] == expected_scalar.value assert vector.units == expected_scalar.units diff --git a/tests/acceptance/test_publish_condition_batch_and_read_data.py b/tests/acceptance/test_publish_condition_batch_and_read_data.py index 3b44237..e1e88f9 100644 --- a/tests/acceptance/test_publish_condition_batch_and_read_data.py +++ b/tests/acceptance/test_publish_condition_batch_and_read_data.py @@ -12,7 +12,7 @@ def test___publish_batch_float_condition___read_data_returns_vector() -> None: expected_value = [1.0, 2.0, 3.0] with DataStoreClient() as data_store_client: step_id = _create_step(data_store_client, "float condition batch") - published_condition = data_store_client.publish_condition_batch( + published_condition_id = data_store_client.publish_condition_batch( name="python float condition batch", condition_type="Upper Limits", values=expected_value, @@ -20,6 +20,7 @@ def test___publish_batch_float_condition___read_data_returns_vector() -> None: ) # A batch published float will be read back as a Vector. + published_condition = data_store_client.get_condition(published_condition_id) vector = data_store_client.read_data(published_condition, expected_type=Vector) assert vector._values == expected_value assert vector.units == "" @@ -29,7 +30,7 @@ def test___publish_batch_integer_condition___read_data_returns_vector() -> None: expected_value = [5, 6, 7, 8] with DataStoreClient() as data_store_client: step_id = _create_step(data_store_client, "integer condition batch") - published_condition = data_store_client.publish_condition_batch( + published_condition_id = data_store_client.publish_condition_batch( name="python integer condition batch", condition_type="Lower Limits", values=expected_value, @@ -37,6 +38,7 @@ def test___publish_batch_integer_condition___read_data_returns_vector() -> None: ) # A batch published integer will be read back as a Vector. + published_condition = data_store_client.get_condition(published_condition_id) vector = data_store_client.read_data(published_condition, expected_type=Vector) assert vector._values == expected_value assert vector.units == "" @@ -46,7 +48,7 @@ def test___publish_batch_bool_condition___read_data_returns_vector() -> None: expected_value = [True, False, True] with DataStoreClient() as data_store_client: step_id = _create_step(data_store_client, "bool condition batch") - published_condition = data_store_client.publish_condition_batch( + published_condition_id = data_store_client.publish_condition_batch( name="python bool condition batch", condition_type="Flags", values=expected_value, @@ -54,6 +56,7 @@ def test___publish_batch_bool_condition___read_data_returns_vector() -> None: ) # A batch published bool will be read back as a Vector. + published_condition = data_store_client.get_condition(published_condition_id) vector = data_store_client.read_data(published_condition, expected_type=Vector) assert vector._values == expected_value assert vector.units == "" @@ -63,7 +66,7 @@ def test___publish_batch_str_condition___read_data_returns_vector() -> None: expected_value = ["one", "two", "three"] with DataStoreClient() as data_store_client: step_id = _create_step(data_store_client, "str condition batch") - published_condition = data_store_client.publish_condition_batch( + published_condition_id = data_store_client.publish_condition_batch( name="python str condition batch", condition_type="Environments", values=expected_value, @@ -71,6 +74,7 @@ def test___publish_batch_str_condition___read_data_returns_vector() -> None: ) # A published str will be read back as a Vector. + published_condition = data_store_client.get_condition(published_condition_id) vector = data_store_client.read_data(published_condition, expected_type=Vector) assert vector._values == expected_value assert vector.units == "" @@ -80,7 +84,7 @@ def test___publish_batch_vector_condition___read_data_returns_vector() -> None: with DataStoreClient() as data_store_client: step_id = _create_step(data_store_client, "scalar condition batch") expected_vector = Vector(values=[25, 50, 75], units="Amps") - published_condition = data_store_client.publish_condition_batch( + published_condition_id = data_store_client.publish_condition_batch( name="python vector condition batch", condition_type="Upper Limit", values=expected_vector, @@ -88,6 +92,7 @@ def test___publish_batch_vector_condition___read_data_returns_vector() -> None: ) # A batch published Vector will be read back as a Vector. + published_condition = data_store_client.get_condition(published_condition_id) vector = data_store_client.read_data(published_condition, expected_type=Vector) assert vector == expected_vector diff --git a/tests/acceptance/test_publish_measurement_and_read_data.py b/tests/acceptance/test_publish_measurement_and_read_data.py index 268de82..3fad6cb 100644 --- a/tests/acceptance/test_publish_measurement_and_read_data.py +++ b/tests/acceptance/test_publish_measurement_and_read_data.py @@ -15,13 +15,14 @@ def test___publish_float___read_data_returns_vector() -> None: with DataStoreClient() as data_store_client: step_id = _create_step(data_store_client, "float") - published_measurement = data_store_client.publish_measurement( + published_measurement_id = data_store_client.publish_measurement( name="python publish float", value=123.45, step_id=step_id, ) # A published integer will be read back as a Vector. + published_measurement = data_store_client.get_measurement(published_measurement_id) vector = data_store_client.read_data(published_measurement, expected_type=Vector) assert vector[0] == 123.45 assert vector.units == "" @@ -31,13 +32,14 @@ def test___publish_scalar___read_data_returns_vector() -> None: with DataStoreClient() as data_store_client: step_id = _create_step(data_store_client, "scalar") expected_scalar = Scalar(value=25, units="Volts") - published_measurement = data_store_client.publish_measurement( + published_measurement_id = data_store_client.publish_measurement( name="python publish scalar", value=expected_scalar, step_id=step_id, ) # A published Scalar will be read back as a Vector. + published_measurement = data_store_client.get_measurement(published_measurement_id) vector = data_store_client.read_data(published_measurement, expected_type=Vector) assert vector[0] == expected_scalar.value assert vector.units == expected_scalar.units @@ -53,12 +55,13 @@ def test___publish_xydata___read_data_returns_xydata() -> None: x_units="Amps", y_units="Seconds", ) - published_measurement = data_store_client.publish_measurement( + published_measurement_id = data_store_client.publish_measurement( name="python publish xydata", value=expected_xydata, step_id=step_id, ) + published_measurement = data_store_client.get_measurement(published_measurement_id) xydata = data_store_client.read_data(published_measurement, expected_type=XYData) assert xydata == expected_xydata @@ -73,12 +76,13 @@ def test___publish_spectrum___read_data_returns_spectrum() -> None: frequency_increment=1.0, ) - published_measurement = data_store_client.publish_measurement( + published_measurement_id = data_store_client.publish_measurement( name="python publish spectrum", value=expected_spectrum, step_id=step_id, ) + published_measurement = data_store_client.get_measurement(published_measurement_id) spectrum = data_store_client.read_data(published_measurement, expected_type=Spectrum) assert spectrum == expected_spectrum @@ -91,12 +95,13 @@ def test___publish_analog_waveform___read_data_returns_analog_waveform() -> None raw_data=np.array([1.0, 2.0, 3.0]), ) - published_measurement = data_store_client.publish_measurement( + published_measurement_id = data_store_client.publish_measurement( name="python publish analog waveform", value=expected_waveform, step_id=step_id, ) + published_measurement = data_store_client.get_measurement(published_measurement_id) waveform = data_store_client.read_data(published_measurement, expected_type=AnalogWaveform) assert waveform == expected_waveform @@ -105,12 +110,13 @@ def test___publish_digital_waveform___read_data_returns_digital_waveform() -> No with DataStoreClient() as data_store_client: step_id = _create_step(data_store_client, "digital waveform") expected_waveform = DigitalWaveform(10) - published_measurement = data_store_client.publish_measurement( + published_measurement_id = data_store_client.publish_measurement( name="python publish digital waveform", value=expected_waveform, step_id=step_id, ) + published_measurement = data_store_client.get_measurement(published_measurement_id) waveform = data_store_client.read_data(published_measurement, expected_type=DigitalWaveform) assert waveform == expected_waveform @@ -119,12 +125,13 @@ def test___publish_complex_waveform___read_data_returns_complex_waveform() -> No with DataStoreClient() as data_store_client: step_id = _create_step(data_store_client, "complex waveform") expected_waveform = ComplexWaveform(10) - published_measurement = data_store_client.publish_measurement( + published_measurement_id = data_store_client.publish_measurement( name="python publish complex waveform", value=expected_waveform, step_id=step_id, ) + published_measurement = data_store_client.get_measurement(published_measurement_id) waveform = data_store_client.read_data(published_measurement, expected_type=ComplexWaveform) assert waveform == expected_waveform diff --git a/tests/acceptance/test_publish_measurement_batch_and_read_data.py b/tests/acceptance/test_publish_measurement_batch_and_read_data.py index 9d6aa75..58315c7 100644 --- a/tests/acceptance/test_publish_measurement_batch_and_read_data.py +++ b/tests/acceptance/test_publish_measurement_batch_and_read_data.py @@ -18,13 +18,16 @@ def test___publish_float___read_data_returns_vector() -> None: # Publish the waveform data step = Step(name="Initial step", test_result_id=test_result_id) step_id = data_store_client.create_step(step) - published_measurements = data_store_client.publish_measurement_batch( + published_measurement_ids = data_store_client.publish_measurement_batch( name="python batch publish float", values=[1.0, 2.0, 3.0, 4.0], step_id=step_id, ) - published_measurement = next(iter(published_measurements), None) - assert published_measurement is not None + published_measurement_id = next(iter(published_measurement_ids), None) + assert published_measurement_id is not None and published_measurement_id != "" + + # Get the published measurement object to read data from it + published_measurement = data_store_client.get_measurement(published_measurement_id) # A published batch floats will be read back as a Vector. vector = data_store_client.read_data(published_measurement, expected_type=Vector) @@ -45,13 +48,16 @@ def test___publish_batch_vector___read_data_returns_vector() -> None: # Batch publish the vector step = Step(name="Initial step", test_result_id=test_result_id) step_id = data_store_client.create_step(step) - published_measurements = data_store_client.publish_measurement_batch( + published_measurement_ids = data_store_client.publish_measurement_batch( name="python publish scalar", values=expected_vector, step_id=step_id, ) - published_measurement = next(iter(published_measurements), None) - assert published_measurement is not None + published_measurement_id = next(iter(published_measurement_ids), None) + assert published_measurement_id is not None and published_measurement_id != "" + + # Get the published measurement object to read data from it + published_measurement = data_store_client.get_measurement(published_measurement_id) # A batch published Vector will be read back as a Vector. vector = data_store_client.read_data(published_measurement, expected_type=Vector) diff --git a/tests/acceptance/test_publish_with_metadata.py b/tests/acceptance/test_publish_with_metadata.py index 14acb61..9a91645 100644 --- a/tests/acceptance/test_publish_with_metadata.py +++ b/tests/acceptance/test_publish_with_metadata.py @@ -184,7 +184,7 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat ) # Perform publish operation - published_measurement = data_store_client.publish_measurement( + published_measurement_id = data_store_client.publish_measurement( name="Measurement Name", value=expected_waveform, step_id=step_id, @@ -198,7 +198,7 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat ) published_measurements = data_store_client.query_measurements( - odata_query=f"$filter=id eq {published_measurement.id}" + odata_query=f"$filter=id eq {published_measurement_id}" ) found_measurement = next(iter(published_measurements), None) assert found_measurement is not None diff --git a/tests/acceptance/test_query_conditions.py b/tests/acceptance/test_query_conditions.py index 4df1b89..6a850fe 100644 --- a/tests/acceptance/test_query_conditions.py +++ b/tests/acceptance/test_query_conditions.py @@ -12,7 +12,7 @@ def test___query_conditions___filter_by_id___single_condition_returned() -> None # Publish a single condition condition_name = "query filter by id condition" - published_condition = data_store_client.publish_condition( + published_condition_id = data_store_client.publish_condition( name=condition_name, condition_type="Upper Limit", value=123.45, @@ -21,7 +21,7 @@ def test___query_conditions___filter_by_id___single_condition_returned() -> None # Query conditions based on id. queried_conditions = data_store_client.query_conditions( - odata_query=f"$filter=id eq {published_condition.id}" + odata_query=f"$filter=id eq {published_condition_id}" ) # We should get one condition back. diff --git a/tests/acceptance/test_query_measurements.py b/tests/acceptance/test_query_measurements.py index db8a0c4..7cab992 100644 --- a/tests/acceptance/test_query_measurements.py +++ b/tests/acceptance/test_query_measurements.py @@ -12,7 +12,7 @@ def test___query_measurements___filter_by_id___single_measurement_returned() -> # Publish a single measurement. measurement_name = "query filter by id measurement" - published_measurement = data_store_client.publish_measurement( + published_measurement_id = data_store_client.publish_measurement( name=measurement_name, value=123.45, step_id=step_id, @@ -20,7 +20,7 @@ def test___query_measurements___filter_by_id___single_measurement_returned() -> # Query measurements based on id. queried_measurements = data_store_client.query_measurements( - odata_query=f"$filter=id eq {published_measurement.id}" + odata_query=f"$filter=id eq {published_measurement_id}" ) # We should get one measurement back. diff --git a/tests/unit/data/test_get_metadata.py b/tests/unit/data/test_get_metadata.py index 53819ba..933e598 100644 --- a/tests/unit/data/test_get_metadata.py +++ b/tests/unit/data/test_get_metadata.py @@ -9,14 +9,22 @@ from hightime import datetime from ni.datastore.data import ( DataStoreClient, + PublishedCondition, + PublishedMeasurement, Step, TestResult, ) from ni.measurements.data.v1.data_store_pb2 import ( + PublishedCondition as PublishedConditionProto, + PublishedMeasurement as PublishedMeasurementProto, Step as StepProto, TestResult as TestResultProto, ) from ni.measurements.data.v1.data_store_service_pb2 import ( + GetConditionRequest, + GetConditionResponse, + GetMeasurementRequest, + GetMeasurementResponse, GetStepRequest, GetStepResponse, GetTestResultRequest, @@ -82,3 +90,48 @@ def test___get_test_result___calls_data_store_service_client( request = cast(GetTestResultRequest, args[0]) assert request.test_result_id == "request_id" assert result == TestResult.from_protobuf(test_result) + + +def test___get_measurement___calls_data_store_service_client( + data_store_client: DataStoreClient, + mocked_data_store_service_client: NonCallableMock, +) -> None: + start_time = datetime.now(tz=std_datetime.timezone.utc) + published_measurement = PublishedMeasurementProto( + id="measurement_id", + name="measurement_name", + step_id="step_id", + test_result_id="test_result_id", + start_date_time=hightime_datetime_to_protobuf(start_time), + ) + expected_response = GetMeasurementResponse(published_measurement=published_measurement) + mocked_data_store_service_client.get_measurement.return_value = expected_response + + result = data_store_client.get_measurement(measurement_id="request_id") + + args, __ = mocked_data_store_service_client.get_measurement.call_args + request = cast(GetMeasurementRequest, args[0]) + assert request.measurement_id == "request_id" + assert result == PublishedMeasurement.from_protobuf(published_measurement) + + +def test___get_condition___calls_data_store_service_client( + data_store_client: DataStoreClient, + mocked_data_store_service_client: NonCallableMock, +) -> None: + published_condition = PublishedConditionProto( + id="condition_id", + name="condition_name", + condition_type="condition_type", + step_id="step_id", + test_result_id="test_result_id", + ) + expected_response = GetConditionResponse(published_condition=published_condition) + mocked_data_store_service_client.get_condition.return_value = expected_response + + result = data_store_client.get_condition(condition_id="request_id") + + args, __ = mocked_data_store_service_client.get_condition.call_args + request = cast(GetConditionRequest, args[0]) + assert request.condition_id == "request_id" + assert result == PublishedCondition.from_protobuf(published_condition) diff --git a/tests/unit/data/test_publish_condition.py b/tests/unit/data/test_publish_condition.py index b4611d2..0645bc0 100644 --- a/tests/unit/data/test_publish_condition.py +++ b/tests/unit/data/test_publish_condition.py @@ -7,7 +7,6 @@ import pytest from ni.datastore.data import DataStoreClient -from ni.measurements.data.v1.data_store_pb2 import PublishedCondition from ni.measurements.data.v1.data_store_service_pb2 import ( PublishConditionBatchRequest, PublishConditionBatchResponse, @@ -21,11 +20,10 @@ def test___publish_condition___calls_data_store_service_client( data_store_client: DataStoreClient, mocked_data_store_service_client: NonCallableMock, ) -> None: - published_condition = PublishedCondition(id="response_id") - expected_response = PublishConditionResponse(published_condition=published_condition) + expected_response = PublishConditionResponse(condition_id="response_id") mocked_data_store_service_client.publish_condition.return_value = expected_response - result = data_store_client.publish_condition( + condition_id = data_store_client.publish_condition( name="TestCondition", condition_type="ConditionType", value=123, @@ -34,7 +32,7 @@ def test___publish_condition___calls_data_store_service_client( args, __ = mocked_data_store_service_client.publish_condition.call_args request = cast(PublishConditionRequest, args[0]) - assert result.id == "response_id" + assert condition_id == "response_id" assert request.step_id == "MyStep" assert request.name == "TestCondition" assert request.condition_type == "ConditionType" @@ -59,11 +57,10 @@ def test___vector___publish_condition_batch___calls_data_store_service_client( data_store_client: DataStoreClient, mocked_data_store_service_client: NonCallableMock, ) -> None: - published_condition = PublishedCondition(id="response_id") - expected_response = PublishConditionBatchResponse(published_condition=published_condition) + expected_response = PublishConditionBatchResponse(condition_id="response_id") mocked_data_store_service_client.publish_condition_batch.return_value = expected_response - result = data_store_client.publish_condition_batch( + condition_id = data_store_client.publish_condition_batch( name="TestCondition", condition_type="ConditionType", values=Vector(values=["one", "two", "three"], units="fake_units"), @@ -72,7 +69,7 @@ def test___vector___publish_condition_batch___calls_data_store_service_client( args, __ = mocked_data_store_service_client.publish_condition_batch.call_args request = cast(PublishConditionBatchRequest, args[0]) - assert result.id == "response_id" + assert condition_id == "response_id" assert request.step_id == "MyStep" assert request.name == "TestCondition" assert request.condition_type == "ConditionType" @@ -84,11 +81,10 @@ def test___int_list___publish_condition_batch___calls_data_store_service_client( data_store_client: DataStoreClient, mocked_data_store_service_client: NonCallableMock, ) -> None: - published_condition = PublishedCondition(id="response_id") - expected_response = PublishConditionBatchResponse(published_condition=published_condition) + expected_response = PublishConditionBatchResponse(condition_id="response_id") mocked_data_store_service_client.publish_condition_batch.return_value = expected_response - result = data_store_client.publish_condition_batch( + condition_id = data_store_client.publish_condition_batch( name="TestCondition", condition_type="ConditionType", values=[1, 2, 3], @@ -97,7 +93,7 @@ def test___int_list___publish_condition_batch___calls_data_store_service_client( args, __ = mocked_data_store_service_client.publish_condition_batch.call_args request = cast(PublishConditionBatchRequest, args[0]) - assert result.id == "response_id" + assert condition_id == "response_id" assert list(request.scalar_values.sint32_array.values) == [1, 2, 3] assert request.scalar_values.attributes["NI_UnitDescription"].string_value == "" @@ -106,11 +102,10 @@ def test___float_list___publish_condition_batch___calls_data_store_service_clien data_store_client: DataStoreClient, mocked_data_store_service_client: NonCallableMock, ) -> None: - published_condition = PublishedCondition(id="response_id") - expected_response = PublishConditionBatchResponse(published_condition=published_condition) + expected_response = PublishConditionBatchResponse(condition_id="response_id") mocked_data_store_service_client.publish_condition_batch.return_value = expected_response - result = data_store_client.publish_condition_batch( + condition_id = data_store_client.publish_condition_batch( name="TestCondition", condition_type="ConditionType", values=[1.0, 2.0, 3.0], @@ -119,7 +114,7 @@ def test___float_list___publish_condition_batch___calls_data_store_service_clien args, __ = mocked_data_store_service_client.publish_condition_batch.call_args request = cast(PublishConditionBatchRequest, args[0]) - assert result.id == "response_id" + assert condition_id == "response_id" assert list(request.scalar_values.double_array.values) == [1.0, 2.0, 3.0] assert request.scalar_values.attributes["NI_UnitDescription"].string_value == "" @@ -128,11 +123,10 @@ def test___bool_list___publish_condition_batch___calls_data_store_service_client data_store_client: DataStoreClient, mocked_data_store_service_client: NonCallableMock, ) -> None: - published_condition = PublishedCondition(id="response_id") - expected_response = PublishConditionBatchResponse(published_condition=published_condition) + expected_response = PublishConditionBatchResponse(condition_id="response_id") mocked_data_store_service_client.publish_condition_batch.return_value = expected_response - result = data_store_client.publish_condition_batch( + condition_id = data_store_client.publish_condition_batch( name="TestCondition", condition_type="ConditionType", values=[True, False, True], @@ -141,7 +135,7 @@ def test___bool_list___publish_condition_batch___calls_data_store_service_client args, __ = mocked_data_store_service_client.publish_condition_batch.call_args request = cast(PublishConditionBatchRequest, args[0]) - assert result.id == "response_id" + assert condition_id == "response_id" assert list(request.scalar_values.bool_array.values) == [True, False, True] assert request.scalar_values.attributes["NI_UnitDescription"].string_value == "" @@ -150,11 +144,10 @@ def test___string_list___publish_condition_batch___calls_data_store_service_clie data_store_client: DataStoreClient, mocked_data_store_service_client: NonCallableMock, ) -> None: - published_condition = PublishedCondition(id="response_id") - expected_response = PublishConditionBatchResponse(published_condition=published_condition) + expected_response = PublishConditionBatchResponse(condition_id="response_id") mocked_data_store_service_client.publish_condition_batch.return_value = expected_response - result = data_store_client.publish_condition_batch( + condition_id = data_store_client.publish_condition_batch( name="TestCondition", condition_type="ConditionType", values=["one", "two", "three"], @@ -163,7 +156,7 @@ def test___string_list___publish_condition_batch___calls_data_store_service_clie args, __ = mocked_data_store_service_client.publish_condition_batch.call_args request = cast(PublishConditionBatchRequest, args[0]) - assert result.id == "response_id" + assert condition_id == "response_id" assert list(request.scalar_values.string_array.values) == ["one", "two", "three"] assert request.scalar_values.attributes["NI_UnitDescription"].string_value == "" diff --git a/tests/unit/data/test_publish_measurement.py b/tests/unit/data/test_publish_measurement.py index 1d7e50b..ac3742e 100644 --- a/tests/unit/data/test_publish_measurement.py +++ b/tests/unit/data/test_publish_measurement.py @@ -14,7 +14,6 @@ from ni.measurements.data.v1.data_store_pb2 import ( ErrorInformation as ErrorInformationProto, Outcome as OutcomeProto, - PublishedMeasurement, ) from ni.measurements.data.v1.data_store_service_pb2 import ( PublishMeasurementBatchRequest, @@ -43,11 +42,10 @@ def test___publish_boolean_data___calls_data_store_service_client( value: bool, ) -> None: timestamp = datetime.now(tz=std_datetime.timezone.utc) - published_measurement = PublishedMeasurement(id="response_id") - expected_response = PublishMeasurementResponse(published_measurement=published_measurement) + expected_response = PublishMeasurementResponse(measurement_id="response_id") mocked_data_store_service_client.publish_measurement.return_value = expected_response - result = data_store_client.publish_measurement( + measurement_id = data_store_client.publish_measurement( "name", value, "step_id", @@ -62,7 +60,7 @@ def test___publish_boolean_data___calls_data_store_service_client( args, __ = mocked_data_store_service_client.publish_measurement.call_args request = args[0] # The PublishMeasurementRequest object - assert result.id == "response_id" + assert measurement_id == "response_id" assert request.step_id == "step_id" assert request.name == "name" assert request.notes == "notes" @@ -88,12 +86,11 @@ def test___publish_analog_waveform_data___calls_data_store_service_client( ) expected_protobuf_waveform = DoubleAnalogWaveform() expected_protobuf_waveform.CopyFrom(float64_analog_waveform_to_protobuf(analog_waveform)) - published_measurement = PublishedMeasurement(id="response_id") - expected_response = PublishMeasurementResponse(published_measurement=published_measurement) + expected_response = PublishMeasurementResponse(measurement_id="response_id") mocked_data_store_service_client.publish_measurement.return_value = expected_response # Now, when client.publish_measurement calls foo.MyClass().publish(), it will use the mock - result = data_store_client.publish_measurement( + measurement_id = data_store_client.publish_measurement( "name", analog_waveform, "step_id", @@ -108,7 +105,7 @@ def test___publish_analog_waveform_data___calls_data_store_service_client( args, __ = mocked_data_store_service_client.publish_measurement.call_args request = cast(PublishMeasurementRequest, args[0]) # The PublishMeasurementRequest object - assert result.id == "response_id" + assert measurement_id == "response_id" assert request.step_id == "step_id" assert request.name == "name" assert request.notes == "notes" @@ -134,16 +131,15 @@ def test___publish_float64_xydata___calls_data_store_service_client( ) expected_protobuf_xydata = DoubleXYData() expected_protobuf_xydata.CopyFrom(float64_xydata_to_protobuf(xydata)) - published_measurement = PublishedMeasurement(id="response_id") - expected_response = PublishMeasurementResponse(published_measurement=published_measurement) + expected_response = PublishMeasurementResponse(measurement_id="response_id") mocked_data_store_service_client.publish_measurement.return_value = expected_response # Now, when client.publish_measurement calls foo.MyClass().publish(), it will use the mock - result = data_store_client.publish_measurement("name", xydata, "step_id") + measurement_id = data_store_client.publish_measurement("name", xydata, "step_id") args, __ = mocked_data_store_service_client.publish_measurement.call_args request = cast(PublishMeasurementRequest, args[0]) # The PublishMeasurementRequest object - assert result.id == "response_id" + assert measurement_id == "response_id" assert request.step_id == "step_id" assert request.name == "name" assert request.x_y_data == expected_protobuf_xydata @@ -160,16 +156,15 @@ def test___publish_basic_iterable_data___calls_data_store_service_client( expected_vector = Vector(value) expected_protobuf_vector = VectorProto() expected_protobuf_vector.CopyFrom(vector_to_protobuf(expected_vector)) - published_measurement = PublishedMeasurement(id="response_id") - expected_response = PublishMeasurementResponse(published_measurement=published_measurement) + expected_response = PublishMeasurementResponse(measurement_id="response_id") mocked_data_store_service_client.publish_measurement.return_value = expected_response # Now, when client.publish_measurement calls foo.MyClass().publish(), it will use the mock - result = data_store_client.publish_measurement("name", value, "step_id") + measurement_id = data_store_client.publish_measurement("name", value, "step_id") args, __ = mocked_data_store_service_client.publish_measurement.call_args request = cast(PublishMeasurementRequest, args[0]) # The PublishMeasurementRequest object - assert result.id == "response_id" + assert measurement_id == "response_id" assert request.step_id == "step_id" assert request.name == "name" assert request.vector == expected_protobuf_vector @@ -199,17 +194,14 @@ def test___publish_analog_waveform_data_without_timestamp_parameter___uses_wavef raw_data=np.array(waveform_values, dtype=np.float64), timing=Timing.create_with_regular_interval(timedelta(seconds=1), timestamp), ) - published_measurement = PublishedMeasurement(id="response_id") - publish_measurement_response = PublishMeasurementResponse( - published_measurement=published_measurement - ) - mocked_data_store_service_client.publish_measurement.return_value = publish_measurement_response + expected_response = PublishMeasurementResponse(measurement_id="response_id") + mocked_data_store_service_client.publish_measurement.return_value = expected_response - result = data_store_client.publish_measurement("name", analog_waveform, "step_id") + measurement_id = data_store_client.publish_measurement("name", analog_waveform, "step_id") args, __ = mocked_data_store_service_client.publish_measurement.call_args request = cast(PublishMeasurementRequest, args[0]) # The PublishMeasurementRequest object - assert result.id == "response_id" + assert measurement_id == "response_id" assert request.timestamp == hightime_datetime_to_protobuf(timestamp) @@ -219,17 +211,16 @@ def test___publish_analog_waveform_data_without_t0___uses_timestamp_parameter( ) -> None: timestamp = datetime.now(tz=std_datetime.timezone.utc) analog_waveform = AnalogWaveform.from_array_1d([1.0, 2.0, 3.0], dtype=float) - published_measurement = PublishedMeasurement(id="response_id") - publish_measurement_response = PublishMeasurementResponse( - published_measurement=published_measurement - ) + publish_measurement_response = PublishMeasurementResponse(measurement_id="response_id") mocked_data_store_service_client.publish_measurement.return_value = publish_measurement_response - result = data_store_client.publish_measurement("name", analog_waveform, "step_id", timestamp) + measurement_id = data_store_client.publish_measurement( + "name", analog_waveform, "step_id", timestamp + ) args, __ = mocked_data_store_service_client.publish_measurement.call_args request = cast(PublishMeasurementRequest, args[0]) # The PublishMeasurementRequest object - assert result.id == "response_id" + assert measurement_id == "response_id" assert request.timestamp == hightime_datetime_to_protobuf(timestamp) @@ -269,13 +260,10 @@ def test___vector___publish_measurement_batch___calls_data_store_service_client( mocked_data_store_service_client: NonCallableMock, ) -> None: timestamp = datetime.now(tz=std_datetime.timezone.utc) - published_measurement = PublishedMeasurement(id="response_id") - expected_response = PublishMeasurementBatchResponse( - published_measurements=[published_measurement] - ) + expected_response = PublishMeasurementBatchResponse(measurement_ids=["response_id"]) mocked_data_store_service_client.publish_measurement_batch.return_value = expected_response - response = data_store_client.publish_measurement_batch( + measurement_ids = data_store_client.publish_measurement_batch( name="name", values=Vector(values=[1.0, 2.0, 3.0], units="BatchUnits"), step_id="step_id", @@ -289,7 +277,7 @@ def test___vector___publish_measurement_batch___calls_data_store_service_client( args, __ = mocked_data_store_service_client.publish_measurement_batch.call_args request = cast(PublishMeasurementBatchRequest, args[0]) - assert next(iter(response)).id == "response_id" + assert next(iter(measurement_ids)) == "response_id" assert request.step_id == "step_id" assert request.name == "name" assert request.timestamps == [hightime_datetime_to_protobuf(timestamp)] @@ -307,13 +295,10 @@ def test___int_list___publish_measurement_batch___calls_data_store_service_clien mocked_data_store_service_client: NonCallableMock, ) -> None: timestamp = datetime.now(tz=std_datetime.timezone.utc) - published_measurement = PublishedMeasurement(id="response_id") - expected_response = PublishMeasurementBatchResponse( - published_measurements=[published_measurement] - ) + expected_response = PublishMeasurementBatchResponse(measurement_ids=["response_id"]) mocked_data_store_service_client.publish_measurement_batch.return_value = expected_response - response = data_store_client.publish_measurement_batch( + measurement_ids = data_store_client.publish_measurement_batch( name="name", values=[1, 2, 3], step_id="step_id", @@ -327,7 +312,7 @@ def test___int_list___publish_measurement_batch___calls_data_store_service_clien args, __ = mocked_data_store_service_client.publish_measurement_batch.call_args request = cast(PublishMeasurementBatchRequest, args[0]) - assert next(iter(response)).id == "response_id" + assert next(iter(measurement_ids)) == "response_id" assert request.step_id == "step_id" assert request.name == "name" assert request.timestamps == [hightime_datetime_to_protobuf(timestamp)] @@ -340,13 +325,10 @@ def test___float_list___publish_measurement_batch___calls_data_store_service_cli mocked_data_store_service_client: NonCallableMock, ) -> None: timestamp = datetime.now(tz=std_datetime.timezone.utc) - published_measurement = PublishedMeasurement(id="response_id") - expected_response = PublishMeasurementBatchResponse( - published_measurements=[published_measurement] - ) + expected_response = PublishMeasurementBatchResponse(measurement_ids=["response_id"]) mocked_data_store_service_client.publish_measurement_batch.return_value = expected_response - response = data_store_client.publish_measurement_batch( + measurement_ids = data_store_client.publish_measurement_batch( name="name", values=[1.0, 2.0, 3.0], step_id="step_id", @@ -360,7 +342,7 @@ def test___float_list___publish_measurement_batch___calls_data_store_service_cli args, __ = mocked_data_store_service_client.publish_measurement_batch.call_args request = cast(PublishMeasurementBatchRequest, args[0]) - assert next(iter(response)).id == "response_id" + assert next(iter(measurement_ids)) == "response_id" assert request.step_id == "step_id" assert request.name == "name" assert request.timestamps == [hightime_datetime_to_protobuf(timestamp)] @@ -373,13 +355,10 @@ def test___bool_list___publish_measurement_batch___calls_data_store_service_clie mocked_data_store_service_client: NonCallableMock, ) -> None: timestamp = datetime.now(tz=std_datetime.timezone.utc) - published_measurement = PublishedMeasurement(id="response_id") - expected_response = PublishMeasurementBatchResponse( - published_measurements=[published_measurement] - ) + expected_response = PublishMeasurementBatchResponse(measurement_ids=["response_id"]) mocked_data_store_service_client.publish_measurement_batch.return_value = expected_response - response = data_store_client.publish_measurement_batch( + measurement_ids = data_store_client.publish_measurement_batch( name="name", values=[True, False, True], step_id="step_id", @@ -393,7 +372,7 @@ def test___bool_list___publish_measurement_batch___calls_data_store_service_clie args, __ = mocked_data_store_service_client.publish_measurement_batch.call_args request = cast(PublishMeasurementBatchRequest, args[0]) - assert next(iter(response)).id == "response_id" + assert next(iter(measurement_ids)) == "response_id" assert request.step_id == "step_id" assert request.name == "name" assert request.timestamps == [hightime_datetime_to_protobuf(timestamp)] @@ -406,13 +385,10 @@ def test___str_list___publish_measurement_batch___calls_data_store_service_clien mocked_data_store_service_client: NonCallableMock, ) -> None: timestamp = datetime.now(tz=std_datetime.timezone.utc) - published_measurement = PublishedMeasurement(id="response_id") - expected_response = PublishMeasurementBatchResponse( - published_measurements=[published_measurement] - ) + expected_response = PublishMeasurementBatchResponse(measurement_ids=["response_id"]) mocked_data_store_service_client.publish_measurement_batch.return_value = expected_response - response = data_store_client.publish_measurement_batch( + measurement_ids = data_store_client.publish_measurement_batch( name="name", values=["one", "two", "three"], step_id="step_id", @@ -426,7 +402,7 @@ def test___str_list___publish_measurement_batch___calls_data_store_service_clien args, __ = mocked_data_store_service_client.publish_measurement_batch.call_args request = cast(PublishMeasurementBatchRequest, args[0]) - assert next(iter(response)).id == "response_id" + assert next(iter(measurement_ids)) == "response_id" assert request.step_id == "step_id" assert request.name == "name" assert request.timestamps == [hightime_datetime_to_protobuf(timestamp)]