ddapm-test-agent 1.32.0__tar.gz → 1.33.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/.github/workflows/docker.yml +5 -5
  2. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/.github/workflows/main.yml +9 -8
  3. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/.github/workflows/publish_pypi.yml +9 -9
  4. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/.github/workflows/releasenote.yml +2 -2
  5. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/PKG-INFO +9 -9
  6. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/README.md +7 -5
  7. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent/__init__.py +1 -1
  8. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent/agent.py +5 -6
  9. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent/trace_snapshot.py +48 -13
  10. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent/vcr_proxy.py +84 -24
  11. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent.egg-info/PKG-INFO +9 -9
  12. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent.egg-info/SOURCES.txt +4 -10
  13. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent.egg-info/requires.txt +1 -0
  14. ddapm_test_agent-1.33.1/releasenotes/notes/remove-nix-ec1c4aca7dc002c4.yaml +4 -0
  15. ddapm_test_agent-1.33.1/releasenotes/notes/remove-old-pythons-4667b182aacf0ce6.yaml +4 -0
  16. ddapm_test_agent-1.33.1/releasenotes/notes/vcr-aws-bedrock-proxy-3bf018b1712d5105.yaml +4 -0
  17. ddapm_test_agent-1.33.1/releasenotes/notes/vcr-proxy-aws-recalculation-fix-2184c10270a7bca5.yaml +4 -0
  18. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/riotfile.py +4 -1
  19. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/setup.cfg +1 -0
  20. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/setup.py +1 -3
  21. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/integration_snapshots/test_trace_distributed_propagated.json +1 -1
  22. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/test_client.py +3 -2
  23. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/test_snapshot_integration.py +14 -12
  24. ddapm_test_agent-1.32.0/.envrc.example +0 -6
  25. ddapm_test_agent-1.32.0/.github/workflows/nix-auto.yml +0 -33
  26. ddapm_test_agent-1.32.0/build-on-darwin.Dockerfile +0 -28
  27. ddapm_test_agent-1.32.0/ddsketch.nix +0 -32
  28. ddapm_test_agent-1.32.0/ddtrace.nix +0 -72
  29. ddapm_test_agent-1.32.0/flake.lock +0 -117
  30. ddapm_test_agent-1.32.0/flake.nix +0 -149
  31. ddapm_test_agent-1.32.0/shell.nix +0 -1
  32. ddapm_test_agent-1.32.0/treefmt.nix +0 -13
  33. ddapm_test_agent-1.32.0/use-example.Dockerfile +0 -3
  34. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/.dockerignore +0 -0
  35. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/.gitignore +0 -0
  36. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/Dockerfile +0 -0
  37. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/Dockerfile.windows +0 -0
  38. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/LICENSE.BSD3 +0 -0
  39. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/LICENSE.apache2 +0 -0
  40. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent/apmtelemetry.py +0 -0
  41. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent/checks.py +0 -0
  42. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent/client.py +0 -0
  43. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent/cmd.py +0 -0
  44. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent/context.py +0 -0
  45. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent/fmt.py +0 -0
  46. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent/integration.py +0 -0
  47. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent/logs.py +0 -0
  48. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent/metrics.py +0 -0
  49. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent/remoteconfig.py +0 -0
  50. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent/trace.py +0 -0
  51. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent/trace_checks.py +0 -0
  52. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent/tracerflare.py +0 -0
  53. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent/tracestats.py +0 -0
  54. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent/tracestats_snapshot.py +0 -0
  55. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent.egg-info/dependency_links.txt +0 -0
  56. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent.egg-info/entry_points.txt +0 -0
  57. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent.egg-info/not-zip-safe +0 -0
  58. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/ddapm_test_agent.egg-info/top_level.txt +0 -0
  59. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/pyproject.toml +0 -0
  60. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/check-releasenotes +0 -0
  61. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/config.yaml +0 -0
  62. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/1.0-e192f5064e917083.yaml +0 -0
  63. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/Add-metrics.process_id-to-ignored-attributes-62b264f0ea591326.yaml +0 -0
  64. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/Add-values-handling-to-span_event-array_value-to-mirror-agent-ee7483c90c263ff4.yaml +0 -0
  65. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/Checks-changed-to-opt-in-8716cac4ecdbb1c2.yaml +0 -0
  66. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/SNAPSHOT_REGEX_PLACEHOLDERS-1d2c5e2711d1953b.yaml +0 -0
  67. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/SNAPSHOT_REGEX_PLACEHOLDERS-compare-c829e7a4df4fa1f4.yaml +0 -0
  68. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/Settings-endpoint-928ae5b6e8ddc625.yaml +0 -0
  69. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/Telemetry-requests-delay-2586180b286ce393.yaml +0 -0
  70. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/Use-default-value-for-null-fields-in-tracestats-55d465f489efb2ba.yaml +0 -0
  71. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/acceptV1TracePayloads-5435cff37cfb6a85.yaml +0 -0
  72. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/add-datadog-proxy-7e2e608c101a564b.yaml +0 -0
  73. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/add-distributed-trace-c35a314698a3b966.yaml +0 -0
  74. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/add-fmt-command-cc31769942a5fec3.yaml +0 -0
  75. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/add-nix-build-support-29dc8a347e3bd7c1.yaml +0 -0
  76. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/add-optional-json-parser-10aac54bd1cbe322.yaml +0 -0
  77. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/add-otel-metrics-support-a2ebeb28cae2f0ba.yaml +0 -0
  78. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/add-python-3.13-support-ae7b96f4a10f20f4.yaml +0 -0
  79. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/add-rcm-endpoints-7e1f949e83e21039.yaml +0 -0
  80. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/add-request-forwarding-middleware-d3f325166b0f8e9e.yaml +0 -0
  81. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/add-service-naming-checks-2b68ff51d1b5496d.yaml +0 -0
  82. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/add-session-to-rcm-endpoints-d97e925a04a99a65.yaml +0 -0
  83. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/add-span-events-306e697168373899.yaml +0 -0
  84. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/add-support-for-plain-text-responses-00d20bf7b335e75b.yaml +0 -0
  85. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/add-support-telemetry-requests-10737cd3da802ca6.yaml +0 -0
  86. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/add-tracer_flare-endpoint-b2c81510920974d7.yaml +0 -0
  87. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/addAgentStateToInfo-f9a179ce88f2ab9e.yaml +0 -0
  88. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/addPeerTagsToInfo-4ccc2539d22c2993.yaml +0 -0
  89. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/allow-attribute-removal-snapshots-314b744b043b97c5.yaml +0 -0
  90. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/args-88f664c83a96075d.yaml +0 -0
  91. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/change-trace-proxy-headers-f9fcbb4efc4fcb95.yaml +0 -0
  92. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/check-http-header-sensitivity-daaa9d9595ae86d6.yaml +0 -0
  93. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/clearing-sessions-now-only-removes-6b0311673d8b37aa.yaml +0 -0
  94. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/client-173dbc6655e42337.yaml +0 -0
  95. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/content_length-e1bab75580aa1dcb.yaml +0 -0
  96. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/disable-error-responses-and-collect-trace-failures-in-memory-4a199bc7be416709.yaml +0 -0
  97. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/docker-arm64-images-a4b6b2cc527327d6.yaml +0 -0
  98. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/evp-proxy-on-info-d65cd077575306ca.yaml +0 -0
  99. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/exception-messages-21ee64461020edd1.yaml +0 -0
  100. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/fix-docker-image-tags-785d40f5bfdb8003.yaml +0 -0
  101. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/fix-fmt-logging-6a323fd8d5d4eb28.yaml +0 -0
  102. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/fix-getting-tested-integrations-multiple-session-tokens-4ee41d545754f87f.yaml +0 -0
  103. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/fix-matching-319744b82d2514c1.yaml +0 -0
  104. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/fix-missing-slim-deps-fa3b0fc0292a09b3.yaml +0 -0
  105. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/fix-partial-chunks-0db14ce3017e6173.yaml +0 -0
  106. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/fix-racecondition-9bd0ef15b7da60fa.yaml +0 -0
  107. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/fix-tracerflare-request-parsing-fae18ff9997c216d.yaml +0 -0
  108. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/genai-vcr-support-b499ec54df84eaa3.yaml +0 -0
  109. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/ignore-dsm-pathway-hash-during-trace-snapshots-f0b99ea267fbad48.yaml +0 -0
  110. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/image-optimization-d614eccb59441217.yaml +0 -0
  111. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/improve-test-agent-debugging-5759413f1fc5f7fa.yaml +0 -0
  112. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/improve-test-agent-proxying-a207f0fc81b3ab2d.yaml +0 -0
  113. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/improve-trace-check-results-endpoints-6ab4132628520793.yaml +0 -0
  114. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/info-34dcd9cbcc382487.yaml +0 -0
  115. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/info-drop-p0s-c207889f590340fb.yaml +0 -0
  116. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/llmobs-eval-metric-endpoint-8b5222491969ab4f.yaml +0 -0
  117. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/llmobs-evp-proxy-1383f4b4962ac7c9.yaml +0 -0
  118. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/meta-struct-2cce08475cb05470.yaml +0 -0
  119. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/more-oai-cass-908eb5ea46bd2985.yaml +0 -0
  120. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/new-process-id-tag-f0ab0daf652e05cc.yaml +0 -0
  121. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/oai-incomplete-cass-795ad19b6a226c1f.yaml +0 -0
  122. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/otlp-logs-grpc-45365879c22969aa.yaml +0 -0
  123. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/otlp-logs-support-d5a150d9f5304d7c.yaml +0 -0
  124. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/pipeline_stats_endpoint-e8ad6da735dc2647.yaml +0 -0
  125. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/profiling-endpoint-0cd209e4e5b6cfc0.yaml +0 -0
  126. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/provider-snapshot-server-f6a307acbf11d214.yaml +0 -0
  127. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/proxy-37c94e2fb428c6fc.yaml +0 -0
  128. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/python-3.12-952e06c6158af67d.yaml +0 -0
  129. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/python-support-1c447acc4607abc7.yaml +0 -0
  130. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/python310-025fbc190363de98.yaml +0 -0
  131. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/python310-docker-image-d4e329cfecf6510e.yaml +0 -0
  132. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/rc-encoding-length-fix-cc011edea7f8f5b2.yaml +0 -0
  133. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/rc-get-endpoint-e502f55b7df544e2.yaml +0 -0
  134. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/remoteconfig-requests-1af7abb99c61c069.yaml +0 -0
  135. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/reuse-session-1670aa569907cf68.yaml +0 -0
  136. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/sample-rate-1e06ae4cdc933b14.yaml +0 -0
  137. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/session-requests-b8057811f976220e.yaml +0 -0
  138. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/session-tracerflares-400ce9b3d3838b40.yaml +0 -0
  139. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/snapshot-cmds-de4a561911afee11.yaml +0 -0
  140. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/snapshot-empty-maps-2cbe8cea3e7112fa.yaml +0 -0
  141. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/snapshot-error-messages-de41d9e3207fa30a.yaml +0 -0
  142. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/snapshot-filename-c068de1bc3e50c04.yaml +0 -0
  143. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/snapshot-order-type-2d6424e380b2c88f.yaml +0 -0
  144. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/snapshot-parent-id-7abb860008702e70.yaml +0 -0
  145. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/span-links-1ec76bd2b47a3880.yaml +0 -0
  146. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/span-ordering-1a7b383aa015bddc.yaml +0 -0
  147. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/span-parent-id-a4d7d63fa623361c.yaml +0 -0
  148. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/support-ant-vcr-1eff9a40caa0aba0.yaml +0 -0
  149. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/support-tracking-of-tested-integrations-ac19ccd1f8333c00.yaml +0 -0
  150. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/throttling-590bf58ecb3cc4a5.yaml +0 -0
  151. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/trace-stats-97da3a478dabfa99.yaml +0 -0
  152. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/trace-stats-snapshot-718ca37385c93e1e.yaml +0 -0
  153. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/traces-endpoint-f4f9c1d94d6ceda2.yaml +0 -0
  154. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/tracestats-fixes-07152c708e73ef96.yaml +0 -0
  155. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/tracestats-post-65ce788f81862532.yaml +0 -0
  156. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/tracestats-service-2a0a178cbd21b07d.yaml +0 -0
  157. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/uds-64b11960931d8b77.yaml +0 -0
  158. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/uds-c99ea5d099e67156.yaml +0 -0
  159. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/uds-container-8138f8b1438b1a0a.yaml +0 -0
  160. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/uds-permissions-903266ac6445b873.yaml +0 -0
  161. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/v0.5-traces-cf469b0b71398d97.yaml +0 -0
  162. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/v0.7-traces-7ea3ebbed7502d01.yaml +0 -0
  163. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/vcr-cassette-name-middleware-fix-9e47c395892a9fe7.yaml +0 -0
  164. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/vcr-cassettes-for-openai-v5-6e9d78091de1f0c2.yaml +0 -0
  165. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/vcr-cassettes-for-vercel-ai-7a8275f9c2b48bc7.yaml +0 -0
  166. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/vcr-prefix-instead-of-suffix-4c56dcb5038d222e.yaml +0 -0
  167. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/vcr-proxy-use-test-name-bugfix-be758294ba30ac78.yaml +0 -0
  168. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/vcr-proxy-use-test-name-e47891994c961c52.yaml +0 -0
  169. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/vcr-support-querystring-b06555fb9a7c90ae.yaml +0 -0
  170. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/version-0c32d2752f154eb9.yaml +0 -0
  171. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/wheels-68a7dc2f4b00e0c4.yaml +0 -0
  172. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/releasenotes/notes/windows-docker-image-1f5d5e894558bb4b.yaml +0 -0
  173. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/test_deps.txt +0 -0
  174. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/__init__.py +0 -0
  175. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/conftest.py +0 -0
  176. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/integration_snapshots/test_multi_trace.json +0 -0
  177. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/integration_snapshots/test_single_trace.json +0 -0
  178. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/integration_snapshots/test_trace_distributed_same_payload.json +0 -0
  179. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/integration_snapshots/test_trace_missing_received.json +0 -0
  180. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/integration_snapshots/test_trace_stats_tracestats.json +0 -0
  181. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/test_agent.py +0 -0
  182. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/test_apmtelemetry.py +0 -0
  183. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/test_checks.py +0 -0
  184. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/test_container.py +0 -0
  185. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/test_logs.py +0 -0
  186. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/test_metrics.py +0 -0
  187. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/test_remoteconfig.py +0 -0
  188. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/test_session.py +0 -0
  189. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/test_snapshot.py +0 -0
  190. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/test_trace.py +0 -0
  191. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/test_tracerflare.py +0 -0
  192. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/test_tracestats.py +0 -0
  193. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/tests/trace_utils.py +0 -0
  194. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/anthropic/anthropic_v1_messages_post_26d618ee.yaml +0 -0
  195. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/anthropic/anthropic_v1_messages_post_595f439c.yaml +0 -0
  196. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/anthropic/anthropic_v1_messages_post_717ba0b4.yaml +0 -0
  197. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/anthropic/anthropic_v1_messages_post_a1af2c12.yaml +0 -0
  198. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/deepseek/deepseek_chat_completions_post_afb6ccab.yaml +0 -0
  199. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_audio_transcriptions_post_173af3e5.yaml +0 -0
  200. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_audio_transcriptions_post_71305a25.yaml +0 -0
  201. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_audio_translations_post_d5b5b8d6.yaml +0 -0
  202. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_audio_translations_post_dd92a18a.yaml +0 -0
  203. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_0f1514e1.yaml +0 -0
  204. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_172294b4.yaml +0 -0
  205. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_193ae44a.yaml +0 -0
  206. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_23558eed.yaml +0 -0
  207. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_2edb59ae.yaml +0 -0
  208. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_3517e44e.yaml +0 -0
  209. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_36bdc0cb.yaml +0 -0
  210. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_3c045664.yaml +0 -0
  211. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_432a8e46.yaml +0 -0
  212. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_4749eff9.yaml +0 -0
  213. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_4dce8db6.yaml +0 -0
  214. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_57612363.yaml +0 -0
  215. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_649d8162.yaml +0 -0
  216. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_655a8ef2.yaml +0 -0
  217. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_66dfc80e.yaml +0 -0
  218. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_67e8e833.yaml +0 -0
  219. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_6df851cc.yaml +0 -0
  220. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_7c2d1ac5.yaml +0 -0
  221. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_82a4bb3c.yaml +0 -0
  222. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_9122b1ae.yaml +0 -0
  223. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_917478d0.yaml +0 -0
  224. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_a73ecd7a.yaml +0 -0
  225. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_a925b737.yaml +0 -0
  226. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_ae4728c2.yaml +0 -0
  227. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_b29f1a87.yaml +0 -0
  228. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_ce69ed91.yaml +0 -0
  229. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_d8fb132a.yaml +0 -0
  230. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_d94d5844.yaml +0 -0
  231. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_d98ce00d.yaml +0 -0
  232. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_chat_completions_post_ebff79da.yaml +0 -0
  233. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_completions_post_33681ea4.yaml +0 -0
  234. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_completions_post_5d2418d4.yaml +0 -0
  235. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_completions_post_619dee1c.yaml +0 -0
  236. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_completions_post_6224acff.yaml +0 -0
  237. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_completions_post_87f617af.yaml +0 -0
  238. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_completions_post_98c30019.yaml +0 -0
  239. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_completions_post_9bb49464.yaml +0 -0
  240. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_completions_post_b24dbf7d.yaml +0 -0
  241. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_embeddings_post_0381abe4.yaml +0 -0
  242. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_embeddings_post_48694087.yaml +0 -0
  243. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_embeddings_post_541bd4d0.yaml +0 -0
  244. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_files_file-RpTpuvRVtnKpdKZb7DDGto_content_get_60bd10ef.yaml +0 -0
  245. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_files_file-RpTpuvRVtnKpdKZb7DDGto_delete_3ee48409.yaml +0 -0
  246. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_files_file-RpTpuvRVtnKpdKZb7DDGto_get_1afefb93.yaml +0 -0
  247. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_files_get_68efa25d.yaml +0 -0
  248. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_files_post_2fcf9545.yaml +0 -0
  249. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_files_post_957d63ba.yaml +0 -0
  250. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_fine_tuning_jobs_ftjob-q9CUUUsHJemGUVQ1Ecc01zcf_cancel_post_d7c16b38.yaml +0 -0
  251. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_fine_tuning_jobs_ftjob-q9CUUUsHJemGUVQ1Ecc01zcf_events_get_557d820e.yaml +0 -0
  252. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_fine_tuning_jobs_ftjob-q9CUUUsHJemGUVQ1Ecc01zcf_get_265489e7.yaml +0 -0
  253. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_fine_tuning_jobs_get_ebc57c6f.yaml +0 -0
  254. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_fine_tuning_jobs_post_c3b6e4a9.yaml +0 -0
  255. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_images_edits_post_075386c4.yaml +0 -0
  256. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_images_edits_post_57b4f4da.yaml +0 -0
  257. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_images_edits_post_660e9dd7.yaml +0 -0
  258. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_images_edits_post_993e0192.yaml +0 -0
  259. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_images_edits_post_a2f1eb43.yaml +0 -0
  260. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_images_edits_post_ae72c45f.yaml +0 -0
  261. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_images_edits_post_cf5af376.yaml +0 -0
  262. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_images_edits_post_dbefb624.yaml +0 -0
  263. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_images_generations_post_48272841.yaml +0 -0
  264. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_images_generations_post_736070ea.yaml +0 -0
  265. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_images_variations_post_5971e285.yaml +0 -0
  266. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_images_variations_post_f2f62f6c.yaml +0 -0
  267. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_models_ft_gpt-4.1-mini-2025-04-14_datadog-staging__BkaILRSh_delete_c70f2992.yaml +0 -0
  268. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_models_get_e04cf04b.yaml +0 -0
  269. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_models_gpt-4_get_b13c5b23.yaml +0 -0
  270. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_moderations_post_532b3315.yaml +0 -0
  271. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_responses_post_33fb1f66.yaml +0 -0
  272. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_responses_post_5ca556ec.yaml +0 -0
  273. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_responses_post_c05c936e.yaml +0 -0
  274. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_responses_post_c61e3067.yaml +0 -0
  275. {ddapm_test_agent-1.32.0 → ddapm_test_agent-1.33.1}/vcr-cassettes/openai/openai_responses_post_ee2423e6.yaml +0 -0
@@ -11,14 +11,14 @@ jobs:
11
11
  packages: write
12
12
  if: github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/')
13
13
  steps:
14
- - uses: actions/checkout@v4
14
+ - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
15
15
 
16
16
  - name: Set up QEMU
17
- uses: docker/setup-qemu-action@v2
17
+ uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 # v2.2.0
18
18
 
19
19
  - name: Set up Docker Buildx
20
20
  id: buildx
21
- uses: docker/setup-buildx-action@v2
21
+ uses: docker/setup-buildx-action@885d1462b80bc1c1c7f0b00334ad271f09369c55 # v2.10.0
22
22
 
23
23
  - name: Available platforms
24
24
  run: echo ${{ steps.buildx.outputs.platforms }}
@@ -41,7 +41,7 @@ jobs:
41
41
  run: docker login -u publisher -p ${{ secrets.GITHUB_TOKEN }} ghcr.io
42
42
 
43
43
  - name: Docker Build
44
- uses: docker/build-push-action@v3
44
+ uses: docker/build-push-action@1104d471370f9806843c095c1db02b5a90c5f8b6 # v3.3.1
45
45
  with:
46
46
  push: true
47
47
  tags: ${{ steps.set_names.outputs.image_name }}
@@ -54,7 +54,7 @@ jobs:
54
54
  packages: write
55
55
  if: github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/')
56
56
  steps:
57
- - uses: actions/checkout@v4
57
+ - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
58
58
 
59
59
  - name: Set Docker Image Tag
60
60
  id: set_names
@@ -8,10 +8,11 @@ jobs:
8
8
  check:
9
9
  runs-on: ubuntu-latest
10
10
  steps:
11
- - uses: actions/setup-python@v4
11
+ - uses: actions/setup-python@7f4fc3e22c37d6ff65e88745f38bd3157c663f7c # v4.9.1
12
12
  with:
13
- python-version: '3.13'
14
- - uses: actions/checkout@v4
13
+ # Run typing/formatting/etc checks on the oldest version we support
14
+ python-version: '3.11'
15
+ - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
15
16
  with:
16
17
  fetch-depth: 0
17
18
  - run: pip install .[testing]
@@ -22,21 +23,21 @@ jobs:
22
23
  strategy:
23
24
  matrix:
24
25
  os: [ubuntu-latest, macos-latest]
25
- python-version: ["3.8", "3.13"]
26
+ python-version: ["3.11", "3.12", "3.13"]
26
27
  runs-on: ${{ matrix.os }}
27
28
  steps:
28
- - uses: actions/checkout@v4
29
- - uses: actions/setup-python@v4
29
+ - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
30
+ - uses: actions/setup-python@7f4fc3e22c37d6ff65e88745f38bd3157c663f7c # v4.9.1
30
31
  with:
31
32
  python-version: ${{ matrix.python-version }}
32
33
  - name: install deps
33
34
  run: pip install .[testing]
34
35
  - run: |
35
- riot run -p --pass-env ${{ matrix.python-version}} test
36
+ riot run --pass-env -p ${{ matrix.python-version}} test
36
37
  cassettes-size:
37
38
  runs-on: ubuntu-latest
38
39
  steps:
39
- - uses: actions/checkout@v4
40
+ - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
40
41
  - name: Check VCR cassettes size
41
42
  run: |
42
43
  CASSETTES_SIZE=$(du -sb vcr-cassettes/ 2>/dev/null | cut -f1 || echo "0")
@@ -12,12 +12,12 @@ jobs:
12
12
  runs-on: ubuntu-latest
13
13
 
14
14
  steps:
15
- - uses: actions/checkout@v4
15
+ - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
16
16
  # Include all history and tags
17
17
  with:
18
18
  fetch-depth: 0
19
19
 
20
- - uses: actions/setup-python@v5
20
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
21
21
  name: Install Python
22
22
  with:
23
23
  python-version: '3.12'
@@ -27,7 +27,7 @@ jobs:
27
27
  pip install wheel
28
28
  pip wheel --no-deps -w dist .
29
29
 
30
- - uses: actions/upload-artifact@v4
30
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
31
31
  with:
32
32
  name: wheel
33
33
  path: dist/*.whl
@@ -36,12 +36,12 @@ jobs:
36
36
  name: Build source distribution
37
37
  runs-on: ubuntu-latest
38
38
  steps:
39
- - uses: actions/checkout@v4
39
+ - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
40
40
  # Include all history and tags
41
41
  with:
42
42
  fetch-depth: 0
43
43
 
44
- - uses: actions/setup-python@v5
44
+ - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
45
45
  name: Install Python
46
46
  with:
47
47
  python-version: '3.12'
@@ -51,7 +51,7 @@ jobs:
51
51
  python -m pip install --upgrade setuptools
52
52
  python setup.py sdist
53
53
 
54
- - uses: actions/upload-artifact@v4
54
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
55
55
  with:
56
56
  name: sdist
57
57
  path: dist/*.tar.gz
@@ -61,17 +61,17 @@ jobs:
61
61
  runs-on: ubuntu-latest
62
62
  if: github.event_name == 'release' && github.event.action == 'published'
63
63
  steps:
64
- - uses: actions/download-artifact@v4
64
+ - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
65
65
  with:
66
66
  name: sdist
67
67
  path: dist
68
68
 
69
- - uses: actions/download-artifact@v4
69
+ - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
70
70
  with:
71
71
  name: wheel
72
72
  path: dist
73
73
 
74
- - uses: pypa/gh-action-pypi-publish@release/v1
74
+ - uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4
75
75
  with:
76
76
  user: __token__
77
77
  password: ${{ secrets.PYPI_TOKEN }}
@@ -12,7 +12,7 @@ jobs:
12
12
  name: Validate release notes
13
13
  runs-on: ubuntu-latest
14
14
  steps:
15
- - uses: actions/checkout@v4
15
+ - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
16
16
  # Include all history and tags
17
17
  with:
18
18
  fetch-depth: 0
@@ -25,7 +25,7 @@ jobs:
25
25
  if: github.event_name == 'pull_request'
26
26
  run: releasenotes/check-releasenotes
27
27
 
28
- - uses: actions/setup-python@v2
28
+ - uses: actions/setup-python@e9aba2c848f5ebd159c070c61ea2c4e2b122355e # v2.3.4
29
29
  name: Install Python
30
30
  with:
31
31
  python-version: '3.12'
@@ -1,15 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ddapm-test-agent
3
- Version: 1.32.0
3
+ Version: 1.33.1
4
4
  Summary: Test agent for Datadog APM client libraries
5
5
  Home-page: https://github.com/Datadog/dd-apm-test-agent
6
6
  Author: Kyle Verhoog
7
7
  Author-email: kyle@verhoog.ca
8
8
  License: BSD 3
9
9
  Classifier: Programming Language :: Python
10
- Classifier: Programming Language :: Python :: 3.8
11
- Classifier: Programming Language :: Python :: 3.9
12
- Classifier: Programming Language :: Python :: 3.10
13
10
  Classifier: Programming Language :: Python :: 3.11
14
11
  Classifier: Programming Language :: Python :: 3.12
15
12
  Classifier: Programming Language :: Python :: 3.13
@@ -24,6 +21,7 @@ Requires-Dist: requests
24
21
  Requires-Dist: typing_extensions
25
22
  Requires-Dist: yarl
26
23
  Requires-Dist: vcrpy
24
+ Requires-Dist: requests-aws4auth
27
25
  Requires-Dist: opentelemetry-proto<1.37.0,>1.33.0
28
26
  Requires-Dist: protobuf>=3.19.0
29
27
  Requires-Dist: grpcio<2.0,>=1.66.2
@@ -63,11 +61,6 @@ See the [Development](#development) section for how to get the test agent runnin
63
61
 
64
62
  ## Installation
65
63
 
66
- The test agent can be installed using [nix](https://docs.determinate.systems/getting-started/):
67
-
68
- nix profile install github:datadog/dd-apm-test-agent#ddapm-test-agent
69
- # nix profile upgrade ddapm-test-agent # to upgrade
70
-
71
64
  The test agent can be installed from PyPI:
72
65
 
73
66
  pip install ddapm-test-agent
@@ -192,6 +185,13 @@ The cassettes are matched based on the path, method, and body of the request. To
192
185
 
193
186
  Optionally specifying whatever mounted path is used for the cassettes directory. The test agent comes with a default set of cassettes for OpenAI, Azure OpenAI, and DeepSeek.
194
187
 
188
+ #### AWS Services
189
+ AWS service proxying, specifically recording cassettes for the first time, requires a `AWS_SECRET_ACCESS_KEY` environment variable to be set for the container running the test agent. This is used to recalculate the AWS signature for the request, as the one generated client-side likely used `{test-agent-host}:{test-agent-port}/vcr/{aws-service}` as the host, and the signature will mismatch that on the actual AWS service.
190
+
191
+ Additionally, the `AWS_REGION` environment variable can be set, defaulting to `us-east-1`.
192
+
193
+ To add a new AWS service to proxy, add an entry in the `PROVIDER_BASE_URLS` for its provider url, and an entry in the `AWS_SERVICES` dictionary for the service name, since they are not always a one-to-one mapping with the implied provider url (e.g, `https://bedrock-runtime.{AWS_REGION}.amazonaws.com` is the provider url, but the service name is `bedrock`, as `bedrock` also has multiple sub services, like `converse`).
194
+
195
195
  #### Usage in clients
196
196
 
197
197
  To use this feature in your client, you can use the `/vcr/{provider}` endpoint to proxy requests to the provider API.
@@ -17,11 +17,6 @@ See the [Development](#development) section for how to get the test agent runnin
17
17
 
18
18
  ## Installation
19
19
 
20
- The test agent can be installed using [nix](https://docs.determinate.systems/getting-started/):
21
-
22
- nix profile install github:datadog/dd-apm-test-agent#ddapm-test-agent
23
- # nix profile upgrade ddapm-test-agent # to upgrade
24
-
25
20
  The test agent can be installed from PyPI:
26
21
 
27
22
  pip install ddapm-test-agent
@@ -146,6 +141,13 @@ The cassettes are matched based on the path, method, and body of the request. To
146
141
 
147
142
  Optionally specifying whatever mounted path is used for the cassettes directory. The test agent comes with a default set of cassettes for OpenAI, Azure OpenAI, and DeepSeek.
148
143
 
144
+ #### AWS Services
145
+ AWS service proxying, specifically recording cassettes for the first time, requires a `AWS_SECRET_ACCESS_KEY` environment variable to be set for the container running the test agent. This is used to recalculate the AWS signature for the request, as the one generated client-side likely used `{test-agent-host}:{test-agent-port}/vcr/{aws-service}` as the host, and the signature will mismatch that on the actual AWS service.
146
+
147
+ Additionally, the `AWS_REGION` environment variable can be set, defaulting to `us-east-1`.
148
+
149
+ To add a new AWS service to proxy, add an entry in the `PROVIDER_BASE_URLS` for its provider url, and an entry in the `AWS_SERVICES` dictionary for the service name, since they are not always a one-to-one mapping with the implied provider url (e.g, `https://bedrock-runtime.{AWS_REGION}.amazonaws.com` is the provider url, but the service name is `bedrock`, as `bedrock` also has multiple sub services, like `converse`).
150
+
149
151
  #### Usage in clients
150
152
 
151
153
  To use this feature in your client, you can use the `/vcr/{provider}` endpoint to proxy requests to the provider API.
@@ -1,4 +1,4 @@
1
1
  def _get_version():
2
- import pkg_resources # type: ignore[import-untyped]
2
+ import pkg_resources
3
3
 
4
4
  return pkg_resources.get_distribution(__name__).version
@@ -133,7 +133,7 @@ def _session_token(request: Request) -> Optional[str]:
133
133
 
134
134
  async def _vcr_proxy_cassette_prefix(request: Request) -> Optional[str]:
135
135
  try:
136
- request_body: dict[str, str] = await request.json()
136
+ request_body: Dict[str, str] = await request.json()
137
137
  requested_test_name = request_body.get("test_name")
138
138
  return requested_test_name
139
139
  except (json.JSONDecodeError, UnicodeDecodeError):
@@ -165,7 +165,7 @@ async def handle_exception_middleware(request: Request, handler: _Handler) -> we
165
165
 
166
166
  async def _forward_request(
167
167
  request_data: bytes, headers: Mapping[str, str], full_agent_url: str
168
- ) -> tuple[ClientResponse, str]:
168
+ ) -> Tuple[ClientResponse, str]:
169
169
  async with ClientSession() as session:
170
170
  async with session.post(
171
171
  full_agent_url,
@@ -929,10 +929,9 @@ class Agent:
929
929
  # Get the span attributes that are to be removed for this snapshot.
930
930
  default_attribute_regex_replaces: Dict[str, str] = request.app["snapshot_regex_placeholders"]
931
931
  regex_overrides = _parse_map(request.url.query.get("regex_placeholders", ""))
932
- attribute_regex_replaces = dict(
933
- (f"{{{key}}}", re.compile(regex))
934
- for (key, regex) in (default_attribute_regex_replaces | regex_overrides).items()
935
- )
932
+ regex_replaces = default_attribute_regex_replaces.copy()
933
+ regex_replaces.update(regex_overrides)
934
+ attribute_regex_replaces = dict((f"{{{key}}}", re.compile(regex)) for (key, regex) in regex_replaces.items())
936
935
  log.info("using regex placeholders %r", attribute_regex_replaces)
937
936
 
938
937
  if "span_id" in span_removes:
@@ -3,13 +3,13 @@ import json
3
3
  import logging
4
4
  import operator
5
5
  import pprint
6
- from re import Pattern
7
6
  import textwrap
8
7
  from typing import Any
9
8
  from typing import Dict
10
9
  from typing import List
11
10
  from typing import Optional
12
11
  from typing import OrderedDict as OrderedDictType
12
+ from typing import Pattern
13
13
  from typing import Set
14
14
  from typing import Tuple
15
15
  from typing import cast
@@ -188,9 +188,13 @@ def _match_traces(t1s: List[Trace], t2s: List[Trace]) -> List[Tuple[Trace, Trace
188
188
  return matches
189
189
 
190
190
 
191
- def _diff_spans(
192
- s1: Span, s2: Span, ignored: Set[str]
193
- ) -> Tuple[List[str], List[str], List[str], List[Tuple[List[str], List[str]]], List[Tuple[List[str], List[str]]]]:
191
+ def _diff_spans(s1: Span, s2: Span, ignored: Set[str]) -> Tuple[
192
+ List[str],
193
+ List[str],
194
+ List[str],
195
+ List[Tuple[List[str], List[str]]],
196
+ List[Tuple[List[str], List[str]]],
197
+ ]:
194
198
  """Return differing attributes between two spans and their meta/metrics maps.
195
199
 
196
200
  It is assumed that the spans have passed through preliminary validation
@@ -255,7 +259,11 @@ def _diff_spans(
255
259
  )
256
260
  link_diff = []
257
261
  for d1, d2, ign in [
258
- (l1_no_tags, l2_no_tags, set(i[11:] for i in ignored if i.startswith("span_links."))),
262
+ (
263
+ l1_no_tags,
264
+ l2_no_tags,
265
+ set(i[11:] for i in ignored if i.startswith("span_links.")),
266
+ ),
259
267
  (
260
268
  l1.get("attributes") or {},
261
269
  l2.get("attributes") or {},
@@ -288,7 +296,11 @@ def _diff_spans(
288
296
  )
289
297
  event_diff = []
290
298
  for d1, d2, ign in [
291
- (l1_no_tags, l2_no_tags, set(i[12:] for i in ignored if i.startswith("span_events."))),
299
+ (
300
+ l1_no_tags,
301
+ l2_no_tags,
302
+ set(i[12:] for i in ignored if i.startswith("span_events.")),
303
+ ),
292
304
  (
293
305
  e1.get("attributes") or {},
294
306
  e2.get("attributes") or {},
@@ -307,7 +319,13 @@ def _diff_spans(
307
319
  results.append(event_diffs) # type: ignore
308
320
 
309
321
  return cast(
310
- Tuple[List[str], List[str], List[str], List[Tuple[List[str], List[str]]], List[Tuple[List[str], List[str]]]],
322
+ Tuple[
323
+ List[str],
324
+ List[str],
325
+ List[str],
326
+ List[Tuple[List[str], List[str]]],
327
+ List[Tuple[List[str], List[str]]],
328
+ ],
311
329
  tuple(results),
312
330
  )
313
331
 
@@ -334,9 +352,13 @@ def _compare_traces(expected: Trace, received: Trace, ignored: Set[str]) -> None
334
352
  ) as frame:
335
353
  frame.add_item(f"Expected span:\n{pprint.pformat(s_exp)}")
336
354
  frame.add_item(f"Received span:\n{pprint.pformat(s_rec)}")
337
- top_level_diffs, meta_diffs, metrics_diffs, span_link_diffs, span_event_diffs = _diff_spans(
338
- s_exp, s_rec, ignored
339
- )
355
+ (
356
+ top_level_diffs,
357
+ meta_diffs,
358
+ metrics_diffs,
359
+ span_link_diffs,
360
+ span_event_diffs,
361
+ ) = _diff_spans(s_exp, s_rec, ignored)
340
362
 
341
363
  for diffs, diff_type, d_exp, d_rec in [
342
364
  (top_level_diffs, "span", s_exp, s_rec),
@@ -363,7 +385,12 @@ def _compare_traces(expected: Trace, received: Trace, ignored: Set[str]) -> None
363
385
 
364
386
  for i, (link_level_diffs, attribute_diffs) in enumerate(span_link_diffs):
365
387
  for diffs, diff_type, d_exp, d_rec in [
366
- (link_level_diffs, f"{i}", s_exp["span_links"][i], s_rec["span_links"][i]),
388
+ (
389
+ link_level_diffs,
390
+ f"{i}",
391
+ s_exp["span_links"][i],
392
+ s_rec["span_links"][i],
393
+ ),
367
394
  (
368
395
  attribute_diffs,
369
396
  f"{i} attributes",
@@ -387,7 +414,12 @@ def _compare_traces(expected: Trace, received: Trace, ignored: Set[str]) -> None
387
414
 
388
415
  for i, (event_level_diffs, attribute_diffs) in enumerate(span_event_diffs):
389
416
  for diffs, diff_type, d_exp, d_rec in [
390
- (event_level_diffs, f"{i}", s_exp["span_events"][i], s_rec["span_events"][i]),
417
+ (
418
+ event_level_diffs,
419
+ f"{i}",
420
+ s_exp["span_events"][i],
421
+ s_rec["span_events"][i],
422
+ ),
391
423
  (
392
424
  attribute_diffs,
393
425
  f"{i} attributes",
@@ -545,4 +577,7 @@ def generate_snapshot(
545
577
  removed: Optional[List[str]] = None,
546
578
  attribute_regex_replaces: Optional[Dict[str, Pattern[str]]] = None,
547
579
  ) -> str:
548
- return _snapshot_json(_normalize_traces(received_traces, attribute_regex_replaces or {}), removed or [])
580
+ return _snapshot_json(
581
+ _normalize_traces(received_traces, attribute_regex_replaces or {}),
582
+ removed or [],
583
+ )
@@ -1,21 +1,38 @@
1
1
  import hashlib
2
2
  import json
3
+ import logging
3
4
  import os
4
5
  import re
6
+ from typing import Any
7
+ from typing import Dict
5
8
  from typing import Optional
6
9
  from urllib.parse import urljoin
7
10
 
8
11
  from aiohttp.web import Request
9
12
  from aiohttp.web import Response
10
13
  import requests
14
+ from requests_aws4auth import AWS4Auth
11
15
  import vcr
12
16
 
13
17
 
18
+ logger = logging.getLogger(__name__)
19
+
20
+
21
+ # Used for AWS signature recalculation for aws services initial proxying
22
+ AWS_REGION = os.environ.get("AWS_REGION", "us-east-1")
23
+ AWS_SECRET_ACCESS_KEY = os.environ.get("AWS_SECRET_ACCESS_KEY")
24
+
25
+
14
26
  def url_path_join(base_url: str, path: str) -> str:
15
27
  """Join a base URL with a path, handling slashes automatically."""
16
28
  return urljoin(base_url.rstrip("/") + "/", path.lstrip("/"))
17
29
 
18
30
 
31
+ AWS_SERVICES = {
32
+ "bedrock-runtime": "bedrock",
33
+ }
34
+
35
+
19
36
  PROVIDER_BASE_URLS = {
20
37
  "openai": "https://api.openai.com/v1",
21
38
  "azure-openai": "https://dd.openai.azure.com/",
@@ -23,8 +40,25 @@ PROVIDER_BASE_URLS = {
23
40
  "anthropic": "https://api.anthropic.com/",
24
41
  "datadog": "https://api.datadoghq.com/",
25
42
  "genai": "https://generativelanguage.googleapis.com/",
43
+ "bedrock-runtime": f"https://bedrock-runtime.{AWS_REGION}.amazonaws.com",
26
44
  }
27
45
 
46
+ CASSETTE_FILTER_HEADERS = [
47
+ "authorization",
48
+ "OpenAI-Organization",
49
+ "api-key",
50
+ "x-api-key",
51
+ "dd-api-key",
52
+ "dd-application-key",
53
+ "x-goog-api-key",
54
+ "x-amz-security-token",
55
+ "x-amz-content-sha256",
56
+ "x-amz-date",
57
+ "x-amz-user-agent",
58
+ "amz-sdk-invocation-id",
59
+ "amz-sdk-request",
60
+ ]
61
+
28
62
  NORMALIZERS = [
29
63
  (
30
64
  r"--form-data-boundary-[^\r\n]+",
@@ -65,6 +99,21 @@ def normalize_multipart_body(body: bytes) -> str:
65
99
  return f"[binary_data_{hex_digest}]"
66
100
 
67
101
 
102
+ def parse_authorization_header(auth_header: str) -> Dict[str, str]:
103
+ """Parse AWS Authorization header to extract components"""
104
+ if not auth_header.startswith("AWS4-HMAC-SHA256 "):
105
+ return {}
106
+
107
+ auth_parts = auth_header[len("AWS4-HMAC-SHA256 ") :].split(",")
108
+ parsed = {}
109
+
110
+ for part in auth_parts:
111
+ key, value = part.split("=", 1)
112
+ parsed[key.strip()] = value.strip()
113
+
114
+ return parsed
115
+
116
+
68
117
  def get_vcr(subdirectory: str, vcr_cassettes_directory: str) -> vcr.VCR:
69
118
  cassette_dir = os.path.join(vcr_cassettes_directory, subdirectory)
70
119
 
@@ -72,15 +121,7 @@ def get_vcr(subdirectory: str, vcr_cassettes_directory: str) -> vcr.VCR:
72
121
  cassette_library_dir=cassette_dir,
73
122
  record_mode="once",
74
123
  match_on=["path", "method"],
75
- filter_headers=[
76
- "authorization",
77
- "OpenAI-Organization",
78
- "api-key",
79
- "x-api-key",
80
- "dd-api-key",
81
- "dd-application-key",
82
- "x-goog-api-key",
83
- ],
124
+ filter_headers=CASSETTE_FILTER_HEADERS,
84
125
  )
85
126
 
86
127
 
@@ -125,31 +166,50 @@ async def proxy_request(request: Request, vcr_cassettes_directory: str) -> Respo
125
166
  body_bytes = await request.read()
126
167
 
127
168
  vcr_cassette_prefix = request.pop("vcr_cassette_prefix", None)
128
-
129
169
  cassette_name = generate_cassette_name(path, request.method, body_bytes, vcr_cassette_prefix)
130
- with get_vcr(provider, vcr_cassettes_directory).use_cassette(f"{cassette_name}.yaml"):
131
- oai_response = requests.request(
132
- method=request.method,
133
- url=target_url,
134
- headers=headers,
135
- data=body_bytes,
136
- cookies=dict(request.cookies),
137
- allow_redirects=False,
138
- stream=True,
139
- )
170
+ cassette_file_name = f"{cassette_name}.yaml"
171
+
172
+ request_kwargs: Dict[str, Any] = {
173
+ "method": request.method,
174
+ "url": target_url,
175
+ "headers": headers,
176
+ "data": body_bytes,
177
+ "cookies": dict(request.cookies),
178
+ "allow_redirects": False,
179
+ "stream": True,
180
+ }
181
+
182
+ if provider in AWS_SERVICES and not os.path.exists(
183
+ os.path.join(vcr_cassettes_directory, provider, cassette_file_name)
184
+ ):
185
+ if not AWS_SECRET_ACCESS_KEY:
186
+ return Response(
187
+ body="AWS_SECRET_ACCESS_KEY environment variable not set for aws signature recalculation",
188
+ status=400,
189
+ )
190
+
191
+ auth_header = request.headers.get("Authorization", "")
192
+ auth_parts = parse_authorization_header(auth_header)
193
+ aws_access_key = auth_parts.get("Credential", "").split("/")[0]
194
+
195
+ auth = AWS4Auth(aws_access_key, AWS_SECRET_ACCESS_KEY, AWS_REGION, AWS_SERVICES[provider])
196
+ request_kwargs["auth"] = auth
197
+
198
+ with get_vcr(provider, vcr_cassettes_directory).use_cassette(cassette_file_name):
199
+ provider_response = requests.request(**request_kwargs)
140
200
 
141
201
  # Extract content type without charset
142
- content_type = oai_response.headers.get("content-type", "")
202
+ content_type = provider_response.headers.get("content-type", "")
143
203
  if ";" in content_type:
144
204
  content_type = content_type.split(";")[0].strip()
145
205
 
146
206
  response = Response(
147
- body=oai_response.content,
148
- status=oai_response.status_code,
207
+ body=provider_response.content,
208
+ status=provider_response.status_code,
149
209
  content_type=content_type,
150
210
  )
151
211
 
152
- for key, value in oai_response.headers.items():
212
+ for key, value in provider_response.headers.items():
153
213
  if key.lower() not in (
154
214
  "content-length",
155
215
  "transfer-encoding",
@@ -1,15 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ddapm-test-agent
3
- Version: 1.32.0
3
+ Version: 1.33.1
4
4
  Summary: Test agent for Datadog APM client libraries
5
5
  Home-page: https://github.com/Datadog/dd-apm-test-agent
6
6
  Author: Kyle Verhoog
7
7
  Author-email: kyle@verhoog.ca
8
8
  License: BSD 3
9
9
  Classifier: Programming Language :: Python
10
- Classifier: Programming Language :: Python :: 3.8
11
- Classifier: Programming Language :: Python :: 3.9
12
- Classifier: Programming Language :: Python :: 3.10
13
10
  Classifier: Programming Language :: Python :: 3.11
14
11
  Classifier: Programming Language :: Python :: 3.12
15
12
  Classifier: Programming Language :: Python :: 3.13
@@ -24,6 +21,7 @@ Requires-Dist: requests
24
21
  Requires-Dist: typing_extensions
25
22
  Requires-Dist: yarl
26
23
  Requires-Dist: vcrpy
24
+ Requires-Dist: requests-aws4auth
27
25
  Requires-Dist: opentelemetry-proto<1.37.0,>1.33.0
28
26
  Requires-Dist: protobuf>=3.19.0
29
27
  Requires-Dist: grpcio<2.0,>=1.66.2
@@ -63,11 +61,6 @@ See the [Development](#development) section for how to get the test agent runnin
63
61
 
64
62
  ## Installation
65
63
 
66
- The test agent can be installed using [nix](https://docs.determinate.systems/getting-started/):
67
-
68
- nix profile install github:datadog/dd-apm-test-agent#ddapm-test-agent
69
- # nix profile upgrade ddapm-test-agent # to upgrade
70
-
71
64
  The test agent can be installed from PyPI:
72
65
 
73
66
  pip install ddapm-test-agent
@@ -192,6 +185,13 @@ The cassettes are matched based on the path, method, and body of the request. To
192
185
 
193
186
  Optionally specifying whatever mounted path is used for the cassettes directory. The test agent comes with a default set of cassettes for OpenAI, Azure OpenAI, and DeepSeek.
194
187
 
188
+ #### AWS Services
189
+ AWS service proxying, specifically recording cassettes for the first time, requires a `AWS_SECRET_ACCESS_KEY` environment variable to be set for the container running the test agent. This is used to recalculate the AWS signature for the request, as the one generated client-side likely used `{test-agent-host}:{test-agent-port}/vcr/{aws-service}` as the host, and the signature will mismatch that on the actual AWS service.
190
+
191
+ Additionally, the `AWS_REGION` environment variable can be set, defaulting to `us-east-1`.
192
+
193
+ To add a new AWS service to proxy, add an entry in the `PROVIDER_BASE_URLS` for its provider url, and an entry in the `AWS_SERVICES` dictionary for the service name, since they are not always a one-to-one mapping with the implied provider url (e.g, `https://bedrock-runtime.{AWS_REGION}.amazonaws.com` is the provider url, but the service name is `bedrock`, as `bedrock` also has multiple sub services, like `converse`).
194
+
195
195
  #### Usage in clients
196
196
 
197
197
  To use this feature in your client, you can use the `/vcr/{provider}` endpoint to proxy requests to the provider API.