diff --git a/poetry.lock b/poetry.lock index cdf5961a..af776fb5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -287,6 +287,18 @@ charset-normalizer = ["charset-normalizer"] html5lib = ["html5lib"] lxml = ["lxml"] +[[package]] +name = "better-diff" +version = "0.1.4" +description = "A simple library for printing better diffs based on the stdlib unified_diff format." +optional = false +python-versions = "<4.0,>=3.8" +groups = ["lint"] +files = [ + {file = "better_diff-0.1.4-py3-none-any.whl", hash = "sha256:06e63358b2047ae2695abd96316f47c6d3c38b9e641f53012279878d66d8792e"}, + {file = "better_diff-0.1.4.tar.gz", hash = "sha256:920ca76bdbcd2f0c361fa5d9a2d4727624a3545d6cb467b1b6616cad8a634de7"}, +] + [[package]] name = "black" version = "25.12.0" @@ -994,6 +1006,21 @@ files = [ pycodestyle = "*" setuptools = "*" +[[package]] +name = "flake8-tidy-imports" +version = "4.12.0" +description = "A flake8 plugin that helps you write tidier imports." +optional = false +python-versions = ">=3.9" +groups = ["lint"] +files = [ + {file = "flake8_tidy_imports-4.12.0-py3-none-any.whl", hash = "sha256:ab1e31a5ce07518a31c0a34cd92551f4c27639ae2c35a21364680a0318da312e"}, + {file = "flake8_tidy_imports-4.12.0.tar.gz", hash = "sha256:9254788c3b6862c2fcec0250d2dc9af089afebff9c5b8a8ac8b9525b059b06db"}, +] + +[package.dependencies] +flake8 = ">=3.8" + [[package]] name = "fqdn" version = "1.5.1" @@ -2571,32 +2598,34 @@ protobuf = ">=4.21" [[package]] name = "ni-python-styleguide" -version = "0.4.9" +version = "0.5.0" description = "NI's internal and external Python linter rules and plugins" optional = false -python-versions = "<4.0,>=3.7" +python-versions = "<4.0,>=3.9" groups = ["lint"] files = [ - {file = "ni_python_styleguide-0.4.9-py3-none-any.whl", hash = "sha256:3a33735fbb52231bda00ec970d7c7aebe2b15aed2ccbd07da5c52b8e04730918"}, - {file = "ni_python_styleguide-0.4.9.tar.gz", hash = "sha256:64a65da646fc8c2f0e68970e0a3190534add9380ee78782fa809fee5321f9e45"}, + {file = "ni_python_styleguide-0.5.0-py3-none-any.whl", hash = "sha256:66784d97bc2898552386ca8e0667a11fa5f712820130585df7709d08836f6bc0"}, + {file = "ni_python_styleguide-0.5.0.tar.gz", hash = "sha256:66bd05f7d9fc98a87e5e85319faa752efd54549c979938ed1bb64e2d1f412630"}, ] [package.dependencies] +better-diff = ">=0.1.3,<0.2.0" black = ">=23.1,<26.0" click = ">=7.1.2" flake8 = [ {version = ">=6.1,<7.0", markers = "python_version >= \"3.12\" and python_version < \"4.0\""}, - {version = ">=5.0,<6.0", markers = "python_version >= \"3.7\" and python_version < \"3.12\""}, + {version = ">=5.0,<6.0", markers = "python_version >= \"3.8\" and python_version < \"3.12\""}, ] flake8-black = ">=0.2.1" flake8-docstrings = ">=1.5.0" flake8-import-order = ">=0.18.1,<0.19.0" +flake8-tidy-imports = ">=4.11.0" isort = ">=5.10" pathspec = ">=0.11.1" pep8-naming = ">=0.11.1" pycodestyle = [ {version = ">=2.11,<3.0", markers = "python_version >= \"3.12\" and python_version < \"4.0\""}, - {version = ">=2.9,<3.0", markers = "python_version >= \"3.7\" and python_version < \"3.12\""}, + {version = ">=2.9,<3.0", markers = "python_version >= \"3.8\" and python_version < \"3.12\""}, ] setuptools = "<82" toml = ">=0.10.1" @@ -4364,26 +4393,26 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "types-grpcio" -version = "1.0.0.20260408" +version = "1.0.0.20260518" description = "Typing stubs for grpcio" optional = false python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "types_grpcio-1.0.0.20260408-py3-none-any.whl", hash = "sha256:256f2738a4a3eb2ebabd6d027f4fc7eace024822afb3b629e82811e0b661fc35"}, - {file = "types_grpcio-1.0.0.20260408.tar.gz", hash = "sha256:c8ebe07f91492a32e0f3a3810669d236828d5a2a1e540ab16cca8b5a46f8ee5d"}, + {file = "types_grpcio-1.0.0.20260518-py3-none-any.whl", hash = "sha256:61c8d4ffcc0b99b1cec647808b6132805671daaa8ad2081673453874914a5347"}, + {file = "types_grpcio-1.0.0.20260518.tar.gz", hash = "sha256:cd18473dd0819f0b193874e1035de4a6a58e8bacdb128139280a03f4f1a87d37"}, ] [[package]] name = "types-protobuf" -version = "7.34.1.20260408" +version = "7.34.1.20260518" description = "Typing stubs for protobuf" optional = false python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "types_protobuf-7.34.1.20260408-py3-none-any.whl", hash = "sha256:ebbcd4e27b145aef6a59bc0cb6c013b3528151c1ba5e7f7337aeee355d276a5e"}, - {file = "types_protobuf-7.34.1.20260408.tar.gz", hash = "sha256:e2c0a0430e08c75b52671a6f0035abfdcc791aad12af16274282de1b721758ab"}, + {file = "types_protobuf-7.34.1.20260518-py3-none-any.whl", hash = "sha256:a0a5337413347166439c0e07cbc26c6164d091401c6f01b1dfd8cdb966c4dd8f"}, + {file = "types_protobuf-7.34.1.20260518.tar.gz", hash = "sha256:28cfaded25889cb83ebfb63cfb0a43628f0b6f3785767bec17287dc6468795f2"}, ] [[package]] diff --git a/src/ni/datastore/data/_data_store_client.py b/src/ni/datastore/data/_data_store_client.py index c0ad9ed7..6cde16b7 100644 --- a/src/ni/datastore/data/_data_store_client.py +++ b/src/ni/datastore/data/_data_store_client.py @@ -7,25 +7,10 @@ from collections.abc import Iterable, Sequence from threading import Lock from types import TracebackType -from typing import TYPE_CHECKING, Type, TypeVar, overload +from typing import overload, Type, TYPE_CHECKING, TypeVar import hightime as ht from grpc import Channel -from ni.datastore.data._grpc_conversion import ( - convert_read_condition_response_from_protobuf, - convert_read_measurement_response_from_protobuf, - get_publish_measurement_timestamp, - populate_publish_condition_batch_request_values, - populate_publish_condition_request_value, - populate_publish_measurement_batch_request_values, - populate_publish_measurement_request_value, -) -from ni.datastore.data._types._error_information import ErrorInformation -from ni.datastore.data._types._outcome import Outcome -from ni.datastore.data._types._published_condition import PublishedCondition -from ni.datastore.data._types._published_measurement import PublishedMeasurement -from ni.datastore.data._types._step import Step -from ni.datastore.data._types._test_result import TestResult from ni.measurementlink.discovery.v1.client import DiscoveryClient from ni.measurements.data.v1.client import DataStoreClient as DataStoreServiceClient from ni.measurements.data.v1.data_store_service_pb2 import ( @@ -51,6 +36,22 @@ ) from ni_grpc_extensions.channelpool import GrpcChannelPool +from ni.datastore.data._grpc_conversion import ( + convert_read_condition_response_from_protobuf, + convert_read_measurement_response_from_protobuf, + get_publish_measurement_timestamp, + populate_publish_condition_batch_request_values, + populate_publish_condition_request_value, + populate_publish_measurement_batch_request_values, + populate_publish_measurement_request_value, +) +from ni.datastore.data._types._error_information import ErrorInformation +from ni.datastore.data._types._outcome import Outcome +from ni.datastore.data._types._published_condition import PublishedCondition +from ni.datastore.data._types._published_measurement import PublishedMeasurement +from ni.datastore.data._types._step import Step +from ni.datastore.data._types._test_result import TestResult + if TYPE_CHECKING: if sys.version_info >= (3, 11): from typing import Self diff --git a/src/ni/datastore/data/_types/_published_measurement.py b/src/ni/datastore/data/_types/_published_measurement.py index 084f9edf..162d5060 100644 --- a/src/ni/datastore/data/_types/_published_measurement.py +++ b/src/ni/datastore/data/_types/_published_measurement.py @@ -5,15 +5,18 @@ from typing import Iterable, MutableSequence import hightime as ht -from ni.datastore.data._types._error_information import ErrorInformation -from ni.datastore.data._types._outcome import Outcome -from ni.datastore.data._types._published_condition import PublishedCondition -from ni.measurements.data.v1.data_store_pb2 import PublishedMeasurement as PublishedMeasurementProto +from ni.measurements.data.v1.data_store_pb2 import ( + PublishedMeasurement as PublishedMeasurementProto, +) from ni.protobuf.types.precision_timestamp_conversion import ( hightime_datetime_from_protobuf, hightime_datetime_to_protobuf, ) +from ni.datastore.data._types._error_information import ErrorInformation +from ni.datastore.data._types._outcome import Outcome +from ni.datastore.data._types._published_condition import PublishedCondition + class PublishedMeasurement: """Represents a measurement that has been published to the data store. diff --git a/src/ni/datastore/data/_types/_step.py b/src/ni/datastore/data/_types/_step.py index a3ac9af7..16aac666 100644 --- a/src/ni/datastore/data/_types/_step.py +++ b/src/ni/datastore/data/_types/_step.py @@ -5,17 +5,18 @@ from typing import Mapping, MutableMapping import hightime as ht +from ni.measurements.data.v1.data_store_pb2 import Step as StepProto +from ni.protobuf.types.precision_timestamp_conversion import ( + hightime_datetime_from_protobuf, + hightime_datetime_to_protobuf, +) + from ni.datastore.data._types._error_information import ErrorInformation from ni.datastore.data._types._outcome import Outcome from ni.datastore.metadata._grpc_conversion import ( populate_extension_value_message_map, populate_from_extension_value_message_map, ) -from ni.measurements.data.v1.data_store_pb2 import Step as StepProto -from ni.protobuf.types.precision_timestamp_conversion import ( - hightime_datetime_from_protobuf, - hightime_datetime_to_protobuf, -) class Step: diff --git a/src/ni/datastore/data/_types/_test_result.py b/src/ni/datastore/data/_types/_test_result.py index 54d0acc5..71a9644f 100644 --- a/src/ni/datastore/data/_types/_test_result.py +++ b/src/ni/datastore/data/_types/_test_result.py @@ -5,17 +5,18 @@ from typing import Iterable, Mapping, MutableMapping, MutableSequence import hightime as ht +from ni.measurements.data.v1.data_store_pb2 import TestResult as TestResultProto +from ni.protobuf.types.precision_timestamp_conversion import ( + hightime_datetime_from_protobuf, + hightime_datetime_to_protobuf, +) + from ni.datastore.data._types._error_information import ErrorInformation from ni.datastore.data._types._outcome import Outcome from ni.datastore.metadata._grpc_conversion import ( populate_extension_value_message_map, populate_from_extension_value_message_map, ) -from ni.measurements.data.v1.data_store_pb2 import TestResult as TestResultProto -from ni.protobuf.types.precision_timestamp_conversion import ( - hightime_datetime_from_protobuf, - hightime_datetime_to_protobuf, -) class TestResult: diff --git a/src/ni/datastore/metadata/_metadata_store_client.py b/src/ni/datastore/metadata/_metadata_store_client.py index c448b7c5..eaddd6b7 100644 --- a/src/ni/datastore/metadata/_metadata_store_client.py +++ b/src/ni/datastore/metadata/_metadata_store_client.py @@ -11,18 +11,6 @@ from typing import TYPE_CHECKING from grpc import Channel -from ni.datastore.metadata._types._alias import Alias -from ni.datastore.metadata._types._extension_schema import ExtensionSchema -from ni.datastore.metadata._types._hardware_item import HardwareItem -from ni.datastore.metadata._types._metadata_items import MetadataItems -from ni.datastore.metadata._types._operator import Operator -from ni.datastore.metadata._types._software_item import SoftwareItem -from ni.datastore.metadata._types._test import Test -from ni.datastore.metadata._types._test_adapter import TestAdapter -from ni.datastore.metadata._types._test_description import TestDescription -from ni.datastore.metadata._types._test_station import TestStation -from ni.datastore.metadata._types._uut import Uut -from ni.datastore.metadata._types._uut_instance import UutInstance from ni.measurementlink.discovery.v1.client import DiscoveryClient from ni.measurements.metadata.v1.client import ( MetadataStoreClient as MetadataStoreServiceClient, @@ -65,6 +53,19 @@ ) from ni_grpc_extensions.channelpool import GrpcChannelPool +from ni.datastore.metadata._types._alias import Alias +from ni.datastore.metadata._types._extension_schema import ExtensionSchema +from ni.datastore.metadata._types._hardware_item import HardwareItem +from ni.datastore.metadata._types._metadata_items import MetadataItems +from ni.datastore.metadata._types._operator import Operator +from ni.datastore.metadata._types._software_item import SoftwareItem +from ni.datastore.metadata._types._test import Test +from ni.datastore.metadata._types._test_adapter import TestAdapter +from ni.datastore.metadata._types._test_description import TestDescription +from ni.datastore.metadata._types._test_station import TestStation +from ni.datastore.metadata._types._uut import Uut +from ni.datastore.metadata._types._uut_instance import UutInstance + if TYPE_CHECKING: if sys.version_info >= (3, 11): from typing import Self diff --git a/src/ni/datastore/metadata/_types/_alias.py b/src/ni/datastore/metadata/_types/_alias.py index 9691bb90..0b010cb2 100644 --- a/src/ni/datastore/metadata/_types/_alias.py +++ b/src/ni/datastore/metadata/_types/_alias.py @@ -4,7 +4,7 @@ from ni.measurements.metadata.v1.metadata_store_pb2 import Alias as AliasProto -from ._alias_target_type import AliasTargetType +from ni.datastore.metadata._types._alias_target_type import AliasTargetType class Alias: diff --git a/src/ni/datastore/metadata/_types/_hardware_item.py b/src/ni/datastore/metadata/_types/_hardware_item.py index a55b4f4b..96da4a05 100644 --- a/src/ni/datastore/metadata/_types/_hardware_item.py +++ b/src/ni/datastore/metadata/_types/_hardware_item.py @@ -4,13 +4,14 @@ from typing import Mapping, MutableMapping +from ni.measurements.metadata.v1.metadata_store_pb2 import ( + HardwareItem as HardwareItemProto, +) + from ni.datastore.metadata._grpc_conversion import ( populate_extension_value_message_map, populate_from_extension_value_message_map, ) -from ni.measurements.metadata.v1.metadata_store_pb2 import ( - HardwareItem as HardwareItemProto, -) class HardwareItem: diff --git a/src/ni/datastore/metadata/_types/_metadata_items.py b/src/ni/datastore/metadata/_types/_metadata_items.py index 2c3d4252..4c1fab15 100644 --- a/src/ni/datastore/metadata/_types/_metadata_items.py +++ b/src/ni/datastore/metadata/_types/_metadata_items.py @@ -4,6 +4,10 @@ from collections.abc import Sequence +from ni.measurements.metadata.v1.metadata_store_service_pb2 import ( + CreateFromJsonDocumentResponse, +) + from ni.datastore.metadata._types._hardware_item import HardwareItem from ni.datastore.metadata._types._operator import Operator from ni.datastore.metadata._types._software_item import SoftwareItem @@ -13,9 +17,6 @@ from ni.datastore.metadata._types._test_station import TestStation from ni.datastore.metadata._types._uut import Uut from ni.datastore.metadata._types._uut_instance import UutInstance -from ni.measurements.metadata.v1.metadata_store_service_pb2 import ( - CreateFromJsonDocumentResponse, -) class MetadataItems: diff --git a/src/ni/datastore/metadata/_types/_operator.py b/src/ni/datastore/metadata/_types/_operator.py index 1969c1c8..943f3af0 100644 --- a/src/ni/datastore/metadata/_types/_operator.py +++ b/src/ni/datastore/metadata/_types/_operator.py @@ -4,13 +4,14 @@ from typing import Mapping, MutableMapping +from ni.measurements.metadata.v1.metadata_store_pb2 import ( + Operator as OperatorProto, +) + from ni.datastore.metadata._grpc_conversion import ( populate_extension_value_message_map, populate_from_extension_value_message_map, ) -from ni.measurements.metadata.v1.metadata_store_pb2 import ( - Operator as OperatorProto, -) class Operator: diff --git a/src/ni/datastore/metadata/_types/_software_item.py b/src/ni/datastore/metadata/_types/_software_item.py index 7d175702..b52fbbd0 100644 --- a/src/ni/datastore/metadata/_types/_software_item.py +++ b/src/ni/datastore/metadata/_types/_software_item.py @@ -4,13 +4,14 @@ from typing import Mapping, MutableMapping +from ni.measurements.metadata.v1.metadata_store_pb2 import ( + SoftwareItem as SoftwareItemProto, +) + from ni.datastore.metadata._grpc_conversion import ( populate_extension_value_message_map, populate_from_extension_value_message_map, ) -from ni.measurements.metadata.v1.metadata_store_pb2 import ( - SoftwareItem as SoftwareItemProto, -) class SoftwareItem: diff --git a/src/ni/datastore/metadata/_types/_test.py b/src/ni/datastore/metadata/_types/_test.py index 605161b9..bb0f3776 100644 --- a/src/ni/datastore/metadata/_types/_test.py +++ b/src/ni/datastore/metadata/_types/_test.py @@ -4,13 +4,14 @@ from typing import Mapping, MutableMapping +from ni.measurements.metadata.v1.metadata_store_pb2 import ( + Test as TestProto, +) + from ni.datastore.metadata._grpc_conversion import ( populate_extension_value_message_map, populate_from_extension_value_message_map, ) -from ni.measurements.metadata.v1.metadata_store_pb2 import ( - Test as TestProto, -) class Test: diff --git a/src/ni/datastore/metadata/_types/_test_adapter.py b/src/ni/datastore/metadata/_types/_test_adapter.py index 72e26cc7..c10e79b2 100644 --- a/src/ni/datastore/metadata/_types/_test_adapter.py +++ b/src/ni/datastore/metadata/_types/_test_adapter.py @@ -4,13 +4,14 @@ from typing import Mapping, MutableMapping +from ni.measurements.metadata.v1.metadata_store_pb2 import ( + TestAdapter as TestAdapterProto, +) + from ni.datastore.metadata._grpc_conversion import ( populate_extension_value_message_map, populate_from_extension_value_message_map, ) -from ni.measurements.metadata.v1.metadata_store_pb2 import ( - TestAdapter as TestAdapterProto, -) class TestAdapter: diff --git a/src/ni/datastore/metadata/_types/_test_description.py b/src/ni/datastore/metadata/_types/_test_description.py index fab9cba8..f65e5f00 100644 --- a/src/ni/datastore/metadata/_types/_test_description.py +++ b/src/ni/datastore/metadata/_types/_test_description.py @@ -4,13 +4,14 @@ from typing import Mapping, MutableMapping +from ni.measurements.metadata.v1.metadata_store_pb2 import ( + TestDescription as TestDescriptionProto, +) + from ni.datastore.metadata._grpc_conversion import ( populate_extension_value_message_map, populate_from_extension_value_message_map, ) -from ni.measurements.metadata.v1.metadata_store_pb2 import ( - TestDescription as TestDescriptionProto, -) class TestDescription: diff --git a/src/ni/datastore/metadata/_types/_test_station.py b/src/ni/datastore/metadata/_types/_test_station.py index d8fde8d6..8c270993 100644 --- a/src/ni/datastore/metadata/_types/_test_station.py +++ b/src/ni/datastore/metadata/_types/_test_station.py @@ -4,13 +4,14 @@ from typing import Mapping, MutableMapping +from ni.measurements.metadata.v1.metadata_store_pb2 import ( + TestStation as TestStationProto, +) + from ni.datastore.metadata._grpc_conversion import ( populate_extension_value_message_map, populate_from_extension_value_message_map, ) -from ni.measurements.metadata.v1.metadata_store_pb2 import ( - TestStation as TestStationProto, -) class TestStation: diff --git a/src/ni/datastore/metadata/_types/_uut.py b/src/ni/datastore/metadata/_types/_uut.py index 2783e7a7..6091e843 100644 --- a/src/ni/datastore/metadata/_types/_uut.py +++ b/src/ni/datastore/metadata/_types/_uut.py @@ -4,13 +4,14 @@ from typing import Iterable, Mapping, MutableMapping, MutableSequence +from ni.measurements.metadata.v1.metadata_store_pb2 import ( + Uut as UutProto, +) + from ni.datastore.metadata._grpc_conversion import ( populate_extension_value_message_map, populate_from_extension_value_message_map, ) -from ni.measurements.metadata.v1.metadata_store_pb2 import ( - Uut as UutProto, -) class Uut: diff --git a/src/ni/datastore/metadata/_types/_uut_instance.py b/src/ni/datastore/metadata/_types/_uut_instance.py index fa89fc95..98c1e9f6 100644 --- a/src/ni/datastore/metadata/_types/_uut_instance.py +++ b/src/ni/datastore/metadata/_types/_uut_instance.py @@ -4,13 +4,14 @@ from typing import Mapping, MutableMapping +from ni.measurements.metadata.v1.metadata_store_pb2 import ( + UutInstance as UutInstanceProto, +) + from ni.datastore.metadata._grpc_conversion import ( populate_extension_value_message_map, populate_from_extension_value_message_map, ) -from ni.measurements.metadata.v1.metadata_store_pb2 import ( - UutInstance as UutInstanceProto, -) class UutInstance: diff --git a/tests/acceptance/test_publish_condition_and_read_data.py b/tests/acceptance/test_publish_condition_and_read_data.py index b0b61b3e..df04b9e5 100644 --- a/tests/acceptance/test_publish_condition_and_read_data.py +++ b/tests/acceptance/test_publish_condition_and_read_data.py @@ -1,13 +1,14 @@ """Acceptance tests that publish various condition values then read the data back.""" +from nitypes.scalar import Scalar +from nitypes.vector import Vector +from utilities import DataStoreContext + from ni.datastore.data import ( DataStoreClient, Step, TestResult, ) -from nitypes.scalar import Scalar -from nitypes.vector import Vector -from utilities import DataStoreContext def test___publish_float_condition___read_condition_value_returns_vector( 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 df8b6938..45bfd439 100644 --- a/tests/acceptance/test_publish_condition_batch_and_read_data.py +++ b/tests/acceptance/test_publish_condition_batch_and_read_data.py @@ -1,12 +1,13 @@ """Acceptance tests that publish various batch condition values then read the data back.""" +from nitypes.vector import Vector +from utilities import DataStoreContext + from ni.datastore.data import ( DataStoreClient, Step, TestResult, ) -from nitypes.vector import Vector -from utilities import DataStoreContext def test___publish_batch_float_condition___read_condition_value_returns_vector( diff --git a/tests/acceptance/test_publish_measurement_and_read_data.py b/tests/acceptance/test_publish_measurement_and_read_data.py index 30033f20..f7efb0b5 100644 --- a/tests/acceptance/test_publish_measurement_and_read_data.py +++ b/tests/acceptance/test_publish_measurement_and_read_data.py @@ -1,17 +1,18 @@ """Acceptance tests that publish various values then reads the data back.""" import numpy as np -from ni.datastore.data import ( - DataStoreClient, - Step, - TestResult, -) from nitypes.scalar import Scalar from nitypes.vector import Vector from nitypes.waveform import AnalogWaveform, ComplexWaveform, DigitalWaveform, Spectrum from nitypes.xy_data import XYData from utilities import DataStoreContext +from ni.datastore.data import ( + DataStoreClient, + Step, + TestResult, +) + def test___publish_float___read_measurement_value_returns_vector( acceptance_test_context: DataStoreContext, 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 cacc1315..6786a5b7 100644 --- a/tests/acceptance/test_publish_measurement_batch_and_read_data.py +++ b/tests/acceptance/test_publish_measurement_batch_and_read_data.py @@ -1,14 +1,15 @@ """Acceptance tests that publish various batch measurement values then reads the data back.""" import numpy as np +from nitypes.vector import Vector +from nitypes.waveform import AnalogWaveform +from utilities import DataStoreContext + from ni.datastore.data import ( DataStoreClient, Step, TestResult, ) -from nitypes.vector import Vector -from nitypes.waveform import AnalogWaveform -from utilities import DataStoreContext def test___publish_batch_floats___read_measurement_value_returns_vector( diff --git a/tests/acceptance/test_publish_with_metadata.py b/tests/acceptance/test_publish_with_metadata.py index 2bdca0e7..0f578bde 100644 --- a/tests/acceptance/test_publish_with_metadata.py +++ b/tests/acceptance/test_publish_with_metadata.py @@ -5,6 +5,9 @@ import hightime as ht import numpy as np +from nitypes.waveform import AnalogWaveform +from utilities import DataStoreContext + from ni.datastore.data import ( DataStoreClient, ErrorInformation, @@ -24,8 +27,6 @@ Uut, UutInstance, ) -from nitypes.waveform import AnalogWaveform -from utilities import DataStoreContext def test___waveform_with_all_metadata___publish___query_read_returns_correct_data( diff --git a/tests/acceptance/test_query_conditions.py b/tests/acceptance/test_query_conditions.py index 369a8d65..321fc032 100644 --- a/tests/acceptance/test_query_conditions.py +++ b/tests/acceptance/test_query_conditions.py @@ -1,9 +1,9 @@ """Acceptance tests that exercise DataStoreClient.query_conditions().""" -from ni.datastore.data import DataStoreClient from nitypes.vector import Vector from utilities import DataStoreContext +from ni.datastore.data import DataStoreClient from tests.acceptance._utils import append_hashed_time, create_test_result_and_step diff --git a/tests/acceptance/test_query_measurements.py b/tests/acceptance/test_query_measurements.py index b219de42..d5a8d9b0 100644 --- a/tests/acceptance/test_query_measurements.py +++ b/tests/acceptance/test_query_measurements.py @@ -1,9 +1,9 @@ """Acceptance tests that exercise DataStoreClient.query_measurements().""" -from ni.datastore.data import DataStoreClient from nitypes.vector import Vector from utilities import DataStoreContext +from ni.datastore.data import DataStoreClient from tests.acceptance._utils import append_hashed_time, create_test_result_and_step diff --git a/tests/acceptance/test_query_steps.py b/tests/acceptance/test_query_steps.py index 6f95880e..72b34388 100644 --- a/tests/acceptance/test_query_steps.py +++ b/tests/acceptance/test_query_steps.py @@ -1,8 +1,8 @@ """Acceptance tests that exercise DataStoreClient.query_steps().""" -from ni.datastore.data import DataStoreClient, Step, TestResult from utilities import DataStoreContext +from ni.datastore.data import DataStoreClient, Step, TestResult from tests.acceptance._utils import append_hashed_time, create_test_result_and_step diff --git a/tests/acceptance/test_query_test_results.py b/tests/acceptance/test_query_test_results.py index bf192d11..76e57bae 100644 --- a/tests/acceptance/test_query_test_results.py +++ b/tests/acceptance/test_query_test_results.py @@ -1,8 +1,8 @@ """Acceptance tests that exercise DataStoreClient.query_test_results().""" -from ni.datastore.data import DataStoreClient from utilities import DataStoreContext +from ni.datastore.data import DataStoreClient from tests.acceptance._utils import append_hashed_time, create_test_result diff --git a/tests/unit/conftest.py b/tests/unit/conftest.py index 3a45041c..beb3be7b 100644 --- a/tests/unit/conftest.py +++ b/tests/unit/conftest.py @@ -7,9 +7,10 @@ from unittest.mock import NonCallableMock import pytest +from pytest_mock import MockerFixture + from ni.datastore.data import DataStoreClient from ni.datastore.metadata import MetadataStoreClient -from pytest_mock import MockerFixture @pytest.fixture diff --git a/tests/unit/data/test_close_client.py b/tests/unit/data/test_close_client.py index 11c2226d..ec36c709 100644 --- a/tests/unit/data/test_close_client.py +++ b/tests/unit/data/test_close_client.py @@ -5,6 +5,7 @@ from unittest.mock import NonCallableMock import pytest + from ni.datastore.data import DataStoreClient diff --git a/tests/unit/data/test_create_metadata.py b/tests/unit/data/test_create_metadata.py index 05279c2e..0b11665f 100644 --- a/tests/unit/data/test_create_metadata.py +++ b/tests/unit/data/test_create_metadata.py @@ -5,11 +5,6 @@ from typing import cast from unittest.mock import NonCallableMock -from ni.datastore.data import ( - DataStoreClient, - Step, - TestResult, -) from ni.measurements.data.v1.data_store_service_pb2 import ( CreateStepRequest, CreateStepResponse, @@ -17,6 +12,12 @@ CreateTestResultResponse, ) +from ni.datastore.data import ( + DataStoreClient, + Step, + TestResult, +) + def test___create_step___calls_data_store_service_client( data_store_client: DataStoreClient, diff --git a/tests/unit/data/test_error_information.py b/tests/unit/data/test_error_information.py index bac53ece..13109293 100644 --- a/tests/unit/data/test_error_information.py +++ b/tests/unit/data/test_error_information.py @@ -3,11 +3,12 @@ from __future__ import annotations import pytest -from ni.datastore.data import ErrorInformation from ni.measurements.data.v1.data_store_pb2 import ( ErrorInformation as ErrorInformationProto, ) +from ni.datastore.data import ErrorInformation + def test___init___with_defaults() -> None: """Test creating ErrorInformation with default values.""" diff --git a/tests/unit/data/test_get_metadata.py b/tests/unit/data/test_get_metadata.py index 933e5985..b1b39cbb 100644 --- a/tests/unit/data/test_get_metadata.py +++ b/tests/unit/data/test_get_metadata.py @@ -7,13 +7,6 @@ from unittest.mock import NonCallableMock 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, @@ -34,6 +27,14 @@ hightime_datetime_to_protobuf, ) +from ni.datastore.data import ( + DataStoreClient, + PublishedCondition, + PublishedMeasurement, + Step, + TestResult, +) + def test___get_step___calls_data_store_service_client( data_store_client: DataStoreClient, diff --git a/tests/unit/data/test_grpc_conversion.py b/tests/unit/data/test_grpc_conversion.py index 10bf69ae..86022936 100644 --- a/tests/unit/data/test_grpc_conversion.py +++ b/tests/unit/data/test_grpc_conversion.py @@ -2,12 +2,6 @@ import numpy as np import pytest -from ni.datastore.data._grpc_conversion import ( - populate_publish_condition_batch_request_values, - populate_publish_condition_request_value, - populate_publish_measurement_batch_request_values, - populate_publish_measurement_request_value, -) from ni.measurements.data.v1.data_store_service_pb2 import ( PublishConditionBatchRequest, PublishConditionRequest, @@ -29,6 +23,13 @@ from nitypes.waveform import AnalogWaveform, ComplexWaveform, DigitalWaveform, Spectrum from nitypes.xy_data import XYData +from ni.datastore.data._grpc_conversion import ( + populate_publish_condition_batch_request_values, + populate_publish_condition_request_value, + populate_publish_measurement_batch_request_values, + populate_publish_measurement_request_value, +) + # ======================================================== # Populate Condition diff --git a/tests/unit/data/test_outcome.py b/tests/unit/data/test_outcome.py index 1ca848f2..d584e4c1 100644 --- a/tests/unit/data/test_outcome.py +++ b/tests/unit/data/test_outcome.py @@ -5,9 +5,10 @@ from typing import cast import pytest -from ni.datastore.data import Outcome from ni.measurements.data.v1.data_store_pb2 import Outcome as OutcomeProto +from ni.datastore.data import Outcome + def test___enum_values___match_protobuf_values() -> None: """Test that enum values match the protobuf enum values.""" diff --git a/tests/unit/data/test_publish_condition.py b/tests/unit/data/test_publish_condition.py index 0645bc06..eeeb3fd2 100644 --- a/tests/unit/data/test_publish_condition.py +++ b/tests/unit/data/test_publish_condition.py @@ -6,7 +6,6 @@ from unittest.mock import NonCallableMock import pytest -from ni.datastore.data import DataStoreClient from ni.measurements.data.v1.data_store_service_pb2 import ( PublishConditionBatchRequest, PublishConditionBatchResponse, @@ -15,6 +14,8 @@ ) from nitypes.vector import Vector +from ni.datastore.data import DataStoreClient + def test___publish_condition___calls_data_store_service_client( data_store_client: DataStoreClient, diff --git a/tests/unit/data/test_publish_measurement.py b/tests/unit/data/test_publish_measurement.py index 580918d7..a7e96483 100644 --- a/tests/unit/data/test_publish_measurement.py +++ b/tests/unit/data/test_publish_measurement.py @@ -4,13 +4,12 @@ import datetime as std_datetime import unittest.mock -from typing import Any, Iterable, cast +from typing import Any, cast, Iterable from unittest.mock import NonCallableMock import numpy as np import pytest from hightime import datetime, timedelta -from ni.datastore.data import DataStoreClient, ErrorInformation, Outcome from ni.measurements.data.v1.data_store_pb2 import ( ErrorInformation as ErrorInformationProto, Outcome as OutcomeProto, @@ -34,6 +33,8 @@ from nitypes.waveform import AnalogWaveform, Timing from nitypes.xy_data import XYData +from ni.datastore.data import DataStoreClient, ErrorInformation, Outcome + @pytest.mark.parametrize("value", [True, False]) def test___publish_boolean_data___calls_data_store_service_client( diff --git a/tests/unit/data/test_query_metadata.py b/tests/unit/data/test_query_metadata.py index c5d5013a..e142b3ca 100644 --- a/tests/unit/data/test_query_metadata.py +++ b/tests/unit/data/test_query_metadata.py @@ -7,10 +7,6 @@ from unittest.mock import NonCallableMock from hightime import datetime -from ni.datastore.data import ( - DataStoreClient, - Step, -) from ni.measurements.data.v1.data_store_pb2 import Step as StepProto from ni.measurements.data.v1.data_store_service_pb2 import ( QueryStepsRequest, @@ -20,6 +16,11 @@ hightime_datetime_to_protobuf, ) +from ni.datastore.data import ( + DataStoreClient, + Step, +) + def test___query_steps___calls_data_store_service_client( data_store_client: DataStoreClient, diff --git a/tests/unit/data/test_read.py b/tests/unit/data/test_read.py index d708deaa..ae96f2f6 100644 --- a/tests/unit/data/test_read.py +++ b/tests/unit/data/test_read.py @@ -6,7 +6,6 @@ import numpy as np import pytest -from ni.datastore.data import DataStoreClient, PublishedCondition, PublishedMeasurement from ni.protobuf.types import ( array_pb2, attribute_value_pb2, @@ -19,6 +18,8 @@ from nitypes.waveform import AnalogWaveform, ComplexWaveform, DigitalWaveform, Spectrum from nitypes.xy_data import XYData +from ni.datastore.data import DataStoreClient, PublishedCondition, PublishedMeasurement + def test___read_measurement_value___calls_data_store_client( data_store_client: DataStoreClient, mocked_data_store_service_client: NonCallableMock diff --git a/tests/unit/metadata/test_alias_target_type.py b/tests/unit/metadata/test_alias_target_type.py index 2fddf3ba..9c7ea7a2 100644 --- a/tests/unit/metadata/test_alias_target_type.py +++ b/tests/unit/metadata/test_alias_target_type.py @@ -5,11 +5,12 @@ from typing import cast import pytest -from ni.datastore.metadata import AliasTargetType from ni.measurements.metadata.v1.metadata_store_pb2 import ( AliasTargetType as AliasTargetTypeProto, ) +from ni.datastore.metadata import AliasTargetType + def test___enum_values___match_protobuf_values() -> None: """Test that enum values match the protobuf enum values.""" diff --git a/tests/unit/metadata/test_close_client.py b/tests/unit/metadata/test_close_client.py index 467e27e8..36a5e531 100644 --- a/tests/unit/metadata/test_close_client.py +++ b/tests/unit/metadata/test_close_client.py @@ -5,6 +5,7 @@ from unittest.mock import NonCallableMock import pytest + from ni.datastore.metadata import MetadataStoreClient diff --git a/tests/unit/metadata/test_create_from_json.py b/tests/unit/metadata/test_create_from_json.py index b749c9e5..20b497bf 100644 --- a/tests/unit/metadata/test_create_from_json.py +++ b/tests/unit/metadata/test_create_from_json.py @@ -8,15 +8,16 @@ from unittest.mock import NonCallableMock import pytest -from ni.datastore.metadata import ( - MetadataItems, - MetadataStoreClient, -) from ni.measurements.metadata.v1.metadata_store_service_pb2 import ( CreateFromJsonDocumentRequest, CreateFromJsonDocumentResponse, ) +from ni.datastore.metadata import ( + MetadataItems, + MetadataStoreClient, +) + @pytest.fixture def sample_metadata_json() -> str: diff --git a/tests/unit/metadata/test_create_metadata.py b/tests/unit/metadata/test_create_metadata.py index 9ab304a5..8ec62831 100644 --- a/tests/unit/metadata/test_create_metadata.py +++ b/tests/unit/metadata/test_create_metadata.py @@ -5,18 +5,6 @@ from typing import cast from unittest.mock import NonCallableMock -from ni.datastore.metadata import ( - MetadataStoreClient, - HardwareItem, - Operator, - SoftwareItem, - Test, - TestAdapter, - TestDescription, - TestStation, - Uut, - UutInstance, -) from ni.measurements.metadata.v1.metadata_store_service_pb2 import ( CreateHardwareItemRequest, CreateHardwareItemResponse, @@ -38,6 +26,19 @@ CreateUutResponse, ) +from ni.datastore.metadata import ( + HardwareItem, + MetadataStoreClient, + Operator, + SoftwareItem, + Test, + TestAdapter, + TestDescription, + TestStation, + Uut, + UutInstance, +) + def test___create_uut_instance___calls_metadata_store_service_client( metadata_store_client: MetadataStoreClient, diff --git a/tests/unit/metadata/test_get_metadata.py b/tests/unit/metadata/test_get_metadata.py index d88181c0..3717959c 100644 --- a/tests/unit/metadata/test_get_metadata.py +++ b/tests/unit/metadata/test_get_metadata.py @@ -5,18 +5,6 @@ from typing import cast from unittest.mock import NonCallableMock -from ni.datastore.metadata import ( - MetadataStoreClient, - HardwareItem, - Operator, - SoftwareItem, - Test, - TestAdapter, - TestDescription, - TestStation, - Uut, - UutInstance, -) from ni.measurements.metadata.v1.metadata_store_pb2 import ( HardwareItem as HardwareItemProto, Operator as OperatorProto, @@ -49,6 +37,19 @@ GetUutResponse, ) +from ni.datastore.metadata import ( + HardwareItem, + MetadataStoreClient, + Operator, + SoftwareItem, + Test, + TestAdapter, + TestDescription, + TestStation, + Uut, + UutInstance, +) + def test___get_uut_instance___calls_metadata_store_service_client( metadata_store_client: MetadataStoreClient, diff --git a/tests/unit/metadata/test_query_metadata.py b/tests/unit/metadata/test_query_metadata.py index f821630c..ed41dc08 100644 --- a/tests/unit/metadata/test_query_metadata.py +++ b/tests/unit/metadata/test_query_metadata.py @@ -5,18 +5,6 @@ from typing import cast from unittest.mock import NonCallableMock -from ni.datastore.metadata import ( - MetadataStoreClient, - HardwareItem, - Operator, - SoftwareItem, - Test, - TestAdapter, - TestDescription, - TestStation, - Uut, - UutInstance, -) from ni.measurements.metadata.v1.metadata_store_pb2 import ( HardwareItem as HardwareItemProto, Operator as OperatorProto, @@ -35,10 +23,10 @@ QueryOperatorsResponse, QuerySoftwareItemsRequest, QuerySoftwareItemsResponse, - QueryTestDescriptionsRequest, - QueryTestDescriptionsResponse, QueryTestAdaptersRequest, QueryTestAdaptersResponse, + QueryTestDescriptionsRequest, + QueryTestDescriptionsResponse, QueryTestsRequest, QueryTestsResponse, QueryTestStationsRequest, @@ -49,6 +37,19 @@ QueryUutsResponse, ) +from ni.datastore.metadata import ( + HardwareItem, + MetadataStoreClient, + Operator, + SoftwareItem, + Test, + TestAdapter, + TestDescription, + TestStation, + Uut, + UutInstance, +) + def test___query_uut_instances___calls_metadata_store_service_client( metadata_store_client: MetadataStoreClient, diff --git a/tests/unit/metadata/test_register_schema.py b/tests/unit/metadata/test_register_schema.py index 2306395f..9c3a0fbb 100644 --- a/tests/unit/metadata/test_register_schema.py +++ b/tests/unit/metadata/test_register_schema.py @@ -7,13 +7,14 @@ from unittest.mock import NonCallableMock import pytest -from ni.datastore.metadata import ( - MetadataStoreClient, -) from ni.measurements.metadata.v1.metadata_store_service_pb2 import ( RegisterSchemaRequest, ) +from ni.datastore.metadata import ( + MetadataStoreClient, +) + def test___register_schema_from_file_with_pathlib_path___calls_metadata_store_service_client_with_file_contents( metadata_store_client: MetadataStoreClient, diff --git a/utilities/poetry.lock b/utilities/poetry.lock index 4a335015..d48809a5 100644 --- a/utilities/poetry.lock +++ b/utilities/poetry.lock @@ -43,6 +43,18 @@ files = [ {file = "ast_serialize-0.5.0.tar.gz", hash = "sha256:5880091bfe6f4f986f22866375c2e884843e7a0b6343ae41aeea659613d879b6"}, ] +[[package]] +name = "better-diff" +version = "0.1.4" +description = "A simple library for printing better diffs based on the stdlib unified_diff format." +optional = false +python-versions = "<4.0,>=3.8" +groups = ["lint"] +files = [ + {file = "better_diff-0.1.4-py3-none-any.whl", hash = "sha256:06e63358b2047ae2695abd96316f47c6d3c38b9e641f53012279878d66d8792e"}, + {file = "better_diff-0.1.4.tar.gz", hash = "sha256:920ca76bdbcd2f0c361fa5d9a2d4727624a3545d6cb467b1b6616cad8a634de7"}, +] + [[package]] name = "black" version = "25.12.0" @@ -212,6 +224,21 @@ files = [ pycodestyle = "*" setuptools = "*" +[[package]] +name = "flake8-tidy-imports" +version = "4.12.0" +description = "A flake8 plugin that helps you write tidier imports." +optional = false +python-versions = ">=3.9" +groups = ["lint"] +files = [ + {file = "flake8_tidy_imports-4.12.0-py3-none-any.whl", hash = "sha256:ab1e31a5ce07518a31c0a34cd92551f4c27639ae2c35a21364680a0318da312e"}, + {file = "flake8_tidy_imports-4.12.0.tar.gz", hash = "sha256:9254788c3b6862c2fcec0250d2dc9af089afebff9c5b8a8ac8b9525b059b06db"}, +] + +[package.dependencies] +flake8 = ">=3.8" + [[package]] name = "isort" version = "7.0.0" @@ -427,31 +454,33 @@ files = [ [[package]] name = "ni-python-styleguide" -version = "0.4.9" +version = "0.5.0" description = "NI's internal and external Python linter rules and plugins" optional = false -python-versions = "<4.0,>=3.7" +python-versions = "<4.0,>=3.9" groups = ["lint"] files = [ - {file = "ni_python_styleguide-0.4.9-py3-none-any.whl", hash = "sha256:3a33735fbb52231bda00ec970d7c7aebe2b15aed2ccbd07da5c52b8e04730918"}, - {file = "ni_python_styleguide-0.4.9.tar.gz", hash = "sha256:64a65da646fc8c2f0e68970e0a3190534add9380ee78782fa809fee5321f9e45"}, + {file = "ni_python_styleguide-0.5.0-py3-none-any.whl", hash = "sha256:66784d97bc2898552386ca8e0667a11fa5f712820130585df7709d08836f6bc0"}, + {file = "ni_python_styleguide-0.5.0.tar.gz", hash = "sha256:66bd05f7d9fc98a87e5e85319faa752efd54549c979938ed1bb64e2d1f412630"}, ] [package.dependencies] +better-diff = ">=0.1.3,<0.2.0" black = ">=23.1,<26.0" click = ">=7.1.2" flake8 = [ - {version = ">=5.0,<6.0", markers = "python_version >= \"3.7\" and python_version < \"3.12\""}, + {version = ">=5.0,<6.0", markers = "python_version >= \"3.8\" and python_version < \"3.12\""}, {version = ">=6.1,<7.0", markers = "python_version >= \"3.12\" and python_version < \"4.0\""}, ] flake8-black = ">=0.2.1" flake8-docstrings = ">=1.5.0" flake8-import-order = ">=0.18.1,<0.19.0" +flake8-tidy-imports = ">=4.11.0" isort = ">=5.10" pathspec = ">=0.11.1" pep8-naming = ">=0.11.1" pycodestyle = [ - {version = ">=2.9,<3.0", markers = "python_version >= \"3.7\" and python_version < \"3.12\""}, + {version = ">=2.9,<3.0", markers = "python_version >= \"3.8\" and python_version < \"3.12\""}, {version = ">=2.11,<3.0", markers = "python_version >= \"3.12\" and python_version < \"4.0\""}, ] setuptools = "<82" diff --git a/utilities/src/utilities/__init__.py b/utilities/src/utilities/__init__.py index 8c0af3f7..8ef0dd0e 100644 --- a/utilities/src/utilities/__init__.py +++ b/utilities/src/utilities/__init__.py @@ -1,6 +1,6 @@ """Utilities for development in datastore-python.""" -from ._data_store_context import DataStoreContext +from utilities._data_store_context import DataStoreContext __all__ = [ "DataStoreContext",