From 01098c59b44bdb57ca0e07ced8c84c5100e96d3e Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 10:32:52 -0500 Subject: [PATCH 01/33] First pass at a top-level package --- ni_measurement_plugin_sdk/README.md | 20 ++ .../ni_measurement_plugin_sdk/__init__.py | 1 + .../ni_measurement_plugin_sdk/foo.py | 1 + ni_measurement_plugin_sdk/poetry.lock | 310 ++++++++++++++++++ ni_measurement_plugin_sdk/poetry.toml | 2 + ni_measurement_plugin_sdk/pyproject.toml | 30 ++ 6 files changed, 364 insertions(+) create mode 100644 ni_measurement_plugin_sdk/README.md create mode 100644 ni_measurement_plugin_sdk/ni_measurement_plugin_sdk/__init__.py create mode 100644 ni_measurement_plugin_sdk/ni_measurement_plugin_sdk/foo.py create mode 100644 ni_measurement_plugin_sdk/poetry.lock create mode 100644 ni_measurement_plugin_sdk/poetry.toml create mode 100644 ni_measurement_plugin_sdk/pyproject.toml diff --git a/ni_measurement_plugin_sdk/README.md b/ni_measurement_plugin_sdk/README.md new file mode 100644 index 000000000..b8eaa1e6b --- /dev/null +++ b/ni_measurement_plugin_sdk/README.md @@ -0,0 +1,20 @@ +# Measurement Plug-In SDK for Python +--- + +## Introduction + +Measurement Plug-In SDK for Python (`ni-measurement-plugin-sdk`) is a +tool for generating and editing reusable measurement plug-ins using gRPC services. +The sole purpose is to be a top-level package to depend on service and generator. + +For installation and usage, see [Measurement Plug-In SDK for Python (`ni-measurement-plugin-sdk-service`)](https://pypi.org/project/ni-measurement-plugin-sdk-service/). + +--- + +## Dependencies + +- Python >= 3.8 [(3.9 recommended)](https://www.python.org/downloads/release/python-3913/) +- [mako >= 1.2.1, < 2.x](https://pypi.org/project/Mako/1.2.1/) +- [click >= 8.1.3](https://pypi.org/project/click/8.1.3/) + +--- diff --git a/ni_measurement_plugin_sdk/ni_measurement_plugin_sdk/__init__.py b/ni_measurement_plugin_sdk/ni_measurement_plugin_sdk/__init__.py new file mode 100644 index 000000000..baea36fd4 --- /dev/null +++ b/ni_measurement_plugin_sdk/ni_measurement_plugin_sdk/__init__.py @@ -0,0 +1 @@ +"""Measurement Plugin SDK for Python.""" \ No newline at end of file diff --git a/ni_measurement_plugin_sdk/ni_measurement_plugin_sdk/foo.py b/ni_measurement_plugin_sdk/ni_measurement_plugin_sdk/foo.py new file mode 100644 index 000000000..302830e22 --- /dev/null +++ b/ni_measurement_plugin_sdk/ni_measurement_plugin_sdk/foo.py @@ -0,0 +1 @@ +import click \ No newline at end of file diff --git a/ni_measurement_plugin_sdk/poetry.lock b/ni_measurement_plugin_sdk/poetry.lock new file mode 100644 index 000000000..9e1acaa56 --- /dev/null +++ b/ni_measurement_plugin_sdk/poetry.lock @@ -0,0 +1,310 @@ +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "deprecation" +version = "2.1.0" +description = "A library to handle automated deprecations" +optional = false +python-versions = "*" +files = [ + {file = "deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a"}, + {file = "deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff"}, +] + +[package.dependencies] +packaging = "*" + +[[package]] +name = "grpcio" +version = "1.64.1" +description = "HTTP/2-based RPC framework" +optional = false +python-versions = ">=3.8" +files = [ + {file = "grpcio-1.64.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:55697ecec192bc3f2f3cc13a295ab670f51de29884ca9ae6cd6247df55df2502"}, + {file = "grpcio-1.64.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:3b64ae304c175671efdaa7ec9ae2cc36996b681eb63ca39c464958396697daff"}, + {file = "grpcio-1.64.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:bac71b4b28bc9af61efcdc7630b166440bbfbaa80940c9a697271b5e1dabbc61"}, + {file = "grpcio-1.64.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c024ffc22d6dc59000faf8ad781696d81e8e38f4078cb0f2630b4a3cf231a90"}, + {file = "grpcio-1.64.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7cd5c1325f6808b8ae31657d281aadb2a51ac11ab081ae335f4f7fc44c1721d"}, + {file = "grpcio-1.64.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0a2813093ddb27418a4c99f9b1c223fab0b053157176a64cc9db0f4557b69bd9"}, + {file = "grpcio-1.64.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2981c7365a9353f9b5c864595c510c983251b1ab403e05b1ccc70a3d9541a73b"}, + {file = "grpcio-1.64.1-cp310-cp310-win32.whl", hash = "sha256:1262402af5a511c245c3ae918167eca57342c72320dffae5d9b51840c4b2f86d"}, + {file = "grpcio-1.64.1-cp310-cp310-win_amd64.whl", hash = "sha256:19264fc964576ddb065368cae953f8d0514ecc6cb3da8903766d9fb9d4554c33"}, + {file = "grpcio-1.64.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:58b1041e7c870bb30ee41d3090cbd6f0851f30ae4eb68228955d973d3efa2e61"}, + {file = "grpcio-1.64.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bbc5b1d78a7822b0a84c6f8917faa986c1a744e65d762ef6d8be9d75677af2ca"}, + {file = "grpcio-1.64.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:5841dd1f284bd1b3d8a6eca3a7f062b06f1eec09b184397e1d1d43447e89a7ae"}, + {file = "grpcio-1.64.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8caee47e970b92b3dd948371230fcceb80d3f2277b3bf7fbd7c0564e7d39068e"}, + {file = "grpcio-1.64.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73819689c169417a4f978e562d24f2def2be75739c4bed1992435d007819da1b"}, + {file = "grpcio-1.64.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6503b64c8b2dfad299749cad1b595c650c91e5b2c8a1b775380fcf8d2cbba1e9"}, + {file = "grpcio-1.64.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1de403fc1305fd96cfa75e83be3dee8538f2413a6b1685b8452301c7ba33c294"}, + {file = "grpcio-1.64.1-cp311-cp311-win32.whl", hash = "sha256:d4d29cc612e1332237877dfa7fe687157973aab1d63bd0f84cf06692f04c0367"}, + {file = "grpcio-1.64.1-cp311-cp311-win_amd64.whl", hash = "sha256:5e56462b05a6f860b72f0fa50dca06d5b26543a4e88d0396259a07dc30f4e5aa"}, + {file = "grpcio-1.64.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:4657d24c8063e6095f850b68f2d1ba3b39f2b287a38242dcabc166453e950c59"}, + {file = "grpcio-1.64.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:62b4e6eb7bf901719fce0ca83e3ed474ae5022bb3827b0a501e056458c51c0a1"}, + {file = "grpcio-1.64.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:ee73a2f5ca4ba44fa33b4d7d2c71e2c8a9e9f78d53f6507ad68e7d2ad5f64a22"}, + {file = "grpcio-1.64.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:198908f9b22e2672a998870355e226a725aeab327ac4e6ff3a1399792ece4762"}, + {file = "grpcio-1.64.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39b9d0acaa8d835a6566c640f48b50054f422d03e77e49716d4c4e8e279665a1"}, + {file = "grpcio-1.64.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:5e42634a989c3aa6049f132266faf6b949ec2a6f7d302dbb5c15395b77d757eb"}, + {file = "grpcio-1.64.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b1a82e0b9b3022799c336e1fc0f6210adc019ae84efb7321d668129d28ee1efb"}, + {file = "grpcio-1.64.1-cp312-cp312-win32.whl", hash = "sha256:55260032b95c49bee69a423c2f5365baa9369d2f7d233e933564d8a47b893027"}, + {file = "grpcio-1.64.1-cp312-cp312-win_amd64.whl", hash = "sha256:c1a786ac592b47573a5bb7e35665c08064a5d77ab88a076eec11f8ae86b3e3f6"}, + {file = "grpcio-1.64.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:a011ac6c03cfe162ff2b727bcb530567826cec85eb8d4ad2bfb4bd023287a52d"}, + {file = "grpcio-1.64.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:4d6dab6124225496010bd22690f2d9bd35c7cbb267b3f14e7a3eb05c911325d4"}, + {file = "grpcio-1.64.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:a5e771d0252e871ce194d0fdcafd13971f1aae0ddacc5f25615030d5df55c3a2"}, + {file = "grpcio-1.64.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2c3c1b90ab93fed424e454e93c0ed0b9d552bdf1b0929712b094f5ecfe7a23ad"}, + {file = "grpcio-1.64.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20405cb8b13fd779135df23fabadc53b86522d0f1cba8cca0e87968587f50650"}, + {file = "grpcio-1.64.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0cc79c982ccb2feec8aad0e8fb0d168bcbca85bc77b080d0d3c5f2f15c24ea8f"}, + {file = "grpcio-1.64.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a3a035c37ce7565b8f4f35ff683a4db34d24e53dc487e47438e434eb3f701b2a"}, + {file = "grpcio-1.64.1-cp38-cp38-win32.whl", hash = "sha256:1257b76748612aca0f89beec7fa0615727fd6f2a1ad580a9638816a4b2eb18fd"}, + {file = "grpcio-1.64.1-cp38-cp38-win_amd64.whl", hash = "sha256:0a12ddb1678ebc6a84ec6b0487feac020ee2b1659cbe69b80f06dbffdb249122"}, + {file = "grpcio-1.64.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:75dbbf415026d2862192fe1b28d71f209e2fd87079d98470db90bebe57b33179"}, + {file = "grpcio-1.64.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e3d9f8d1221baa0ced7ec7322a981e28deb23749c76eeeb3d33e18b72935ab62"}, + {file = "grpcio-1.64.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:5f8b75f64d5d324c565b263c67dbe4f0af595635bbdd93bb1a88189fc62ed2e5"}, + {file = "grpcio-1.64.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c84ad903d0d94311a2b7eea608da163dace97c5fe9412ea311e72c3684925602"}, + {file = "grpcio-1.64.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:940e3ec884520155f68a3b712d045e077d61c520a195d1a5932c531f11883489"}, + {file = "grpcio-1.64.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f10193c69fc9d3d726e83bbf0f3d316f1847c3071c8c93d8090cf5f326b14309"}, + {file = "grpcio-1.64.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ac15b6c2c80a4d1338b04d42a02d376a53395ddf0ec9ab157cbaf44191f3ffdd"}, + {file = "grpcio-1.64.1-cp39-cp39-win32.whl", hash = "sha256:03b43d0ccf99c557ec671c7dede64f023c7da9bb632ac65dbc57f166e4970040"}, + {file = "grpcio-1.64.1-cp39-cp39-win_amd64.whl", hash = "sha256:ed6091fa0adcc7e4ff944090cf203a52da35c37a130efa564ded02b7aff63bcd"}, + {file = "grpcio-1.64.1.tar.gz", hash = "sha256:8d51dd1c59d5fa0f34266b80a3805ec29a1f26425c2a54736133f6d87fc4968a"}, +] + +[package.extras] +protobuf = ["grpcio-tools (>=1.64.1)"] + +[[package]] +name = "mako" +version = "1.3.5" +description = "A super-fast templating language that borrows the best ideas from the existing templating languages." +optional = false +python-versions = ">=3.8" +files = [ + {file = "Mako-1.3.5-py3-none-any.whl", hash = "sha256:260f1dbc3a519453a9c856dedfe4beb4e50bd5a26d96386cb6c80856556bb91a"}, + {file = "Mako-1.3.5.tar.gz", hash = "sha256:48dbc20568c1d276a2698b36d968fa76161bf127194907ea6fc594fa81f943bc"}, +] + +[package.dependencies] +MarkupSafe = ">=0.9.2" + +[package.extras] +babel = ["Babel"] +lingua = ["lingua"] +testing = ["pytest"] + +[[package]] +name = "markupsafe" +version = "2.1.5" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, +] + +[[package]] +name = "ni-measurement-plugin-sdk-generator" +version = "2.0.0.dev2" +description = "Measurement Plugin Code Generator for Python" +optional = false +python-versions = "<4.0,>=3.8" +files = [ + {file = "ni_measurement_plugin_sdk_generator-2.0.0.dev2-py3-none-any.whl", hash = "sha256:9a6ca7beefae7fc292b8a9e431775108ebbf0d1bbdd809b760b11df2bd8d2ab4"}, + {file = "ni_measurement_plugin_sdk_generator-2.0.0.dev2.tar.gz", hash = "sha256:52d9c25339dd756324b110126d152cca38acd7e0ec6379b84b2f8322824efeb8"}, +] + +[package.dependencies] +click = ">=8.1.3" +Mako = ">=1.2.1,<2.0.0" + +[[package]] +name = "ni-measurement-plugin-sdk-service" +version = "2.0.0.dev2" +description = "Measurement Plugin Support for Python" +optional = false +python-versions = "<4.0,>=3.8" +files = [ + {file = "ni_measurement_plugin_sdk_service-2.0.0.dev2-py3-none-any.whl", hash = "sha256:cb16aa025780de19ed7d04b5aa8c1ebd92bd4ff1ed04b596c1fd794ab6a19b62"}, + {file = "ni_measurement_plugin_sdk_service-2.0.0.dev2.tar.gz", hash = "sha256:778677cd3ae26b15b16059887be088ce34f4c5c9a50ded2497591b5560d8c3a6"}, +] + +[package.dependencies] +deprecation = ">=2.1" +grpcio = ">=1.49.1,<2.0.0" +protobuf = ">=4.21,<5.0" +python-decouple = ">=3.8" +pywin32 = {version = ">=303", markers = "sys_platform == \"win32\""} +traceloggingdynamic = {version = ">=1.0", markers = "python_version >= \"3.9\" and python_version < \"4.0\" and sys_platform == \"win32\""} + +[package.extras] +drivers = ["nidaqmx[grpc] (>=0.8.0)", "nidcpower[grpc] (>=1.4.4)", "nidigital[grpc] (>=1.4.4)", "nidmm[grpc] (>=1.4.4)", "nifgen[grpc] (>=1.4.4)", "niscope[grpc] (>=1.4.4)", "niswitch[grpc] (>=1.4.4)"] +nidaqmx = ["nidaqmx[grpc] (>=0.8.0)"] +nidcpower = ["nidcpower[grpc] (>=1.4.4)"] +nidigital = ["nidigital[grpc] (>=1.4.4)"] +nidmm = ["nidmm[grpc] (>=1.4.4)"] +nifgen = ["nifgen[grpc] (>=1.4.4)"] +niscope = ["niscope[grpc] (>=1.4.4)"] +niswitch = ["niswitch[grpc] (>=1.4.4)"] + +[[package]] +name = "packaging" +version = "24.1" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, +] + +[[package]] +name = "protobuf" +version = "4.25.3" +description = "" +optional = false +python-versions = ">=3.8" +files = [ + {file = "protobuf-4.25.3-cp310-abi3-win32.whl", hash = "sha256:d4198877797a83cbfe9bffa3803602bbe1625dc30d8a097365dbc762e5790faa"}, + {file = "protobuf-4.25.3-cp310-abi3-win_amd64.whl", hash = "sha256:209ba4cc916bab46f64e56b85b090607a676f66b473e6b762e6f1d9d591eb2e8"}, + {file = "protobuf-4.25.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:f1279ab38ecbfae7e456a108c5c0681e4956d5b1090027c1de0f934dfdb4b35c"}, + {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:e7cb0ae90dd83727f0c0718634ed56837bfeeee29a5f82a7514c03ee1364c019"}, + {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:7c8daa26095f82482307bc717364e7c13f4f1c99659be82890dcfc215194554d"}, + {file = "protobuf-4.25.3-cp38-cp38-win32.whl", hash = "sha256:f4f118245c4a087776e0a8408be33cf09f6c547442c00395fbfb116fac2f8ac2"}, + {file = "protobuf-4.25.3-cp38-cp38-win_amd64.whl", hash = "sha256:c053062984e61144385022e53678fbded7aea14ebb3e0305ae3592fb219ccfa4"}, + {file = "protobuf-4.25.3-cp39-cp39-win32.whl", hash = "sha256:19b270aeaa0099f16d3ca02628546b8baefe2955bbe23224aaf856134eccf1e4"}, + {file = "protobuf-4.25.3-cp39-cp39-win_amd64.whl", hash = "sha256:e3c97a1555fd6388f857770ff8b9703083de6bf1f9274a002a332d65fbb56c8c"}, + {file = "protobuf-4.25.3-py3-none-any.whl", hash = "sha256:f0700d54bcf45424477e46a9f0944155b46fb0639d69728739c0e47bab83f2b9"}, + {file = "protobuf-4.25.3.tar.gz", hash = "sha256:25b5d0b42fd000320bd7830b349e3b696435f3b329810427a6bcce6a5492cc5c"}, +] + +[[package]] +name = "python-decouple" +version = "3.8" +description = "Strict separation of settings from code." +optional = false +python-versions = "*" +files = [ + {file = "python-decouple-3.8.tar.gz", hash = "sha256:ba6e2657d4f376ecc46f77a3a615e058d93ba5e465c01bbe57289bfb7cce680f"}, + {file = "python_decouple-3.8-py3-none-any.whl", hash = "sha256:d0d45340815b25f4de59c974b855bb38d03151d81b037d9e3f463b0c9f8cbd66"}, +] + +[[package]] +name = "pywin32" +version = "306" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +files = [ + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, +] + +[[package]] +name = "traceloggingdynamic" +version = "1.0.0" +description = "Generates Event Tracing for Windows events using TraceLogging" +optional = false +python-versions = ">=3.6" +files = [ + {file = "traceloggingdynamic-1.0.0.tar.gz", hash = "sha256:09b6129438b99432733de18519017a7eed8285aeaa08c0cff6de45ac60e04b75"}, +] + +[metadata] +lock-version = "2.0" +python-versions = "^3.8" +content-hash = "43e77165f5696ddbb369d21037646c576cda98e9a4ba0e10599ce1789d743522" diff --git a/ni_measurement_plugin_sdk/poetry.toml b/ni_measurement_plugin_sdk/poetry.toml new file mode 100644 index 000000000..efa46ec0e --- /dev/null +++ b/ni_measurement_plugin_sdk/poetry.toml @@ -0,0 +1,2 @@ +[virtualenvs] +in-project = true \ No newline at end of file diff --git a/ni_measurement_plugin_sdk/pyproject.toml b/ni_measurement_plugin_sdk/pyproject.toml new file mode 100644 index 000000000..04950f773 --- /dev/null +++ b/ni_measurement_plugin_sdk/pyproject.toml @@ -0,0 +1,30 @@ +[tool.poetry] +name = "ni_measurement_plugin_sdk" +version = "3.0.0" +description = "Measurement Plugin SDK for Python" +authors = ["NI "] +readme = "README.md" +repository = "https://github.com/ni/measurementlink-python/" +license = "MIT" +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Manufacturing", + "Intended Audience :: Science/Research", + "Operating System :: Microsoft :: Windows", + # Poetry automatically adds classifiers for the license and the supported Python versions. + "Programming Language :: Python :: Implementation :: CPython", + "Topic :: Scientific/Engineering", + "Topic :: System :: Hardware", +] + +[tool.poetry.dependencies] +python = "^3.8" +Mako = "^1.2.1" +click = ">=8.1.3" +ni-measurement-plugin-sdk-service = "*" +ni-measurement-plugin-sdk-generator = "*" + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" \ No newline at end of file From 5c8fefbee68063e0160691844ec799b6a07734db Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 10:43:21 -0500 Subject: [PATCH 02/33] Build and publish the SDK package --- .github/workflows/Publish_NIMS.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/Publish_NIMS.yml b/.github/workflows/Publish_NIMS.yml index c37aa5985..658cfe978 100644 --- a/.github/workflows/Publish_NIMS.yml +++ b/.github/workflows/Publish_NIMS.yml @@ -86,6 +86,12 @@ jobs: poetry publish --build --username __token__ --password ${{ secrets.PYPI_TOKEN }} working-directory: ./ni_measurement_plugin_sdk_generator + - name: Build SDK Python package and publish to PyPI + if: ${{ startsWith(github.event.release.target_commitish, 'main') || startsWith(github.event.release.target_commitish, 'releases/') }} + run: | + poetry publish --build --username __token__ --password ${{ secrets.PYPI_TOKEN }} + working-directory: ./ni_measurement_plugin_sdk + - name: Create archives of the examples env: EXAMPLE_ARCHIVE: measurement-plugin-python-examples-${{ steps.vars.outputs.tag }} From 88b7cf9357db41945531894d159b5b2c4bba1e59 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 11:13:14 -0500 Subject: [PATCH 03/33] Lint and fix some dependencies. Delete foo.py. Remove click and mako --- .../ni_measurement_plugin_sdk/__init__.py | 2 +- ni_measurement_plugin_sdk/ni_measurement_plugin_sdk/foo.py | 1 - ni_measurement_plugin_sdk/poetry.lock | 2 +- ni_measurement_plugin_sdk/pyproject.toml | 4 +--- 4 files changed, 3 insertions(+), 6 deletions(-) delete mode 100644 ni_measurement_plugin_sdk/ni_measurement_plugin_sdk/foo.py diff --git a/ni_measurement_plugin_sdk/ni_measurement_plugin_sdk/__init__.py b/ni_measurement_plugin_sdk/ni_measurement_plugin_sdk/__init__.py index baea36fd4..e6b880dce 100644 --- a/ni_measurement_plugin_sdk/ni_measurement_plugin_sdk/__init__.py +++ b/ni_measurement_plugin_sdk/ni_measurement_plugin_sdk/__init__.py @@ -1 +1 @@ -"""Measurement Plugin SDK for Python.""" \ No newline at end of file +"""Measurement Plugin SDK for Python.""" diff --git a/ni_measurement_plugin_sdk/ni_measurement_plugin_sdk/foo.py b/ni_measurement_plugin_sdk/ni_measurement_plugin_sdk/foo.py deleted file mode 100644 index 302830e22..000000000 --- a/ni_measurement_plugin_sdk/ni_measurement_plugin_sdk/foo.py +++ /dev/null @@ -1 +0,0 @@ -import click \ No newline at end of file diff --git a/ni_measurement_plugin_sdk/poetry.lock b/ni_measurement_plugin_sdk/poetry.lock index 9e1acaa56..43a6ac1b0 100644 --- a/ni_measurement_plugin_sdk/poetry.lock +++ b/ni_measurement_plugin_sdk/poetry.lock @@ -307,4 +307,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "43e77165f5696ddbb369d21037646c576cda98e9a4ba0e10599ce1789d743522" +content-hash = "655153d0bf52074b6481de5c5aca23a22ce0f88220643ed4448ce7c086a18eb9" diff --git a/ni_measurement_plugin_sdk/pyproject.toml b/ni_measurement_plugin_sdk/pyproject.toml index 04950f773..60c6f89d8 100644 --- a/ni_measurement_plugin_sdk/pyproject.toml +++ b/ni_measurement_plugin_sdk/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "ni_measurement_plugin_sdk" -version = "3.0.0" +version = "2.0.0-dev1" description = "Measurement Plugin SDK for Python" authors = ["NI "] readme = "README.md" @@ -20,8 +20,6 @@ classifiers = [ [tool.poetry.dependencies] python = "^3.8" -Mako = "^1.2.1" -click = ">=8.1.3" ni-measurement-plugin-sdk-service = "*" ni-measurement-plugin-sdk-generator = "*" From 60e6ed52bed4b8f18f33ae5df991d29319d23d7d Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 11:29:53 -0500 Subject: [PATCH 04/33] Reorganize the package hierarchy and pyproject.toml files --- .../generator}/README.md | 0 .../ni_measurement_plugin_sdk_generator/__main__.py | 0 .../ni_measurement_plugin_sdk_generator/py.typed | 0 .../ni_measurement_plugin_sdk_generator/template.py | 0 .../templates/_helpers.py.mako | 0 .../templates/measurement.measproj.mako | 0 .../templates/measurement.measui.mako | 0 .../templates/measurement.py.mako | 0 .../templates/measurement.serviceconfig.mako | 0 .../templates/start.bat.mako | 0 .../generator}/poetry.lock | 0 .../generator}/poetry.toml | 0 .../generator}/pyproject.toml | 0 .../generator}/tests/acceptance/test_generator.py | 0 .../generator}/tests/conftest.py | 0 .../measurement/SampleMeasurement.serviceconfig | 0 .../example_renders/measurement/_helpers.py | 0 .../example_renders/measurement/measurement.py | 0 .../example_renders/measurement/start.bat | 0 .../SampleMeasurement.serviceconfig | 0 .../measurement_with_annotations/_helpers.py | 0 .../measurement_with_annotations/measurement.py | 0 .../measurement_with_annotations/start.bat | 0 .../sdk}/ni_measurement_plugin_sdk/__init__.py | 0 .../sdk}/poetry.lock | 0 .../sdk}/poetry.toml | 0 .../sdk}/pyproject.toml | 0 .../service}/README.md | 0 .../ni_measurement_plugin_sdk_service}/__init__.py | 0 .../_annotations.py | 0 .../_configuration.py | 0 .../_datatypeinfo.py | 0 .../_dotenvpath.py | 0 .../_drivers/__init__.py | 0 .../_drivers/_grpcdevice.py | 0 .../_drivers/_nidaqmx.py | 0 .../_drivers/_nidcpower.py | 0 .../_drivers/_nidigital.py | 0 .../_drivers/_nidmm.py | 0 .../_drivers/_nifgen.py | 0 .../_drivers/_niscope.py | 0 .../_drivers/_niswitch.py | 0 .../_featuretoggles.py | 0 .../_internal/__init__.py | 0 .../_internal/discovery_client.py | 0 .../_internal/grpc_servicer.py | 0 .../_internal/parameter/__init__.py | 0 .../_internal/parameter/_message.py | 0 .../_internal/parameter/_serializer_types.py | 0 .../_internal/parameter/metadata.py | 0 .../_internal/parameter/serialization_strategy.py | 0 .../_internal/parameter/serializer.py | 0 .../_internal/service_manager.py | 0 .../_internal/stubs/__init__.py | 0 .../_internal/stubs/ni/__init__.py | 0 .../_internal/stubs/ni/measurementlink/__init__.py | 0 .../stubs/ni/measurementlink/discovery/__init__.py | 0 .../ni/measurementlink/discovery/v1/__init__.py | 0 .../discovery/v1/discovery_service_pb2.py | 0 .../discovery/v1/discovery_service_pb2.pyi | 0 .../discovery/v1/discovery_service_pb2_grpc.py | 0 .../discovery/v1/discovery_service_pb2_grpc.pyi | 0 .../ni/measurementlink/measurement/__init__.py | 0 .../ni/measurementlink/measurement/v1/__init__.py | 0 .../measurement/v1/measurement_service_pb2.py | 0 .../measurement/v1/measurement_service_pb2.pyi | 0 .../measurement/v1/measurement_service_pb2_grpc.py | 0 .../measurement/v1/measurement_service_pb2_grpc.pyi | 0 .../ni/measurementlink/measurement/v2/__init__.py | 0 .../measurement/v2/measurement_service_pb2.py | 0 .../measurement/v2/measurement_service_pb2.pyi | 0 .../measurement/v2/measurement_service_pb2_grpc.py | 0 .../measurement/v2/measurement_service_pb2_grpc.pyi | 0 .../stubs/ni/measurementlink/pin_map_context_pb2.py | 0 .../ni/measurementlink/pin_map_context_pb2.pyi | 0 .../ni/measurementlink/pin_map_context_pb2_grpc.py | 0 .../ni/measurementlink/pin_map_context_pb2_grpc.pyi | 0 .../stubs/ni/measurementlink/pinmap/__init__.py | 0 .../stubs/ni/measurementlink/pinmap/v1/__init__.py | 0 .../pinmap/v1/pin_map_service_pb2.py | 0 .../pinmap/v1/pin_map_service_pb2.pyi | 0 .../pinmap/v1/pin_map_service_pb2_grpc.py | 0 .../pinmap/v1/pin_map_service_pb2_grpc.pyi | 0 .../measurementlink/sessionmanagement/__init__.py | 0 .../sessionmanagement/v1/__init__.py | 0 .../v1/session_management_service_pb2.py | 0 .../v1/session_management_service_pb2.pyi | 0 .../v1/session_management_service_pb2_grpc.py | 0 .../v1/session_management_service_pb2_grpc.pyi | 0 .../_internal/stubs/ni/protobuf/__init__.py | 0 .../_internal/stubs/ni/protobuf/types/__init__.py | 0 .../ni/protobuf/types/precision_timestamp_pb2.py | 0 .../ni/protobuf/types/precision_timestamp_pb2.pyi | 0 .../protobuf/types/precision_timestamp_pb2_grpc.py | 0 .../protobuf/types/precision_timestamp_pb2_grpc.pyi | 0 .../stubs/ni/protobuf/types/waveform_pb2.py | 0 .../stubs/ni/protobuf/types/waveform_pb2.pyi | 0 .../stubs/ni/protobuf/types/waveform_pb2_grpc.py | 0 .../stubs/ni/protobuf/types/waveform_pb2_grpc.pyi | 0 .../_internal/stubs/ni/protobuf/types/xydata_pb2.py | 0 .../stubs/ni/protobuf/types/xydata_pb2.pyi | 0 .../stubs/ni/protobuf/types/xydata_pb2_grpc.py | 0 .../stubs/ni/protobuf/types/xydata_pb2_grpc.pyi | 0 .../_internal/stubs/proto/README.md | 0 .../_internal/stubs/proto/__init__.py | 0 .../_internal/stubs/proto/session.proto | 0 .../_internal/stubs/session_pb2.py | 0 .../_internal/stubs/session_pb2.pyi | 0 .../_internal/stubs/session_pb2_grpc.py | 0 .../_internal/stubs/session_pb2_grpc.pyi | 0 .../_tracelogging.py | 0 .../discovery/__init__.py | 0 .../discovery/_client.py | 0 .../discovery/_support.py | 0 .../discovery/_types.py | 0 .../grpc/__init__.py | 0 .../grpc/channelpool.py | 0 .../grpc/loggers.py | 0 .../measurement/__init__.py | 0 .../measurement/info.py | 0 .../measurement/service.py | 0 .../ni_measurement_plugin_sdk_service}/py.typed | 0 .../session_management/__init__.py | 0 .../session_management/_client.py | 0 .../session_management/_constants.py | 0 .../session_management/_reservation.py | 0 .../session_management/_types.py | 0 poetry.lock => packages/service/poetry.lock | 0 poetry.toml => packages/service/poetry.toml | 0 pyproject.toml => packages/service/pyproject.toml | 0 {tests => packages/service/tests}/__init__.py | 0 .../service/tests}/acceptance/__init__.py | 0 .../service/tests}/acceptance/conftest.py | 0 .../service/tests}/acceptance/test_logging.py | 0 .../tests}/acceptance/test_measurement_service.py | 0 .../tests}/acceptance/test_nidaqmx_measurement.py | 0 .../tests}/acceptance/test_nidcpower_measurement.py | 0 .../tests}/acceptance/test_nidigital_measurement.py | 0 .../tests}/acceptance/test_nidmm_measurement.py | 0 .../tests}/acceptance/test_nifgen_measurement.py | 0 .../tests}/acceptance/test_niscope_measurement.py | 0 .../tests}/acceptance/test_niswitch_measurement.py | 0 .../test_niswitch_multiplexer_measurement.py | 0 .../service/tests}/acceptance/test_security.py | 0 .../tests}/acceptance/test_session_management.py | 0 .../acceptance/test_streaming_data_measurement.py | 0 .../tests}/acceptance/test_yield_vs_return.py | 0 .../service/tests}/assets/__init__.py | 0 .../session_management/1Fgen1Pin1Site.pinmap | 0 .../1Smu1ChannelGroup1Pin1Site.pinmap | 0 .../1Smu1ChannelGroup2Pin2Site.pinmap | 0 .../1Smu2ChannelGroup2Pin1Site.pinmap | 0 .../1Smu2ChannelGroup2Pin2Site.pinmap | 0 .../2Digital2Group4Pin1Site.pinmap | 0 .../session_management/2Dmm2Pin1Site.pinmap | 0 .../session_management/2Fgen2Pin1Site.pinmap | 0 .../session_management/2Fgen2Pin2Site.pinmap | 0 .../session_management/2Mio2Pin1Site.pinmap | 0 .../session_management/2Scope2Pin2Group1Site.pinmap | 0 .../2Smu2ChannelGroup2Pin2Site.pinmap | 0 .../session_management/2Switch2Relay1Site.pinmap | 0 .../2SwitchMultiplexer1Smu2Pin1Site.pinmap | 0 .../assets/example.AllAnnotations.serviceconfig | 0 .../assets/example.CustomAnnotations.serviceconfig | 0 .../assets/example.OnlyCollection.serviceconfig | 0 .../tests}/assets/example.OnlyTags.serviceconfig | 0 .../service/tests}/assets/example.serviceconfig | 0 .../service/tests}/assets/example.v1.serviceconfig | 0 .../service/tests}/assets/example.v2.serviceconfig | 0 .../1Smu2ChannelGroup2Pin1Site.pinmap | 0 .../1Smu2Multiplexer2Pin1Site.pinmap | 0 .../2Digital2Group4Pin1Site.pinmap | 0 .../session_management/2Dmm2Pin1Site.pinmap | 0 .../session_management/2Fgen2Pin1Site.pinmap | 0 .../session_management/2Mio2Pin1Site.pinmap | 0 .../session_management/2Scope2Pin2Group1Site.pinmap | 0 .../session_management/2Switch2Relay1Site.pinmap | 0 ..._3Instruments_3DutPins_2SystemPins_2Sites.pinmap | 0 ...ts_3DutPins_2SystemPins_2Sites_SharedPins.pinmap | 0 ...apC_MultipleInstrumentsPinsRelaysAndSites.pinmap | 0 ...Instruments_4DutPins_2Sites_2Multiplexers.pinmap | 0 {tests => packages/service/tests}/conftest.py | 0 .../service/tests}/integration/__init__.py | 0 .../integration/session_management/__init__.py | 0 .../integration/session_management/conftest.py | 0 .../session_management/test_nidaqmx_reservation.py | 0 .../test_nidcpower_reservation.py | 0 .../test_nidigital_reservation.py | 0 .../session_management/test_nidmm_reservation.py | 0 .../session_management/test_nifgen_reservation.py | 0 .../session_management/test_niscope_reservation.py | 0 .../test_niswitch_multiplexer_reservation.py | 0 .../session_management/test_niswitch_reservation.py | 0 .../session_management/test_reservation.py | 0 .../tests}/integration/test_service_manager.py | 0 {tests => packages/service/tests}/unit/__init__.py | 0 .../service/tests}/unit/_drivers/__init__.py | 0 .../service/tests}/unit/_drivers/_driver_utils.py | 0 .../service/tests}/unit/_drivers/test_grpcdevice.py | 0 .../service/tests}/unit/_drivers/test_nidaqmx.py | 0 .../service/tests}/unit/_drivers/test_nidcpower.py | 0 .../service/tests}/unit/_drivers/test_nidigital.py | 0 .../service/tests}/unit/_drivers/test_nidmm.py | 0 .../service/tests}/unit/_drivers/test_nifgen.py | 0 .../service/tests}/unit/_drivers/test_niscope.py | 0 .../service/tests}/unit/_drivers/test_niswitch.py | 0 .../service/tests}/unit/_reservation_utils.py | 0 {tests => packages/service/tests}/unit/conftest.py | 0 .../service/tests}/unit/measurement/__init__.py | 0 .../tests}/unit/measurement/service/__init__.py | 0 .../measurement/service/test_measurement_context.py | 0 .../service/tests}/unit/test_configuration.py | 0 .../service/tests}/unit/test_discovery_client.py | 0 .../service/tests}/unit/test_dotenvpath.py | 0 .../service/tests}/unit/test_drivers.py | 0 .../service/tests}/unit/test_featuretoggles.py | 0 .../service/tests}/unit/test_metadata.py | 0 .../service/tests}/unit/test_reservation.py | 0 .../tests}/unit/test_reservation_multiplexer.py | 0 .../tests}/unit/test_serialization_strategy.py | 0 .../service/tests}/unit/test_serializer.py | 0 .../service/tests}/unit/test_service.py | 0 .../service/tests}/unit/test_session_management.py | 0 .../service/tests}/utilities/__init__.py | 0 .../service/tests}/utilities/connection_subset.py | 0 .../tests}/utilities/discovery_service_process.py | 0 .../tests}/utilities/fake_discovery_service.py | 0 .../service/tests}/utilities/fake_driver.py | 0 .../tests}/utilities/fake_multiplexer_driver.py | 0 .../service/tests}/utilities/fake_rpc_error.py | 0 .../tests}/utilities/measurements/__init__.py | 0 .../LoopbackMeasurement.serviceconfig | 0 .../measurements/loopback_measurement/__init__.py | 0 .../NIDAQmxMeasurement.serviceconfig | 0 .../measurements/nidaqmx_measurement/__init__.py | 0 .../NIDCPowerMeasurement.serviceconfig | 0 .../measurements/nidcpower_measurement/__init__.py | 0 .../NIDigitalMeasurement.serviceconfig | 0 .../nidigital_measurement/Pattern.digipat | Bin .../nidigital_measurement/PinLevels.digilevels | 0 .../nidigital_measurement/Specifications.specs | 0 .../nidigital_measurement/Timing.digitiming | 0 .../measurements/nidigital_measurement/__init__.py | 0 .../NIDmmMeasurement.serviceconfig | 0 .../measurements/nidmm_measurement/__init__.py | 0 .../NIFgenMeasurement.serviceconfig | 0 .../measurements/nifgen_measurement/__init__.py | 0 .../NIScopeMeasurement.serviceconfig | 0 .../measurements/niscope_measurement/__init__.py | 0 .../NISwitchMeasurement.serviceconfig | 0 .../measurements/niswitch_measurement/__init__.py | 0 .../NISwitchMultiplexerMeasurement.serviceconfig | 0 .../niswitch_multiplexer_measurement/__init__.py | 0 .../PinAwareMeasurement.serviceconfig | 0 .../measurements/pin_aware_measurement/__init__.py | 0 .../StreamingDataMeasurement.serviceconfig | 0 .../streaming_data_measurement/__init__.py | 0 .../unknown_interface_measurement/__init__.py | 0 .../unknown_interface.serviceconfig | 0 .../measurements/v1_only_measurement/__init__.py | 0 .../v1_only_measurement/v1_only.serviceconfig | 0 .../measurements/v2_only_measurement/__init__.py | 0 .../v2_only_measurement/v2_only.serviceconfig | 0 .../UIProgressUpdates.serviceconfig | 0 .../yield_vs_return_measurement/__init__.py | 0 .../service/tests}/utilities/pin_map_client.py | 0 .../service/tests}/utilities/stubs/__init__.py | 0 .../tests}/utilities/stubs/loopback/__init__.py | 0 .../tests}/utilities/stubs/loopback/types.proto | 0 .../tests}/utilities/stubs/loopback/types_pb2.py | 0 .../tests}/utilities/stubs/loopback/types_pb2.pyi | 0 .../utilities/stubs/loopback/types_pb2_grpc.py | 0 .../utilities/stubs/loopback/types_pb2_grpc.pyi | 0 .../tests}/utilities/stubs/nidaqmx/__init__.py | 0 .../tests}/utilities/stubs/nidaqmx/types.proto | 0 .../tests}/utilities/stubs/nidaqmx/types_pb2.py | 0 .../tests}/utilities/stubs/nidaqmx/types_pb2.pyi | 0 .../utilities/stubs/nidaqmx/types_pb2_grpc.py | 0 .../utilities/stubs/nidaqmx/types_pb2_grpc.pyi | 0 .../tests}/utilities/stubs/nidcpower/__init__.py | 0 .../tests}/utilities/stubs/nidcpower/types.proto | 0 .../tests}/utilities/stubs/nidcpower/types_pb2.py | 0 .../tests}/utilities/stubs/nidcpower/types_pb2.pyi | 0 .../utilities/stubs/nidcpower/types_pb2_grpc.py | 0 .../utilities/stubs/nidcpower/types_pb2_grpc.pyi | 0 .../tests}/utilities/stubs/nidigital/__init__.py | 0 .../tests}/utilities/stubs/nidigital/types.proto | 0 .../tests}/utilities/stubs/nidigital/types_pb2.py | 0 .../tests}/utilities/stubs/nidigital/types_pb2.pyi | 0 .../utilities/stubs/nidigital/types_pb2_grpc.py | 0 .../utilities/stubs/nidigital/types_pb2_grpc.pyi | 0 .../tests}/utilities/stubs/nidmm/__init__.py | 0 .../tests}/utilities/stubs/nidmm/types.proto | 0 .../tests}/utilities/stubs/nidmm/types_pb2.py | 0 .../tests}/utilities/stubs/nidmm/types_pb2.pyi | 0 .../tests}/utilities/stubs/nidmm/types_pb2_grpc.py | 0 .../tests}/utilities/stubs/nidmm/types_pb2_grpc.pyi | 0 .../tests}/utilities/stubs/nifgen/__init__.py | 0 .../tests}/utilities/stubs/nifgen/types.proto | 0 .../tests}/utilities/stubs/nifgen/types_pb2.py | 0 .../tests}/utilities/stubs/nifgen/types_pb2.pyi | 0 .../tests}/utilities/stubs/nifgen/types_pb2_grpc.py | 0 .../utilities/stubs/nifgen/types_pb2_grpc.pyi | 0 .../tests}/utilities/stubs/niscope/__init__.py | 0 .../tests}/utilities/stubs/niscope/types.proto | 0 .../tests}/utilities/stubs/niscope/types_pb2.py | 0 .../tests}/utilities/stubs/niscope/types_pb2.pyi | 0 .../utilities/stubs/niscope/types_pb2_grpc.py | 0 .../utilities/stubs/niscope/types_pb2_grpc.pyi | 0 .../tests}/utilities/stubs/niswitch/__init__.py | 0 .../tests}/utilities/stubs/niswitch/types.proto | 0 .../tests}/utilities/stubs/niswitch/types_pb2.py | 0 .../tests}/utilities/stubs/niswitch/types_pb2.pyi | 0 .../utilities/stubs/niswitch/types_pb2_grpc.py | 0 .../utilities/stubs/niswitch/types_pb2_grpc.pyi | 0 .../utilities/stubs/niswitchmultiplexer/types.proto | 0 .../stubs/niswitchmultiplexer/types_pb2.py | 0 .../stubs/niswitchmultiplexer/types_pb2.pyi | 0 .../stubs/niswitchmultiplexer/types_pb2_grpc.py | 0 .../stubs/niswitchmultiplexer/types_pb2_grpc.pyi | 0 .../tests}/utilities/stubs/pinaware/__init__.py | 0 .../tests}/utilities/stubs/pinaware/types.proto | 0 .../tests}/utilities/stubs/pinaware/types_pb2.py | 0 .../tests}/utilities/stubs/pinaware/types_pb2.pyi | 0 .../utilities/stubs/pinaware/types_pb2_grpc.py | 0 .../utilities/stubs/pinaware/types_pb2_grpc.pyi | 0 .../utilities/stubs/serialization/__init__.py | 0 .../utilities/stubs/serialization/bigmessage.proto | 0 .../utilities/stubs/serialization/bigmessage_pb2.py | 0 .../stubs/serialization/bigmessage_pb2.pyi | 0 .../stubs/serialization/bigmessage_pb2_grpc.py | 0 .../stubs/serialization/bigmessage_pb2_grpc.pyi | 0 .../tests}/utilities/stubs/serialization/test.proto | 0 .../utilities/stubs/serialization/test_pb2.py | 0 .../utilities/stubs/serialization/test_pb2.pyi | 0 .../utilities/stubs/serialization/test_pb2_grpc.py | 0 .../utilities/stubs/serialization/test_pb2_grpc.pyi | 0 .../utilities/stubs/streamingdata/__init__.py | 0 .../utilities/stubs/streamingdata/types.proto | 0 .../utilities/stubs/streamingdata/types_pb2.py | 0 .../utilities/stubs/streamingdata/types_pb2.pyi | 0 .../utilities/stubs/streamingdata/types_pb2_grpc.py | 0 .../stubs/streamingdata/types_pb2_grpc.pyi | 0 .../utilities/stubs/yieldvsreturn/__init__.py | 0 .../utilities/stubs/yieldvsreturn/types.proto | 0 .../utilities/stubs/yieldvsreturn/types_pb2.py | 0 .../utilities/stubs/yieldvsreturn/types_pb2.pyi | 0 .../utilities/stubs/yieldvsreturn/types_pb2_grpc.py | 0 .../stubs/yieldvsreturn/types_pb2_grpc.pyi | 0 349 files changed, 0 insertions(+), 0 deletions(-) rename {ni_measurement_plugin_sdk_generator => packages/generator}/README.md (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/ni_measurement_plugin_sdk_generator/__main__.py (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/ni_measurement_plugin_sdk_generator/py.typed (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/ni_measurement_plugin_sdk_generator/template.py (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/ni_measurement_plugin_sdk_generator/templates/_helpers.py.mako (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/ni_measurement_plugin_sdk_generator/templates/measurement.measproj.mako (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/ni_measurement_plugin_sdk_generator/templates/measurement.measui.mako (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/ni_measurement_plugin_sdk_generator/templates/measurement.py.mako (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/ni_measurement_plugin_sdk_generator/templates/measurement.serviceconfig.mako (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/ni_measurement_plugin_sdk_generator/templates/start.bat.mako (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/poetry.lock (100%) rename {ni_measurement_plugin_sdk => packages/generator}/poetry.toml (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/pyproject.toml (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/tests/acceptance/test_generator.py (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/tests/conftest.py (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/tests/test_assets/example_renders/measurement/SampleMeasurement.serviceconfig (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/tests/test_assets/example_renders/measurement/_helpers.py (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/tests/test_assets/example_renders/measurement/measurement.py (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/tests/test_assets/example_renders/measurement/start.bat (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/tests/test_assets/example_renders/measurement_with_annotations/SampleMeasurement.serviceconfig (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/tests/test_assets/example_renders/measurement_with_annotations/_helpers.py (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/tests/test_assets/example_renders/measurement_with_annotations/measurement.py (100%) rename {ni_measurement_plugin_sdk_generator => packages/generator}/tests/test_assets/example_renders/measurement_with_annotations/start.bat (100%) rename {ni_measurement_plugin_sdk => packages/sdk}/ni_measurement_plugin_sdk/__init__.py (100%) rename {ni_measurement_plugin_sdk => packages/sdk}/poetry.lock (100%) rename {ni_measurement_plugin_sdk_generator => packages/sdk}/poetry.toml (100%) rename {ni_measurement_plugin_sdk => packages/sdk}/pyproject.toml (100%) rename {ni_measurement_plugin_sdk => packages/service}/README.md (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_annotations.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_configuration.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_datatypeinfo.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_dotenvpath.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_drivers/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_drivers/_grpcdevice.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_drivers/_nidaqmx.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_drivers/_nidcpower.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_drivers/_nidigital.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_drivers/_nidmm.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_drivers/_nifgen.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_drivers/_niscope.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_drivers/_niswitch.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_featuretoggles.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/discovery_client.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/grpc_servicer.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/parameter/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/parameter/_message.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/parameter/_serializer_types.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/parameter/metadata.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/parameter/serialization_strategy.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/parameter/serializer.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/service_manager.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/discovery/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/discovery/v1/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2_grpc.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2_grpc.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/measurement/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/measurement/v1/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2_grpc.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2_grpc.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/measurement/v2/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2_grpc.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2_grpc.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/pin_map_context_pb2.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/pin_map_context_pb2.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/pin_map_context_pb2_grpc.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/pin_map_context_pb2_grpc.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/pinmap/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/pinmap/v1/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2_grpc.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2_grpc.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/sessionmanagement/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/sessionmanagement/v1/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2_grpc.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2_grpc.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/protobuf/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/protobuf/types/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2_grpc.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2_grpc.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/protobuf/types/waveform_pb2.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/protobuf/types/waveform_pb2.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/protobuf/types/waveform_pb2_grpc.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/protobuf/types/waveform_pb2_grpc.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/protobuf/types/xydata_pb2.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/protobuf/types/xydata_pb2.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/protobuf/types/xydata_pb2_grpc.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/ni/protobuf/types/xydata_pb2_grpc.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/proto/README.md (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/proto/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/proto/session.proto (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/session_pb2.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/session_pb2.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/session_pb2_grpc.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_internal/stubs/session_pb2_grpc.pyi (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/_tracelogging.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/discovery/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/discovery/_client.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/discovery/_support.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/discovery/_types.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/grpc/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/grpc/channelpool.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/grpc/loggers.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/measurement/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/measurement/info.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/measurement/service.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/py.typed (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/session_management/__init__.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/session_management/_client.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/session_management/_constants.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/session_management/_reservation.py (100%) rename {ni_measurement_plugin_sdk_service => packages/service/ni_measurement_plugin_sdk_service}/session_management/_types.py (100%) rename poetry.lock => packages/service/poetry.lock (100%) rename poetry.toml => packages/service/poetry.toml (100%) rename pyproject.toml => packages/service/pyproject.toml (100%) rename {tests => packages/service/tests}/__init__.py (100%) rename {tests => packages/service/tests}/acceptance/__init__.py (100%) rename {tests => packages/service/tests}/acceptance/conftest.py (100%) rename {tests => packages/service/tests}/acceptance/test_logging.py (100%) rename {tests => packages/service/tests}/acceptance/test_measurement_service.py (100%) rename {tests => packages/service/tests}/acceptance/test_nidaqmx_measurement.py (100%) rename {tests => packages/service/tests}/acceptance/test_nidcpower_measurement.py (100%) rename {tests => packages/service/tests}/acceptance/test_nidigital_measurement.py (100%) rename {tests => packages/service/tests}/acceptance/test_nidmm_measurement.py (100%) rename {tests => packages/service/tests}/acceptance/test_nifgen_measurement.py (100%) rename {tests => packages/service/tests}/acceptance/test_niscope_measurement.py (100%) rename {tests => packages/service/tests}/acceptance/test_niswitch_measurement.py (100%) rename {tests => packages/service/tests}/acceptance/test_niswitch_multiplexer_measurement.py (100%) rename {tests => packages/service/tests}/acceptance/test_security.py (100%) rename {tests => packages/service/tests}/acceptance/test_session_management.py (100%) rename {tests => packages/service/tests}/acceptance/test_streaming_data_measurement.py (100%) rename {tests => packages/service/tests}/acceptance/test_yield_vs_return.py (100%) rename {tests => packages/service/tests}/assets/__init__.py (100%) rename {tests => packages/service/tests}/assets/acceptance/session_management/1Fgen1Pin1Site.pinmap (100%) rename {tests => packages/service/tests}/assets/acceptance/session_management/1Smu1ChannelGroup1Pin1Site.pinmap (100%) rename {tests => packages/service/tests}/assets/acceptance/session_management/1Smu1ChannelGroup2Pin2Site.pinmap (100%) rename {tests => packages/service/tests}/assets/acceptance/session_management/1Smu2ChannelGroup2Pin1Site.pinmap (100%) rename {tests => packages/service/tests}/assets/acceptance/session_management/1Smu2ChannelGroup2Pin2Site.pinmap (100%) rename {tests => packages/service/tests}/assets/acceptance/session_management/2Digital2Group4Pin1Site.pinmap (100%) rename {tests => packages/service/tests}/assets/acceptance/session_management/2Dmm2Pin1Site.pinmap (100%) rename {tests => packages/service/tests}/assets/acceptance/session_management/2Fgen2Pin1Site.pinmap (100%) rename {tests => packages/service/tests}/assets/acceptance/session_management/2Fgen2Pin2Site.pinmap (100%) rename {tests => packages/service/tests}/assets/acceptance/session_management/2Mio2Pin1Site.pinmap (100%) rename {tests => packages/service/tests}/assets/acceptance/session_management/2Scope2Pin2Group1Site.pinmap (100%) rename {tests => packages/service/tests}/assets/acceptance/session_management/2Smu2ChannelGroup2Pin2Site.pinmap (100%) rename {tests => packages/service/tests}/assets/acceptance/session_management/2Switch2Relay1Site.pinmap (100%) rename {tests => packages/service/tests}/assets/acceptance/session_management/2SwitchMultiplexer1Smu2Pin1Site.pinmap (100%) rename {tests => packages/service/tests}/assets/example.AllAnnotations.serviceconfig (100%) rename {tests => packages/service/tests}/assets/example.CustomAnnotations.serviceconfig (100%) rename {tests => packages/service/tests}/assets/example.OnlyCollection.serviceconfig (100%) rename {tests => packages/service/tests}/assets/example.OnlyTags.serviceconfig (100%) rename {tests => packages/service/tests}/assets/example.serviceconfig (100%) rename {tests => packages/service/tests}/assets/example.v1.serviceconfig (100%) rename {tests => packages/service/tests}/assets/example.v2.serviceconfig (100%) rename {tests => packages/service/tests}/assets/integration/session_management/1Smu2ChannelGroup2Pin1Site.pinmap (100%) rename {tests => packages/service/tests}/assets/integration/session_management/1Smu2Multiplexer2Pin1Site.pinmap (100%) rename {tests => packages/service/tests}/assets/integration/session_management/2Digital2Group4Pin1Site.pinmap (100%) rename {tests => packages/service/tests}/assets/integration/session_management/2Dmm2Pin1Site.pinmap (100%) rename {tests => packages/service/tests}/assets/integration/session_management/2Fgen2Pin1Site.pinmap (100%) rename {tests => packages/service/tests}/assets/integration/session_management/2Mio2Pin1Site.pinmap (100%) rename {tests => packages/service/tests}/assets/integration/session_management/2Scope2Pin2Group1Site.pinmap (100%) rename {tests => packages/service/tests}/assets/integration/session_management/2Switch2Relay1Site.pinmap (100%) rename {tests => packages/service/tests}/assets/integration/session_management/PinMapA_3Instruments_3DutPins_2SystemPins_2Sites.pinmap (100%) rename {tests => packages/service/tests}/assets/integration/session_management/PinMapB_3Instruments_3DutPins_2SystemPins_2Sites_SharedPins.pinmap (100%) rename {tests => packages/service/tests}/assets/integration/session_management/PinMapC_MultipleInstrumentsPinsRelaysAndSites.pinmap (100%) rename {tests => packages/service/tests}/assets/integration/session_management/PinMapD_3Instruments_4DutPins_2Sites_2Multiplexers.pinmap (100%) rename {tests => packages/service/tests}/conftest.py (100%) rename {tests => packages/service/tests}/integration/__init__.py (100%) rename {tests => packages/service/tests}/integration/session_management/__init__.py (100%) rename {tests => packages/service/tests}/integration/session_management/conftest.py (100%) rename {tests => packages/service/tests}/integration/session_management/test_nidaqmx_reservation.py (100%) rename {tests => packages/service/tests}/integration/session_management/test_nidcpower_reservation.py (100%) rename {tests => packages/service/tests}/integration/session_management/test_nidigital_reservation.py (100%) rename {tests => packages/service/tests}/integration/session_management/test_nidmm_reservation.py (100%) rename {tests => packages/service/tests}/integration/session_management/test_nifgen_reservation.py (100%) rename {tests => packages/service/tests}/integration/session_management/test_niscope_reservation.py (100%) rename {tests => packages/service/tests}/integration/session_management/test_niswitch_multiplexer_reservation.py (100%) rename {tests => packages/service/tests}/integration/session_management/test_niswitch_reservation.py (100%) rename {tests => packages/service/tests}/integration/session_management/test_reservation.py (100%) rename {tests => packages/service/tests}/integration/test_service_manager.py (100%) rename {tests => packages/service/tests}/unit/__init__.py (100%) rename {tests => packages/service/tests}/unit/_drivers/__init__.py (100%) rename {tests => packages/service/tests}/unit/_drivers/_driver_utils.py (100%) rename {tests => packages/service/tests}/unit/_drivers/test_grpcdevice.py (100%) rename {tests => packages/service/tests}/unit/_drivers/test_nidaqmx.py (100%) rename {tests => packages/service/tests}/unit/_drivers/test_nidcpower.py (100%) rename {tests => packages/service/tests}/unit/_drivers/test_nidigital.py (100%) rename {tests => packages/service/tests}/unit/_drivers/test_nidmm.py (100%) rename {tests => packages/service/tests}/unit/_drivers/test_nifgen.py (100%) rename {tests => packages/service/tests}/unit/_drivers/test_niscope.py (100%) rename {tests => packages/service/tests}/unit/_drivers/test_niswitch.py (100%) rename {tests => packages/service/tests}/unit/_reservation_utils.py (100%) rename {tests => packages/service/tests}/unit/conftest.py (100%) rename {tests => packages/service/tests}/unit/measurement/__init__.py (100%) rename {tests => packages/service/tests}/unit/measurement/service/__init__.py (100%) rename {tests => packages/service/tests}/unit/measurement/service/test_measurement_context.py (100%) rename {tests => packages/service/tests}/unit/test_configuration.py (100%) rename {tests => packages/service/tests}/unit/test_discovery_client.py (100%) rename {tests => packages/service/tests}/unit/test_dotenvpath.py (100%) rename {tests => packages/service/tests}/unit/test_drivers.py (100%) rename {tests => packages/service/tests}/unit/test_featuretoggles.py (100%) rename {tests => packages/service/tests}/unit/test_metadata.py (100%) rename {tests => packages/service/tests}/unit/test_reservation.py (100%) rename {tests => packages/service/tests}/unit/test_reservation_multiplexer.py (100%) rename {tests => packages/service/tests}/unit/test_serialization_strategy.py (100%) rename {tests => packages/service/tests}/unit/test_serializer.py (100%) rename {tests => packages/service/tests}/unit/test_service.py (100%) rename {tests => packages/service/tests}/unit/test_session_management.py (100%) rename {tests => packages/service/tests}/utilities/__init__.py (100%) rename {tests => packages/service/tests}/utilities/connection_subset.py (100%) rename {tests => packages/service/tests}/utilities/discovery_service_process.py (100%) rename {tests => packages/service/tests}/utilities/fake_discovery_service.py (100%) rename {tests => packages/service/tests}/utilities/fake_driver.py (100%) rename {tests => packages/service/tests}/utilities/fake_multiplexer_driver.py (100%) rename {tests => packages/service/tests}/utilities/fake_rpc_error.py (100%) rename {tests => packages/service/tests}/utilities/measurements/__init__.py (100%) rename {tests => packages/service/tests}/utilities/measurements/loopback_measurement/LoopbackMeasurement.serviceconfig (100%) rename {tests => packages/service/tests}/utilities/measurements/loopback_measurement/__init__.py (100%) rename {tests => packages/service/tests}/utilities/measurements/nidaqmx_measurement/NIDAQmxMeasurement.serviceconfig (100%) rename {tests => packages/service/tests}/utilities/measurements/nidaqmx_measurement/__init__.py (100%) rename {tests => packages/service/tests}/utilities/measurements/nidcpower_measurement/NIDCPowerMeasurement.serviceconfig (100%) rename {tests => packages/service/tests}/utilities/measurements/nidcpower_measurement/__init__.py (100%) rename {tests => packages/service/tests}/utilities/measurements/nidigital_measurement/NIDigitalMeasurement.serviceconfig (100%) rename {tests => packages/service/tests}/utilities/measurements/nidigital_measurement/Pattern.digipat (100%) rename {tests => packages/service/tests}/utilities/measurements/nidigital_measurement/PinLevels.digilevels (100%) rename {tests => packages/service/tests}/utilities/measurements/nidigital_measurement/Specifications.specs (100%) rename {tests => packages/service/tests}/utilities/measurements/nidigital_measurement/Timing.digitiming (100%) rename {tests => packages/service/tests}/utilities/measurements/nidigital_measurement/__init__.py (100%) rename {tests => packages/service/tests}/utilities/measurements/nidmm_measurement/NIDmmMeasurement.serviceconfig (100%) rename {tests => packages/service/tests}/utilities/measurements/nidmm_measurement/__init__.py (100%) rename {tests => packages/service/tests}/utilities/measurements/nifgen_measurement/NIFgenMeasurement.serviceconfig (100%) rename {tests => packages/service/tests}/utilities/measurements/nifgen_measurement/__init__.py (100%) rename {tests => packages/service/tests}/utilities/measurements/niscope_measurement/NIScopeMeasurement.serviceconfig (100%) rename {tests => packages/service/tests}/utilities/measurements/niscope_measurement/__init__.py (100%) rename {tests => packages/service/tests}/utilities/measurements/niswitch_measurement/NISwitchMeasurement.serviceconfig (100%) rename {tests => packages/service/tests}/utilities/measurements/niswitch_measurement/__init__.py (100%) rename {tests => packages/service/tests}/utilities/measurements/niswitch_multiplexer_measurement/NISwitchMultiplexerMeasurement.serviceconfig (100%) rename {tests => packages/service/tests}/utilities/measurements/niswitch_multiplexer_measurement/__init__.py (100%) rename {tests => packages/service/tests}/utilities/measurements/pin_aware_measurement/PinAwareMeasurement.serviceconfig (100%) rename {tests => packages/service/tests}/utilities/measurements/pin_aware_measurement/__init__.py (100%) rename {tests => packages/service/tests}/utilities/measurements/streaming_data_measurement/StreamingDataMeasurement.serviceconfig (100%) rename {tests => packages/service/tests}/utilities/measurements/streaming_data_measurement/__init__.py (100%) rename {tests => packages/service/tests}/utilities/measurements/unknown_interface_measurement/__init__.py (100%) rename {tests => packages/service/tests}/utilities/measurements/unknown_interface_measurement/unknown_interface.serviceconfig (100%) rename {tests => packages/service/tests}/utilities/measurements/v1_only_measurement/__init__.py (100%) rename {tests => packages/service/tests}/utilities/measurements/v1_only_measurement/v1_only.serviceconfig (100%) rename {tests => packages/service/tests}/utilities/measurements/v2_only_measurement/__init__.py (100%) rename {tests => packages/service/tests}/utilities/measurements/v2_only_measurement/v2_only.serviceconfig (100%) rename {tests => packages/service/tests}/utilities/measurements/yield_vs_return_measurement/UIProgressUpdates.serviceconfig (100%) rename {tests => packages/service/tests}/utilities/measurements/yield_vs_return_measurement/__init__.py (100%) rename {tests => packages/service/tests}/utilities/pin_map_client.py (100%) rename {tests => packages/service/tests}/utilities/stubs/__init__.py (100%) rename {tests => packages/service/tests}/utilities/stubs/loopback/__init__.py (100%) rename {tests => packages/service/tests}/utilities/stubs/loopback/types.proto (100%) rename {tests => packages/service/tests}/utilities/stubs/loopback/types_pb2.py (100%) rename {tests => packages/service/tests}/utilities/stubs/loopback/types_pb2.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/loopback/types_pb2_grpc.py (100%) rename {tests => packages/service/tests}/utilities/stubs/loopback/types_pb2_grpc.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/nidaqmx/__init__.py (100%) rename {tests => packages/service/tests}/utilities/stubs/nidaqmx/types.proto (100%) rename {tests => packages/service/tests}/utilities/stubs/nidaqmx/types_pb2.py (100%) rename {tests => packages/service/tests}/utilities/stubs/nidaqmx/types_pb2.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/nidaqmx/types_pb2_grpc.py (100%) rename {tests => packages/service/tests}/utilities/stubs/nidaqmx/types_pb2_grpc.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/nidcpower/__init__.py (100%) rename {tests => packages/service/tests}/utilities/stubs/nidcpower/types.proto (100%) rename {tests => packages/service/tests}/utilities/stubs/nidcpower/types_pb2.py (100%) rename {tests => packages/service/tests}/utilities/stubs/nidcpower/types_pb2.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/nidcpower/types_pb2_grpc.py (100%) rename {tests => packages/service/tests}/utilities/stubs/nidcpower/types_pb2_grpc.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/nidigital/__init__.py (100%) rename {tests => packages/service/tests}/utilities/stubs/nidigital/types.proto (100%) rename {tests => packages/service/tests}/utilities/stubs/nidigital/types_pb2.py (100%) rename {tests => packages/service/tests}/utilities/stubs/nidigital/types_pb2.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/nidigital/types_pb2_grpc.py (100%) rename {tests => packages/service/tests}/utilities/stubs/nidigital/types_pb2_grpc.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/nidmm/__init__.py (100%) rename {tests => packages/service/tests}/utilities/stubs/nidmm/types.proto (100%) rename {tests => packages/service/tests}/utilities/stubs/nidmm/types_pb2.py (100%) rename {tests => packages/service/tests}/utilities/stubs/nidmm/types_pb2.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/nidmm/types_pb2_grpc.py (100%) rename {tests => packages/service/tests}/utilities/stubs/nidmm/types_pb2_grpc.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/nifgen/__init__.py (100%) rename {tests => packages/service/tests}/utilities/stubs/nifgen/types.proto (100%) rename {tests => packages/service/tests}/utilities/stubs/nifgen/types_pb2.py (100%) rename {tests => packages/service/tests}/utilities/stubs/nifgen/types_pb2.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/nifgen/types_pb2_grpc.py (100%) rename {tests => packages/service/tests}/utilities/stubs/nifgen/types_pb2_grpc.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/niscope/__init__.py (100%) rename {tests => packages/service/tests}/utilities/stubs/niscope/types.proto (100%) rename {tests => packages/service/tests}/utilities/stubs/niscope/types_pb2.py (100%) rename {tests => packages/service/tests}/utilities/stubs/niscope/types_pb2.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/niscope/types_pb2_grpc.py (100%) rename {tests => packages/service/tests}/utilities/stubs/niscope/types_pb2_grpc.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/niswitch/__init__.py (100%) rename {tests => packages/service/tests}/utilities/stubs/niswitch/types.proto (100%) rename {tests => packages/service/tests}/utilities/stubs/niswitch/types_pb2.py (100%) rename {tests => packages/service/tests}/utilities/stubs/niswitch/types_pb2.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/niswitch/types_pb2_grpc.py (100%) rename {tests => packages/service/tests}/utilities/stubs/niswitch/types_pb2_grpc.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/niswitchmultiplexer/types.proto (100%) rename {tests => packages/service/tests}/utilities/stubs/niswitchmultiplexer/types_pb2.py (100%) rename {tests => packages/service/tests}/utilities/stubs/niswitchmultiplexer/types_pb2.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/niswitchmultiplexer/types_pb2_grpc.py (100%) rename {tests => packages/service/tests}/utilities/stubs/niswitchmultiplexer/types_pb2_grpc.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/pinaware/__init__.py (100%) rename {tests => packages/service/tests}/utilities/stubs/pinaware/types.proto (100%) rename {tests => packages/service/tests}/utilities/stubs/pinaware/types_pb2.py (100%) rename {tests => packages/service/tests}/utilities/stubs/pinaware/types_pb2.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/pinaware/types_pb2_grpc.py (100%) rename {tests => packages/service/tests}/utilities/stubs/pinaware/types_pb2_grpc.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/serialization/__init__.py (100%) rename {tests => packages/service/tests}/utilities/stubs/serialization/bigmessage.proto (100%) rename {tests => packages/service/tests}/utilities/stubs/serialization/bigmessage_pb2.py (100%) rename {tests => packages/service/tests}/utilities/stubs/serialization/bigmessage_pb2.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/serialization/bigmessage_pb2_grpc.py (100%) rename {tests => packages/service/tests}/utilities/stubs/serialization/bigmessage_pb2_grpc.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/serialization/test.proto (100%) rename {tests => packages/service/tests}/utilities/stubs/serialization/test_pb2.py (100%) rename {tests => packages/service/tests}/utilities/stubs/serialization/test_pb2.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/serialization/test_pb2_grpc.py (100%) rename {tests => packages/service/tests}/utilities/stubs/serialization/test_pb2_grpc.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/streamingdata/__init__.py (100%) rename {tests => packages/service/tests}/utilities/stubs/streamingdata/types.proto (100%) rename {tests => packages/service/tests}/utilities/stubs/streamingdata/types_pb2.py (100%) rename {tests => packages/service/tests}/utilities/stubs/streamingdata/types_pb2.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/streamingdata/types_pb2_grpc.py (100%) rename {tests => packages/service/tests}/utilities/stubs/streamingdata/types_pb2_grpc.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/yieldvsreturn/__init__.py (100%) rename {tests => packages/service/tests}/utilities/stubs/yieldvsreturn/types.proto (100%) rename {tests => packages/service/tests}/utilities/stubs/yieldvsreturn/types_pb2.py (100%) rename {tests => packages/service/tests}/utilities/stubs/yieldvsreturn/types_pb2.pyi (100%) rename {tests => packages/service/tests}/utilities/stubs/yieldvsreturn/types_pb2_grpc.py (100%) rename {tests => packages/service/tests}/utilities/stubs/yieldvsreturn/types_pb2_grpc.pyi (100%) diff --git a/ni_measurement_plugin_sdk_generator/README.md b/packages/generator/README.md similarity index 100% rename from ni_measurement_plugin_sdk_generator/README.md rename to packages/generator/README.md diff --git a/ni_measurement_plugin_sdk_generator/ni_measurement_plugin_sdk_generator/__main__.py b/packages/generator/ni_measurement_plugin_sdk_generator/__main__.py similarity index 100% rename from ni_measurement_plugin_sdk_generator/ni_measurement_plugin_sdk_generator/__main__.py rename to packages/generator/ni_measurement_plugin_sdk_generator/__main__.py diff --git a/ni_measurement_plugin_sdk_generator/ni_measurement_plugin_sdk_generator/py.typed b/packages/generator/ni_measurement_plugin_sdk_generator/py.typed similarity index 100% rename from ni_measurement_plugin_sdk_generator/ni_measurement_plugin_sdk_generator/py.typed rename to packages/generator/ni_measurement_plugin_sdk_generator/py.typed diff --git a/ni_measurement_plugin_sdk_generator/ni_measurement_plugin_sdk_generator/template.py b/packages/generator/ni_measurement_plugin_sdk_generator/template.py similarity index 100% rename from ni_measurement_plugin_sdk_generator/ni_measurement_plugin_sdk_generator/template.py rename to packages/generator/ni_measurement_plugin_sdk_generator/template.py diff --git a/ni_measurement_plugin_sdk_generator/ni_measurement_plugin_sdk_generator/templates/_helpers.py.mako b/packages/generator/ni_measurement_plugin_sdk_generator/templates/_helpers.py.mako similarity index 100% rename from ni_measurement_plugin_sdk_generator/ni_measurement_plugin_sdk_generator/templates/_helpers.py.mako rename to packages/generator/ni_measurement_plugin_sdk_generator/templates/_helpers.py.mako diff --git a/ni_measurement_plugin_sdk_generator/ni_measurement_plugin_sdk_generator/templates/measurement.measproj.mako b/packages/generator/ni_measurement_plugin_sdk_generator/templates/measurement.measproj.mako similarity index 100% rename from ni_measurement_plugin_sdk_generator/ni_measurement_plugin_sdk_generator/templates/measurement.measproj.mako rename to packages/generator/ni_measurement_plugin_sdk_generator/templates/measurement.measproj.mako diff --git a/ni_measurement_plugin_sdk_generator/ni_measurement_plugin_sdk_generator/templates/measurement.measui.mako b/packages/generator/ni_measurement_plugin_sdk_generator/templates/measurement.measui.mako similarity index 100% rename from ni_measurement_plugin_sdk_generator/ni_measurement_plugin_sdk_generator/templates/measurement.measui.mako rename to packages/generator/ni_measurement_plugin_sdk_generator/templates/measurement.measui.mako diff --git a/ni_measurement_plugin_sdk_generator/ni_measurement_plugin_sdk_generator/templates/measurement.py.mako b/packages/generator/ni_measurement_plugin_sdk_generator/templates/measurement.py.mako similarity index 100% rename from ni_measurement_plugin_sdk_generator/ni_measurement_plugin_sdk_generator/templates/measurement.py.mako rename to packages/generator/ni_measurement_plugin_sdk_generator/templates/measurement.py.mako diff --git a/ni_measurement_plugin_sdk_generator/ni_measurement_plugin_sdk_generator/templates/measurement.serviceconfig.mako b/packages/generator/ni_measurement_plugin_sdk_generator/templates/measurement.serviceconfig.mako similarity index 100% rename from ni_measurement_plugin_sdk_generator/ni_measurement_plugin_sdk_generator/templates/measurement.serviceconfig.mako rename to packages/generator/ni_measurement_plugin_sdk_generator/templates/measurement.serviceconfig.mako diff --git a/ni_measurement_plugin_sdk_generator/ni_measurement_plugin_sdk_generator/templates/start.bat.mako b/packages/generator/ni_measurement_plugin_sdk_generator/templates/start.bat.mako similarity index 100% rename from ni_measurement_plugin_sdk_generator/ni_measurement_plugin_sdk_generator/templates/start.bat.mako rename to packages/generator/ni_measurement_plugin_sdk_generator/templates/start.bat.mako diff --git a/ni_measurement_plugin_sdk_generator/poetry.lock b/packages/generator/poetry.lock similarity index 100% rename from ni_measurement_plugin_sdk_generator/poetry.lock rename to packages/generator/poetry.lock diff --git a/ni_measurement_plugin_sdk/poetry.toml b/packages/generator/poetry.toml similarity index 100% rename from ni_measurement_plugin_sdk/poetry.toml rename to packages/generator/poetry.toml diff --git a/ni_measurement_plugin_sdk_generator/pyproject.toml b/packages/generator/pyproject.toml similarity index 100% rename from ni_measurement_plugin_sdk_generator/pyproject.toml rename to packages/generator/pyproject.toml diff --git a/ni_measurement_plugin_sdk_generator/tests/acceptance/test_generator.py b/packages/generator/tests/acceptance/test_generator.py similarity index 100% rename from ni_measurement_plugin_sdk_generator/tests/acceptance/test_generator.py rename to packages/generator/tests/acceptance/test_generator.py diff --git a/ni_measurement_plugin_sdk_generator/tests/conftest.py b/packages/generator/tests/conftest.py similarity index 100% rename from ni_measurement_plugin_sdk_generator/tests/conftest.py rename to packages/generator/tests/conftest.py diff --git a/ni_measurement_plugin_sdk_generator/tests/test_assets/example_renders/measurement/SampleMeasurement.serviceconfig b/packages/generator/tests/test_assets/example_renders/measurement/SampleMeasurement.serviceconfig similarity index 100% rename from ni_measurement_plugin_sdk_generator/tests/test_assets/example_renders/measurement/SampleMeasurement.serviceconfig rename to packages/generator/tests/test_assets/example_renders/measurement/SampleMeasurement.serviceconfig diff --git a/ni_measurement_plugin_sdk_generator/tests/test_assets/example_renders/measurement/_helpers.py b/packages/generator/tests/test_assets/example_renders/measurement/_helpers.py similarity index 100% rename from ni_measurement_plugin_sdk_generator/tests/test_assets/example_renders/measurement/_helpers.py rename to packages/generator/tests/test_assets/example_renders/measurement/_helpers.py diff --git a/ni_measurement_plugin_sdk_generator/tests/test_assets/example_renders/measurement/measurement.py b/packages/generator/tests/test_assets/example_renders/measurement/measurement.py similarity index 100% rename from ni_measurement_plugin_sdk_generator/tests/test_assets/example_renders/measurement/measurement.py rename to packages/generator/tests/test_assets/example_renders/measurement/measurement.py diff --git a/ni_measurement_plugin_sdk_generator/tests/test_assets/example_renders/measurement/start.bat b/packages/generator/tests/test_assets/example_renders/measurement/start.bat similarity index 100% rename from ni_measurement_plugin_sdk_generator/tests/test_assets/example_renders/measurement/start.bat rename to packages/generator/tests/test_assets/example_renders/measurement/start.bat diff --git a/ni_measurement_plugin_sdk_generator/tests/test_assets/example_renders/measurement_with_annotations/SampleMeasurement.serviceconfig b/packages/generator/tests/test_assets/example_renders/measurement_with_annotations/SampleMeasurement.serviceconfig similarity index 100% rename from ni_measurement_plugin_sdk_generator/tests/test_assets/example_renders/measurement_with_annotations/SampleMeasurement.serviceconfig rename to packages/generator/tests/test_assets/example_renders/measurement_with_annotations/SampleMeasurement.serviceconfig diff --git a/ni_measurement_plugin_sdk_generator/tests/test_assets/example_renders/measurement_with_annotations/_helpers.py b/packages/generator/tests/test_assets/example_renders/measurement_with_annotations/_helpers.py similarity index 100% rename from ni_measurement_plugin_sdk_generator/tests/test_assets/example_renders/measurement_with_annotations/_helpers.py rename to packages/generator/tests/test_assets/example_renders/measurement_with_annotations/_helpers.py diff --git a/ni_measurement_plugin_sdk_generator/tests/test_assets/example_renders/measurement_with_annotations/measurement.py b/packages/generator/tests/test_assets/example_renders/measurement_with_annotations/measurement.py similarity index 100% rename from ni_measurement_plugin_sdk_generator/tests/test_assets/example_renders/measurement_with_annotations/measurement.py rename to packages/generator/tests/test_assets/example_renders/measurement_with_annotations/measurement.py diff --git a/ni_measurement_plugin_sdk_generator/tests/test_assets/example_renders/measurement_with_annotations/start.bat b/packages/generator/tests/test_assets/example_renders/measurement_with_annotations/start.bat similarity index 100% rename from ni_measurement_plugin_sdk_generator/tests/test_assets/example_renders/measurement_with_annotations/start.bat rename to packages/generator/tests/test_assets/example_renders/measurement_with_annotations/start.bat diff --git a/ni_measurement_plugin_sdk/ni_measurement_plugin_sdk/__init__.py b/packages/sdk/ni_measurement_plugin_sdk/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk/ni_measurement_plugin_sdk/__init__.py rename to packages/sdk/ni_measurement_plugin_sdk/__init__.py diff --git a/ni_measurement_plugin_sdk/poetry.lock b/packages/sdk/poetry.lock similarity index 100% rename from ni_measurement_plugin_sdk/poetry.lock rename to packages/sdk/poetry.lock diff --git a/ni_measurement_plugin_sdk_generator/poetry.toml b/packages/sdk/poetry.toml similarity index 100% rename from ni_measurement_plugin_sdk_generator/poetry.toml rename to packages/sdk/poetry.toml diff --git a/ni_measurement_plugin_sdk/pyproject.toml b/packages/sdk/pyproject.toml similarity index 100% rename from ni_measurement_plugin_sdk/pyproject.toml rename to packages/sdk/pyproject.toml diff --git a/ni_measurement_plugin_sdk/README.md b/packages/service/README.md similarity index 100% rename from ni_measurement_plugin_sdk/README.md rename to packages/service/README.md diff --git a/ni_measurement_plugin_sdk_service/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/__init__.py diff --git a/ni_measurement_plugin_sdk_service/_annotations.py b/packages/service/ni_measurement_plugin_sdk_service/_annotations.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_annotations.py rename to packages/service/ni_measurement_plugin_sdk_service/_annotations.py diff --git a/ni_measurement_plugin_sdk_service/_configuration.py b/packages/service/ni_measurement_plugin_sdk_service/_configuration.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_configuration.py rename to packages/service/ni_measurement_plugin_sdk_service/_configuration.py diff --git a/ni_measurement_plugin_sdk_service/_datatypeinfo.py b/packages/service/ni_measurement_plugin_sdk_service/_datatypeinfo.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_datatypeinfo.py rename to packages/service/ni_measurement_plugin_sdk_service/_datatypeinfo.py diff --git a/ni_measurement_plugin_sdk_service/_dotenvpath.py b/packages/service/ni_measurement_plugin_sdk_service/_dotenvpath.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_dotenvpath.py rename to packages/service/ni_measurement_plugin_sdk_service/_dotenvpath.py diff --git a/ni_measurement_plugin_sdk_service/_drivers/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/_drivers/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_drivers/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/_drivers/__init__.py diff --git a/ni_measurement_plugin_sdk_service/_drivers/_grpcdevice.py b/packages/service/ni_measurement_plugin_sdk_service/_drivers/_grpcdevice.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_drivers/_grpcdevice.py rename to packages/service/ni_measurement_plugin_sdk_service/_drivers/_grpcdevice.py diff --git a/ni_measurement_plugin_sdk_service/_drivers/_nidaqmx.py b/packages/service/ni_measurement_plugin_sdk_service/_drivers/_nidaqmx.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_drivers/_nidaqmx.py rename to packages/service/ni_measurement_plugin_sdk_service/_drivers/_nidaqmx.py diff --git a/ni_measurement_plugin_sdk_service/_drivers/_nidcpower.py b/packages/service/ni_measurement_plugin_sdk_service/_drivers/_nidcpower.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_drivers/_nidcpower.py rename to packages/service/ni_measurement_plugin_sdk_service/_drivers/_nidcpower.py diff --git a/ni_measurement_plugin_sdk_service/_drivers/_nidigital.py b/packages/service/ni_measurement_plugin_sdk_service/_drivers/_nidigital.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_drivers/_nidigital.py rename to packages/service/ni_measurement_plugin_sdk_service/_drivers/_nidigital.py diff --git a/ni_measurement_plugin_sdk_service/_drivers/_nidmm.py b/packages/service/ni_measurement_plugin_sdk_service/_drivers/_nidmm.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_drivers/_nidmm.py rename to packages/service/ni_measurement_plugin_sdk_service/_drivers/_nidmm.py diff --git a/ni_measurement_plugin_sdk_service/_drivers/_nifgen.py b/packages/service/ni_measurement_plugin_sdk_service/_drivers/_nifgen.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_drivers/_nifgen.py rename to packages/service/ni_measurement_plugin_sdk_service/_drivers/_nifgen.py diff --git a/ni_measurement_plugin_sdk_service/_drivers/_niscope.py b/packages/service/ni_measurement_plugin_sdk_service/_drivers/_niscope.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_drivers/_niscope.py rename to packages/service/ni_measurement_plugin_sdk_service/_drivers/_niscope.py diff --git a/ni_measurement_plugin_sdk_service/_drivers/_niswitch.py b/packages/service/ni_measurement_plugin_sdk_service/_drivers/_niswitch.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_drivers/_niswitch.py rename to packages/service/ni_measurement_plugin_sdk_service/_drivers/_niswitch.py diff --git a/ni_measurement_plugin_sdk_service/_featuretoggles.py b/packages/service/ni_measurement_plugin_sdk_service/_featuretoggles.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_featuretoggles.py rename to packages/service/ni_measurement_plugin_sdk_service/_featuretoggles.py diff --git a/ni_measurement_plugin_sdk_service/_internal/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/__init__.py diff --git a/ni_measurement_plugin_sdk_service/_internal/discovery_client.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/discovery_client.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/discovery_client.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/discovery_client.py diff --git a/ni_measurement_plugin_sdk_service/_internal/grpc_servicer.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/grpc_servicer.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/grpc_servicer.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/grpc_servicer.py diff --git a/ni_measurement_plugin_sdk_service/_internal/parameter/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/parameter/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/parameter/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/parameter/__init__.py diff --git a/ni_measurement_plugin_sdk_service/_internal/parameter/_message.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/parameter/_message.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/parameter/_message.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/parameter/_message.py diff --git a/ni_measurement_plugin_sdk_service/_internal/parameter/_serializer_types.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/parameter/_serializer_types.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/parameter/_serializer_types.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/parameter/_serializer_types.py diff --git a/ni_measurement_plugin_sdk_service/_internal/parameter/metadata.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/parameter/metadata.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/parameter/metadata.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/parameter/metadata.py diff --git a/ni_measurement_plugin_sdk_service/_internal/parameter/serialization_strategy.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/parameter/serialization_strategy.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/parameter/serialization_strategy.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/parameter/serialization_strategy.py diff --git a/ni_measurement_plugin_sdk_service/_internal/parameter/serializer.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/parameter/serializer.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/parameter/serializer.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/parameter/serializer.py diff --git a/ni_measurement_plugin_sdk_service/_internal/service_manager.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/service_manager.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/service_manager.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/service_manager.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/__init__.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/__init__.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/__init__.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/__init__.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/__init__.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2.pyi diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2_grpc.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2_grpc.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2_grpc.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2_grpc.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2_grpc.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2_grpc.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2_grpc.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/discovery/v1/discovery_service_pb2_grpc.pyi diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/__init__.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/__init__.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2.pyi diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2_grpc.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2_grpc.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2_grpc.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2_grpc.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2_grpc.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2_grpc.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2_grpc.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v1/measurement_service_pb2_grpc.pyi diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/__init__.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2.pyi diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2_grpc.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2_grpc.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2_grpc.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2_grpc.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2_grpc.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2_grpc.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2_grpc.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/measurement/v2/measurement_service_pb2_grpc.pyi diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pin_map_context_pb2.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pin_map_context_pb2.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pin_map_context_pb2.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pin_map_context_pb2.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pin_map_context_pb2.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pin_map_context_pb2.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pin_map_context_pb2.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pin_map_context_pb2.pyi diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pin_map_context_pb2_grpc.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pin_map_context_pb2_grpc.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pin_map_context_pb2_grpc.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pin_map_context_pb2_grpc.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pin_map_context_pb2_grpc.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pin_map_context_pb2_grpc.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pin_map_context_pb2_grpc.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pin_map_context_pb2_grpc.pyi diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/__init__.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/__init__.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2.pyi diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2_grpc.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2_grpc.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2_grpc.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2_grpc.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2_grpc.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2_grpc.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2_grpc.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/pinmap/v1/pin_map_service_pb2_grpc.pyi diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/__init__.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/__init__.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2.pyi diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2_grpc.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2_grpc.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2_grpc.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2_grpc.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2_grpc.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2_grpc.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2_grpc.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/measurementlink/sessionmanagement/v1/session_management_service_pb2_grpc.pyi diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/__init__.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/__init__.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2.pyi diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2_grpc.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2_grpc.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2_grpc.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2_grpc.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2_grpc.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2_grpc.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2_grpc.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/precision_timestamp_pb2_grpc.pyi diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/waveform_pb2.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/waveform_pb2.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/waveform_pb2.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/waveform_pb2.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/waveform_pb2.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/waveform_pb2.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/waveform_pb2.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/waveform_pb2.pyi diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/waveform_pb2_grpc.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/waveform_pb2_grpc.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/waveform_pb2_grpc.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/waveform_pb2_grpc.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/waveform_pb2_grpc.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/waveform_pb2_grpc.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/waveform_pb2_grpc.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/waveform_pb2_grpc.pyi diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/xydata_pb2.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/xydata_pb2.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/xydata_pb2.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/xydata_pb2.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/xydata_pb2.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/xydata_pb2.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/xydata_pb2.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/xydata_pb2.pyi diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/xydata_pb2_grpc.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/xydata_pb2_grpc.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/xydata_pb2_grpc.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/xydata_pb2_grpc.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/xydata_pb2_grpc.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/xydata_pb2_grpc.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/xydata_pb2_grpc.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/ni/protobuf/types/xydata_pb2_grpc.pyi diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/proto/README.md b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/proto/README.md similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/proto/README.md rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/proto/README.md diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/proto/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/proto/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/proto/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/proto/__init__.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/proto/session.proto b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/proto/session.proto similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/proto/session.proto rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/proto/session.proto diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/session_pb2.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/session_pb2.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/session_pb2.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/session_pb2.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/session_pb2.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/session_pb2.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/session_pb2.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/session_pb2.pyi diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/session_pb2_grpc.py b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/session_pb2_grpc.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/session_pb2_grpc.py rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/session_pb2_grpc.py diff --git a/ni_measurement_plugin_sdk_service/_internal/stubs/session_pb2_grpc.pyi b/packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/session_pb2_grpc.pyi similarity index 100% rename from ni_measurement_plugin_sdk_service/_internal/stubs/session_pb2_grpc.pyi rename to packages/service/ni_measurement_plugin_sdk_service/_internal/stubs/session_pb2_grpc.pyi diff --git a/ni_measurement_plugin_sdk_service/_tracelogging.py b/packages/service/ni_measurement_plugin_sdk_service/_tracelogging.py similarity index 100% rename from ni_measurement_plugin_sdk_service/_tracelogging.py rename to packages/service/ni_measurement_plugin_sdk_service/_tracelogging.py diff --git a/ni_measurement_plugin_sdk_service/discovery/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/discovery/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/discovery/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/discovery/__init__.py diff --git a/ni_measurement_plugin_sdk_service/discovery/_client.py b/packages/service/ni_measurement_plugin_sdk_service/discovery/_client.py similarity index 100% rename from ni_measurement_plugin_sdk_service/discovery/_client.py rename to packages/service/ni_measurement_plugin_sdk_service/discovery/_client.py diff --git a/ni_measurement_plugin_sdk_service/discovery/_support.py b/packages/service/ni_measurement_plugin_sdk_service/discovery/_support.py similarity index 100% rename from ni_measurement_plugin_sdk_service/discovery/_support.py rename to packages/service/ni_measurement_plugin_sdk_service/discovery/_support.py diff --git a/ni_measurement_plugin_sdk_service/discovery/_types.py b/packages/service/ni_measurement_plugin_sdk_service/discovery/_types.py similarity index 100% rename from ni_measurement_plugin_sdk_service/discovery/_types.py rename to packages/service/ni_measurement_plugin_sdk_service/discovery/_types.py diff --git a/ni_measurement_plugin_sdk_service/grpc/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/grpc/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/grpc/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/grpc/__init__.py diff --git a/ni_measurement_plugin_sdk_service/grpc/channelpool.py b/packages/service/ni_measurement_plugin_sdk_service/grpc/channelpool.py similarity index 100% rename from ni_measurement_plugin_sdk_service/grpc/channelpool.py rename to packages/service/ni_measurement_plugin_sdk_service/grpc/channelpool.py diff --git a/ni_measurement_plugin_sdk_service/grpc/loggers.py b/packages/service/ni_measurement_plugin_sdk_service/grpc/loggers.py similarity index 100% rename from ni_measurement_plugin_sdk_service/grpc/loggers.py rename to packages/service/ni_measurement_plugin_sdk_service/grpc/loggers.py diff --git a/ni_measurement_plugin_sdk_service/measurement/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/measurement/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/measurement/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/measurement/__init__.py diff --git a/ni_measurement_plugin_sdk_service/measurement/info.py b/packages/service/ni_measurement_plugin_sdk_service/measurement/info.py similarity index 100% rename from ni_measurement_plugin_sdk_service/measurement/info.py rename to packages/service/ni_measurement_plugin_sdk_service/measurement/info.py diff --git a/ni_measurement_plugin_sdk_service/measurement/service.py b/packages/service/ni_measurement_plugin_sdk_service/measurement/service.py similarity index 100% rename from ni_measurement_plugin_sdk_service/measurement/service.py rename to packages/service/ni_measurement_plugin_sdk_service/measurement/service.py diff --git a/ni_measurement_plugin_sdk_service/py.typed b/packages/service/ni_measurement_plugin_sdk_service/py.typed similarity index 100% rename from ni_measurement_plugin_sdk_service/py.typed rename to packages/service/ni_measurement_plugin_sdk_service/py.typed diff --git a/ni_measurement_plugin_sdk_service/session_management/__init__.py b/packages/service/ni_measurement_plugin_sdk_service/session_management/__init__.py similarity index 100% rename from ni_measurement_plugin_sdk_service/session_management/__init__.py rename to packages/service/ni_measurement_plugin_sdk_service/session_management/__init__.py diff --git a/ni_measurement_plugin_sdk_service/session_management/_client.py b/packages/service/ni_measurement_plugin_sdk_service/session_management/_client.py similarity index 100% rename from ni_measurement_plugin_sdk_service/session_management/_client.py rename to packages/service/ni_measurement_plugin_sdk_service/session_management/_client.py diff --git a/ni_measurement_plugin_sdk_service/session_management/_constants.py b/packages/service/ni_measurement_plugin_sdk_service/session_management/_constants.py similarity index 100% rename from ni_measurement_plugin_sdk_service/session_management/_constants.py rename to packages/service/ni_measurement_plugin_sdk_service/session_management/_constants.py diff --git a/ni_measurement_plugin_sdk_service/session_management/_reservation.py b/packages/service/ni_measurement_plugin_sdk_service/session_management/_reservation.py similarity index 100% rename from ni_measurement_plugin_sdk_service/session_management/_reservation.py rename to packages/service/ni_measurement_plugin_sdk_service/session_management/_reservation.py diff --git a/ni_measurement_plugin_sdk_service/session_management/_types.py b/packages/service/ni_measurement_plugin_sdk_service/session_management/_types.py similarity index 100% rename from ni_measurement_plugin_sdk_service/session_management/_types.py rename to packages/service/ni_measurement_plugin_sdk_service/session_management/_types.py diff --git a/poetry.lock b/packages/service/poetry.lock similarity index 100% rename from poetry.lock rename to packages/service/poetry.lock diff --git a/poetry.toml b/packages/service/poetry.toml similarity index 100% rename from poetry.toml rename to packages/service/poetry.toml diff --git a/pyproject.toml b/packages/service/pyproject.toml similarity index 100% rename from pyproject.toml rename to packages/service/pyproject.toml diff --git a/tests/__init__.py b/packages/service/tests/__init__.py similarity index 100% rename from tests/__init__.py rename to packages/service/tests/__init__.py diff --git a/tests/acceptance/__init__.py b/packages/service/tests/acceptance/__init__.py similarity index 100% rename from tests/acceptance/__init__.py rename to packages/service/tests/acceptance/__init__.py diff --git a/tests/acceptance/conftest.py b/packages/service/tests/acceptance/conftest.py similarity index 100% rename from tests/acceptance/conftest.py rename to packages/service/tests/acceptance/conftest.py diff --git a/tests/acceptance/test_logging.py b/packages/service/tests/acceptance/test_logging.py similarity index 100% rename from tests/acceptance/test_logging.py rename to packages/service/tests/acceptance/test_logging.py diff --git a/tests/acceptance/test_measurement_service.py b/packages/service/tests/acceptance/test_measurement_service.py similarity index 100% rename from tests/acceptance/test_measurement_service.py rename to packages/service/tests/acceptance/test_measurement_service.py diff --git a/tests/acceptance/test_nidaqmx_measurement.py b/packages/service/tests/acceptance/test_nidaqmx_measurement.py similarity index 100% rename from tests/acceptance/test_nidaqmx_measurement.py rename to packages/service/tests/acceptance/test_nidaqmx_measurement.py diff --git a/tests/acceptance/test_nidcpower_measurement.py b/packages/service/tests/acceptance/test_nidcpower_measurement.py similarity index 100% rename from tests/acceptance/test_nidcpower_measurement.py rename to packages/service/tests/acceptance/test_nidcpower_measurement.py diff --git a/tests/acceptance/test_nidigital_measurement.py b/packages/service/tests/acceptance/test_nidigital_measurement.py similarity index 100% rename from tests/acceptance/test_nidigital_measurement.py rename to packages/service/tests/acceptance/test_nidigital_measurement.py diff --git a/tests/acceptance/test_nidmm_measurement.py b/packages/service/tests/acceptance/test_nidmm_measurement.py similarity index 100% rename from tests/acceptance/test_nidmm_measurement.py rename to packages/service/tests/acceptance/test_nidmm_measurement.py diff --git a/tests/acceptance/test_nifgen_measurement.py b/packages/service/tests/acceptance/test_nifgen_measurement.py similarity index 100% rename from tests/acceptance/test_nifgen_measurement.py rename to packages/service/tests/acceptance/test_nifgen_measurement.py diff --git a/tests/acceptance/test_niscope_measurement.py b/packages/service/tests/acceptance/test_niscope_measurement.py similarity index 100% rename from tests/acceptance/test_niscope_measurement.py rename to packages/service/tests/acceptance/test_niscope_measurement.py diff --git a/tests/acceptance/test_niswitch_measurement.py b/packages/service/tests/acceptance/test_niswitch_measurement.py similarity index 100% rename from tests/acceptance/test_niswitch_measurement.py rename to packages/service/tests/acceptance/test_niswitch_measurement.py diff --git a/tests/acceptance/test_niswitch_multiplexer_measurement.py b/packages/service/tests/acceptance/test_niswitch_multiplexer_measurement.py similarity index 100% rename from tests/acceptance/test_niswitch_multiplexer_measurement.py rename to packages/service/tests/acceptance/test_niswitch_multiplexer_measurement.py diff --git a/tests/acceptance/test_security.py b/packages/service/tests/acceptance/test_security.py similarity index 100% rename from tests/acceptance/test_security.py rename to packages/service/tests/acceptance/test_security.py diff --git a/tests/acceptance/test_session_management.py b/packages/service/tests/acceptance/test_session_management.py similarity index 100% rename from tests/acceptance/test_session_management.py rename to packages/service/tests/acceptance/test_session_management.py diff --git a/tests/acceptance/test_streaming_data_measurement.py b/packages/service/tests/acceptance/test_streaming_data_measurement.py similarity index 100% rename from tests/acceptance/test_streaming_data_measurement.py rename to packages/service/tests/acceptance/test_streaming_data_measurement.py diff --git a/tests/acceptance/test_yield_vs_return.py b/packages/service/tests/acceptance/test_yield_vs_return.py similarity index 100% rename from tests/acceptance/test_yield_vs_return.py rename to packages/service/tests/acceptance/test_yield_vs_return.py diff --git a/tests/assets/__init__.py b/packages/service/tests/assets/__init__.py similarity index 100% rename from tests/assets/__init__.py rename to packages/service/tests/assets/__init__.py diff --git a/tests/assets/acceptance/session_management/1Fgen1Pin1Site.pinmap b/packages/service/tests/assets/acceptance/session_management/1Fgen1Pin1Site.pinmap similarity index 100% rename from tests/assets/acceptance/session_management/1Fgen1Pin1Site.pinmap rename to packages/service/tests/assets/acceptance/session_management/1Fgen1Pin1Site.pinmap diff --git a/tests/assets/acceptance/session_management/1Smu1ChannelGroup1Pin1Site.pinmap b/packages/service/tests/assets/acceptance/session_management/1Smu1ChannelGroup1Pin1Site.pinmap similarity index 100% rename from tests/assets/acceptance/session_management/1Smu1ChannelGroup1Pin1Site.pinmap rename to packages/service/tests/assets/acceptance/session_management/1Smu1ChannelGroup1Pin1Site.pinmap diff --git a/tests/assets/acceptance/session_management/1Smu1ChannelGroup2Pin2Site.pinmap b/packages/service/tests/assets/acceptance/session_management/1Smu1ChannelGroup2Pin2Site.pinmap similarity index 100% rename from tests/assets/acceptance/session_management/1Smu1ChannelGroup2Pin2Site.pinmap rename to packages/service/tests/assets/acceptance/session_management/1Smu1ChannelGroup2Pin2Site.pinmap diff --git a/tests/assets/acceptance/session_management/1Smu2ChannelGroup2Pin1Site.pinmap b/packages/service/tests/assets/acceptance/session_management/1Smu2ChannelGroup2Pin1Site.pinmap similarity index 100% rename from tests/assets/acceptance/session_management/1Smu2ChannelGroup2Pin1Site.pinmap rename to packages/service/tests/assets/acceptance/session_management/1Smu2ChannelGroup2Pin1Site.pinmap diff --git a/tests/assets/acceptance/session_management/1Smu2ChannelGroup2Pin2Site.pinmap b/packages/service/tests/assets/acceptance/session_management/1Smu2ChannelGroup2Pin2Site.pinmap similarity index 100% rename from tests/assets/acceptance/session_management/1Smu2ChannelGroup2Pin2Site.pinmap rename to packages/service/tests/assets/acceptance/session_management/1Smu2ChannelGroup2Pin2Site.pinmap diff --git a/tests/assets/acceptance/session_management/2Digital2Group4Pin1Site.pinmap b/packages/service/tests/assets/acceptance/session_management/2Digital2Group4Pin1Site.pinmap similarity index 100% rename from tests/assets/acceptance/session_management/2Digital2Group4Pin1Site.pinmap rename to packages/service/tests/assets/acceptance/session_management/2Digital2Group4Pin1Site.pinmap diff --git a/tests/assets/acceptance/session_management/2Dmm2Pin1Site.pinmap b/packages/service/tests/assets/acceptance/session_management/2Dmm2Pin1Site.pinmap similarity index 100% rename from tests/assets/acceptance/session_management/2Dmm2Pin1Site.pinmap rename to packages/service/tests/assets/acceptance/session_management/2Dmm2Pin1Site.pinmap diff --git a/tests/assets/acceptance/session_management/2Fgen2Pin1Site.pinmap b/packages/service/tests/assets/acceptance/session_management/2Fgen2Pin1Site.pinmap similarity index 100% rename from tests/assets/acceptance/session_management/2Fgen2Pin1Site.pinmap rename to packages/service/tests/assets/acceptance/session_management/2Fgen2Pin1Site.pinmap diff --git a/tests/assets/acceptance/session_management/2Fgen2Pin2Site.pinmap b/packages/service/tests/assets/acceptance/session_management/2Fgen2Pin2Site.pinmap similarity index 100% rename from tests/assets/acceptance/session_management/2Fgen2Pin2Site.pinmap rename to packages/service/tests/assets/acceptance/session_management/2Fgen2Pin2Site.pinmap diff --git a/tests/assets/acceptance/session_management/2Mio2Pin1Site.pinmap b/packages/service/tests/assets/acceptance/session_management/2Mio2Pin1Site.pinmap similarity index 100% rename from tests/assets/acceptance/session_management/2Mio2Pin1Site.pinmap rename to packages/service/tests/assets/acceptance/session_management/2Mio2Pin1Site.pinmap diff --git a/tests/assets/acceptance/session_management/2Scope2Pin2Group1Site.pinmap b/packages/service/tests/assets/acceptance/session_management/2Scope2Pin2Group1Site.pinmap similarity index 100% rename from tests/assets/acceptance/session_management/2Scope2Pin2Group1Site.pinmap rename to packages/service/tests/assets/acceptance/session_management/2Scope2Pin2Group1Site.pinmap diff --git a/tests/assets/acceptance/session_management/2Smu2ChannelGroup2Pin2Site.pinmap b/packages/service/tests/assets/acceptance/session_management/2Smu2ChannelGroup2Pin2Site.pinmap similarity index 100% rename from tests/assets/acceptance/session_management/2Smu2ChannelGroup2Pin2Site.pinmap rename to packages/service/tests/assets/acceptance/session_management/2Smu2ChannelGroup2Pin2Site.pinmap diff --git a/tests/assets/acceptance/session_management/2Switch2Relay1Site.pinmap b/packages/service/tests/assets/acceptance/session_management/2Switch2Relay1Site.pinmap similarity index 100% rename from tests/assets/acceptance/session_management/2Switch2Relay1Site.pinmap rename to packages/service/tests/assets/acceptance/session_management/2Switch2Relay1Site.pinmap diff --git a/tests/assets/acceptance/session_management/2SwitchMultiplexer1Smu2Pin1Site.pinmap b/packages/service/tests/assets/acceptance/session_management/2SwitchMultiplexer1Smu2Pin1Site.pinmap similarity index 100% rename from tests/assets/acceptance/session_management/2SwitchMultiplexer1Smu2Pin1Site.pinmap rename to packages/service/tests/assets/acceptance/session_management/2SwitchMultiplexer1Smu2Pin1Site.pinmap diff --git a/tests/assets/example.AllAnnotations.serviceconfig b/packages/service/tests/assets/example.AllAnnotations.serviceconfig similarity index 100% rename from tests/assets/example.AllAnnotations.serviceconfig rename to packages/service/tests/assets/example.AllAnnotations.serviceconfig diff --git a/tests/assets/example.CustomAnnotations.serviceconfig b/packages/service/tests/assets/example.CustomAnnotations.serviceconfig similarity index 100% rename from tests/assets/example.CustomAnnotations.serviceconfig rename to packages/service/tests/assets/example.CustomAnnotations.serviceconfig diff --git a/tests/assets/example.OnlyCollection.serviceconfig b/packages/service/tests/assets/example.OnlyCollection.serviceconfig similarity index 100% rename from tests/assets/example.OnlyCollection.serviceconfig rename to packages/service/tests/assets/example.OnlyCollection.serviceconfig diff --git a/tests/assets/example.OnlyTags.serviceconfig b/packages/service/tests/assets/example.OnlyTags.serviceconfig similarity index 100% rename from tests/assets/example.OnlyTags.serviceconfig rename to packages/service/tests/assets/example.OnlyTags.serviceconfig diff --git a/tests/assets/example.serviceconfig b/packages/service/tests/assets/example.serviceconfig similarity index 100% rename from tests/assets/example.serviceconfig rename to packages/service/tests/assets/example.serviceconfig diff --git a/tests/assets/example.v1.serviceconfig b/packages/service/tests/assets/example.v1.serviceconfig similarity index 100% rename from tests/assets/example.v1.serviceconfig rename to packages/service/tests/assets/example.v1.serviceconfig diff --git a/tests/assets/example.v2.serviceconfig b/packages/service/tests/assets/example.v2.serviceconfig similarity index 100% rename from tests/assets/example.v2.serviceconfig rename to packages/service/tests/assets/example.v2.serviceconfig diff --git a/tests/assets/integration/session_management/1Smu2ChannelGroup2Pin1Site.pinmap b/packages/service/tests/assets/integration/session_management/1Smu2ChannelGroup2Pin1Site.pinmap similarity index 100% rename from tests/assets/integration/session_management/1Smu2ChannelGroup2Pin1Site.pinmap rename to packages/service/tests/assets/integration/session_management/1Smu2ChannelGroup2Pin1Site.pinmap diff --git a/tests/assets/integration/session_management/1Smu2Multiplexer2Pin1Site.pinmap b/packages/service/tests/assets/integration/session_management/1Smu2Multiplexer2Pin1Site.pinmap similarity index 100% rename from tests/assets/integration/session_management/1Smu2Multiplexer2Pin1Site.pinmap rename to packages/service/tests/assets/integration/session_management/1Smu2Multiplexer2Pin1Site.pinmap diff --git a/tests/assets/integration/session_management/2Digital2Group4Pin1Site.pinmap b/packages/service/tests/assets/integration/session_management/2Digital2Group4Pin1Site.pinmap similarity index 100% rename from tests/assets/integration/session_management/2Digital2Group4Pin1Site.pinmap rename to packages/service/tests/assets/integration/session_management/2Digital2Group4Pin1Site.pinmap diff --git a/tests/assets/integration/session_management/2Dmm2Pin1Site.pinmap b/packages/service/tests/assets/integration/session_management/2Dmm2Pin1Site.pinmap similarity index 100% rename from tests/assets/integration/session_management/2Dmm2Pin1Site.pinmap rename to packages/service/tests/assets/integration/session_management/2Dmm2Pin1Site.pinmap diff --git a/tests/assets/integration/session_management/2Fgen2Pin1Site.pinmap b/packages/service/tests/assets/integration/session_management/2Fgen2Pin1Site.pinmap similarity index 100% rename from tests/assets/integration/session_management/2Fgen2Pin1Site.pinmap rename to packages/service/tests/assets/integration/session_management/2Fgen2Pin1Site.pinmap diff --git a/tests/assets/integration/session_management/2Mio2Pin1Site.pinmap b/packages/service/tests/assets/integration/session_management/2Mio2Pin1Site.pinmap similarity index 100% rename from tests/assets/integration/session_management/2Mio2Pin1Site.pinmap rename to packages/service/tests/assets/integration/session_management/2Mio2Pin1Site.pinmap diff --git a/tests/assets/integration/session_management/2Scope2Pin2Group1Site.pinmap b/packages/service/tests/assets/integration/session_management/2Scope2Pin2Group1Site.pinmap similarity index 100% rename from tests/assets/integration/session_management/2Scope2Pin2Group1Site.pinmap rename to packages/service/tests/assets/integration/session_management/2Scope2Pin2Group1Site.pinmap diff --git a/tests/assets/integration/session_management/2Switch2Relay1Site.pinmap b/packages/service/tests/assets/integration/session_management/2Switch2Relay1Site.pinmap similarity index 100% rename from tests/assets/integration/session_management/2Switch2Relay1Site.pinmap rename to packages/service/tests/assets/integration/session_management/2Switch2Relay1Site.pinmap diff --git a/tests/assets/integration/session_management/PinMapA_3Instruments_3DutPins_2SystemPins_2Sites.pinmap b/packages/service/tests/assets/integration/session_management/PinMapA_3Instruments_3DutPins_2SystemPins_2Sites.pinmap similarity index 100% rename from tests/assets/integration/session_management/PinMapA_3Instruments_3DutPins_2SystemPins_2Sites.pinmap rename to packages/service/tests/assets/integration/session_management/PinMapA_3Instruments_3DutPins_2SystemPins_2Sites.pinmap diff --git a/tests/assets/integration/session_management/PinMapB_3Instruments_3DutPins_2SystemPins_2Sites_SharedPins.pinmap b/packages/service/tests/assets/integration/session_management/PinMapB_3Instruments_3DutPins_2SystemPins_2Sites_SharedPins.pinmap similarity index 100% rename from tests/assets/integration/session_management/PinMapB_3Instruments_3DutPins_2SystemPins_2Sites_SharedPins.pinmap rename to packages/service/tests/assets/integration/session_management/PinMapB_3Instruments_3DutPins_2SystemPins_2Sites_SharedPins.pinmap diff --git a/tests/assets/integration/session_management/PinMapC_MultipleInstrumentsPinsRelaysAndSites.pinmap b/packages/service/tests/assets/integration/session_management/PinMapC_MultipleInstrumentsPinsRelaysAndSites.pinmap similarity index 100% rename from tests/assets/integration/session_management/PinMapC_MultipleInstrumentsPinsRelaysAndSites.pinmap rename to packages/service/tests/assets/integration/session_management/PinMapC_MultipleInstrumentsPinsRelaysAndSites.pinmap diff --git a/tests/assets/integration/session_management/PinMapD_3Instruments_4DutPins_2Sites_2Multiplexers.pinmap b/packages/service/tests/assets/integration/session_management/PinMapD_3Instruments_4DutPins_2Sites_2Multiplexers.pinmap similarity index 100% rename from tests/assets/integration/session_management/PinMapD_3Instruments_4DutPins_2Sites_2Multiplexers.pinmap rename to packages/service/tests/assets/integration/session_management/PinMapD_3Instruments_4DutPins_2Sites_2Multiplexers.pinmap diff --git a/tests/conftest.py b/packages/service/tests/conftest.py similarity index 100% rename from tests/conftest.py rename to packages/service/tests/conftest.py diff --git a/tests/integration/__init__.py b/packages/service/tests/integration/__init__.py similarity index 100% rename from tests/integration/__init__.py rename to packages/service/tests/integration/__init__.py diff --git a/tests/integration/session_management/__init__.py b/packages/service/tests/integration/session_management/__init__.py similarity index 100% rename from tests/integration/session_management/__init__.py rename to packages/service/tests/integration/session_management/__init__.py diff --git a/tests/integration/session_management/conftest.py b/packages/service/tests/integration/session_management/conftest.py similarity index 100% rename from tests/integration/session_management/conftest.py rename to packages/service/tests/integration/session_management/conftest.py diff --git a/tests/integration/session_management/test_nidaqmx_reservation.py b/packages/service/tests/integration/session_management/test_nidaqmx_reservation.py similarity index 100% rename from tests/integration/session_management/test_nidaqmx_reservation.py rename to packages/service/tests/integration/session_management/test_nidaqmx_reservation.py diff --git a/tests/integration/session_management/test_nidcpower_reservation.py b/packages/service/tests/integration/session_management/test_nidcpower_reservation.py similarity index 100% rename from tests/integration/session_management/test_nidcpower_reservation.py rename to packages/service/tests/integration/session_management/test_nidcpower_reservation.py diff --git a/tests/integration/session_management/test_nidigital_reservation.py b/packages/service/tests/integration/session_management/test_nidigital_reservation.py similarity index 100% rename from tests/integration/session_management/test_nidigital_reservation.py rename to packages/service/tests/integration/session_management/test_nidigital_reservation.py diff --git a/tests/integration/session_management/test_nidmm_reservation.py b/packages/service/tests/integration/session_management/test_nidmm_reservation.py similarity index 100% rename from tests/integration/session_management/test_nidmm_reservation.py rename to packages/service/tests/integration/session_management/test_nidmm_reservation.py diff --git a/tests/integration/session_management/test_nifgen_reservation.py b/packages/service/tests/integration/session_management/test_nifgen_reservation.py similarity index 100% rename from tests/integration/session_management/test_nifgen_reservation.py rename to packages/service/tests/integration/session_management/test_nifgen_reservation.py diff --git a/tests/integration/session_management/test_niscope_reservation.py b/packages/service/tests/integration/session_management/test_niscope_reservation.py similarity index 100% rename from tests/integration/session_management/test_niscope_reservation.py rename to packages/service/tests/integration/session_management/test_niscope_reservation.py diff --git a/tests/integration/session_management/test_niswitch_multiplexer_reservation.py b/packages/service/tests/integration/session_management/test_niswitch_multiplexer_reservation.py similarity index 100% rename from tests/integration/session_management/test_niswitch_multiplexer_reservation.py rename to packages/service/tests/integration/session_management/test_niswitch_multiplexer_reservation.py diff --git a/tests/integration/session_management/test_niswitch_reservation.py b/packages/service/tests/integration/session_management/test_niswitch_reservation.py similarity index 100% rename from tests/integration/session_management/test_niswitch_reservation.py rename to packages/service/tests/integration/session_management/test_niswitch_reservation.py diff --git a/tests/integration/session_management/test_reservation.py b/packages/service/tests/integration/session_management/test_reservation.py similarity index 100% rename from tests/integration/session_management/test_reservation.py rename to packages/service/tests/integration/session_management/test_reservation.py diff --git a/tests/integration/test_service_manager.py b/packages/service/tests/integration/test_service_manager.py similarity index 100% rename from tests/integration/test_service_manager.py rename to packages/service/tests/integration/test_service_manager.py diff --git a/tests/unit/__init__.py b/packages/service/tests/unit/__init__.py similarity index 100% rename from tests/unit/__init__.py rename to packages/service/tests/unit/__init__.py diff --git a/tests/unit/_drivers/__init__.py b/packages/service/tests/unit/_drivers/__init__.py similarity index 100% rename from tests/unit/_drivers/__init__.py rename to packages/service/tests/unit/_drivers/__init__.py diff --git a/tests/unit/_drivers/_driver_utils.py b/packages/service/tests/unit/_drivers/_driver_utils.py similarity index 100% rename from tests/unit/_drivers/_driver_utils.py rename to packages/service/tests/unit/_drivers/_driver_utils.py diff --git a/tests/unit/_drivers/test_grpcdevice.py b/packages/service/tests/unit/_drivers/test_grpcdevice.py similarity index 100% rename from tests/unit/_drivers/test_grpcdevice.py rename to packages/service/tests/unit/_drivers/test_grpcdevice.py diff --git a/tests/unit/_drivers/test_nidaqmx.py b/packages/service/tests/unit/_drivers/test_nidaqmx.py similarity index 100% rename from tests/unit/_drivers/test_nidaqmx.py rename to packages/service/tests/unit/_drivers/test_nidaqmx.py diff --git a/tests/unit/_drivers/test_nidcpower.py b/packages/service/tests/unit/_drivers/test_nidcpower.py similarity index 100% rename from tests/unit/_drivers/test_nidcpower.py rename to packages/service/tests/unit/_drivers/test_nidcpower.py diff --git a/tests/unit/_drivers/test_nidigital.py b/packages/service/tests/unit/_drivers/test_nidigital.py similarity index 100% rename from tests/unit/_drivers/test_nidigital.py rename to packages/service/tests/unit/_drivers/test_nidigital.py diff --git a/tests/unit/_drivers/test_nidmm.py b/packages/service/tests/unit/_drivers/test_nidmm.py similarity index 100% rename from tests/unit/_drivers/test_nidmm.py rename to packages/service/tests/unit/_drivers/test_nidmm.py diff --git a/tests/unit/_drivers/test_nifgen.py b/packages/service/tests/unit/_drivers/test_nifgen.py similarity index 100% rename from tests/unit/_drivers/test_nifgen.py rename to packages/service/tests/unit/_drivers/test_nifgen.py diff --git a/tests/unit/_drivers/test_niscope.py b/packages/service/tests/unit/_drivers/test_niscope.py similarity index 100% rename from tests/unit/_drivers/test_niscope.py rename to packages/service/tests/unit/_drivers/test_niscope.py diff --git a/tests/unit/_drivers/test_niswitch.py b/packages/service/tests/unit/_drivers/test_niswitch.py similarity index 100% rename from tests/unit/_drivers/test_niswitch.py rename to packages/service/tests/unit/_drivers/test_niswitch.py diff --git a/tests/unit/_reservation_utils.py b/packages/service/tests/unit/_reservation_utils.py similarity index 100% rename from tests/unit/_reservation_utils.py rename to packages/service/tests/unit/_reservation_utils.py diff --git a/tests/unit/conftest.py b/packages/service/tests/unit/conftest.py similarity index 100% rename from tests/unit/conftest.py rename to packages/service/tests/unit/conftest.py diff --git a/tests/unit/measurement/__init__.py b/packages/service/tests/unit/measurement/__init__.py similarity index 100% rename from tests/unit/measurement/__init__.py rename to packages/service/tests/unit/measurement/__init__.py diff --git a/tests/unit/measurement/service/__init__.py b/packages/service/tests/unit/measurement/service/__init__.py similarity index 100% rename from tests/unit/measurement/service/__init__.py rename to packages/service/tests/unit/measurement/service/__init__.py diff --git a/tests/unit/measurement/service/test_measurement_context.py b/packages/service/tests/unit/measurement/service/test_measurement_context.py similarity index 100% rename from tests/unit/measurement/service/test_measurement_context.py rename to packages/service/tests/unit/measurement/service/test_measurement_context.py diff --git a/tests/unit/test_configuration.py b/packages/service/tests/unit/test_configuration.py similarity index 100% rename from tests/unit/test_configuration.py rename to packages/service/tests/unit/test_configuration.py diff --git a/tests/unit/test_discovery_client.py b/packages/service/tests/unit/test_discovery_client.py similarity index 100% rename from tests/unit/test_discovery_client.py rename to packages/service/tests/unit/test_discovery_client.py diff --git a/tests/unit/test_dotenvpath.py b/packages/service/tests/unit/test_dotenvpath.py similarity index 100% rename from tests/unit/test_dotenvpath.py rename to packages/service/tests/unit/test_dotenvpath.py diff --git a/tests/unit/test_drivers.py b/packages/service/tests/unit/test_drivers.py similarity index 100% rename from tests/unit/test_drivers.py rename to packages/service/tests/unit/test_drivers.py diff --git a/tests/unit/test_featuretoggles.py b/packages/service/tests/unit/test_featuretoggles.py similarity index 100% rename from tests/unit/test_featuretoggles.py rename to packages/service/tests/unit/test_featuretoggles.py diff --git a/tests/unit/test_metadata.py b/packages/service/tests/unit/test_metadata.py similarity index 100% rename from tests/unit/test_metadata.py rename to packages/service/tests/unit/test_metadata.py diff --git a/tests/unit/test_reservation.py b/packages/service/tests/unit/test_reservation.py similarity index 100% rename from tests/unit/test_reservation.py rename to packages/service/tests/unit/test_reservation.py diff --git a/tests/unit/test_reservation_multiplexer.py b/packages/service/tests/unit/test_reservation_multiplexer.py similarity index 100% rename from tests/unit/test_reservation_multiplexer.py rename to packages/service/tests/unit/test_reservation_multiplexer.py diff --git a/tests/unit/test_serialization_strategy.py b/packages/service/tests/unit/test_serialization_strategy.py similarity index 100% rename from tests/unit/test_serialization_strategy.py rename to packages/service/tests/unit/test_serialization_strategy.py diff --git a/tests/unit/test_serializer.py b/packages/service/tests/unit/test_serializer.py similarity index 100% rename from tests/unit/test_serializer.py rename to packages/service/tests/unit/test_serializer.py diff --git a/tests/unit/test_service.py b/packages/service/tests/unit/test_service.py similarity index 100% rename from tests/unit/test_service.py rename to packages/service/tests/unit/test_service.py diff --git a/tests/unit/test_session_management.py b/packages/service/tests/unit/test_session_management.py similarity index 100% rename from tests/unit/test_session_management.py rename to packages/service/tests/unit/test_session_management.py diff --git a/tests/utilities/__init__.py b/packages/service/tests/utilities/__init__.py similarity index 100% rename from tests/utilities/__init__.py rename to packages/service/tests/utilities/__init__.py diff --git a/tests/utilities/connection_subset.py b/packages/service/tests/utilities/connection_subset.py similarity index 100% rename from tests/utilities/connection_subset.py rename to packages/service/tests/utilities/connection_subset.py diff --git a/tests/utilities/discovery_service_process.py b/packages/service/tests/utilities/discovery_service_process.py similarity index 100% rename from tests/utilities/discovery_service_process.py rename to packages/service/tests/utilities/discovery_service_process.py diff --git a/tests/utilities/fake_discovery_service.py b/packages/service/tests/utilities/fake_discovery_service.py similarity index 100% rename from tests/utilities/fake_discovery_service.py rename to packages/service/tests/utilities/fake_discovery_service.py diff --git a/tests/utilities/fake_driver.py b/packages/service/tests/utilities/fake_driver.py similarity index 100% rename from tests/utilities/fake_driver.py rename to packages/service/tests/utilities/fake_driver.py diff --git a/tests/utilities/fake_multiplexer_driver.py b/packages/service/tests/utilities/fake_multiplexer_driver.py similarity index 100% rename from tests/utilities/fake_multiplexer_driver.py rename to packages/service/tests/utilities/fake_multiplexer_driver.py diff --git a/tests/utilities/fake_rpc_error.py b/packages/service/tests/utilities/fake_rpc_error.py similarity index 100% rename from tests/utilities/fake_rpc_error.py rename to packages/service/tests/utilities/fake_rpc_error.py diff --git a/tests/utilities/measurements/__init__.py b/packages/service/tests/utilities/measurements/__init__.py similarity index 100% rename from tests/utilities/measurements/__init__.py rename to packages/service/tests/utilities/measurements/__init__.py diff --git a/tests/utilities/measurements/loopback_measurement/LoopbackMeasurement.serviceconfig b/packages/service/tests/utilities/measurements/loopback_measurement/LoopbackMeasurement.serviceconfig similarity index 100% rename from tests/utilities/measurements/loopback_measurement/LoopbackMeasurement.serviceconfig rename to packages/service/tests/utilities/measurements/loopback_measurement/LoopbackMeasurement.serviceconfig diff --git a/tests/utilities/measurements/loopback_measurement/__init__.py b/packages/service/tests/utilities/measurements/loopback_measurement/__init__.py similarity index 100% rename from tests/utilities/measurements/loopback_measurement/__init__.py rename to packages/service/tests/utilities/measurements/loopback_measurement/__init__.py diff --git a/tests/utilities/measurements/nidaqmx_measurement/NIDAQmxMeasurement.serviceconfig b/packages/service/tests/utilities/measurements/nidaqmx_measurement/NIDAQmxMeasurement.serviceconfig similarity index 100% rename from tests/utilities/measurements/nidaqmx_measurement/NIDAQmxMeasurement.serviceconfig rename to packages/service/tests/utilities/measurements/nidaqmx_measurement/NIDAQmxMeasurement.serviceconfig diff --git a/tests/utilities/measurements/nidaqmx_measurement/__init__.py b/packages/service/tests/utilities/measurements/nidaqmx_measurement/__init__.py similarity index 100% rename from tests/utilities/measurements/nidaqmx_measurement/__init__.py rename to packages/service/tests/utilities/measurements/nidaqmx_measurement/__init__.py diff --git a/tests/utilities/measurements/nidcpower_measurement/NIDCPowerMeasurement.serviceconfig b/packages/service/tests/utilities/measurements/nidcpower_measurement/NIDCPowerMeasurement.serviceconfig similarity index 100% rename from tests/utilities/measurements/nidcpower_measurement/NIDCPowerMeasurement.serviceconfig rename to packages/service/tests/utilities/measurements/nidcpower_measurement/NIDCPowerMeasurement.serviceconfig diff --git a/tests/utilities/measurements/nidcpower_measurement/__init__.py b/packages/service/tests/utilities/measurements/nidcpower_measurement/__init__.py similarity index 100% rename from tests/utilities/measurements/nidcpower_measurement/__init__.py rename to packages/service/tests/utilities/measurements/nidcpower_measurement/__init__.py diff --git a/tests/utilities/measurements/nidigital_measurement/NIDigitalMeasurement.serviceconfig b/packages/service/tests/utilities/measurements/nidigital_measurement/NIDigitalMeasurement.serviceconfig similarity index 100% rename from tests/utilities/measurements/nidigital_measurement/NIDigitalMeasurement.serviceconfig rename to packages/service/tests/utilities/measurements/nidigital_measurement/NIDigitalMeasurement.serviceconfig diff --git a/tests/utilities/measurements/nidigital_measurement/Pattern.digipat b/packages/service/tests/utilities/measurements/nidigital_measurement/Pattern.digipat similarity index 100% rename from tests/utilities/measurements/nidigital_measurement/Pattern.digipat rename to packages/service/tests/utilities/measurements/nidigital_measurement/Pattern.digipat diff --git a/tests/utilities/measurements/nidigital_measurement/PinLevels.digilevels b/packages/service/tests/utilities/measurements/nidigital_measurement/PinLevels.digilevels similarity index 100% rename from tests/utilities/measurements/nidigital_measurement/PinLevels.digilevels rename to packages/service/tests/utilities/measurements/nidigital_measurement/PinLevels.digilevels diff --git a/tests/utilities/measurements/nidigital_measurement/Specifications.specs b/packages/service/tests/utilities/measurements/nidigital_measurement/Specifications.specs similarity index 100% rename from tests/utilities/measurements/nidigital_measurement/Specifications.specs rename to packages/service/tests/utilities/measurements/nidigital_measurement/Specifications.specs diff --git a/tests/utilities/measurements/nidigital_measurement/Timing.digitiming b/packages/service/tests/utilities/measurements/nidigital_measurement/Timing.digitiming similarity index 100% rename from tests/utilities/measurements/nidigital_measurement/Timing.digitiming rename to packages/service/tests/utilities/measurements/nidigital_measurement/Timing.digitiming diff --git a/tests/utilities/measurements/nidigital_measurement/__init__.py b/packages/service/tests/utilities/measurements/nidigital_measurement/__init__.py similarity index 100% rename from tests/utilities/measurements/nidigital_measurement/__init__.py rename to packages/service/tests/utilities/measurements/nidigital_measurement/__init__.py diff --git a/tests/utilities/measurements/nidmm_measurement/NIDmmMeasurement.serviceconfig b/packages/service/tests/utilities/measurements/nidmm_measurement/NIDmmMeasurement.serviceconfig similarity index 100% rename from tests/utilities/measurements/nidmm_measurement/NIDmmMeasurement.serviceconfig rename to packages/service/tests/utilities/measurements/nidmm_measurement/NIDmmMeasurement.serviceconfig diff --git a/tests/utilities/measurements/nidmm_measurement/__init__.py b/packages/service/tests/utilities/measurements/nidmm_measurement/__init__.py similarity index 100% rename from tests/utilities/measurements/nidmm_measurement/__init__.py rename to packages/service/tests/utilities/measurements/nidmm_measurement/__init__.py diff --git a/tests/utilities/measurements/nifgen_measurement/NIFgenMeasurement.serviceconfig b/packages/service/tests/utilities/measurements/nifgen_measurement/NIFgenMeasurement.serviceconfig similarity index 100% rename from tests/utilities/measurements/nifgen_measurement/NIFgenMeasurement.serviceconfig rename to packages/service/tests/utilities/measurements/nifgen_measurement/NIFgenMeasurement.serviceconfig diff --git a/tests/utilities/measurements/nifgen_measurement/__init__.py b/packages/service/tests/utilities/measurements/nifgen_measurement/__init__.py similarity index 100% rename from tests/utilities/measurements/nifgen_measurement/__init__.py rename to packages/service/tests/utilities/measurements/nifgen_measurement/__init__.py diff --git a/tests/utilities/measurements/niscope_measurement/NIScopeMeasurement.serviceconfig b/packages/service/tests/utilities/measurements/niscope_measurement/NIScopeMeasurement.serviceconfig similarity index 100% rename from tests/utilities/measurements/niscope_measurement/NIScopeMeasurement.serviceconfig rename to packages/service/tests/utilities/measurements/niscope_measurement/NIScopeMeasurement.serviceconfig diff --git a/tests/utilities/measurements/niscope_measurement/__init__.py b/packages/service/tests/utilities/measurements/niscope_measurement/__init__.py similarity index 100% rename from tests/utilities/measurements/niscope_measurement/__init__.py rename to packages/service/tests/utilities/measurements/niscope_measurement/__init__.py diff --git a/tests/utilities/measurements/niswitch_measurement/NISwitchMeasurement.serviceconfig b/packages/service/tests/utilities/measurements/niswitch_measurement/NISwitchMeasurement.serviceconfig similarity index 100% rename from tests/utilities/measurements/niswitch_measurement/NISwitchMeasurement.serviceconfig rename to packages/service/tests/utilities/measurements/niswitch_measurement/NISwitchMeasurement.serviceconfig diff --git a/tests/utilities/measurements/niswitch_measurement/__init__.py b/packages/service/tests/utilities/measurements/niswitch_measurement/__init__.py similarity index 100% rename from tests/utilities/measurements/niswitch_measurement/__init__.py rename to packages/service/tests/utilities/measurements/niswitch_measurement/__init__.py diff --git a/tests/utilities/measurements/niswitch_multiplexer_measurement/NISwitchMultiplexerMeasurement.serviceconfig b/packages/service/tests/utilities/measurements/niswitch_multiplexer_measurement/NISwitchMultiplexerMeasurement.serviceconfig similarity index 100% rename from tests/utilities/measurements/niswitch_multiplexer_measurement/NISwitchMultiplexerMeasurement.serviceconfig rename to packages/service/tests/utilities/measurements/niswitch_multiplexer_measurement/NISwitchMultiplexerMeasurement.serviceconfig diff --git a/tests/utilities/measurements/niswitch_multiplexer_measurement/__init__.py b/packages/service/tests/utilities/measurements/niswitch_multiplexer_measurement/__init__.py similarity index 100% rename from tests/utilities/measurements/niswitch_multiplexer_measurement/__init__.py rename to packages/service/tests/utilities/measurements/niswitch_multiplexer_measurement/__init__.py diff --git a/tests/utilities/measurements/pin_aware_measurement/PinAwareMeasurement.serviceconfig b/packages/service/tests/utilities/measurements/pin_aware_measurement/PinAwareMeasurement.serviceconfig similarity index 100% rename from tests/utilities/measurements/pin_aware_measurement/PinAwareMeasurement.serviceconfig rename to packages/service/tests/utilities/measurements/pin_aware_measurement/PinAwareMeasurement.serviceconfig diff --git a/tests/utilities/measurements/pin_aware_measurement/__init__.py b/packages/service/tests/utilities/measurements/pin_aware_measurement/__init__.py similarity index 100% rename from tests/utilities/measurements/pin_aware_measurement/__init__.py rename to packages/service/tests/utilities/measurements/pin_aware_measurement/__init__.py diff --git a/tests/utilities/measurements/streaming_data_measurement/StreamingDataMeasurement.serviceconfig b/packages/service/tests/utilities/measurements/streaming_data_measurement/StreamingDataMeasurement.serviceconfig similarity index 100% rename from tests/utilities/measurements/streaming_data_measurement/StreamingDataMeasurement.serviceconfig rename to packages/service/tests/utilities/measurements/streaming_data_measurement/StreamingDataMeasurement.serviceconfig diff --git a/tests/utilities/measurements/streaming_data_measurement/__init__.py b/packages/service/tests/utilities/measurements/streaming_data_measurement/__init__.py similarity index 100% rename from tests/utilities/measurements/streaming_data_measurement/__init__.py rename to packages/service/tests/utilities/measurements/streaming_data_measurement/__init__.py diff --git a/tests/utilities/measurements/unknown_interface_measurement/__init__.py b/packages/service/tests/utilities/measurements/unknown_interface_measurement/__init__.py similarity index 100% rename from tests/utilities/measurements/unknown_interface_measurement/__init__.py rename to packages/service/tests/utilities/measurements/unknown_interface_measurement/__init__.py diff --git a/tests/utilities/measurements/unknown_interface_measurement/unknown_interface.serviceconfig b/packages/service/tests/utilities/measurements/unknown_interface_measurement/unknown_interface.serviceconfig similarity index 100% rename from tests/utilities/measurements/unknown_interface_measurement/unknown_interface.serviceconfig rename to packages/service/tests/utilities/measurements/unknown_interface_measurement/unknown_interface.serviceconfig diff --git a/tests/utilities/measurements/v1_only_measurement/__init__.py b/packages/service/tests/utilities/measurements/v1_only_measurement/__init__.py similarity index 100% rename from tests/utilities/measurements/v1_only_measurement/__init__.py rename to packages/service/tests/utilities/measurements/v1_only_measurement/__init__.py diff --git a/tests/utilities/measurements/v1_only_measurement/v1_only.serviceconfig b/packages/service/tests/utilities/measurements/v1_only_measurement/v1_only.serviceconfig similarity index 100% rename from tests/utilities/measurements/v1_only_measurement/v1_only.serviceconfig rename to packages/service/tests/utilities/measurements/v1_only_measurement/v1_only.serviceconfig diff --git a/tests/utilities/measurements/v2_only_measurement/__init__.py b/packages/service/tests/utilities/measurements/v2_only_measurement/__init__.py similarity index 100% rename from tests/utilities/measurements/v2_only_measurement/__init__.py rename to packages/service/tests/utilities/measurements/v2_only_measurement/__init__.py diff --git a/tests/utilities/measurements/v2_only_measurement/v2_only.serviceconfig b/packages/service/tests/utilities/measurements/v2_only_measurement/v2_only.serviceconfig similarity index 100% rename from tests/utilities/measurements/v2_only_measurement/v2_only.serviceconfig rename to packages/service/tests/utilities/measurements/v2_only_measurement/v2_only.serviceconfig diff --git a/tests/utilities/measurements/yield_vs_return_measurement/UIProgressUpdates.serviceconfig b/packages/service/tests/utilities/measurements/yield_vs_return_measurement/UIProgressUpdates.serviceconfig similarity index 100% rename from tests/utilities/measurements/yield_vs_return_measurement/UIProgressUpdates.serviceconfig rename to packages/service/tests/utilities/measurements/yield_vs_return_measurement/UIProgressUpdates.serviceconfig diff --git a/tests/utilities/measurements/yield_vs_return_measurement/__init__.py b/packages/service/tests/utilities/measurements/yield_vs_return_measurement/__init__.py similarity index 100% rename from tests/utilities/measurements/yield_vs_return_measurement/__init__.py rename to packages/service/tests/utilities/measurements/yield_vs_return_measurement/__init__.py diff --git a/tests/utilities/pin_map_client.py b/packages/service/tests/utilities/pin_map_client.py similarity index 100% rename from tests/utilities/pin_map_client.py rename to packages/service/tests/utilities/pin_map_client.py diff --git a/tests/utilities/stubs/__init__.py b/packages/service/tests/utilities/stubs/__init__.py similarity index 100% rename from tests/utilities/stubs/__init__.py rename to packages/service/tests/utilities/stubs/__init__.py diff --git a/tests/utilities/stubs/loopback/__init__.py b/packages/service/tests/utilities/stubs/loopback/__init__.py similarity index 100% rename from tests/utilities/stubs/loopback/__init__.py rename to packages/service/tests/utilities/stubs/loopback/__init__.py diff --git a/tests/utilities/stubs/loopback/types.proto b/packages/service/tests/utilities/stubs/loopback/types.proto similarity index 100% rename from tests/utilities/stubs/loopback/types.proto rename to packages/service/tests/utilities/stubs/loopback/types.proto diff --git a/tests/utilities/stubs/loopback/types_pb2.py b/packages/service/tests/utilities/stubs/loopback/types_pb2.py similarity index 100% rename from tests/utilities/stubs/loopback/types_pb2.py rename to packages/service/tests/utilities/stubs/loopback/types_pb2.py diff --git a/tests/utilities/stubs/loopback/types_pb2.pyi b/packages/service/tests/utilities/stubs/loopback/types_pb2.pyi similarity index 100% rename from tests/utilities/stubs/loopback/types_pb2.pyi rename to packages/service/tests/utilities/stubs/loopback/types_pb2.pyi diff --git a/tests/utilities/stubs/loopback/types_pb2_grpc.py b/packages/service/tests/utilities/stubs/loopback/types_pb2_grpc.py similarity index 100% rename from tests/utilities/stubs/loopback/types_pb2_grpc.py rename to packages/service/tests/utilities/stubs/loopback/types_pb2_grpc.py diff --git a/tests/utilities/stubs/loopback/types_pb2_grpc.pyi b/packages/service/tests/utilities/stubs/loopback/types_pb2_grpc.pyi similarity index 100% rename from tests/utilities/stubs/loopback/types_pb2_grpc.pyi rename to packages/service/tests/utilities/stubs/loopback/types_pb2_grpc.pyi diff --git a/tests/utilities/stubs/nidaqmx/__init__.py b/packages/service/tests/utilities/stubs/nidaqmx/__init__.py similarity index 100% rename from tests/utilities/stubs/nidaqmx/__init__.py rename to packages/service/tests/utilities/stubs/nidaqmx/__init__.py diff --git a/tests/utilities/stubs/nidaqmx/types.proto b/packages/service/tests/utilities/stubs/nidaqmx/types.proto similarity index 100% rename from tests/utilities/stubs/nidaqmx/types.proto rename to packages/service/tests/utilities/stubs/nidaqmx/types.proto diff --git a/tests/utilities/stubs/nidaqmx/types_pb2.py b/packages/service/tests/utilities/stubs/nidaqmx/types_pb2.py similarity index 100% rename from tests/utilities/stubs/nidaqmx/types_pb2.py rename to packages/service/tests/utilities/stubs/nidaqmx/types_pb2.py diff --git a/tests/utilities/stubs/nidaqmx/types_pb2.pyi b/packages/service/tests/utilities/stubs/nidaqmx/types_pb2.pyi similarity index 100% rename from tests/utilities/stubs/nidaqmx/types_pb2.pyi rename to packages/service/tests/utilities/stubs/nidaqmx/types_pb2.pyi diff --git a/tests/utilities/stubs/nidaqmx/types_pb2_grpc.py b/packages/service/tests/utilities/stubs/nidaqmx/types_pb2_grpc.py similarity index 100% rename from tests/utilities/stubs/nidaqmx/types_pb2_grpc.py rename to packages/service/tests/utilities/stubs/nidaqmx/types_pb2_grpc.py diff --git a/tests/utilities/stubs/nidaqmx/types_pb2_grpc.pyi b/packages/service/tests/utilities/stubs/nidaqmx/types_pb2_grpc.pyi similarity index 100% rename from tests/utilities/stubs/nidaqmx/types_pb2_grpc.pyi rename to packages/service/tests/utilities/stubs/nidaqmx/types_pb2_grpc.pyi diff --git a/tests/utilities/stubs/nidcpower/__init__.py b/packages/service/tests/utilities/stubs/nidcpower/__init__.py similarity index 100% rename from tests/utilities/stubs/nidcpower/__init__.py rename to packages/service/tests/utilities/stubs/nidcpower/__init__.py diff --git a/tests/utilities/stubs/nidcpower/types.proto b/packages/service/tests/utilities/stubs/nidcpower/types.proto similarity index 100% rename from tests/utilities/stubs/nidcpower/types.proto rename to packages/service/tests/utilities/stubs/nidcpower/types.proto diff --git a/tests/utilities/stubs/nidcpower/types_pb2.py b/packages/service/tests/utilities/stubs/nidcpower/types_pb2.py similarity index 100% rename from tests/utilities/stubs/nidcpower/types_pb2.py rename to packages/service/tests/utilities/stubs/nidcpower/types_pb2.py diff --git a/tests/utilities/stubs/nidcpower/types_pb2.pyi b/packages/service/tests/utilities/stubs/nidcpower/types_pb2.pyi similarity index 100% rename from tests/utilities/stubs/nidcpower/types_pb2.pyi rename to packages/service/tests/utilities/stubs/nidcpower/types_pb2.pyi diff --git a/tests/utilities/stubs/nidcpower/types_pb2_grpc.py b/packages/service/tests/utilities/stubs/nidcpower/types_pb2_grpc.py similarity index 100% rename from tests/utilities/stubs/nidcpower/types_pb2_grpc.py rename to packages/service/tests/utilities/stubs/nidcpower/types_pb2_grpc.py diff --git a/tests/utilities/stubs/nidcpower/types_pb2_grpc.pyi b/packages/service/tests/utilities/stubs/nidcpower/types_pb2_grpc.pyi similarity index 100% rename from tests/utilities/stubs/nidcpower/types_pb2_grpc.pyi rename to packages/service/tests/utilities/stubs/nidcpower/types_pb2_grpc.pyi diff --git a/tests/utilities/stubs/nidigital/__init__.py b/packages/service/tests/utilities/stubs/nidigital/__init__.py similarity index 100% rename from tests/utilities/stubs/nidigital/__init__.py rename to packages/service/tests/utilities/stubs/nidigital/__init__.py diff --git a/tests/utilities/stubs/nidigital/types.proto b/packages/service/tests/utilities/stubs/nidigital/types.proto similarity index 100% rename from tests/utilities/stubs/nidigital/types.proto rename to packages/service/tests/utilities/stubs/nidigital/types.proto diff --git a/tests/utilities/stubs/nidigital/types_pb2.py b/packages/service/tests/utilities/stubs/nidigital/types_pb2.py similarity index 100% rename from tests/utilities/stubs/nidigital/types_pb2.py rename to packages/service/tests/utilities/stubs/nidigital/types_pb2.py diff --git a/tests/utilities/stubs/nidigital/types_pb2.pyi b/packages/service/tests/utilities/stubs/nidigital/types_pb2.pyi similarity index 100% rename from tests/utilities/stubs/nidigital/types_pb2.pyi rename to packages/service/tests/utilities/stubs/nidigital/types_pb2.pyi diff --git a/tests/utilities/stubs/nidigital/types_pb2_grpc.py b/packages/service/tests/utilities/stubs/nidigital/types_pb2_grpc.py similarity index 100% rename from tests/utilities/stubs/nidigital/types_pb2_grpc.py rename to packages/service/tests/utilities/stubs/nidigital/types_pb2_grpc.py diff --git a/tests/utilities/stubs/nidigital/types_pb2_grpc.pyi b/packages/service/tests/utilities/stubs/nidigital/types_pb2_grpc.pyi similarity index 100% rename from tests/utilities/stubs/nidigital/types_pb2_grpc.pyi rename to packages/service/tests/utilities/stubs/nidigital/types_pb2_grpc.pyi diff --git a/tests/utilities/stubs/nidmm/__init__.py b/packages/service/tests/utilities/stubs/nidmm/__init__.py similarity index 100% rename from tests/utilities/stubs/nidmm/__init__.py rename to packages/service/tests/utilities/stubs/nidmm/__init__.py diff --git a/tests/utilities/stubs/nidmm/types.proto b/packages/service/tests/utilities/stubs/nidmm/types.proto similarity index 100% rename from tests/utilities/stubs/nidmm/types.proto rename to packages/service/tests/utilities/stubs/nidmm/types.proto diff --git a/tests/utilities/stubs/nidmm/types_pb2.py b/packages/service/tests/utilities/stubs/nidmm/types_pb2.py similarity index 100% rename from tests/utilities/stubs/nidmm/types_pb2.py rename to packages/service/tests/utilities/stubs/nidmm/types_pb2.py diff --git a/tests/utilities/stubs/nidmm/types_pb2.pyi b/packages/service/tests/utilities/stubs/nidmm/types_pb2.pyi similarity index 100% rename from tests/utilities/stubs/nidmm/types_pb2.pyi rename to packages/service/tests/utilities/stubs/nidmm/types_pb2.pyi diff --git a/tests/utilities/stubs/nidmm/types_pb2_grpc.py b/packages/service/tests/utilities/stubs/nidmm/types_pb2_grpc.py similarity index 100% rename from tests/utilities/stubs/nidmm/types_pb2_grpc.py rename to packages/service/tests/utilities/stubs/nidmm/types_pb2_grpc.py diff --git a/tests/utilities/stubs/nidmm/types_pb2_grpc.pyi b/packages/service/tests/utilities/stubs/nidmm/types_pb2_grpc.pyi similarity index 100% rename from tests/utilities/stubs/nidmm/types_pb2_grpc.pyi rename to packages/service/tests/utilities/stubs/nidmm/types_pb2_grpc.pyi diff --git a/tests/utilities/stubs/nifgen/__init__.py b/packages/service/tests/utilities/stubs/nifgen/__init__.py similarity index 100% rename from tests/utilities/stubs/nifgen/__init__.py rename to packages/service/tests/utilities/stubs/nifgen/__init__.py diff --git a/tests/utilities/stubs/nifgen/types.proto b/packages/service/tests/utilities/stubs/nifgen/types.proto similarity index 100% rename from tests/utilities/stubs/nifgen/types.proto rename to packages/service/tests/utilities/stubs/nifgen/types.proto diff --git a/tests/utilities/stubs/nifgen/types_pb2.py b/packages/service/tests/utilities/stubs/nifgen/types_pb2.py similarity index 100% rename from tests/utilities/stubs/nifgen/types_pb2.py rename to packages/service/tests/utilities/stubs/nifgen/types_pb2.py diff --git a/tests/utilities/stubs/nifgen/types_pb2.pyi b/packages/service/tests/utilities/stubs/nifgen/types_pb2.pyi similarity index 100% rename from tests/utilities/stubs/nifgen/types_pb2.pyi rename to packages/service/tests/utilities/stubs/nifgen/types_pb2.pyi diff --git a/tests/utilities/stubs/nifgen/types_pb2_grpc.py b/packages/service/tests/utilities/stubs/nifgen/types_pb2_grpc.py similarity index 100% rename from tests/utilities/stubs/nifgen/types_pb2_grpc.py rename to packages/service/tests/utilities/stubs/nifgen/types_pb2_grpc.py diff --git a/tests/utilities/stubs/nifgen/types_pb2_grpc.pyi b/packages/service/tests/utilities/stubs/nifgen/types_pb2_grpc.pyi similarity index 100% rename from tests/utilities/stubs/nifgen/types_pb2_grpc.pyi rename to packages/service/tests/utilities/stubs/nifgen/types_pb2_grpc.pyi diff --git a/tests/utilities/stubs/niscope/__init__.py b/packages/service/tests/utilities/stubs/niscope/__init__.py similarity index 100% rename from tests/utilities/stubs/niscope/__init__.py rename to packages/service/tests/utilities/stubs/niscope/__init__.py diff --git a/tests/utilities/stubs/niscope/types.proto b/packages/service/tests/utilities/stubs/niscope/types.proto similarity index 100% rename from tests/utilities/stubs/niscope/types.proto rename to packages/service/tests/utilities/stubs/niscope/types.proto diff --git a/tests/utilities/stubs/niscope/types_pb2.py b/packages/service/tests/utilities/stubs/niscope/types_pb2.py similarity index 100% rename from tests/utilities/stubs/niscope/types_pb2.py rename to packages/service/tests/utilities/stubs/niscope/types_pb2.py diff --git a/tests/utilities/stubs/niscope/types_pb2.pyi b/packages/service/tests/utilities/stubs/niscope/types_pb2.pyi similarity index 100% rename from tests/utilities/stubs/niscope/types_pb2.pyi rename to packages/service/tests/utilities/stubs/niscope/types_pb2.pyi diff --git a/tests/utilities/stubs/niscope/types_pb2_grpc.py b/packages/service/tests/utilities/stubs/niscope/types_pb2_grpc.py similarity index 100% rename from tests/utilities/stubs/niscope/types_pb2_grpc.py rename to packages/service/tests/utilities/stubs/niscope/types_pb2_grpc.py diff --git a/tests/utilities/stubs/niscope/types_pb2_grpc.pyi b/packages/service/tests/utilities/stubs/niscope/types_pb2_grpc.pyi similarity index 100% rename from tests/utilities/stubs/niscope/types_pb2_grpc.pyi rename to packages/service/tests/utilities/stubs/niscope/types_pb2_grpc.pyi diff --git a/tests/utilities/stubs/niswitch/__init__.py b/packages/service/tests/utilities/stubs/niswitch/__init__.py similarity index 100% rename from tests/utilities/stubs/niswitch/__init__.py rename to packages/service/tests/utilities/stubs/niswitch/__init__.py diff --git a/tests/utilities/stubs/niswitch/types.proto b/packages/service/tests/utilities/stubs/niswitch/types.proto similarity index 100% rename from tests/utilities/stubs/niswitch/types.proto rename to packages/service/tests/utilities/stubs/niswitch/types.proto diff --git a/tests/utilities/stubs/niswitch/types_pb2.py b/packages/service/tests/utilities/stubs/niswitch/types_pb2.py similarity index 100% rename from tests/utilities/stubs/niswitch/types_pb2.py rename to packages/service/tests/utilities/stubs/niswitch/types_pb2.py diff --git a/tests/utilities/stubs/niswitch/types_pb2.pyi b/packages/service/tests/utilities/stubs/niswitch/types_pb2.pyi similarity index 100% rename from tests/utilities/stubs/niswitch/types_pb2.pyi rename to packages/service/tests/utilities/stubs/niswitch/types_pb2.pyi diff --git a/tests/utilities/stubs/niswitch/types_pb2_grpc.py b/packages/service/tests/utilities/stubs/niswitch/types_pb2_grpc.py similarity index 100% rename from tests/utilities/stubs/niswitch/types_pb2_grpc.py rename to packages/service/tests/utilities/stubs/niswitch/types_pb2_grpc.py diff --git a/tests/utilities/stubs/niswitch/types_pb2_grpc.pyi b/packages/service/tests/utilities/stubs/niswitch/types_pb2_grpc.pyi similarity index 100% rename from tests/utilities/stubs/niswitch/types_pb2_grpc.pyi rename to packages/service/tests/utilities/stubs/niswitch/types_pb2_grpc.pyi diff --git a/tests/utilities/stubs/niswitchmultiplexer/types.proto b/packages/service/tests/utilities/stubs/niswitchmultiplexer/types.proto similarity index 100% rename from tests/utilities/stubs/niswitchmultiplexer/types.proto rename to packages/service/tests/utilities/stubs/niswitchmultiplexer/types.proto diff --git a/tests/utilities/stubs/niswitchmultiplexer/types_pb2.py b/packages/service/tests/utilities/stubs/niswitchmultiplexer/types_pb2.py similarity index 100% rename from tests/utilities/stubs/niswitchmultiplexer/types_pb2.py rename to packages/service/tests/utilities/stubs/niswitchmultiplexer/types_pb2.py diff --git a/tests/utilities/stubs/niswitchmultiplexer/types_pb2.pyi b/packages/service/tests/utilities/stubs/niswitchmultiplexer/types_pb2.pyi similarity index 100% rename from tests/utilities/stubs/niswitchmultiplexer/types_pb2.pyi rename to packages/service/tests/utilities/stubs/niswitchmultiplexer/types_pb2.pyi diff --git a/tests/utilities/stubs/niswitchmultiplexer/types_pb2_grpc.py b/packages/service/tests/utilities/stubs/niswitchmultiplexer/types_pb2_grpc.py similarity index 100% rename from tests/utilities/stubs/niswitchmultiplexer/types_pb2_grpc.py rename to packages/service/tests/utilities/stubs/niswitchmultiplexer/types_pb2_grpc.py diff --git a/tests/utilities/stubs/niswitchmultiplexer/types_pb2_grpc.pyi b/packages/service/tests/utilities/stubs/niswitchmultiplexer/types_pb2_grpc.pyi similarity index 100% rename from tests/utilities/stubs/niswitchmultiplexer/types_pb2_grpc.pyi rename to packages/service/tests/utilities/stubs/niswitchmultiplexer/types_pb2_grpc.pyi diff --git a/tests/utilities/stubs/pinaware/__init__.py b/packages/service/tests/utilities/stubs/pinaware/__init__.py similarity index 100% rename from tests/utilities/stubs/pinaware/__init__.py rename to packages/service/tests/utilities/stubs/pinaware/__init__.py diff --git a/tests/utilities/stubs/pinaware/types.proto b/packages/service/tests/utilities/stubs/pinaware/types.proto similarity index 100% rename from tests/utilities/stubs/pinaware/types.proto rename to packages/service/tests/utilities/stubs/pinaware/types.proto diff --git a/tests/utilities/stubs/pinaware/types_pb2.py b/packages/service/tests/utilities/stubs/pinaware/types_pb2.py similarity index 100% rename from tests/utilities/stubs/pinaware/types_pb2.py rename to packages/service/tests/utilities/stubs/pinaware/types_pb2.py diff --git a/tests/utilities/stubs/pinaware/types_pb2.pyi b/packages/service/tests/utilities/stubs/pinaware/types_pb2.pyi similarity index 100% rename from tests/utilities/stubs/pinaware/types_pb2.pyi rename to packages/service/tests/utilities/stubs/pinaware/types_pb2.pyi diff --git a/tests/utilities/stubs/pinaware/types_pb2_grpc.py b/packages/service/tests/utilities/stubs/pinaware/types_pb2_grpc.py similarity index 100% rename from tests/utilities/stubs/pinaware/types_pb2_grpc.py rename to packages/service/tests/utilities/stubs/pinaware/types_pb2_grpc.py diff --git a/tests/utilities/stubs/pinaware/types_pb2_grpc.pyi b/packages/service/tests/utilities/stubs/pinaware/types_pb2_grpc.pyi similarity index 100% rename from tests/utilities/stubs/pinaware/types_pb2_grpc.pyi rename to packages/service/tests/utilities/stubs/pinaware/types_pb2_grpc.pyi diff --git a/tests/utilities/stubs/serialization/__init__.py b/packages/service/tests/utilities/stubs/serialization/__init__.py similarity index 100% rename from tests/utilities/stubs/serialization/__init__.py rename to packages/service/tests/utilities/stubs/serialization/__init__.py diff --git a/tests/utilities/stubs/serialization/bigmessage.proto b/packages/service/tests/utilities/stubs/serialization/bigmessage.proto similarity index 100% rename from tests/utilities/stubs/serialization/bigmessage.proto rename to packages/service/tests/utilities/stubs/serialization/bigmessage.proto diff --git a/tests/utilities/stubs/serialization/bigmessage_pb2.py b/packages/service/tests/utilities/stubs/serialization/bigmessage_pb2.py similarity index 100% rename from tests/utilities/stubs/serialization/bigmessage_pb2.py rename to packages/service/tests/utilities/stubs/serialization/bigmessage_pb2.py diff --git a/tests/utilities/stubs/serialization/bigmessage_pb2.pyi b/packages/service/tests/utilities/stubs/serialization/bigmessage_pb2.pyi similarity index 100% rename from tests/utilities/stubs/serialization/bigmessage_pb2.pyi rename to packages/service/tests/utilities/stubs/serialization/bigmessage_pb2.pyi diff --git a/tests/utilities/stubs/serialization/bigmessage_pb2_grpc.py b/packages/service/tests/utilities/stubs/serialization/bigmessage_pb2_grpc.py similarity index 100% rename from tests/utilities/stubs/serialization/bigmessage_pb2_grpc.py rename to packages/service/tests/utilities/stubs/serialization/bigmessage_pb2_grpc.py diff --git a/tests/utilities/stubs/serialization/bigmessage_pb2_grpc.pyi b/packages/service/tests/utilities/stubs/serialization/bigmessage_pb2_grpc.pyi similarity index 100% rename from tests/utilities/stubs/serialization/bigmessage_pb2_grpc.pyi rename to packages/service/tests/utilities/stubs/serialization/bigmessage_pb2_grpc.pyi diff --git a/tests/utilities/stubs/serialization/test.proto b/packages/service/tests/utilities/stubs/serialization/test.proto similarity index 100% rename from tests/utilities/stubs/serialization/test.proto rename to packages/service/tests/utilities/stubs/serialization/test.proto diff --git a/tests/utilities/stubs/serialization/test_pb2.py b/packages/service/tests/utilities/stubs/serialization/test_pb2.py similarity index 100% rename from tests/utilities/stubs/serialization/test_pb2.py rename to packages/service/tests/utilities/stubs/serialization/test_pb2.py diff --git a/tests/utilities/stubs/serialization/test_pb2.pyi b/packages/service/tests/utilities/stubs/serialization/test_pb2.pyi similarity index 100% rename from tests/utilities/stubs/serialization/test_pb2.pyi rename to packages/service/tests/utilities/stubs/serialization/test_pb2.pyi diff --git a/tests/utilities/stubs/serialization/test_pb2_grpc.py b/packages/service/tests/utilities/stubs/serialization/test_pb2_grpc.py similarity index 100% rename from tests/utilities/stubs/serialization/test_pb2_grpc.py rename to packages/service/tests/utilities/stubs/serialization/test_pb2_grpc.py diff --git a/tests/utilities/stubs/serialization/test_pb2_grpc.pyi b/packages/service/tests/utilities/stubs/serialization/test_pb2_grpc.pyi similarity index 100% rename from tests/utilities/stubs/serialization/test_pb2_grpc.pyi rename to packages/service/tests/utilities/stubs/serialization/test_pb2_grpc.pyi diff --git a/tests/utilities/stubs/streamingdata/__init__.py b/packages/service/tests/utilities/stubs/streamingdata/__init__.py similarity index 100% rename from tests/utilities/stubs/streamingdata/__init__.py rename to packages/service/tests/utilities/stubs/streamingdata/__init__.py diff --git a/tests/utilities/stubs/streamingdata/types.proto b/packages/service/tests/utilities/stubs/streamingdata/types.proto similarity index 100% rename from tests/utilities/stubs/streamingdata/types.proto rename to packages/service/tests/utilities/stubs/streamingdata/types.proto diff --git a/tests/utilities/stubs/streamingdata/types_pb2.py b/packages/service/tests/utilities/stubs/streamingdata/types_pb2.py similarity index 100% rename from tests/utilities/stubs/streamingdata/types_pb2.py rename to packages/service/tests/utilities/stubs/streamingdata/types_pb2.py diff --git a/tests/utilities/stubs/streamingdata/types_pb2.pyi b/packages/service/tests/utilities/stubs/streamingdata/types_pb2.pyi similarity index 100% rename from tests/utilities/stubs/streamingdata/types_pb2.pyi rename to packages/service/tests/utilities/stubs/streamingdata/types_pb2.pyi diff --git a/tests/utilities/stubs/streamingdata/types_pb2_grpc.py b/packages/service/tests/utilities/stubs/streamingdata/types_pb2_grpc.py similarity index 100% rename from tests/utilities/stubs/streamingdata/types_pb2_grpc.py rename to packages/service/tests/utilities/stubs/streamingdata/types_pb2_grpc.py diff --git a/tests/utilities/stubs/streamingdata/types_pb2_grpc.pyi b/packages/service/tests/utilities/stubs/streamingdata/types_pb2_grpc.pyi similarity index 100% rename from tests/utilities/stubs/streamingdata/types_pb2_grpc.pyi rename to packages/service/tests/utilities/stubs/streamingdata/types_pb2_grpc.pyi diff --git a/tests/utilities/stubs/yieldvsreturn/__init__.py b/packages/service/tests/utilities/stubs/yieldvsreturn/__init__.py similarity index 100% rename from tests/utilities/stubs/yieldvsreturn/__init__.py rename to packages/service/tests/utilities/stubs/yieldvsreturn/__init__.py diff --git a/tests/utilities/stubs/yieldvsreturn/types.proto b/packages/service/tests/utilities/stubs/yieldvsreturn/types.proto similarity index 100% rename from tests/utilities/stubs/yieldvsreturn/types.proto rename to packages/service/tests/utilities/stubs/yieldvsreturn/types.proto diff --git a/tests/utilities/stubs/yieldvsreturn/types_pb2.py b/packages/service/tests/utilities/stubs/yieldvsreturn/types_pb2.py similarity index 100% rename from tests/utilities/stubs/yieldvsreturn/types_pb2.py rename to packages/service/tests/utilities/stubs/yieldvsreturn/types_pb2.py diff --git a/tests/utilities/stubs/yieldvsreturn/types_pb2.pyi b/packages/service/tests/utilities/stubs/yieldvsreturn/types_pb2.pyi similarity index 100% rename from tests/utilities/stubs/yieldvsreturn/types_pb2.pyi rename to packages/service/tests/utilities/stubs/yieldvsreturn/types_pb2.pyi diff --git a/tests/utilities/stubs/yieldvsreturn/types_pb2_grpc.py b/packages/service/tests/utilities/stubs/yieldvsreturn/types_pb2_grpc.py similarity index 100% rename from tests/utilities/stubs/yieldvsreturn/types_pb2_grpc.py rename to packages/service/tests/utilities/stubs/yieldvsreturn/types_pb2_grpc.py diff --git a/tests/utilities/stubs/yieldvsreturn/types_pb2_grpc.pyi b/packages/service/tests/utilities/stubs/yieldvsreturn/types_pb2_grpc.pyi similarity index 100% rename from tests/utilities/stubs/yieldvsreturn/types_pb2_grpc.pyi rename to packages/service/tests/utilities/stubs/yieldvsreturn/types_pb2_grpc.pyi From c08d7d2fbefa66dbb9aad31ccdf9bd4b41b244d2 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 11:31:37 -0500 Subject: [PATCH 05/33] Fix the docs configuration path --- _docs_source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_docs_source/conf.py b/_docs_source/conf.py index 4c208639e..990cec585 100644 --- a/_docs_source/conf.py +++ b/_docs_source/conf.py @@ -46,7 +46,7 @@ # tell autoapi to doc the public options autoapi_options = list(autoapi.extension._DEFAULT_OPTIONS) autoapi_options.remove("private-members") # note: remove this to include "_" members in docs -autoapi_dirs = [root_path / "ni_measurement_plugin_sdk_service"] +autoapi_dirs = [root_path / "packages" / "service" / "ni_measurement_plugin_sdk_service"] autoapi_type = "python" autodoc_typehints = "description" From 8abac12a9ee7c9c5e5fc59fcbfeb984f6e806b5d Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 11:37:30 -0500 Subject: [PATCH 06/33] Updated working directories --- .github/workflows/Publish_NIMS.yml | 6 +++--- .github/workflows/check_nimg.yml | 2 +- .github/workflows/run_unit_tests.yml | 4 ++-- tox.ini => packages/service/tox.ini | 0 4 files changed, 6 insertions(+), 6 deletions(-) rename tox.ini => packages/service/tox.ini (100%) diff --git a/.github/workflows/Publish_NIMS.yml b/.github/workflows/Publish_NIMS.yml index 658cfe978..8f867885d 100644 --- a/.github/workflows/Publish_NIMS.yml +++ b/.github/workflows/Publish_NIMS.yml @@ -51,7 +51,7 @@ jobs: - name: Update NIMG package version based on tag name. run: | poetry version ${{ steps.vars.outputs.tag }} - working-directory: ./ni_measurement_plugin_sdk_generator + working-directory: ./packages/generator - name: Commit file changes id: commit @@ -84,13 +84,13 @@ jobs: if: ${{ startsWith(github.event.release.target_commitish, 'main') || startsWith(github.event.release.target_commitish, 'releases/') }} run: | poetry publish --build --username __token__ --password ${{ secrets.PYPI_TOKEN }} - working-directory: ./ni_measurement_plugin_sdk_generator + working-directory: ./packages/generator - name: Build SDK Python package and publish to PyPI if: ${{ startsWith(github.event.release.target_commitish, 'main') || startsWith(github.event.release.target_commitish, 'releases/') }} run: | poetry publish --build --username __token__ --password ${{ secrets.PYPI_TOKEN }} - working-directory: ./ni_measurement_plugin_sdk + working-directory: ./packages/sdk - name: Create archives of the examples env: diff --git a/.github/workflows/check_nimg.yml b/.github/workflows/check_nimg.yml index 67c55d58d..7381e1443 100644 --- a/.github/workflows/check_nimg.yml +++ b/.github/workflows/check_nimg.yml @@ -15,7 +15,7 @@ jobs: defaults: run: # Set the working-directory for all steps in this job. - working-directory: ./ni_measurement_plugin_sdk_generator + working-directory: ./packages/generator steps: - name: Check out repo uses: actions/checkout@v4 diff --git a/.github/workflows/run_unit_tests.yml b/.github/workflows/run_unit_tests.yml index 158056744..fde56112d 100644 --- a/.github/workflows/run_unit_tests.yml +++ b/.github/workflows/run_unit_tests.yml @@ -76,7 +76,7 @@ jobs: key: ni-measurement-plugin-sdk-generator-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('poetry.lock') }} - name: Install ni-measurement-plugin-sdk-generator run: poetry install -v - working-directory: ./ni_measurement_plugin_sdk_generator + working-directory: ./packages/generator - name: Save cached virtualenv (ni-measurement-plugin-sdk-generator) uses: actions/cache/save@v4 if: steps.restore-nimg.outputs.cache-hit != 'true' @@ -85,7 +85,7 @@ jobs: key: ${{ steps.restore-nimg.outputs.cache-primary-key }} - name: Run tests and code coverage (ni-measurement-plugin-sdk-generator) run: poetry run pytest -v --cov=ni_measurement_plugin_sdk_generator --junitxml=test_results/nimg-${{ matrix.os }}-py${{ matrix.python-version}}.xml - working-directory: ./ni_measurement_plugin_sdk_generator + working-directory: ./packages/generator - name: Upload test results uses: actions/upload-artifact@v3 diff --git a/tox.ini b/packages/service/tox.ini similarity index 100% rename from tox.ini rename to packages/service/tox.ini From 72aa74e075f4fdce9f33025b979bc3fe5c1512e7 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 12:18:13 -0500 Subject: [PATCH 07/33] Update working directory for nims --- .github/workflows/check_nims.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/check_nims.yml b/.github/workflows/check_nims.yml index 4390f7653..cb54579d7 100644 --- a/.github/workflows/check_nims.yml +++ b/.github/workflows/check_nims.yml @@ -12,6 +12,10 @@ jobs: check_nims: name: Check NIMS runs-on: ubuntu-latest + defaults: + run: + # Set the working-directory for all steps in this job. + working-directory: ./packages/service steps: - name: Check out repo uses: actions/checkout@v4 From 8e03455216d4cdbe7430b9845974802c97a9498a Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 12:45:21 -0500 Subject: [PATCH 08/33] Make a copy of color stubs --- .../loopback_measurement/__init__.py | 2 +- .../sample_measurement/_stubs/__init__.py | 1 + .../sample_measurement/_stubs/color_pb2.py | 26 ++++++++++++ .../sample_measurement/_stubs/color_pb2.pyi | 40 +++++++++++++++++++ .../_stubs/color_pb2_grpc.py | 4 ++ .../_stubs/color_pb2_grpc.pyi | 6 +++ 6 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 packages/service/tests/utilities/measurements/sample_measurement/_stubs/__init__.py create mode 100644 packages/service/tests/utilities/measurements/sample_measurement/_stubs/color_pb2.py create mode 100644 packages/service/tests/utilities/measurements/sample_measurement/_stubs/color_pb2.pyi create mode 100644 packages/service/tests/utilities/measurements/sample_measurement/_stubs/color_pb2_grpc.py create mode 100644 packages/service/tests/utilities/measurements/sample_measurement/_stubs/color_pb2_grpc.pyi diff --git a/packages/service/tests/utilities/measurements/loopback_measurement/__init__.py b/packages/service/tests/utilities/measurements/loopback_measurement/__init__.py index 3bb5a8997..1cf5f37c1 100644 --- a/packages/service/tests/utilities/measurements/loopback_measurement/__init__.py +++ b/packages/service/tests/utilities/measurements/loopback_measurement/__init__.py @@ -4,7 +4,7 @@ from enum import Enum from typing import Iterable, Tuple -from examples.sample_measurement._stubs import color_pb2 +from tests.utilities.measurements.sample_measurement._stubs import color_pb2 import ni_measurement_plugin_sdk_service as nims diff --git a/packages/service/tests/utilities/measurements/sample_measurement/_stubs/__init__.py b/packages/service/tests/utilities/measurements/sample_measurement/_stubs/__init__.py new file mode 100644 index 000000000..47acf683e --- /dev/null +++ b/packages/service/tests/utilities/measurements/sample_measurement/_stubs/__init__.py @@ -0,0 +1 @@ +"""Stubs for sample_measurement's color enum.""" diff --git a/packages/service/tests/utilities/measurements/sample_measurement/_stubs/color_pb2.py b/packages/service/tests/utilities/measurements/sample_measurement/_stubs/color_pb2.py new file mode 100644 index 000000000..dc11b2356 --- /dev/null +++ b/packages/service/tests/utilities/measurements/sample_measurement/_stubs/color_pb2.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: color.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0b\x63olor.proto\x12\x34ni.measurementlink.measurement.sample_measurement.v1*9\n\rProtobufColor\x12\x08\n\x04NONE\x10\x00\x12\x08\n\x04PINK\x10\x01\x12\t\n\x05WHITE\x10\x02\x12\t\n\x05\x42LACK\x10\x03\x42\x37\xaa\x02\x34NationalInstruments.MeasurementServices.Measurementsb\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'color_pb2', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\252\0024NationalInstruments.MeasurementServices.Measurements' + _PROTOBUFCOLOR._serialized_start=69 + _PROTOBUFCOLOR._serialized_end=126 +# @@protoc_insertion_point(module_scope) diff --git a/packages/service/tests/utilities/measurements/sample_measurement/_stubs/color_pb2.pyi b/packages/service/tests/utilities/measurements/sample_measurement/_stubs/color_pb2.pyi new file mode 100644 index 000000000..d3b807593 --- /dev/null +++ b/packages/service/tests/utilities/measurements/sample_measurement/_stubs/color_pb2.pyi @@ -0,0 +1,40 @@ +""" +@generated by mypy-protobuf. Do not edit manually! +isort:skip_file +--------------------------------------------------------------------- +--------------------------------------------------------------------- +""" +import builtins +import google.protobuf.descriptor +import google.protobuf.internal.enum_type_wrapper +import sys +import typing + +if sys.version_info >= (3, 10): + import typing as typing_extensions +else: + import typing_extensions + +DESCRIPTOR: google.protobuf.descriptor.FileDescriptor + +class _ProtobufColor: + ValueType = typing.NewType("ValueType", builtins.int) + V: typing_extensions.TypeAlias = ValueType + +class _ProtobufColorEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_ProtobufColor.ValueType], builtins.type): + DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor + NONE: _ProtobufColor.ValueType # 0 + PINK: _ProtobufColor.ValueType # 1 + WHITE: _ProtobufColor.ValueType # 2 + BLACK: _ProtobufColor.ValueType # 3 + +class ProtobufColor(_ProtobufColor, metaclass=_ProtobufColorEnumTypeWrapper): + """--------------------------------------------------------------------- + --------------------------------------------------------------------- + """ + +NONE: ProtobufColor.ValueType # 0 +PINK: ProtobufColor.ValueType # 1 +WHITE: ProtobufColor.ValueType # 2 +BLACK: ProtobufColor.ValueType # 3 +global___ProtobufColor = ProtobufColor diff --git a/packages/service/tests/utilities/measurements/sample_measurement/_stubs/color_pb2_grpc.py b/packages/service/tests/utilities/measurements/sample_measurement/_stubs/color_pb2_grpc.py new file mode 100644 index 000000000..2daafffeb --- /dev/null +++ b/packages/service/tests/utilities/measurements/sample_measurement/_stubs/color_pb2_grpc.py @@ -0,0 +1,4 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + diff --git a/packages/service/tests/utilities/measurements/sample_measurement/_stubs/color_pb2_grpc.pyi b/packages/service/tests/utilities/measurements/sample_measurement/_stubs/color_pb2_grpc.pyi new file mode 100644 index 000000000..f99de6c86 --- /dev/null +++ b/packages/service/tests/utilities/measurements/sample_measurement/_stubs/color_pb2_grpc.pyi @@ -0,0 +1,6 @@ +""" +@generated by mypy-protobuf. Do not edit manually! +isort:skip_file +--------------------------------------------------------------------- +--------------------------------------------------------------------- +""" From c0ef61577b8c6d66c48a2f269f4a49719c349486 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 12:48:45 -0500 Subject: [PATCH 09/33] Fix lint errors --- .../utilities/measurements/loopback_measurement/__init__.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/service/tests/utilities/measurements/loopback_measurement/__init__.py b/packages/service/tests/utilities/measurements/loopback_measurement/__init__.py index 1cf5f37c1..dfef3e35d 100644 --- a/packages/service/tests/utilities/measurements/loopback_measurement/__init__.py +++ b/packages/service/tests/utilities/measurements/loopback_measurement/__init__.py @@ -4,9 +4,8 @@ from enum import Enum from typing import Iterable, Tuple -from tests.utilities.measurements.sample_measurement._stubs import color_pb2 - import ni_measurement_plugin_sdk_service as nims +from tests.utilities.measurements.sample_measurement._stubs import color_pb2 class Color(Enum): From bdf62c07eeb848b5c7b550afa29008a5ad253410 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 12:56:32 -0500 Subject: [PATCH 10/33] Working directory for docs --- .github/workflows/check_nims.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/check_nims.yml b/.github/workflows/check_nims.yml index cb54579d7..c4b24fde4 100644 --- a/.github/workflows/check_nims.yml +++ b/.github/workflows/check_nims.yml @@ -79,8 +79,10 @@ jobs: rm -rf docs mkdir -p docs poetry run sphinx-build _docs_source docs -b html -W --keep-going + working-directory: ./ - name: Revert docs run: git clean -dfx docs/ && git restore docs/ + working-directory: ./ - name: Generate gRPC stubs run: | find ni_measurement_plugin_sdk_service/_internal/stubs/ -name \*_pb2.py\* -o -name \*_pb2_grpc.py\* -delete From d1debcfc424e9d3e5d8f18fdc9f5cd1d40110b7c Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 13:01:32 -0500 Subject: [PATCH 11/33] Move scripts into service --- .github/workflows/check_nims.yml | 2 -- {scripts => packages/service/scripts}/generate_grpc_stubs.py | 0 {scripts => packages/service/scripts}/install_examples.py | 0 3 files changed, 2 deletions(-) rename {scripts => packages/service/scripts}/generate_grpc_stubs.py (100%) mode change 100755 => 100644 rename {scripts => packages/service/scripts}/install_examples.py (100%) diff --git a/.github/workflows/check_nims.yml b/.github/workflows/check_nims.yml index c4b24fde4..cb54579d7 100644 --- a/.github/workflows/check_nims.yml +++ b/.github/workflows/check_nims.yml @@ -79,10 +79,8 @@ jobs: rm -rf docs mkdir -p docs poetry run sphinx-build _docs_source docs -b html -W --keep-going - working-directory: ./ - name: Revert docs run: git clean -dfx docs/ && git restore docs/ - working-directory: ./ - name: Generate gRPC stubs run: | find ni_measurement_plugin_sdk_service/_internal/stubs/ -name \*_pb2.py\* -o -name \*_pb2_grpc.py\* -delete diff --git a/scripts/generate_grpc_stubs.py b/packages/service/scripts/generate_grpc_stubs.py old mode 100755 new mode 100644 similarity index 100% rename from scripts/generate_grpc_stubs.py rename to packages/service/scripts/generate_grpc_stubs.py diff --git a/scripts/install_examples.py b/packages/service/scripts/install_examples.py similarity index 100% rename from scripts/install_examples.py rename to packages/service/scripts/install_examples.py From d5916ecfbee9750fb7a75fa68c09d841c92d248c Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 13:09:05 -0500 Subject: [PATCH 12/33] Working directory for docs build --- .github/workflows/check_nims.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/check_nims.yml b/.github/workflows/check_nims.yml index cb54579d7..59cce0e5c 100644 --- a/.github/workflows/check_nims.yml +++ b/.github/workflows/check_nims.yml @@ -79,6 +79,7 @@ jobs: rm -rf docs mkdir -p docs poetry run sphinx-build _docs_source docs -b html -W --keep-going + working-directory: ./ - name: Revert docs run: git clean -dfx docs/ && git restore docs/ - name: Generate gRPC stubs From e2cd51ac5bd5c1aa0482f8c7e10fc970d8a7a73e Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 13:13:32 -0500 Subject: [PATCH 13/33] Move _docs_source into service --- .github/workflows/check_nims.yml | 1 - {_docs_source => packages/service/_docs_source}/conf.py | 0 {_docs_source => packages/service/_docs_source}/index.rst | 0 3 files changed, 1 deletion(-) rename {_docs_source => packages/service/_docs_source}/conf.py (100%) rename {_docs_source => packages/service/_docs_source}/index.rst (100%) diff --git a/.github/workflows/check_nims.yml b/.github/workflows/check_nims.yml index 59cce0e5c..cb54579d7 100644 --- a/.github/workflows/check_nims.yml +++ b/.github/workflows/check_nims.yml @@ -79,7 +79,6 @@ jobs: rm -rf docs mkdir -p docs poetry run sphinx-build _docs_source docs -b html -W --keep-going - working-directory: ./ - name: Revert docs run: git clean -dfx docs/ && git restore docs/ - name: Generate gRPC stubs diff --git a/_docs_source/conf.py b/packages/service/_docs_source/conf.py similarity index 100% rename from _docs_source/conf.py rename to packages/service/_docs_source/conf.py diff --git a/_docs_source/index.rst b/packages/service/_docs_source/index.rst similarity index 100% rename from _docs_source/index.rst rename to packages/service/_docs_source/index.rst From 7c03320b3a7b863fbce2feeb4fac87e9d811d4af Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 13:17:57 -0500 Subject: [PATCH 14/33] Fix autoapi dir --- packages/service/_docs_source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/service/_docs_source/conf.py b/packages/service/_docs_source/conf.py index 990cec585..4c208639e 100644 --- a/packages/service/_docs_source/conf.py +++ b/packages/service/_docs_source/conf.py @@ -46,7 +46,7 @@ # tell autoapi to doc the public options autoapi_options = list(autoapi.extension._DEFAULT_OPTIONS) autoapi_options.remove("private-members") # note: remove this to include "_" members in docs -autoapi_dirs = [root_path / "packages" / "service" / "ni_measurement_plugin_sdk_service"] +autoapi_dirs = [root_path / "ni_measurement_plugin_sdk_service"] autoapi_type = "python" autodoc_typehints = "description" From 8e79ca2edd46b5706b2f52de0b9a879af653b03d Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 13:21:36 -0500 Subject: [PATCH 15/33] Fix docs directory --- .github/workflows/check_nims.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check_nims.yml b/.github/workflows/check_nims.yml index cb54579d7..e07f761e2 100644 --- a/.github/workflows/check_nims.yml +++ b/.github/workflows/check_nims.yml @@ -80,7 +80,7 @@ jobs: mkdir -p docs poetry run sphinx-build _docs_source docs -b html -W --keep-going - name: Revert docs - run: git clean -dfx docs/ && git restore docs/ + run: git clean -dfx ../../docs/ && git restore ../../docs/ - name: Generate gRPC stubs run: | find ni_measurement_plugin_sdk_service/_internal/stubs/ -name \*_pb2.py\* -o -name \*_pb2_grpc.py\* -delete From 4a9de4d45027fe72df3546b17aa65e8490528a6e Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 14:17:25 -0500 Subject: [PATCH 16/33] Update proto path --- packages/service/scripts/generate_grpc_stubs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/service/scripts/generate_grpc_stubs.py b/packages/service/scripts/generate_grpc_stubs.py index 0c8c51a19..b51d36db6 100644 --- a/packages/service/scripts/generate_grpc_stubs.py +++ b/packages/service/scripts/generate_grpc_stubs.py @@ -11,7 +11,7 @@ STUBS_NAMESPACE = "ni_measurement_plugin_sdk_service._internal.stubs" PROTO_PARENT_NAMESPACES = ["ni.measurementlink", "nidevice_grpc", "ni.protobuf.types"] STUBS_PATH = pathlib.Path(__file__).parent.parent / STUBS_NAMESPACE.replace(".", "/") -PROTO_PATH = pathlib.Path(__file__).parent.parent / "third_party" / "ni-apis" +PROTO_PATH = pathlib.Path(__file__).parent.parent.parent.parent / "third_party" / "ni-apis" STUBS_PROTO_PATH = STUBS_PATH / "proto" STUBS_PROTO_FILES = list(STUBS_PROTO_PATH.rglob("*.proto")) # We still want to use session.proto from STUBS_PATH / "proto" until From b6e4547361791e5575fd018b8b3ffcff3b279ecf Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 14:22:57 -0500 Subject: [PATCH 17/33] Update working directory for service --- .github/workflows/run_unit_tests.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/run_unit_tests.yml b/.github/workflows/run_unit_tests.yml index fde56112d..ddd9cdb44 100644 --- a/.github/workflows/run_unit_tests.yml +++ b/.github/workflows/run_unit_tests.yml @@ -40,6 +40,7 @@ jobs: key: ni-measurement-plugin-sdk-service-no-extras-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('poetry.lock') }} - name: Install ni-measurement-plugin-sdk-service (no extras) run: poetry install -v + working-directory: ./packages/service - name: Save cached virtualenv (ni-measurement-plugin-sdk-service, no extras) uses: actions/cache/save@v4 if: steps.restore-nims-no-extras.outputs.cache-hit != 'true' @@ -48,6 +49,7 @@ jobs: key: ${{ steps.restore-nims-no-extras.outputs.cache-primary-key }} - name: Run unit tests and code coverage (ni-measurement-plugin-sdk-service, no extras) run: poetry run pytest ./tests/unit -v --cov=ni_measurement_plugin_sdk_service --junitxml=test_results/nims-${{ matrix.os }}-py${{ matrix.python-version}}-no-extras.xml + working-directory: ./packages/service # ni-measurement-plugin-sdk-service, all extras - name: Restore cached virtualenv (ni-measurement-plugin-sdk-service, all extras) @@ -58,6 +60,7 @@ jobs: key: ni-measurement-plugin-sdk-service-all-extras-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('poetry.lock') }} - name: Install ni-measurement-plugin-sdk-service (all extras) run: poetry install -v --all-extras + working-directory: ./packages/service - name: Save cached ni-measurement-plugin-sdk-service virtualenv (all extras) uses: actions/cache/save@v4 if: steps.restore-nims-all-extras.outputs.cache-hit != 'true' @@ -66,6 +69,7 @@ jobs: key: ${{ steps.restore-nims-all-extras.outputs.cache-primary-key }} - name: Run unit tests and code coverage (ni-measurement-plugin-sdk-service, all extras) run: poetry run pytest ./tests/unit -v --cov=ni_measurement_plugin_sdk_service --junitxml=test_results/nims-${{ matrix.os }}-py${{ matrix.python-version}}-all-extras.xml + working-directory: ./packages/service # ni-measurement-plugin-sdk-generator - name: Restore cached virtualenv (ni-measurement-plugin-sdk-generator) From 87984a47f6d78b28575e7c19f8d4f18566b470ee Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 14:33:57 -0500 Subject: [PATCH 18/33] Move README into sdk folder --- packages/{service => sdk}/README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) rename packages/{service => sdk}/README.md (66%) diff --git a/packages/service/README.md b/packages/sdk/README.md similarity index 66% rename from packages/service/README.md rename to packages/sdk/README.md index b8eaa1e6b..1b473e7d9 100644 --- a/packages/service/README.md +++ b/packages/sdk/README.md @@ -4,8 +4,11 @@ ## Introduction Measurement Plug-In SDK for Python (`ni-measurement-plugin-sdk`) is a -tool for generating and editing reusable measurement plug-ins using gRPC services. -The sole purpose is to be a top-level package to depend on service and generator. +tool for generating and writing reusable measurement plug-ins using gRPC services. + +The purpose of this package is as a meta-package that depends on `ni-measurement-plugin-sdk-generator` +and `ni-measurement-plugin-sdk-service` so as to easily install all the things needed for the +Measurmeent Plug-In SDK. For installation and usage, see [Measurement Plug-In SDK for Python (`ni-measurement-plugin-sdk-service`)](https://pypi.org/project/ni-measurement-plugin-sdk-service/). From 6e6a05ddabd4fe5a9cb5788a64dbf9ab6c4d0025 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 14:53:57 -0500 Subject: [PATCH 19/33] Update working directory for system tests --- .github/workflows/run_system_tests.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/run_system_tests.yml b/.github/workflows/run_system_tests.yml index 4c2967e1a..2067762b0 100644 --- a/.github/workflows/run_system_tests.yml +++ b/.github/workflows/run_system_tests.yml @@ -12,6 +12,10 @@ jobs: - windows - x64 - rdss-measlinkbot-win-10-${{ matrix.configuration }} + defaults: + run: + # Set the working-directory for all steps in this job. + working-directory: ./packages/service strategy: matrix: configuration: ["py32", "py64"] From 29b22fb57f18ab0785b5d41145c1ef0d50fb9380 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 14:59:58 -0500 Subject: [PATCH 20/33] Update SDK package version from tag during publish --- .github/workflows/Publish_NIMS.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/Publish_NIMS.yml b/.github/workflows/Publish_NIMS.yml index 8f867885d..707b5ff48 100644 --- a/.github/workflows/Publish_NIMS.yml +++ b/.github/workflows/Publish_NIMS.yml @@ -47,11 +47,17 @@ jobs: - name: Update NIMS package version based on tag name. run: | poetry version ${{ steps.vars.outputs.tag }} + working-directory: ./packages/service - name: Update NIMG package version based on tag name. run: | poetry version ${{ steps.vars.outputs.tag }} working-directory: ./packages/generator + + - name: Update SDK package version based on tag name. + run: | + poetry version ${{ steps.vars.outputs.tag }} + working-directory: ./packages/sdk - name: Commit file changes id: commit From ec387338258f23d774156e2e4e5e8f60cec148a0 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 15:02:49 -0500 Subject: [PATCH 21/33] Fix copying of .env.simulation with working directory --- .github/workflows/run_system_tests.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/run_system_tests.yml b/.github/workflows/run_system_tests.yml index 2067762b0..7a2d5ef03 100644 --- a/.github/workflows/run_system_tests.yml +++ b/.github/workflows/run_system_tests.yml @@ -28,6 +28,7 @@ jobs: uses: actions/checkout@v4 - name: Copy and rename .env.simulation to .env run: cp examples/.env.simulation .env + working-directory: ./ - name: Cache virtualenvs uses: actions/cache@v4 id: cache @@ -38,8 +39,10 @@ jobs: key: run-system-tests-${{ runner.os }}-${{ matrix.configuration }}-${{ hashFiles('poetry.lock') }} - name: Install dependencies run: poetry install -v + working-directory: ./packages/service - name: Run system tests run: poetry run tox + working-directory: ./packages/sdk - name: Upload test results uses: actions/upload-artifact@v3 with: From 8af4b98afb5f1613c238c4159f8c5338c41d73da Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 15:24:06 -0500 Subject: [PATCH 22/33] Add README to service so poetry install works --- packages/service/README.md | 351 +++++++++++++++++++++++++++++++++++++ 1 file changed, 351 insertions(+) create mode 100644 packages/service/README.md diff --git a/packages/service/README.md b/packages/service/README.md new file mode 100644 index 000000000..6840537ed --- /dev/null +++ b/packages/service/README.md @@ -0,0 +1,351 @@ +# Measurement Plug-In SDK for Python + +- [Measurement Plug-In SDK for Python](#measurement-plug-in-sdk-for-python) + - [Introduction](#introduction) + - [Dependencies](#dependencies) + - [Documentation](#documentation) + - [Examples](#examples) + - [Developing Measurements: Quick Start](#developing-measurements-quick-start) + - [Installation](#installation) + - [Developing a minimal python measurement](#developing-a-minimal-python-measurement) + - [Steps to run/debug the measurement service](#steps-to-rundebug-the-measurement-service) + - [Static Registration of Python Measurements](#static-registration-of-python-measurements) + - [Create a batch file that runs a python measurement](#create-a-batch-file-that-runs-a-python-measurement) + - [Create Executable for Python Scripts](#create-executable-for-python-scripts) + - [Appendix: Managing Measurement with Python](#appendix-managing-measurement-with-python) + - [Create and Manage Python Measurement using Poetry](#create-and-manage-python-measurement-using-poetry) + - [Create and Manage Python Measurement using `venv`](#create-and-manage-python-measurement-using-venv) + - [Create and Manage Python Measurement by directly installing `ni-measurement-plugin-sdk-service` as a system-level package](#create-and-manage-python-measurement-by-directly-installing-ni-measurement-plugin-sdk-service-as-a-system-level-package) + +--- + +## Introduction + +Measurement Plug-In SDK for Python (`ni-measurement-plugin-sdk-service`) is a Python +framework that helps you create reusable measurement plug-ins using gRPC +services. Deploy your measurement plug-ins to perform interactive validation in +InstrumentStudio and automated testing in TestStand. + +--- + +## Dependencies + +- Python >= 3.8 [(3.9 recommended)](https://www.python.org/downloads/release/python-3913/) +- [grpcio >= 1.49.1, < 2.x](https://pypi.org/project/grpcio/1.49.1/) +- [protobuf >= 4.21, < 5.x](https://pypi.org/project/protobuf/4.21.0/) +- [pywin32 >= 303 (Only for Windows)](https://pypi.org/project/pywin32/303/) + +--- + +## Documentation + +- [Measurement Plug-In SDK Manual](https://www.ni.com/docs/en-US/bundle/measurementlink) +- [API Reference](https://ni.github.io/measurementlink-python/) + +--- + +## System Configuration + +### Enable Win32 Long Paths + +By default, Windows has a path length limit of 260 characters. NI recommends enabling support for long paths when developing and deploying Python measurement services. + +There are three ways to do this: +- When installing Python using the Python for Windows installer, click `Disable path length limit` at the end of the installation. +- Set the `Enable Win32 long paths` group policy: + - Run `gpedit.msc`. + - Expand `Computer Configuration` » `Administrative Templates` » `All Settings`. + - Find `Enable Win32 long paths` in the list, double-click it, and set it to `Enabled`. +- In the Windows registry, set `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled` (type: `REG_DWORD`) to 1. For more details, see [Maximum Path Length Limitation](https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation). + +--- + +## Examples + +The `examples` directory contains example measurements for use with InstrumentStudio 2024 Q3 or later. + +For more information on setting up and running the example measurements, see the included `README.md` file. + +For best results, use the example measurements corresponding to the version of InstrumentStudio +that you are using. Newer examples may demonstrate features that are not available in older +versions of InstrumentStudio. + +--- + +## Developing Measurements: Quick Start + +This section provides instructions to develop custom measurement services in Python using Measurement Plug-In SDK for Python. + +### Installation + +Make sure the system has the recommended Python version is installed. Install Measurement Plug-In SDK for Python using [pip](https://pip.pypa.io/). + +``` cmd +REM Activate the required virtual environment if any. +pip install ni-measurement-plugin-sdk-service +``` + +Check if you have installed the expected version of Measurement Plug-In SDK for Python installed by running the below command: + +```cmd +pip show ni-measurement-plugin-sdk-service +``` + +### Developing a minimal Python measurement + +1. Install the `ni-measurement-plugin-sdk-generator` package. + +``` cmd +REM Activate the required virtual environment if any. +pip install ni-measurement-plugin-sdk-generator +``` + +2. Run the `ni-measurement-plugin-sdk-generator` tool. Use command line arguments to specify the `display-name` and optionally the `version`, `measurement-type`, and `product-type`. + + 1. Running `ni-measurement-plugin-sdk-generator` without optional arguments: + + `ni-measurement-plugin-sdk-generator SampleMeasurement` + + 'SampleMeasurement' is the display name of your measurement service. Without the optional arguments, + the other arguments are generated for you based on the display name. + + 2. Running `ni-measurement-plugin-sdk-generator` with optional arguments for `measurement-version`, `ui-file`, + `service-class`, and `description-url`: + + `ni-measurement-plugin-sdk-generator SampleMeasurement --measurement-version 0.1.0.0 --ui-file MeasurementUI.measui --service-class SampleMeasurement_Python --description-url https://www.example.com/SampleMeasurement.html` + + 3. Running `ni-measurement-plugin-sdk-generator` with optional argument for `directory-out` + + `ni-measurement-plugin-sdk-generator SampleMeasurement --directory-out ` + + If no output directory is specified, the files will + be placed in a new folder under the current directory + named after the display name without spaces. + +3. To customize the created measurement, provide metadata of the measurement's configuration (input parameters) and outputs (output parameters) in `measurement.py`. + 1. Use the `configuration()` decorator to provide metadata about the configurations.**The order of the configuration decorator must match with the order of the parameters defined in the function signature.** + + ``` python + @foo_measurement_service.register_measurement + #Display Names can not contains backslash or front slash. + @foo_measurement_service.configuration("DisplayNameForInput1", DataType.String, "DefaultValueForInput1") + @foo_measurement_service.configuration("DisplayNameForInput2", DataType.String, "DefaultValueForInput2") + def measure(input_1, input_2): + ''' A simple Measurement method''' + return ["foo", "bar"] + ``` + + 2. Use the `output()` decorator to provide metadata about the output.**The order of the output decorators from top to bottom must match the order of the values of the list returned by the function.** + + ``` python + @foo_measurement_service.register_measurement + @foo_measurement_service.configuration("DisplayNameForInput1", nims.DataType.String, "DefaultValueForInput1") + @foo_measurement_service.configuration("DisplayNameForInput2", nims.DataType.String, "DefaultValueForInput2") + @foo_measurement_service.output("DisplayNameForOutput1", nims.DataType.String) + @foo_measurement_service.output("DisplayNameForOutput2", nims.DataType.String) + def measure(input_1, input_2): + return ["foo", "bar"] + ``` + +4. Run/Debug the created measurement by following the steps discussed in the section ["Steps to run/debug the measurement service".](#steps-to-rundebug-the-measurement-service) + +--- + +## Steps to run/debug the measurement service + +1. Start the discovery service if not already started. + +2. (Optional) Activate related virtual environments. Measurement developers can skip this step if they are not using any [virtual environments](#create-and-manage-python-measurement-using-venv) or [poetry-based projects.](#create-and-manage-python-measurement-using-poetry) + + ```cmd + .venv\scripts\activate + ``` + + - After successful activation, you can see the name of the environment, `(.venv)` is added to the command prompt. + - If you face an access issue when trying to activate, retry after allowing scripts to run as Administrator by executing the below command in Windows PowerShell: + + ```cmd + Set-ExecutionPolicy RemoteSigned + ``` + +3. [Run](https://code.visualstudio.com/docs/python/python-tutorial#_run-hello-world)/[Debug](https://code.visualstudio.com/docs/python/debugging#_basic-debugging) the measurement Python file. + +4. To stop the running measurement service, press `Enter` in the terminal to properly close the service. + +5. (Optional) After the usage of measurement, deactivate the virtual environment. Measurement developers can skip this step if they are not using any [virtual environments](#create-and-manage-python-measurement-using-venv) or [poetry-based projects.](#create-and-manage-python-measurement-using-poetry) + + ```cmd + deactivate + ``` + +--- + +## Static Registration of Python Measurements + +The NI Discovery Service provides a registry of other services, and can discover and activate other services on the system. These features allow the discovery service to distinguish, manage, and describe measurement services on the system. + +To statically register a measurement service with the NI Discovery Service, do the following: + +1. Create a [startup batch file](#create-a-batch-file-that-runs-a-python-measurement) or [executable](#create-executable-for-python-scripts) for the measurement service. + +2. Edit the measurement service's `.serviceconfig` file and set the `path` value to the filename of the startup batch file or executable. + +3. Copy the measurement service's directory (including the `.serviceconfig` file and startup batch file) to a subdirectory of `C:\ProgramData\National Instruments\Plug-Ins\Measurements`. +> **Note** +> If you are using a virtual environment, do not copy the `.venv` subdirectory—the virtual environment must be re-created in the new location. + +Once your measurement service is statically registered, the NI Discovery Service makes it visible in supported NI applications. + +### Create a batch file that runs a Python measurement + +The batch file used for static registration is responsible for starting the Python Scripts. + +Typical Batch File: + +``` cmd +"" "" +``` + +Examples to start the fictitious file named `foo_measurement.py`: + +1. Using the Python system distribution + + ```cmd + python foo_measurement.py + ``` + +2. Using the virtual environment + + ```cmd + REM Windows + .\.venv\Scripts\python.exe foo_measurement.py + + REM Linux + .venv/bin/python foo_measurement.py + ``` + +### Create Executable for Python Scripts + +To create an executable from a measurement, you can use the [pyinstaller](https://www.pyinstaller.org/) tooling. If you are using a Poetry project, add `pyinstaller` to its `dev-dependencies`. When statically registering the service, install the EXE into a unique directory along with its .serviceconfig and UI files. + +Typical PyInstaller command to build executable: + +```cmd +pyinstaller --onefile --console --paths .venv\Lib\site-packages measurement.py +``` + +## Troubleshooting + +### "File not found" or "No such file or directory" errors when copying or running a measurement service + +If copying or running a measurement service produces "File not found" or "No such file or directory" errors, make sure to [enable Win32 long paths](#enable-win32-long-paths). If you are unable to enable Win32 long paths, consider deploying the measurement service to a directory with a shorter path. + +## Appendix: Managing Measurement with Python + +A measurement and its related files can be maintained in different ways in Python. The basic components of any Python measurement are: + +1. Measurement Python module (`.py` file) + - This file contains all the details related to the measurement and also contains the logic for the measurement execution. + - This file is run to start the measurement as a service. + +2. UI File + - UI file for the measurement. Types of supported UI files are: + - Measurement UI (`.measui`): created using the **Measurement Plug-In UI Editor** application. + - LabVIEW UI (`.vi`) + - The path of this file is configured by `ui_file_path` in `measurement_info` variable definition in measurement Python module (`.py`). + +Python communities have different ways of managing Python projects and their dependencies. It is up to the measurement developer to decide how to maintain the project and dependencies. Measurement developers can choose from a few common approaches discussed below based on their requirements. + +### Create and Manage Python Measurement using Poetry + +1. Install `poetry` (one-time setup) + + 1. Make sure the system has the recommended Python version installed. + + 2. Install `poetry` using the installation steps given in . + +2. Create a new Python project and add `ni-measurement-plugin-sdk-service` as a dependency to the project. + + 1. Open a command prompt, and change the working directory to the directory of your choice where you want to create the project. + + ``` cmd + cd + ``` + + 2. Create a Poetry project using the `poetry new` command. Poetry will create boilerplate files and folders that are commonly needed for a Python project. + + ``` cmd + poetry new + ``` + + 3. Add the `ni-measurement-plugin-sdk-service` package as a dependency using the [`poetry add`](https://python-poetry.org/docs/cli/#add) command. + + ``` cmd + cd + poetry add ni-measurement-plugin-sdk-service + ``` + + 4. The virtual environment will be auto-created by poetry. + + 5. Create measurement modules as described in ["Developing a minimal Python measurement"](#developing-a-minimal-python-measurement) + - Any additional dependencies required by measurement can be added using [add command](https://python-poetry.org/docs/cli/#add). + + ``` cmd + poetry add + ``` + +For detailed info on managing projects using poetry [refer to the official documentation](https://python-poetry.org/docs/cli/). + +### Create and Manage Python Measurement using `venv` + +1. Make sure the system has the recommended Python version installed. + +2. Open a command prompt, and change the working directory to the directory of your choice where you want to create a project. + + ``` cmd + cd + ``` + +3. Create a virtual environment. + + ``` cmd + REM This creates a virtual environment named .venv + python -m venv .venv + ``` + +4. Activate the virtual environment. After successful activation + + ``` cmd + .venv\scripts\activate + REM Optionally upgrade the pip within the venv by executing the command + python -m pip install -U pip + ``` + +5. Install the `ni-measurement-plugin-sdk-service` package into the virtual environment. + + ``` cmd + pip install ni-measurement-plugin-sdk-service + ``` + +6. Create measurement modules as described in ["Developing a minimal Python measurement"](#developing-a-minimal-python-measurement) + - Any additional dependencies required by measurement can be added pip install. + + ``` cmd + pip install + ``` + +For detailed info on managing projects with a virtual environment, refer to the [official documentation](https://docs.python.org/3/tutorial/venv.html). + +### Create and Manage Python Measurement by directly installing `ni-measurement-plugin-sdk-service` as a system-level package + +Measurement developers can also install `ni-measurement-plugin-sdk-service` as a system package if necessary. + +1. Install the `ni-measurement-plugin-sdk-service` package from the command prompt + + ``` cmd + pip install ni-measurement-plugin-sdk-service + ``` + +2. Create measurement modules as described in ["Developing a minimal Python measurement"](#developing-a-minimal-python-measurement) + +--- From 47fe78e7db37a565251ad9330959d66a1ddeece8 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 9 Jul 2024 15:35:59 -0500 Subject: [PATCH 23/33] Fix tox working directory --- .github/workflows/run_system_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/run_system_tests.yml b/.github/workflows/run_system_tests.yml index 7a2d5ef03..bf62f984c 100644 --- a/.github/workflows/run_system_tests.yml +++ b/.github/workflows/run_system_tests.yml @@ -42,7 +42,7 @@ jobs: working-directory: ./packages/service - name: Run system tests run: poetry run tox - working-directory: ./packages/sdk + working-directory: ./packages/service - name: Upload test results uses: actions/upload-artifact@v3 with: From 030fc513c9c8cf3e5430518a580bfd7a5e259697 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Wed, 10 Jul 2024 08:27:29 -0500 Subject: [PATCH 24/33] Fix test_results path --- .github/workflows/run_system_tests.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/run_system_tests.yml b/.github/workflows/run_system_tests.yml index bf62f984c..ef6a83f3f 100644 --- a/.github/workflows/run_system_tests.yml +++ b/.github/workflows/run_system_tests.yml @@ -39,13 +39,11 @@ jobs: key: run-system-tests-${{ runner.os }}-${{ matrix.configuration }}-${{ hashFiles('poetry.lock') }} - name: Install dependencies run: poetry install -v - working-directory: ./packages/service - name: Run system tests run: poetry run tox - working-directory: ./packages/service - name: Upload test results uses: actions/upload-artifact@v3 with: name: test_results - path: test_results/*.xml + path: ./packages/service/test_results/*.xml if: always() From a5e0d1f03483b5fe034e3ac4cdda6c158843fe23 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Wed, 10 Jul 2024 08:29:50 -0500 Subject: [PATCH 25/33] Fix typo --- packages/sdk/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk/README.md b/packages/sdk/README.md index 1b473e7d9..7bde6775b 100644 --- a/packages/sdk/README.md +++ b/packages/sdk/README.md @@ -8,7 +8,7 @@ tool for generating and writing reusable measurement plug-ins using gRPC service The purpose of this package is as a meta-package that depends on `ni-measurement-plugin-sdk-generator` and `ni-measurement-plugin-sdk-service` so as to easily install all the things needed for the -Measurmeent Plug-In SDK. +Measurement Plug-In SDK. For installation and usage, see [Measurement Plug-In SDK for Python (`ni-measurement-plugin-sdk-service`)](https://pypi.org/project/ni-measurement-plugin-sdk-service/). From a79ecad25080b38f8c84cb2985ff68611c73b176 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Wed, 10 Jul 2024 08:40:21 -0500 Subject: [PATCH 26/33] Fix install_examples script --- packages/service/scripts/install_examples.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/service/scripts/install_examples.py b/packages/service/scripts/install_examples.py index 399cf0153..80bd43b6c 100644 --- a/packages/service/scripts/install_examples.py +++ b/packages/service/scripts/install_examples.py @@ -7,7 +7,7 @@ import shutil import subprocess -ROOT_DIR = pathlib.Path(__file__).parent.parent +ROOT_DIR = pathlib.Path(__file__).parent.parent.parent.parent EXAMPLES_PATH = ROOT_DIR / "examples" SERVICES_PATH = ( pathlib.Path(os.environ["ProgramData"]) / "National Instruments" / "Plug-Ins" / "Measurements" From 1520d46b8f71450cd891a00ef5355e9ffe5a8f0a Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Wed, 10 Jul 2024 08:56:55 -0500 Subject: [PATCH 27/33] Clean out docs/ directory after building --- .github/workflows/check_nims.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check_nims.yml b/.github/workflows/check_nims.yml index e07f761e2..cb54579d7 100644 --- a/.github/workflows/check_nims.yml +++ b/.github/workflows/check_nims.yml @@ -80,7 +80,7 @@ jobs: mkdir -p docs poetry run sphinx-build _docs_source docs -b html -W --keep-going - name: Revert docs - run: git clean -dfx ../../docs/ && git restore ../../docs/ + run: git clean -dfx docs/ && git restore docs/ - name: Generate gRPC stubs run: | find ni_measurement_plugin_sdk_service/_internal/stubs/ -name \*_pb2.py\* -o -name \*_pb2_grpc.py\* -delete From f874cd65c6f3b40877deafda32000f97b3aae993 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Wed, 10 Jul 2024 09:13:51 -0500 Subject: [PATCH 28/33] Fix caching keys --- .github/workflows/check_examples.yml | 2 +- .github/workflows/check_nimg.yml | 4 ++-- .github/workflows/run_system_tests.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/check_examples.yml b/.github/workflows/check_examples.yml index 8e54a41ff..2ea2a2420 100644 --- a/.github/workflows/check_examples.yml +++ b/.github/workflows/check_examples.yml @@ -31,7 +31,7 @@ jobs: with: path: 'examples/**/poetry.lock' # Include the main project's poetry.lock in the hash to detect upstream dependency updates. - key: examples-poetry-lock-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('examples/**/pyproject.toml', 'poetry.lock') }} + key: examples-poetry-lock-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('examples/**/pyproject.toml', 'packages/service/poetry.lock') }} - name: Lock examples if: steps.cache-poetry-lock.outputs.cache-hit != 'true' run: | diff --git a/.github/workflows/check_nimg.yml b/.github/workflows/check_nimg.yml index 7381e1443..9990a0339 100644 --- a/.github/workflows/check_nimg.yml +++ b/.github/workflows/check_nimg.yml @@ -34,8 +34,8 @@ jobs: uses: actions/cache@v4 id: cache with: - path: ni_measurement_plugin_sdk_generator/.venv - key: ni-measurement-plugin-sdk-generator-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('poetry.lock') }} + path: packages/generator/.venv + key: ni-measurement-plugin-sdk-generator-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('packages/generator/poetry.lock') }} - name: Install ni-measurement-plugin-sdk-generator run: poetry install -v - name: Lint ni-measurement-plugin-sdk-generator diff --git a/.github/workflows/run_system_tests.yml b/.github/workflows/run_system_tests.yml index ef6a83f3f..4d6abe105 100644 --- a/.github/workflows/run_system_tests.yml +++ b/.github/workflows/run_system_tests.yml @@ -36,7 +36,7 @@ jobs: path: | .venv .tox - key: run-system-tests-${{ runner.os }}-${{ matrix.configuration }}-${{ hashFiles('poetry.lock') }} + key: run-system-tests-${{ runner.os }}-${{ matrix.configuration }}-${{ hashFiles('packages/service/poetry.lock') }} - name: Install dependencies run: poetry install -v - name: Run system tests From ea21e039432889dfbb29743c89d115c45da824e9 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Wed, 10 Jul 2024 09:37:48 -0500 Subject: [PATCH 29/33] Use rm -rf docs --- .github/workflows/check_nims.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check_nims.yml b/.github/workflows/check_nims.yml index cb54579d7..c5b468918 100644 --- a/.github/workflows/check_nims.yml +++ b/.github/workflows/check_nims.yml @@ -80,7 +80,7 @@ jobs: mkdir -p docs poetry run sphinx-build _docs_source docs -b html -W --keep-going - name: Revert docs - run: git clean -dfx docs/ && git restore docs/ + run: rm -rf docs - name: Generate gRPC stubs run: | find ni_measurement_plugin_sdk_service/_internal/stubs/ -name \*_pb2.py\* -o -name \*_pb2_grpc.py\* -delete From 355af1ad2bd0e31b11ebef2932ddc9a4a1d8e972 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Wed, 10 Jul 2024 10:23:01 -0500 Subject: [PATCH 30/33] Fix readthedocs configuration path --- .readthedocs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index 4da5fc8fd..0cc04b31e 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -13,4 +13,4 @@ build: - poetry install --with docs sphinx: - configuration: _docs_source/conf.py \ No newline at end of file + configuration: packages/service/_docs_source/conf.py \ No newline at end of file From 4da70f710121acb7f0923713a730156c19a2ff8e Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Wed, 10 Jul 2024 11:23:34 -0500 Subject: [PATCH 31/33] Update CNAME for readthedocs --- docs/CNAME | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/CNAME b/docs/CNAME index 18027287e..64f410635 100644 --- a/docs/CNAME +++ b/docs/CNAME @@ -1 +1 @@ -measurementlink-python.readthedocs.io \ No newline at end of file +measurement-plugin-python.readthedocs.io \ No newline at end of file From 8b61b191d07fda3ca07d339b696fa55ccb2c3813 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Wed, 10 Jul 2024 13:38:16 -0500 Subject: [PATCH 32/33] Update caching keys and locations --- .github/workflows/check_nims.yml | 12 ++++++------ .github/workflows/run_system_tests.yml | 4 ++-- .github/workflows/run_unit_tests.yml | 18 +++++++++--------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/check_nims.yml b/.github/workflows/check_nims.yml index c5b468918..5d4d8db8b 100644 --- a/.github/workflows/check_nims.yml +++ b/.github/workflows/check_nims.yml @@ -38,15 +38,15 @@ jobs: uses: actions/cache/restore@v4 id: restore-nims-all-extras with: - path: .venv - key: ni-measurement-plugin-sdk-service-all-extras-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('poetry.lock') }} + path: packages/service/.venv + key: ni-measurement-plugin-sdk-service-all-extras-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('packages/service/poetry.lock') }} - name: Install ni-measurement-plugin-sdk-service (all extras) run: poetry install -v --all-extras - name: Save cached virtualenv (ni-measurement-plugin-sdk-service, all extras) uses: actions/cache/save@v4 if: steps.restore-nims-all-extras.outputs.cache-hit != 'true' with: - path: .venv + path: packages/service/.venv key: ${{ steps.restore-nims-all-extras.outputs.cache-primary-key }} - name: Lint ni-measurement-plugin-sdk-service run: poetry run ni-python-styleguide lint @@ -64,15 +64,15 @@ jobs: uses: actions/cache/restore@v4 id: restore-nims-all-extras-docs with: - path: .venv - key: ni-measurement-plugin-sdk-service-all-extras-docs-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('poetry.lock') }} + path: packages/service/.venv + key: ni-measurement-plugin-sdk-service-all-extras-docs-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('packages/service/poetry.lock') }} - name: Install ni-measurement-plugin-sdk-service (all extras, docs) run: poetry install -v --all-extras --with docs - name: Save cached virtualenv (ni-measurement-plugin-sdk-service, all extras, docs) uses: actions/cache/save@v4 if: steps.restore-nims-all-extras-docs.outputs.cache-hit != 'true' with: - path: .venv + path: packages/service/.venv key: ${{ steps.restore-nims-all-extras-docs.outputs.cache-primary-key }} - name: Build docs and check for errors/warnings run: | diff --git a/.github/workflows/run_system_tests.yml b/.github/workflows/run_system_tests.yml index 4d6abe105..f49c6c2c2 100644 --- a/.github/workflows/run_system_tests.yml +++ b/.github/workflows/run_system_tests.yml @@ -34,8 +34,8 @@ jobs: id: cache with: path: | - .venv - .tox + packages/service/.venv + packages/service/.tox key: run-system-tests-${{ runner.os }}-${{ matrix.configuration }}-${{ hashFiles('packages/service/poetry.lock') }} - name: Install dependencies run: poetry install -v diff --git a/.github/workflows/run_unit_tests.yml b/.github/workflows/run_unit_tests.yml index ddd9cdb44..aa2fda1dc 100644 --- a/.github/workflows/run_unit_tests.yml +++ b/.github/workflows/run_unit_tests.yml @@ -36,8 +36,8 @@ jobs: uses: actions/cache/restore@v4 id: restore-nims-no-extras with: - path: .venv - key: ni-measurement-plugin-sdk-service-no-extras-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('poetry.lock') }} + path: packages/service/.venv + key: ni-measurement-plugin-sdk-service-no-extras-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('packages/service/poetry.lock') }} - name: Install ni-measurement-plugin-sdk-service (no extras) run: poetry install -v working-directory: ./packages/service @@ -45,7 +45,7 @@ jobs: uses: actions/cache/save@v4 if: steps.restore-nims-no-extras.outputs.cache-hit != 'true' with: - path: .venv + path: packages/service/.venv key: ${{ steps.restore-nims-no-extras.outputs.cache-primary-key }} - name: Run unit tests and code coverage (ni-measurement-plugin-sdk-service, no extras) run: poetry run pytest ./tests/unit -v --cov=ni_measurement_plugin_sdk_service --junitxml=test_results/nims-${{ matrix.os }}-py${{ matrix.python-version}}-no-extras.xml @@ -56,8 +56,8 @@ jobs: uses: actions/cache/restore@v4 id: restore-nims-all-extras with: - path: .venv - key: ni-measurement-plugin-sdk-service-all-extras-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('poetry.lock') }} + path: packages/service/.venv + key: ni-measurement-plugin-sdk-service-all-extras-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('packages/service/poetry.lock') }} - name: Install ni-measurement-plugin-sdk-service (all extras) run: poetry install -v --all-extras working-directory: ./packages/service @@ -65,7 +65,7 @@ jobs: uses: actions/cache/save@v4 if: steps.restore-nims-all-extras.outputs.cache-hit != 'true' with: - path: .venv + path: packages/service/.venv key: ${{ steps.restore-nims-all-extras.outputs.cache-primary-key }} - name: Run unit tests and code coverage (ni-measurement-plugin-sdk-service, all extras) run: poetry run pytest ./tests/unit -v --cov=ni_measurement_plugin_sdk_service --junitxml=test_results/nims-${{ matrix.os }}-py${{ matrix.python-version}}-all-extras.xml @@ -76,8 +76,8 @@ jobs: uses: actions/cache/restore@v4 id: restore-nimg with: - path: ni_measurement_plugin_sdk_generator/.venv - key: ni-measurement-plugin-sdk-generator-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('poetry.lock') }} + path: packages/generator/.venv + key: ni-measurement-plugin-sdk-generator-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('packages/generator/poetry.lock') }} - name: Install ni-measurement-plugin-sdk-generator run: poetry install -v working-directory: ./packages/generator @@ -85,7 +85,7 @@ jobs: uses: actions/cache/save@v4 if: steps.restore-nimg.outputs.cache-hit != 'true' with: - path: ni_measurement_plugin_sdk_generator/.venv + path: packages/generator/.venv key: ${{ steps.restore-nimg.outputs.cache-primary-key }} - name: Run tests and code coverage (ni-measurement-plugin-sdk-generator) run: poetry run pytest -v --cov=ni_measurement_plugin_sdk_generator --junitxml=test_results/nimg-${{ matrix.os }}-py${{ matrix.python-version}}.xml From 9698408bb624a9283d3ce2a9e57dfca518489db6 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Wed, 10 Jul 2024 13:41:34 -0500 Subject: [PATCH 33/33] Update poetry version for readthedocs --- .readthedocs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index 0cc04b31e..3f8152860 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -6,7 +6,7 @@ build: python: "3.9" jobs: post_create_environment: - - pip install poetry==1.2.2 + - pip install poetry==1.8.2 # Tell poetry to not use a virtual environment - poetry config virtualenvs.create false post_install: