tusk-drift-python-sdk 0.1.20__tar.gz → 0.1.22__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 (163) hide show
  1. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/PKG-INFO +1 -1
  2. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/tracing/td_span_processor.py +3 -0
  3. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/django/middleware.py +50 -4
  4. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/e2e_common/base_runner.py +4 -1
  5. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/fastapi/instrumentation.py +3 -2
  6. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/pyproject.toml +1 -1
  7. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/tusk_drift_python_sdk.egg-info/PKG-INFO +1 -1
  8. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/LICENSE +0 -0
  9. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/README.md +0 -0
  10. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/__init__.py +0 -0
  11. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/__init__.py +0 -0
  12. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/batch_processor.py +0 -0
  13. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/communication/__init__.py +0 -0
  14. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/communication/communicator.py +0 -0
  15. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/communication/types.py +0 -0
  16. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/config.py +0 -0
  17. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/content_type_utils.py +0 -0
  18. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/data_normalization.py +0 -0
  19. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/drift_sdk.py +0 -0
  20. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/json_schema_helper.py +0 -0
  21. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/logger.py +0 -0
  22. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/metrics.py +0 -0
  23. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/mock_utils.py +0 -0
  24. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/mode_utils.py +0 -0
  25. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/protobuf_utils.py +0 -0
  26. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/resilience.py +0 -0
  27. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/rust_core_binding.py +0 -0
  28. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/sampling.py +0 -0
  29. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/span_serialization.py +0 -0
  30. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/trace_blocking_manager.py +0 -0
  31. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/tracing/__init__.py +0 -0
  32. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/tracing/adapters/__init__.py +0 -0
  33. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/tracing/adapters/api.py +0 -0
  34. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/tracing/adapters/base.py +0 -0
  35. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/tracing/adapters/filesystem.py +0 -0
  36. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/tracing/adapters/memory.py +0 -0
  37. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/tracing/otel_converter.py +0 -0
  38. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/tracing/span_exporter.py +0 -0
  39. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/tracing/span_utils.py +0 -0
  40. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/tracing/td_attributes.py +0 -0
  41. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/core/types.py +0 -0
  42. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/__init__.py +0 -0
  43. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/aiohttp/__init__.py +0 -0
  44. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/aiohttp/e2e-tests/entrypoint.py +0 -0
  45. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/aiohttp/e2e-tests/src/app.py +0 -0
  46. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/aiohttp/e2e-tests/src/test_requests.py +0 -0
  47. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/aiohttp/instrumentation.py +0 -0
  48. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/base.py +0 -0
  49. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/datetime/__init__.py +0 -0
  50. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/datetime/instrumentation.py +0 -0
  51. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/django/__init__.py +0 -0
  52. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/django/e2e-tests/entrypoint.py +0 -0
  53. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/django/e2e-tests/src/app.py +0 -0
  54. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/django/e2e-tests/src/settings.py +0 -0
  55. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/django/e2e-tests/src/test_requests.py +0 -0
  56. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/django/e2e-tests/src/urls.py +0 -0
  57. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/django/e2e-tests/src/views.py +0 -0
  58. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/django/html_utils.py +0 -0
  59. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/django/instrumentation.py +0 -0
  60. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/e2e_common/__init__.py +0 -0
  61. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/e2e_common/test_utils.py +0 -0
  62. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/fastapi/__init__.py +0 -0
  63. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/fastapi/e2e-tests/entrypoint.py +0 -0
  64. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/fastapi/e2e-tests/src/app.py +0 -0
  65. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/fastapi/e2e-tests/src/test_requests.py +0 -0
  66. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/flask/__init__.py +0 -0
  67. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/flask/e2e-tests/entrypoint.py +0 -0
  68. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/flask/e2e-tests/src/app.py +0 -0
  69. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/flask/e2e-tests/src/test_requests.py +0 -0
  70. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/flask/instrumentation.py +0 -0
  71. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/grpc/__init__.py +0 -0
  72. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/grpc/e2e-tests/entrypoint.py +0 -0
  73. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/grpc/e2e-tests/src/app.py +0 -0
  74. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/grpc/e2e-tests/src/greeter_pb2.py +0 -0
  75. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/grpc/e2e-tests/src/greeter_pb2_grpc.py +0 -0
  76. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/grpc/e2e-tests/src/grpc_server.py +0 -0
  77. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/grpc/e2e-tests/src/test_requests.py +0 -0
  78. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/grpc/instrumentation.py +0 -0
  79. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/grpc/types.py +0 -0
  80. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/grpc/utils.py +0 -0
  81. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/http/__init__.py +0 -0
  82. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/http/transform_engine.py +0 -0
  83. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/httpx/__init__.py +0 -0
  84. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/httpx/e2e-tests/entrypoint.py +0 -0
  85. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/httpx/e2e-tests/src/app.py +0 -0
  86. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/httpx/e2e-tests/src/test_requests.py +0 -0
  87. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/httpx/instrumentation.py +0 -0
  88. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/kinde/__init__.py +0 -0
  89. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/kinde/instrumentation.py +0 -0
  90. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/psycopg/__init__.py +0 -0
  91. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/psycopg/e2e-tests/entrypoint.py +0 -0
  92. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/psycopg/e2e-tests/src/app.py +0 -0
  93. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/psycopg/e2e-tests/src/test_requests.py +0 -0
  94. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/psycopg/instrumentation.py +0 -0
  95. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/psycopg/mocks.py +0 -0
  96. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/psycopg/wrappers.py +0 -0
  97. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/psycopg2/__init__.py +0 -0
  98. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/psycopg2/e2e-tests/entrypoint.py +0 -0
  99. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/psycopg2/e2e-tests/src/app.py +0 -0
  100. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/psycopg2/e2e-tests/src/test_requests.py +0 -0
  101. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/psycopg2/instrumentation.py +0 -0
  102. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/pyjwt/__init__.py +0 -0
  103. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/pyjwt/instrumentation.py +0 -0
  104. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/redis/__init__.py +0 -0
  105. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/redis/e2e-tests/entrypoint.py +0 -0
  106. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/redis/e2e-tests/src/app.py +0 -0
  107. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/redis/e2e-tests/src/test_requests.py +0 -0
  108. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/redis/instrumentation.py +0 -0
  109. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/registry.py +0 -0
  110. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/requests/__init__.py +0 -0
  111. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/requests/e2e-tests/entrypoint.py +0 -0
  112. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/requests/e2e-tests/src/app.py +0 -0
  113. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/requests/e2e-tests/src/test_requests.py +0 -0
  114. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/requests/instrumentation.py +0 -0
  115. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/socket/__init__.py +0 -0
  116. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/socket/instrumentation.py +0 -0
  117. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/sqlalchemy/__init__.py +0 -0
  118. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/sqlalchemy/context.py +0 -0
  119. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/sqlalchemy/e2e-tests/entrypoint.py +0 -0
  120. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/sqlalchemy/e2e-tests/src/app.py +0 -0
  121. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/sqlalchemy/e2e-tests/src/test_requests.py +0 -0
  122. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/sqlalchemy/instrumentation.py +0 -0
  123. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/urllib/__init__.py +0 -0
  124. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/urllib/e2e-tests/entrypoint.py +0 -0
  125. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/urllib/e2e-tests/src/app.py +0 -0
  126. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/urllib/e2e-tests/src/test_requests.py +0 -0
  127. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/urllib/instrumentation.py +0 -0
  128. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/urllib3/__init__.py +0 -0
  129. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/urllib3/e2e-tests/entrypoint.py +0 -0
  130. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/urllib3/e2e-tests/src/app.py +0 -0
  131. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/urllib3/e2e-tests/src/test_requests.py +0 -0
  132. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/urllib3/instrumentation.py +0 -0
  133. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/utils/psycopg_utils.py +0 -0
  134. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/utils/serialization.py +0 -0
  135. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/wsgi/__init__.py +0 -0
  136. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/wsgi/handler.py +0 -0
  137. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/wsgi/instrumentation.py +0 -0
  138. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/wsgi/response_capture.py +0 -0
  139. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/instrumentation/wsgi/utilities.py +0 -0
  140. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/stack-tests/django-postgres/entrypoint.py +0 -0
  141. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/stack-tests/django-postgres/src/app.py +0 -0
  142. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/stack-tests/django-postgres/src/settings.py +0 -0
  143. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/stack-tests/django-postgres/src/test_requests.py +0 -0
  144. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/stack-tests/django-postgres/src/urls.py +0 -0
  145. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/stack-tests/django-postgres/src/views.py +0 -0
  146. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/stack-tests/django-redis/entrypoint.py +0 -0
  147. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/stack-tests/django-redis/src/app.py +0 -0
  148. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/stack-tests/django-redis/src/settings.py +0 -0
  149. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/stack-tests/django-redis/src/test_requests.py +0 -0
  150. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/stack-tests/django-redis/src/urls.py +0 -0
  151. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/stack-tests/django-redis/src/views.py +0 -0
  152. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/stack-tests/fastapi-postgres/entrypoint.py +0 -0
  153. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/stack-tests/fastapi-postgres/src/app.py +0 -0
  154. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/stack-tests/fastapi-postgres/src/test_requests.py +0 -0
  155. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/stack-tests/fastapi-sqlalchemy/entrypoint.py +0 -0
  156. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/stack-tests/fastapi-sqlalchemy/src/app.py +0 -0
  157. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/stack-tests/fastapi-sqlalchemy/src/test_requests.py +0 -0
  158. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/drift/version.py +0 -0
  159. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/setup.cfg +0 -0
  160. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/tusk_drift_python_sdk.egg-info/SOURCES.txt +0 -0
  161. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/tusk_drift_python_sdk.egg-info/dependency_links.txt +0 -0
  162. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/tusk_drift_python_sdk.egg-info/requires.txt +0 -0
  163. {tusk_drift_python_sdk-0.1.20 → tusk_drift_python_sdk-0.1.22}/tusk_drift_python_sdk.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tusk-drift-python-sdk
3
- Version: 0.1.20
3
+ Version: 0.1.22
4
4
  Summary: Python SDK for Tusk Drift instrumentation and replay
5
5
  Author-email: Tusk <support@usetusk.ai>
6
6
  License: Apache-2.0
@@ -171,6 +171,9 @@ class TdSpanProcessor(SpanProcessor):
171
171
  replay_trace_id = replay_trace_id_context.get()
172
172
  if replay_trace_id:
173
173
  clean_span.trace_id = replay_trace_id
174
+ # Rust path may have prebuilt bytes with the original OTel trace_id.
175
+ # Force re-serialization so CLI receives the replay trace_id.
176
+ clean_span.proto_span_bytes = None
174
177
  else:
175
178
  logger.error("No replay trace ID found, cannot send inbound span for replay")
176
179
  return
@@ -144,15 +144,19 @@ class DriftMiddleware:
144
144
  try:
145
145
  with SpanUtils.with_span(span_info):
146
146
  response = self.get_response(request)
147
- # REPLAY mode: don't capture the span (it's already recorded)
148
- # But do normalize the response so comparison succeeds
149
147
  response = self._normalize_html_response(response)
148
+
149
+ # Capture response data on the span so the inbound replay span
150
+ # sent to the CLI includes the actual OUTPUT_VALUE for UI display
151
+ self._capture_replay_output(request, response, span_info)
152
+
150
153
  return response
151
154
  finally:
152
- # Reset context
155
+ # End span BEFORE resetting context so that TdSpanProcessor.on_end()
156
+ # can still read replay_trace_id_context to send the inbound span
157
+ span_info.span.end()
153
158
  span_kind_context.reset(span_kind_token)
154
159
  replay_trace_id_context.reset(replay_token)
155
- span_info.span.end()
156
160
 
157
161
  def _record_request(self, request: HttpRequest, sdk, is_pre_app_start: bool) -> HttpResponse:
158
162
  """Handle request in RECORD mode.
@@ -262,6 +266,48 @@ class DriftMiddleware:
262
266
  if route:
263
267
  request._drift_route_template = route # type: ignore
264
268
 
269
+ def _capture_replay_output(self, request: HttpRequest, response: HttpResponse, span_info: SpanInfo) -> None:
270
+ """Capture response data on the span for REPLAY mode.
271
+
272
+ Sets OUTPUT_VALUE so the inbound replay span sent to the CLI includes
273
+ the actual response for UI comparison. Skips RECORD-mode concerns like
274
+ transforms, trace blocking, and schema merges.
275
+
276
+ Args:
277
+ request: Django HttpRequest object
278
+ response: Django HttpResponse object
279
+ span_info: SpanInfo containing trace/span IDs and span reference
280
+ """
281
+ if not span_info.span.is_recording():
282
+ return
283
+
284
+ status_code = response.status_code
285
+ status_message = response.reason_phrase if hasattr(response, "reason_phrase") else ""
286
+ response_headers = dict(response.items()) if hasattr(response, "items") else {}
287
+
288
+ response_body = None
289
+ if hasattr(response, "content"):
290
+ content = response.content
291
+ if isinstance(content, bytes) and len(content) > 0:
292
+ response_body = content
293
+
294
+ if response_body:
295
+ from .html_utils import normalize_html_body
296
+
297
+ content_type = response_headers.get("Content-Type", "")
298
+ content_encoding = response_headers.get("Content-Encoding", "")
299
+ response_body = normalize_html_body(response_body, content_type, content_encoding)
300
+
301
+ output_value = build_output_value(
302
+ status_code,
303
+ status_message,
304
+ response_headers,
305
+ response_body,
306
+ None,
307
+ )
308
+
309
+ span_info.span.set_attribute(TdSpanAttributes.OUTPUT_VALUE, json.dumps(output_value))
310
+
265
311
  def _normalize_html_response(self, response: HttpResponse) -> HttpResponse:
266
312
  """Normalize HTML response body for REPLAY mode comparison.
267
313
 
@@ -285,7 +285,10 @@ class E2ETestRunnerBase:
285
285
  self.log("Phase 3: Running Tusk Tests", Colors.BLUE)
286
286
  self.log("=" * 50, Colors.BLUE)
287
287
 
288
- env = {"TUSK_ANALYTICS_DISABLED": "1"}
288
+ env = {
289
+ "TUSK_ANALYTICS_DISABLED": "1",
290
+ "TUSK_REQUIRE_INBOUND_REPLAY_SPAN": "1",
291
+ }
289
292
 
290
293
  result = self.run_command(
291
294
  ["tusk", "run", "--print", "--output-format", "json", "--enable-service-logs"],
@@ -226,10 +226,11 @@ async def _handle_replay_request(
226
226
  transform_engine,
227
227
  )
228
228
  finally:
229
- # Reset context
229
+ # End span BEFORE resetting context so that TdSpanProcessor.on_end()
230
+ # can still read replay_trace_id_context to send the inbound span
231
+ span_info.span.end()
230
232
  span_kind_context.reset(span_kind_token)
231
233
  replay_trace_id_context.reset(replay_token)
232
- span_info.span.end()
233
234
 
234
235
 
235
236
  async def _record_request(
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tusk-drift-python-sdk"
7
- version = "0.1.20"
7
+ version = "0.1.22"
8
8
  description = "Python SDK for Tusk Drift instrumentation and replay"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tusk-drift-python-sdk
3
- Version: 0.1.20
3
+ Version: 0.1.22
4
4
  Summary: Python SDK for Tusk Drift instrumentation and replay
5
5
  Author-email: Tusk <support@usetusk.ai>
6
6
  License: Apache-2.0