diff --git a/.github/actions/run_and_upload_unit_tests/action.yml b/.github/actions/run_and_upload_unit_tests/action.yml index 6f54081d..40fd1f32 100644 --- a/.github/actions/run_and_upload_unit_tests/action.yml +++ b/.github/actions/run_and_upload_unit_tests/action.yml @@ -15,7 +15,7 @@ runs: run: echo "osVersion=$ImageOS" >> "$GITHUB_ENV" shell: bash - name: Cache ${{ inputs.package-name }} virtualenv - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: path: ${{ github.workspace }}/${{ inputs.package-basepath }}/${{ inputs.package-name }}/.venv key: ${{ inputs.package-name }}-${{ runner.os }}-py${{ env.pythonVersion }}-${{ hashFiles(format('{0}/{1}/poetry.lock', inputs.package-basepath, inputs.package-name)) }} diff --git a/.github/workflows/check_analyzers.yml b/.github/workflows/check_analyzers.yml index c2e488c0..0eb8508f 100644 --- a/.github/workflows/check_analyzers.yml +++ b/.github/workflows/check_analyzers.yml @@ -37,14 +37,14 @@ jobs: with: submodules: true - name: Set up Python - uses: ni/python-actions/setup-python@1b90235a5fcc5e52f0e39e8d2ae9e91d3e3903f2 # v0.6.0 + uses: ni/python-actions/setup-python@f42e2f27a585f5d47efcab79b608ec0ec97191c9 # v0.6.1 id: setup-python with: python-version: ${{ matrix.python-version }} - name: Set up Poetry - uses: ni/python-actions/setup-poetry@1b90235a5fcc5e52f0e39e8d2ae9e91d3e3903f2 # v0.6.0 + uses: ni/python-actions/setup-poetry@f42e2f27a585f5d47efcab79b608ec0ec97191c9 # v0.6.1 - name: Analyze Python Project - uses: ni/python-actions/analyze-project@1b90235a5fcc5e52f0e39e8d2ae9e91d3e3903f2 # v0.6.0 + uses: ni/python-actions/analyze-project@f42e2f27a585f5d47efcab79b608ec0ec97191c9 # v0.6.1 with: project-directory: ${{ github.workspace }}/${{ inputs.package-basepath }}/${{ inputs.package-name }} extras: ${{ inputs.install-extras }} diff --git a/.github/workflows/check_codegen.yml b/.github/workflows/check_codegen.yml index d06bb6d0..d45f86a4 100644 --- a/.github/workflows/check_codegen.yml +++ b/.github/workflows/check_codegen.yml @@ -49,14 +49,14 @@ jobs: with: submodules: true - name: Set up Python - uses: ni/python-actions/setup-python@1b90235a5fcc5e52f0e39e8d2ae9e91d3e3903f2 # v0.6.0 + uses: ni/python-actions/setup-python@f42e2f27a585f5d47efcab79b608ec0ec97191c9 # v0.6.1 id: setup-python - name: Set up Poetry - uses: ni/python-actions/setup-poetry@1b90235a5fcc5e52f0e39e8d2ae9e91d3e3903f2 # v0.6.0 + uses: ni/python-actions/setup-poetry@f42e2f27a585f5d47efcab79b608ec0ec97191c9 # v0.6.1 - name: Check for lock changes run: poetry check --lock - name: Cache virtualenv - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: path: ${{ github.workspace }}/tools/grpc_generator/.venv key: grpc_generator-only-main-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('tools/grpc_generator/poetry.lock') }} diff --git a/.github/workflows/check_docs.yml b/.github/workflows/check_docs.yml index 883e7a2e..a1e9de02 100644 --- a/.github/workflows/check_docs.yml +++ b/.github/workflows/check_docs.yml @@ -26,14 +26,14 @@ jobs: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Set up Python - uses: ni/python-actions/setup-python@1b90235a5fcc5e52f0e39e8d2ae9e91d3e3903f2 # v0.6.0 + uses: ni/python-actions/setup-python@f42e2f27a585f5d47efcab79b608ec0ec97191c9 # v0.6.1 id: setup-python - name: Set up Poetry - uses: ni/python-actions/setup-poetry@1b90235a5fcc5e52f0e39e8d2ae9e91d3e3903f2 # v0.6.0 + uses: ni/python-actions/setup-poetry@f42e2f27a585f5d47efcab79b608ec0ec97191c9 # v0.6.1 - name: Check for lock changes run: poetry check --lock - name: Cache virtualenv (with docs) - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: path: ${{ github.workspace }}/${{ inputs.package-basepath }}/${{ inputs.package-name }}/.venv key: ${{ inputs.package-name }}-with-docs-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles(format('{0}/{1}/poetry.lock', inputs.package-basepath, inputs.package-name)) }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index cfbdca58..2380a249 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -100,12 +100,12 @@ jobs: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Set up Python - uses: ni/python-actions/setup-python@1b90235a5fcc5e52f0e39e8d2ae9e91d3e3903f2 # v0.6.0 + uses: ni/python-actions/setup-python@f42e2f27a585f5d47efcab79b608ec0ec97191c9 # v0.6.1 - name: Set up Poetry - uses: ni/python-actions/setup-poetry@1b90235a5fcc5e52f0e39e8d2ae9e91d3e3903f2 # v0.6.0 + uses: ni/python-actions/setup-poetry@f42e2f27a585f5d47efcab79b608ec0ec97191c9 # v0.6.1 - name: Check project version if: github.event_name == 'release' - uses: ni/python-actions/check-project-version@1b90235a5fcc5e52f0e39e8d2ae9e91d3e3903f2 # v0.6.0 + uses: ni/python-actions/check-project-version@f42e2f27a585f5d47efcab79b608ec0ec97191c9 # v0.6.1 with: project-directory: ./${{ needs.get_package_info.outputs.package-basepath }}/${{ needs.get_publish_info.outputs.package-name }} expected-version: ${{ needs.get_publish_info.outputs.package-version }} @@ -152,11 +152,11 @@ jobs: - name: Check out repo uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Set up Python - uses: ni/python-actions/setup-python@1b90235a5fcc5e52f0e39e8d2ae9e91d3e3903f2 # v0.6.0 + uses: ni/python-actions/setup-python@f42e2f27a585f5d47efcab79b608ec0ec97191c9 # v0.6.1 - name: Set up Poetry - uses: ni/python-actions/setup-poetry@1b90235a5fcc5e52f0e39e8d2ae9e91d3e3903f2 # v0.6.0 + uses: ni/python-actions/setup-poetry@f42e2f27a585f5d47efcab79b608ec0ec97191c9 # v0.6.1 - name: Update project version - uses: ni/python-actions/update-project-version@1b90235a5fcc5e52f0e39e8d2ae9e91d3e3903f2 # v0.6.0 + uses: ni/python-actions/update-project-version@f42e2f27a585f5d47efcab79b608ec0ec97191c9 # v0.6.1 with: project-directory: ./${{ needs.get_package_info.outputs.package-basepath }}/${{ needs.get_publish_info.outputs.package-name }} branch-prefix: users/build/${{ needs.get_publish_info.outputs.package-name }}- diff --git a/.github/workflows/run_unit_tests.yml b/.github/workflows/run_unit_tests.yml index cc9a2c30..fe09ffd7 100644 --- a/.github/workflows/run_unit_tests.yml +++ b/.github/workflows/run_unit_tests.yml @@ -41,12 +41,12 @@ jobs: with: submodules: true - name: Set up Python - uses: ni/python-actions/setup-python@1b90235a5fcc5e52f0e39e8d2ae9e91d3e3903f2 # v0.6.0 + uses: ni/python-actions/setup-python@f42e2f27a585f5d47efcab79b608ec0ec97191c9 # v0.6.1 id: setup-python with: python-version: ${{ inputs.python-version }} - name: Set up Poetry - uses: ni/python-actions/setup-poetry@1b90235a5fcc5e52f0e39e8d2ae9e91d3e3903f2 # v0.6.0 + uses: ni/python-actions/setup-poetry@f42e2f27a585f5d47efcab79b608ec0ec97191c9 # v0.6.1 - name: Run and upload unit tests for ${{ inputs.package-name }} uses: ./.github/actions/run_and_upload_unit_tests with: diff --git a/packages/ni-grpc-extensions/poetry.lock b/packages/ni-grpc-extensions/poetry.lock index 27cd4789..cc014c89 100644 --- a/packages/ni-grpc-extensions/poetry.lock +++ b/packages/ni-grpc-extensions/poetry.lock @@ -885,7 +885,7 @@ name = "ni-measurementlink-discovery-v1-proto" version = "0.1.0-dev2" description = "Protobuf data types for NI discovery gRPC APIs" optional = false -python-versions = "^3.9" +python-versions = ">=3.9,<4.0" groups = ["test"] files = [] develop = false @@ -1770,8 +1770,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"}, @@ -1844,4 +1844,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.9,<4.0" -content-hash = "a0204212545e044234226f5afd7c12ce8b8c5738cf53365034ac0005b0cde9b2" +content-hash = "4a0aee0cafb73e976d340ee2ac1a05889f7630f36a4d5677d9405d1f90b59516" diff --git a/packages/ni-grpc-extensions/pyproject.toml b/packages/ni-grpc-extensions/pyproject.toml index b7f56ad6..77d94cc5 100644 --- a/packages/ni-grpc-extensions/pyproject.toml +++ b/packages/ni-grpc-extensions/pyproject.toml @@ -43,8 +43,6 @@ traceloggingdynamic = { version = ">=1.0", platform = "win32" } [tool.poetry.group.dev.dependencies] types-grpcio = ">=1.0" -# Install traceloggingdynamic on Linux for type checking. -traceloggingdynamic = { version = ">=1.0", platform = "linux" } [tool.poetry.group.lint.dependencies] bandit = { version = ">=1.7", extras = ["toml"] } diff --git a/packages/ni-grpc-extensions/src/ni_grpc_extensions/_tracelogging.py b/packages/ni-grpc-extensions/src/ni_grpc_extensions/_tracelogging.py index 10f27b4b..86e4a835 100644 --- a/packages/ni-grpc-extensions/src/ni_grpc_extensions/_tracelogging.py +++ b/packages/ni-grpc-extensions/src/ni_grpc_extensions/_tracelogging.py @@ -3,23 +3,23 @@ import ctypes import sys import uuid -from typing import TYPE_CHECKING +from typing import Any if sys.platform == "win32": - try: - import traceloggingdynamic + import traceloggingdynamic - _event_provider: traceloggingdynamic.Provider | None = traceloggingdynamic.Provider( - b"NI-Grpc-Python" - ) - except ImportError: - _event_provider = None -else: - if TYPE_CHECKING: - import traceloggingdynamic + _event_provider = traceloggingdynamic.Provider(b"NI-Grpc-Python") + + def _create_event_builder() -> traceloggingdynamic.EventBuilder: + return traceloggingdynamic.EventBuilder() +else: _event_provider = None + def _create_event_builder() -> Any: + raise RuntimeError(f"ETW logging is not supported on {sys.platform}") + + _LEVEL_LOG_ALWAYS = 0 _LEVEL_CRITICAL = 1 _LEVEL_ERROR = 3 @@ -87,7 +87,7 @@ def is_enabled() -> bool: 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() # pyright: ignore[reportPossiblyUnboundVariable] + eb = _create_event_builder() eb.reset( b"GrpcClientCall", level=_LEVEL_INFO, @@ -107,7 +107,7 @@ def log_grpc_client_call_start(method_name: str) -> uuid.UUID | 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() # pyright: ignore[reportPossiblyUnboundVariable] + eb = _create_event_builder() eb.reset( b"GrpcClientCall", level=_LEVEL_INFO, @@ -122,7 +122,7 @@ def log_grpc_client_call_stop(method_name: str, activity_id: uuid.UUID | None = 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() # pyright: ignore[reportPossiblyUnboundVariable] + eb = _create_event_builder() eb.reset( b"GrpcClientCallStreamingRequest", level=_LEVEL_INFO, @@ -136,7 +136,7 @@ def log_grpc_client_call_streaming_request(method_name: str) -> None: 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() # pyright: ignore[reportPossiblyUnboundVariable] + eb = _create_event_builder() eb.reset( b"GrpcClientCallStreamingResponse", level=_LEVEL_INFO, @@ -150,7 +150,7 @@ def log_grpc_client_call_streaming_response(method_name: str) -> None: 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() # pyright: ignore[reportPossiblyUnboundVariable] + eb = _create_event_builder() eb.reset( b"GrpcServerCall", level=_LEVEL_INFO, @@ -170,7 +170,7 @@ def log_grpc_server_call_start(method_name: str) -> uuid.UUID | 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() # pyright: ignore[reportPossiblyUnboundVariable] + eb = _create_event_builder() eb.reset( b"GrpcServerCall", level=_LEVEL_INFO, @@ -185,7 +185,7 @@ def log_grpc_server_call_stop(method_name: str, activity_id: uuid.UUID | None = 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() # pyright: ignore[reportPossiblyUnboundVariable] + eb = _create_event_builder() eb.reset( b"GrpcServerCallStreamingRequest", level=_LEVEL_INFO, @@ -199,7 +199,7 @@ def log_grpc_server_call_streaming_request(method_name: str) -> None: 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() # pyright: ignore[reportPossiblyUnboundVariable] + eb = _create_event_builder() eb.reset( b"GrpcServerCallStreamingResponse", level=_LEVEL_INFO,