diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 6514d043d..c157d9f08 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -12,9 +12,18 @@ jobs: check_nims: name: Check NIMS uses: ./.github/workflows/check_nims.yml + check_nims_docs: + name: Check NIMS docs + uses: ./.github/workflows/check_nims_docs.yml check_nimg: name: Check NIMG uses: ./.github/workflows/check_nimg.yml + checks_succeeded: + name: Checks succeeded + needs: [check_nims, check_nims_docs, check_nimg] + runs-on: ubuntu-latest + steps: + - run: exit 0 check_examples: name: Check examples uses: ./.github/workflows/check_examples.yml @@ -22,6 +31,12 @@ jobs: name: Run unit tests uses: ./.github/workflows/run_unit_tests.yml needs: [check_nims] + unit_tests_succeeded: + name: Unit tests succeeded + needs: [run_unit_tests] + runs-on: ubuntu-latest + steps: + - run: exit 0 run_system_tests: name: Run system tests uses: ./.github/workflows/run_system_tests.yml diff --git a/.github/workflows/check_nimg.yml b/.github/workflows/check_nimg.yml index f656d274a..78a99192b 100644 --- a/.github/workflows/check_nimg.yml +++ b/.github/workflows/check_nimg.yml @@ -7,7 +7,13 @@ on: jobs: check_nimg: name: Check NIMG - runs-on: ubuntu-latest + env: + oldest-python-version: '3.9' + strategy: + matrix: + os: [windows-latest, ubuntu-latest, macos-latest] + python-version: [3.9, 3.13] + runs-on: ${{ matrix.os }} defaults: run: # Set the working-directory for all steps in this job. @@ -18,33 +24,26 @@ jobs: - name: Set up Python uses: ni/python-actions/setup-python@9768589f3e50672173dad75a6fc181e4a85d33fa # v0.7.0 id: setup-python + with: + python-version: ${{ matrix.python-version }} - name: Set up Poetry uses: ni/python-actions/setup-poetry@9768589f3e50672173dad75a6fc181e4a85d33fa # v0.7.0 - - name: Check for lock changes (ni-measurement-plugin-sdk-generator) - run: poetry check --lock - - name: Cache virtualenv (ni-measurement-plugin-sdk-generator) - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 - id: cache + - name: Analyze generator + uses: ni/python-actions/analyze-project@9768589f3e50672173dad75a6fc181e4a85d33fa # v0.7.0 with: - 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 - run: poetry run ni-python-styleguide lint - - name: Mypy static analysis (ni-measurement-plugin-sdk-generator, Linux) - run: poetry run mypy - - name: Mypy static analysis (ni-measurement-plugin-sdk-generator, Windows) - run: poetry run mypy --platform win32 + project-directory: packages/generator - name: Bandit security checks (ni-measurement-plugin-sdk-generator, example_renders) run: poetry run bandit -c pyproject.toml -r ni_measurement_plugin_sdk_generator tests/test_assets/example_renders - name: Generate gRPC stubs + if: matrix.python-version == env.oldest-python-version run: | find tests/utilities/measurements/non_streaming_data_measurement/_stubs -name \*_pb2.py\* -o -name \*_pb2_grpc.py\* -delete poetry run python scripts/generate_grpc_stubs.py - name: Check for out-of-date gRPC stubs + if: matrix.python-version == env.oldest-python-version run: git diff --exit-code - name: Revert gRPC stubs + if: matrix.python-version == env.oldest-python-version run: | git clean -dfx tests/utilities/measurements/non_streaming_data_measurement/_stubs git restore tests/utilities/measurements/non_streaming_data_measurement/_stubs diff --git a/.github/workflows/check_nims.yml b/.github/workflows/check_nims.yml index 2fa8f3a03..c7a4c9833 100644 --- a/.github/workflows/check_nims.yml +++ b/.github/workflows/check_nims.yml @@ -7,7 +7,13 @@ on: jobs: check_nims: name: Check NIMS - runs-on: ubuntu-latest + env: + oldest-python-version: '3.9' + strategy: + matrix: + os: [windows-latest, ubuntu-latest, macos-latest] + python-version: [3.9, 3.13] + runs-on: ${{ matrix.os }} defaults: run: # Set the working-directory for all steps in this job. @@ -20,64 +26,27 @@ jobs: - name: Set up Python uses: ni/python-actions/setup-python@9768589f3e50672173dad75a6fc181e4a85d33fa # v0.7.0 id: setup-python + with: + python-version: ${{ matrix.python-version }} - name: Set up Poetry uses: ni/python-actions/setup-poetry@9768589f3e50672173dad75a6fc181e4a85d33fa # v0.7.0 - - name: Check for lock changes (ni-measurement-plugin-sdk-service) - run: poetry check --lock - - # ni-measurement-plugin-sdk-service, all extras - - name: Restore cached virtualenv (ni-measurement-plugin-sdk-service, all extras) - uses: actions/cache/restore@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 - id: restore-nims-all-extras + - name: Analyze generator + uses: ni/python-actions/analyze-project@9768589f3e50672173dad75a6fc181e4a85d33fa # v0.7.0 with: - 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@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 - if: steps.restore-nims-all-extras.outputs.cache-hit != 'true' - with: - 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 - - name: Mypy static analysis (ni-measurement-plugin-sdk-service, Linux) - run: poetry run mypy - - name: Mypy static analysis (ni-measurement-plugin-sdk-service, Windows) - run: poetry run mypy --platform win32 + project-directory: packages/service + install-args: --all-extras - name: Bandit security checks (ni-measurement-plugin-sdk-service) run: poetry run bandit -c pyproject.toml -r ni_measurement_plugin_sdk_service - - # ni-measurement-plugin-sdk-service, all extras, docs - - name: Restore cached virtualenv (ni-measurement-plugin-sdk-service, all extras, docs) - uses: actions/cache/restore@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 - id: restore-nims-all-extras-docs - with: - 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@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 - if: steps.restore-nims-all-extras-docs.outputs.cache-hit != 'true' - with: - path: packages/service/.venv - key: ${{ steps.restore-nims-all-extras-docs.outputs.cache-primary-key }} - - name: Build docs and check for errors/warnings - run: | - rm -rf docs - mkdir -p docs - poetry run sphinx-build _docs_source docs -b html -W - - name: Revert docs - run: rm -rf docs - name: Generate gRPC stubs + if: matrix.python-version == env.oldest-python-version run: | find tests/utilities/stubs/ -name \*_pb2.py\* -o -name \*_pb2_grpc.py\* -delete poetry run python scripts/generate_grpc_stubs.py - name: Check for out-of-date gRPC stubs + if: matrix.python-version == env.oldest-python-version run: git diff --exit-code - name: Revert gRPC stubs + if: matrix.python-version == env.oldest-python-version run: | git clean -dfx tests/utilities/stubs/ git restore tests/utilities/stubs/ diff --git a/.github/workflows/check_nims_docs.yml b/.github/workflows/check_nims_docs.yml new file mode 100644 index 000000000..0c9f5ec7f --- /dev/null +++ b/.github/workflows/check_nims_docs.yml @@ -0,0 +1,33 @@ +name: Check NIMS Docs + +on: + workflow_call: + workflow_dispatch: + +jobs: + check_nims: + name: Check NIMS Docs + 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@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + submodules: true + - name: Set up Python + uses: ni/python-actions/setup-python@9768589f3e50672173dad75a6fc181e4a85d33fa # v0.7.0 + id: setup-python + - name: Set up Poetry + uses: ni/python-actions/setup-poetry@9768589f3e50672173dad75a6fc181e4a85d33fa # v0.7.0 + - name: Install ni-measurement-plugin-sdk-service (all extras, docs) + run: poetry install -v --all-extras --with docs + - name: Build docs and check for errors/warnings + run: | + rm -rf docs + mkdir -p docs + poetry run sphinx-build _docs_source docs -b html -W + - name: Revert docs + run: rm -rf docs \ No newline at end of file diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index cbacf0380..84038c5f9 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -43,10 +43,13 @@ jobs: check_nims: name: Check service uses: ./.github/workflows/check_nims.yml + check_nims_docs: + name: Check NIMS docs + uses: ./.github/workflows/check_nims_docs.yml build_package: name: Build ${{ matrix.package }} runs-on: ubuntu-latest - needs: [check_nimg, check_nims] + needs: [check_nimg, check_nims, check_nims_docs] strategy: matrix: package: [generator, sdk, service] diff --git a/packages/service/ni_measurement_plugin_sdk_service/_configuration.py b/packages/service/ni_measurement_plugin_sdk_service/_configuration.py index d2122583b..4cf3e3cc1 100644 --- a/packages/service/ni_measurement_plugin_sdk_service/_configuration.py +++ b/packages/service/ni_measurement_plugin_sdk_service/_configuration.py @@ -18,11 +18,10 @@ _PREFIX = "MEASUREMENT_PLUGIN" -_config = AutoConfig(str(get_dotenv_search_path())) +# Work around decouple's lack of type hints. +_T = TypeVar("_T") if TYPE_CHECKING: - # Work around decouple's lack of type hints. - _T = TypeVar("_T") def _config( option: str, @@ -30,6 +29,9 @@ def _config( cast: Callable[[str], _T] | Undefined = undefined, ) -> _T: ... +else: + _config = AutoConfig(str(get_dotenv_search_path())) + # ---------------------------------------------------------------------- # NI Modular Instrument Driver Options diff --git a/packages/service/ni_measurement_plugin_sdk_service/_tracelogging.py b/packages/service/ni_measurement_plugin_sdk_service/_tracelogging.py deleted file mode 100644 index 8d0d33523..000000000 --- a/packages/service/ni_measurement_plugin_sdk_service/_tracelogging.py +++ /dev/null @@ -1,210 +0,0 @@ -from __future__ import annotations - -import ctypes -import sys -import uuid -from typing import TYPE_CHECKING - -if sys.platform == "win32": - try: - import traceloggingdynamic - - _event_provider: traceloggingdynamic.Provider | None = traceloggingdynamic.Provider( - b"NI-Measurement-Plug-In-Python" - ) - except ImportError: - _event_provider = None -else: - if TYPE_CHECKING: - import traceloggingdynamic - - _event_provider = None - -_LEVEL_LOG_ALWAYS = 0 -_LEVEL_CRITICAL = 1 -_LEVEL_ERROR = 3 -_LEVEL_WARNING = 3 -_LEVEL_INFO = 4 -_LEVEL_VERBOSE = 5 - -_OPCODE_INFO = 0 -_OPCODE_START = 1 -_OPCODE_STOP = 2 - -_KEYWORD_NONE = 0 -_KEYWORD_GRPC = 1 << 0 - -_TASK_GRPC_CLIENT_CALL = 1 -_TASK_GRPC_SERVER_CALL = 2 - - -if sys.platform == "win32": - # 0x00000800 = LOAD_LIBRARY_SEARCH_SYSTEM32 (Win8 or later) - _eventing_dll = ctypes.WinDLL("api-ms-win-eventing-provider-l1-1-0.dll", mode=0x00000800) - - _EventActivityIdControl = _eventing_dll.EventActivityIdControl - _EventActivityIdControl.restype = ctypes.c_uint32 - _EventActivityIdControl.argtypes = (ctypes.c_uint32, ctypes.c_void_p) - - _EVENT_ACTIVITY_CTRL_GET_ID = 1 - _EVENT_ACTIVITY_CTRL_SET_ID = 2 - _EVENT_ACTIVITY_CTRL_CREATE_ID = 3 - _EVENT_ACTIVITY_CTRL_GET_SET_ID = 4 - _EVENT_ACTIVITY_CTRL_CREATE_SET_ID = 5 - - def _create_activity_id() -> uuid.UUID: - activity_bytes = (ctypes.c_byte * 16)() - status = _EventActivityIdControl( - _EVENT_ACTIVITY_CTRL_CREATE_ID, ctypes.pointer(activity_bytes) - ) - if status != 0: - raise OSError("EventActivityIdControl error", status) - return uuid.UUID(bytes_le=bytes(activity_bytes)) - - def _get_current_thread_activity_id() -> uuid.UUID: - activity_bytes = (ctypes.c_byte * 16)() - status = _EventActivityIdControl( - _EVENT_ACTIVITY_CTRL_GET_ID, ctypes.pointer(activity_bytes) - ) - if status != 0: - raise OSError("EventActivityIdControl error", status) - return uuid.UUID(bytes_le=bytes(activity_bytes)) - -else: - - def _create_activity_id() -> uuid.UUID: - return uuid.uuid4() - - def _get_current_thread_activity_id() -> uuid.UUID: - return uuid.UUID() - - -def is_enabled() -> bool: - """Queries whether the event provider is enabled.""" - return _event_provider is not None and _event_provider.is_enabled() - - -def log_grpc_client_call_start(method_name: str) -> uuid.UUID | None: - """Log when starting a gRPC client call.""" - if _event_provider and _event_provider.is_enabled(level=_LEVEL_INFO, keyword=_KEYWORD_GRPC): - eb = traceloggingdynamic.EventBuilder() - eb.reset( - b"GrpcClientCall", - level=_LEVEL_INFO, - keyword=_KEYWORD_GRPC, - opcode=_OPCODE_START, - task=_TASK_GRPC_CLIENT_CALL, - ) - eb.add_str8(b"FormattedMessage", "gRPC client call starting: " + method_name) - activity_id = _create_activity_id() - related_activity_id = _get_current_thread_activity_id() - _event_provider.write(eb, activity_id, related_activity_id) - return activity_id - else: - return None - - -def log_grpc_client_call_stop(method_name: str, activity_id: uuid.UUID | None = None) -> None: - """Log when a gRPC client call has completed.""" - if _event_provider and _event_provider.is_enabled(level=_LEVEL_INFO, keyword=_KEYWORD_GRPC): - eb = traceloggingdynamic.EventBuilder() - eb.reset( - b"GrpcClientCall", - level=_LEVEL_INFO, - keyword=_KEYWORD_GRPC, - opcode=_OPCODE_STOP, - task=_TASK_GRPC_CLIENT_CALL, - ) - eb.add_str8(b"FormattedMessage", "gRPC client call complete: " + method_name) - _event_provider.write(eb, activity_id) - - -def log_grpc_client_call_streaming_request(method_name: str) -> None: - """Log when a gRPC client call is sending a client-streaming request.""" - if _event_provider and _event_provider.is_enabled(level=_LEVEL_INFO, keyword=_KEYWORD_GRPC): - eb = traceloggingdynamic.EventBuilder() - eb.reset( - b"GrpcClientCallStreamingRequest", - level=_LEVEL_INFO, - keyword=_KEYWORD_GRPC, - opcode=_OPCODE_INFO, - ) - eb.add_str8(b"FormattedMessage", "gRPC client call streaming request: " + method_name) - _event_provider.write(eb) - - -def log_grpc_client_call_streaming_response(method_name: str) -> None: - """Log when a gRPC client call has received a server-streaming response.""" - if _event_provider and _event_provider.is_enabled(level=_LEVEL_INFO, keyword=_KEYWORD_GRPC): - eb = traceloggingdynamic.EventBuilder() - eb.reset( - b"GrpcClientCallStreamingResponse", - level=_LEVEL_INFO, - keyword=_KEYWORD_GRPC, - opcode=_OPCODE_INFO, - ) - eb.add_str8(b"FormattedMessage", "gRPC client call streaming response: " + method_name) - _event_provider.write(eb) - - -def log_grpc_server_call_start(method_name: str) -> uuid.UUID | None: - """Log when starting a gRPC server call.""" - if _event_provider and _event_provider.is_enabled(level=_LEVEL_INFO, keyword=_KEYWORD_GRPC): - eb = traceloggingdynamic.EventBuilder() - eb.reset( - b"GrpcServerCall", - level=_LEVEL_INFO, - keyword=_KEYWORD_GRPC, - opcode=_OPCODE_START, - task=_TASK_GRPC_SERVER_CALL, - ) - eb.add_str8(b"FormattedMessage", "gRPC server call starting: " + method_name) - activity_id = _create_activity_id() - related_activity_id = _get_current_thread_activity_id() - _event_provider.write(eb, activity_id, related_activity_id) - return activity_id - else: - return None - - -def log_grpc_server_call_stop(method_name: str, activity_id: uuid.UUID | None = None) -> None: - """Log when a gRPC server call has completed.""" - if _event_provider and _event_provider.is_enabled(level=_LEVEL_INFO, keyword=_KEYWORD_GRPC): - eb = traceloggingdynamic.EventBuilder() - eb.reset( - b"GrpcServerCall", - level=_LEVEL_INFO, - keyword=_KEYWORD_GRPC, - opcode=_OPCODE_STOP, - task=_TASK_GRPC_SERVER_CALL, - ) - eb.add_str8(b"FormattedMessage", "gRPC server call complete: " + method_name) - _event_provider.write(eb, activity_id) - - -def log_grpc_server_call_streaming_request(method_name: str) -> None: - """Log when a gRPC server call is sending a server-streaming request.""" - if _event_provider and _event_provider.is_enabled(level=_LEVEL_INFO, keyword=_KEYWORD_GRPC): - eb = traceloggingdynamic.EventBuilder() - eb.reset( - b"GrpcServerCallStreamingRequest", - level=_LEVEL_INFO, - keyword=_KEYWORD_GRPC, - opcode=_OPCODE_INFO, - ) - eb.add_str8(b"FormattedMessage", "gRPC server call streaming request: " + method_name) - _event_provider.write(eb) - - -def log_grpc_server_call_streaming_response(method_name: str) -> None: - """Log when a gRPC server call has received a server-streaming response.""" - if _event_provider and _event_provider.is_enabled(level=_LEVEL_INFO, keyword=_KEYWORD_GRPC): - eb = traceloggingdynamic.EventBuilder() - eb.reset( - b"GrpcServerCallStreamingResponse", - level=_LEVEL_INFO, - keyword=_KEYWORD_GRPC, - opcode=_OPCODE_INFO, - ) - eb.add_str8(b"FormattedMessage", "gRPC server call streaming response: " + method_name) - _event_provider.write(eb) diff --git a/packages/service/poetry.lock b/packages/service/poetry.lock index d22f8857a..6d0f468ce 100644 --- a/packages/service/poetry.lock +++ b/packages/service/poetry.lock @@ -33,6 +33,7 @@ description = "An abstract syntax tree for Python with inference support." optional = false python-versions = ">=3.9.0" groups = ["docs"] +markers = "python_version <= \"3.11\"" files = [ {file = "astroid-3.3.11-py3-none-any.whl", hash = "sha256:54c760ae8322ece1abd213057c4b5bba7c49818853fc901ef09719a60dbf9dec"}, {file = "astroid-3.3.11.tar.gz", hash = "sha256:1e5a5011af2920c7c67a53f65d536d65bfa7116feeaf2354d8b94f29573bb0ce"}, @@ -41,6 +42,19 @@ files = [ [package.dependencies] typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} +[[package]] +name = "astroid" +version = "4.0.0" +description = "An abstract syntax tree for Python with inference support." +optional = false +python-versions = ">=3.10.0" +groups = ["docs"] +markers = "python_version >= \"3.12\"" +files = [ + {file = "astroid-4.0.0-py3-none-any.whl", hash = "sha256:235980d60cdf94f63d1084d6e7fb4c1718a7f461149fc5800834e4625632f5ac"}, + {file = "astroid-4.0.0.tar.gz", hash = "sha256:b1bf640a2dbd198e26516fce7757f6484a28fb6e77d8d19eb965bf84d4c0997b"}, +] + [[package]] name = "babel" version = "2.17.0" @@ -144,14 +158,14 @@ files = [ [[package]] name = "certifi" -version = "2025.8.3" +version = "2025.10.5" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.7" groups = ["main", "docs"] files = [ - {file = "certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5"}, - {file = "certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407"}, + {file = "certifi-2025.10.5-py3-none-any.whl", hash = "sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de"}, + {file = "certifi-2025.10.5.tar.gz", hash = "sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43"}, ] markers = {main = "extra == \"drivers\" or extra == \"nidaqmx\""} @@ -284,7 +298,7 @@ files = [ {file = "click-8.3.0-py3-none-any.whl", hash = "sha256:9b9f285302c6e3064f4330c05f05b81945b2a39544279343e6e7c5f27a9baddc"}, {file = "click-8.3.0.tar.gz", hash = "sha256:e7b8232224eba16f4ebe410c25ced9f7875cb5f3263ffc93cc3e8da705e229c4"}, ] -markers = {main = "(extra == \"drivers\" or extra == \"nidaqmx\") and python_version >= \"3.10\"", dev = "python_version >= \"3.10\"", docs = "python_version >= \"3.10\""} +markers = {main = "python_version >= \"3.10\" and (extra == \"drivers\" or extra == \"nidaqmx\")", dev = "python_version >= \"3.10\"", docs = "python_version >= \"3.10\""} [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} @@ -2539,20 +2553,20 @@ test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=8.0)", "pytest-xdis [[package]] name = "sphinx-autoapi" -version = "3.6.0" +version = "3.6.1" description = "Sphinx API documentation generator" optional = false python-versions = ">=3.9" groups = ["docs"] files = [ - {file = "sphinx_autoapi-3.6.0-py3-none-any.whl", hash = "sha256:f3b66714493cab140b0e896d33ce7137654a16ac1edb6563edcbd47bf975f711"}, - {file = "sphinx_autoapi-3.6.0.tar.gz", hash = "sha256:c685f274e41d0842ae7e199460c322c4bd7fec816ccc2da8d806094b4f64af06"}, + {file = "sphinx_autoapi-3.6.1-py3-none-any.whl", hash = "sha256:6b7af0d5650f6eac1f4b85c1eb9f9a4911160ec7138bdc4451c77a5e94d5832c"}, + {file = "sphinx_autoapi-3.6.1.tar.gz", hash = "sha256:1ff2992b7d5e39ccf92413098a376e0f91e7b4ca532c4f3e71298dbc8a4a9900"}, ] [package.dependencies] astroid = [ - {version = ">=2.7", markers = "python_version < \"3.12\""}, - {version = ">=3", markers = "python_version >= \"3.12\""}, + {version = ">=3.0,<4.0", markers = "python_version < \"3.12\""}, + {version = ">=4.0,<5.0", markers = "python_version >= \"3.12\""}, ] Jinja2 = "*" PyYAML = "*" @@ -2852,8 +2866,8 @@ version = "1.0.1" description = "Generates Event Tracing for Windows events using TraceLogging" optional = false python-versions = ">=3.6" -groups = ["main", "dev"] -markers = "sys_platform == \"win32\" or sys_platform == \"linux\"" +groups = ["main"] +markers = "sys_platform == \"win32\"" files = [ {file = "traceloggingdynamic-1.0.1-py3-none-any.whl", hash = "sha256:0e19da491a8960725b3622366487ae35f49d8f595bb2e4e5ce1795eb5928db7c"}, {file = "traceloggingdynamic-1.0.1.tar.gz", hash = "sha256:d9dd4b291dd04c15e34181eed06f73fdf4ffa7b1f895b78217163def48ab1a52"}, @@ -2939,7 +2953,7 @@ description = "Provider of IANA time zone data" optional = true python-versions = ">=2" groups = ["main"] -markers = "(extra == \"drivers\" or extra == \"nidaqmx\") and platform_system == \"Windows\"" +markers = "platform_system == \"Windows\" and (extra == \"drivers\" or extra == \"nidaqmx\")" files = [ {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, @@ -3039,4 +3053,4 @@ niswitch = ["niswitch"] [metadata] lock-version = "2.1" python-versions = "^3.9" -content-hash = "156f20176ad6808243ffd36d0b50c485e232998df51335016558a79048ff18f2" +content-hash = "2974d8471748ed0cdc4965016f3352bc9d239abbc3544911b37c1e5d4d59df69" diff --git a/packages/service/pyproject.toml b/packages/service/pyproject.toml index 4226d4aaf..d723cbf92 100644 --- a/packages/service/pyproject.toml +++ b/packages/service/pyproject.toml @@ -34,7 +34,6 @@ grpcio = "^1.49.1" protobuf = ">=4.21" pywin32 = { version = ">=303", platform = "win32" } deprecation = ">=2.1" -traceloggingdynamic = { version = ">=1.0", platform = "win32" } python-decouple = ">=3.8" nidaqmx = { version = ">=0.8.0", extras = ["grpc"], optional = true } nidcpower = { version = ">=1.4.4", extras = ["grpc"], optional = true } @@ -99,8 +98,6 @@ numpy = [ { version = ">=2.1", python = "^3.13"}, ] bandit = { version = ">=1.7", extras = ["toml"] } -# Install traceloggingdynamic on Linux for type checking. -traceloggingdynamic = { version = ">=1.0", platform = "linux" } [tool.poetry.group.docs] optional = true