sentry-sdk 2.27.0__py2.py3-none-any.whl → 3.0.0a1__py2.py3-none-any.whl

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.

Potentially problematic release.


This version of sentry-sdk might be problematic. Click here for more details.

Files changed (110) hide show
  1. sentry_sdk/__init__.py +4 -8
  2. sentry_sdk/_compat.py +0 -1
  3. sentry_sdk/_init_implementation.py +6 -44
  4. sentry_sdk/_log_batcher.py +47 -28
  5. sentry_sdk/_types.py +2 -64
  6. sentry_sdk/ai/monitoring.py +14 -10
  7. sentry_sdk/ai/utils.py +1 -1
  8. sentry_sdk/api.py +69 -163
  9. sentry_sdk/client.py +25 -72
  10. sentry_sdk/consts.py +42 -23
  11. sentry_sdk/debug.py +0 -10
  12. sentry_sdk/envelope.py +2 -10
  13. sentry_sdk/feature_flags.py +2 -2
  14. sentry_sdk/integrations/__init__.py +4 -2
  15. sentry_sdk/integrations/_asgi_common.py +3 -3
  16. sentry_sdk/integrations/_wsgi_common.py +11 -40
  17. sentry_sdk/integrations/aiohttp.py +104 -57
  18. sentry_sdk/integrations/anthropic.py +10 -7
  19. sentry_sdk/integrations/arq.py +24 -13
  20. sentry_sdk/integrations/asgi.py +102 -83
  21. sentry_sdk/integrations/asyncio.py +1 -0
  22. sentry_sdk/integrations/asyncpg.py +45 -30
  23. sentry_sdk/integrations/aws_lambda.py +109 -92
  24. sentry_sdk/integrations/boto3.py +38 -9
  25. sentry_sdk/integrations/bottle.py +1 -1
  26. sentry_sdk/integrations/celery/__init__.py +48 -38
  27. sentry_sdk/integrations/clickhouse_driver.py +59 -28
  28. sentry_sdk/integrations/cohere.py +2 -0
  29. sentry_sdk/integrations/django/__init__.py +25 -46
  30. sentry_sdk/integrations/django/asgi.py +6 -2
  31. sentry_sdk/integrations/django/caching.py +13 -22
  32. sentry_sdk/integrations/django/middleware.py +1 -0
  33. sentry_sdk/integrations/django/signals_handlers.py +3 -1
  34. sentry_sdk/integrations/django/templates.py +8 -12
  35. sentry_sdk/integrations/django/transactions.py +1 -6
  36. sentry_sdk/integrations/django/views.py +5 -2
  37. sentry_sdk/integrations/falcon.py +7 -25
  38. sentry_sdk/integrations/fastapi.py +3 -3
  39. sentry_sdk/integrations/flask.py +1 -1
  40. sentry_sdk/integrations/gcp.py +63 -38
  41. sentry_sdk/integrations/graphene.py +6 -13
  42. sentry_sdk/integrations/grpc/aio/client.py +14 -8
  43. sentry_sdk/integrations/grpc/aio/server.py +19 -21
  44. sentry_sdk/integrations/grpc/client.py +8 -6
  45. sentry_sdk/integrations/grpc/server.py +12 -14
  46. sentry_sdk/integrations/httpx.py +47 -12
  47. sentry_sdk/integrations/huey.py +26 -22
  48. sentry_sdk/integrations/huggingface_hub.py +1 -0
  49. sentry_sdk/integrations/langchain.py +22 -15
  50. sentry_sdk/integrations/litestar.py +4 -2
  51. sentry_sdk/integrations/logging.py +12 -3
  52. sentry_sdk/integrations/openai.py +2 -0
  53. sentry_sdk/integrations/pymongo.py +18 -25
  54. sentry_sdk/integrations/pyramid.py +1 -1
  55. sentry_sdk/integrations/quart.py +3 -3
  56. sentry_sdk/integrations/ray.py +23 -17
  57. sentry_sdk/integrations/redis/_async_common.py +30 -18
  58. sentry_sdk/integrations/redis/_sync_common.py +28 -18
  59. sentry_sdk/integrations/redis/modules/caches.py +13 -10
  60. sentry_sdk/integrations/redis/modules/queries.py +14 -11
  61. sentry_sdk/integrations/redis/rb.py +4 -4
  62. sentry_sdk/integrations/redis/redis.py +6 -6
  63. sentry_sdk/integrations/redis/redis_cluster.py +18 -16
  64. sentry_sdk/integrations/redis/redis_py_cluster_legacy.py +4 -4
  65. sentry_sdk/integrations/redis/utils.py +63 -19
  66. sentry_sdk/integrations/rq.py +68 -23
  67. sentry_sdk/integrations/rust_tracing.py +28 -43
  68. sentry_sdk/integrations/sanic.py +23 -13
  69. sentry_sdk/integrations/socket.py +9 -5
  70. sentry_sdk/integrations/sqlalchemy.py +8 -8
  71. sentry_sdk/integrations/starlette.py +11 -31
  72. sentry_sdk/integrations/starlite.py +4 -2
  73. sentry_sdk/integrations/stdlib.py +56 -9
  74. sentry_sdk/integrations/strawberry.py +40 -59
  75. sentry_sdk/integrations/threading.py +10 -26
  76. sentry_sdk/integrations/tornado.py +57 -18
  77. sentry_sdk/integrations/trytond.py +4 -1
  78. sentry_sdk/integrations/wsgi.py +84 -38
  79. sentry_sdk/opentelemetry/__init__.py +9 -0
  80. sentry_sdk/opentelemetry/consts.py +33 -0
  81. sentry_sdk/opentelemetry/contextvars_context.py +73 -0
  82. sentry_sdk/{integrations/opentelemetry → opentelemetry}/propagator.py +19 -28
  83. sentry_sdk/opentelemetry/sampler.py +326 -0
  84. sentry_sdk/opentelemetry/scope.py +218 -0
  85. sentry_sdk/opentelemetry/span_processor.py +329 -0
  86. sentry_sdk/opentelemetry/tracing.py +35 -0
  87. sentry_sdk/opentelemetry/utils.py +476 -0
  88. sentry_sdk/profiler/__init__.py +0 -40
  89. sentry_sdk/profiler/continuous_profiler.py +1 -30
  90. sentry_sdk/profiler/transaction_profiler.py +5 -56
  91. sentry_sdk/scope.py +107 -351
  92. sentry_sdk/sessions.py +0 -87
  93. sentry_sdk/tracing.py +418 -1144
  94. sentry_sdk/tracing_utils.py +126 -164
  95. sentry_sdk/transport.py +4 -104
  96. sentry_sdk/utils.py +169 -152
  97. {sentry_sdk-2.27.0.dist-info → sentry_sdk-3.0.0a1.dist-info}/METADATA +3 -5
  98. sentry_sdk-3.0.0a1.dist-info/RECORD +154 -0
  99. {sentry_sdk-2.27.0.dist-info → sentry_sdk-3.0.0a1.dist-info}/WHEEL +1 -1
  100. sentry_sdk-3.0.0a1.dist-info/entry_points.txt +2 -0
  101. sentry_sdk/hub.py +0 -739
  102. sentry_sdk/integrations/opentelemetry/__init__.py +0 -7
  103. sentry_sdk/integrations/opentelemetry/consts.py +0 -5
  104. sentry_sdk/integrations/opentelemetry/integration.py +0 -58
  105. sentry_sdk/integrations/opentelemetry/span_processor.py +0 -391
  106. sentry_sdk/metrics.py +0 -965
  107. sentry_sdk-2.27.0.dist-info/RECORD +0 -152
  108. sentry_sdk-2.27.0.dist-info/entry_points.txt +0 -2
  109. {sentry_sdk-2.27.0.dist-info → sentry_sdk-3.0.0a1.dist-info}/licenses/LICENSE +0 -0
  110. {sentry_sdk-2.27.0.dist-info → sentry_sdk-3.0.0a1.dist-info}/top_level.txt +0 -0
sentry_sdk/utils.py CHANGED
@@ -25,11 +25,11 @@ except ImportError:
25
25
  BaseExceptionGroup = None # type: ignore
26
26
 
27
27
  import sentry_sdk
28
- from sentry_sdk._compat import PY37
29
28
  from sentry_sdk.consts import (
30
29
  DEFAULT_ADD_FULL_STACK,
31
30
  DEFAULT_MAX_STACK_FRAMES,
32
31
  DEFAULT_MAX_VALUE_LENGTH,
32
+ SPANDATA,
33
33
  EndpointType,
34
34
  )
35
35
  from sentry_sdk._types import Annotated, AnnotatedValue, SENSITIVE_DATA_SUBSTITUTE
@@ -57,7 +57,8 @@ if TYPE_CHECKING:
57
57
  Union,
58
58
  )
59
59
 
60
- from gevent.hub import Hub
60
+ from gevent.hub import Hub as GeventHub
61
+ from opentelemetry.util.types import AttributeValue
61
62
 
62
63
  from sentry_sdk._types import Event, ExcInfo
63
64
 
@@ -86,6 +87,13 @@ exceeds the default sys.getrecursionlimit() of 1000, so users will only
86
87
  be affected by this limit if they have a custom recursion limit.
87
88
  """
88
89
 
90
+ MAX_EXCEPTIONS = 25
91
+ """Maximum number of exceptions in a chain or group to send to Sentry.
92
+
93
+ This is a sanity limit to avoid ending in an infinite loop of exceptions when the same exception is in the root and a leave
94
+ of the exception tree.
95
+ """
96
+
89
97
 
90
98
  def env_to_bool(value, *, strict=False):
91
99
  # type: (Any, Optional[bool]) -> bool | None
@@ -250,31 +258,6 @@ def format_timestamp(value):
250
258
  return utctime.strftime("%Y-%m-%dT%H:%M:%S.%fZ")
251
259
 
252
260
 
253
- ISO_TZ_SEPARATORS = frozenset(("+", "-"))
254
-
255
-
256
- def datetime_from_isoformat(value):
257
- # type: (str) -> datetime
258
- try:
259
- result = datetime.fromisoformat(value)
260
- except (AttributeError, ValueError):
261
- # py 3.6
262
- timestamp_format = (
263
- "%Y-%m-%dT%H:%M:%S.%f" if "." in value else "%Y-%m-%dT%H:%M:%S"
264
- )
265
- if value.endswith("Z"):
266
- value = value[:-1] + "+0000"
267
-
268
- if value[-6] in ISO_TZ_SEPARATORS:
269
- timestamp_format += "%z"
270
- value = value[:-3] + value[-2:]
271
- elif value[-5] in ISO_TZ_SEPARATORS:
272
- timestamp_format += "%z"
273
-
274
- result = datetime.strptime(value, timestamp_format)
275
- return result.astimezone(timezone.utc)
276
-
277
-
278
261
  def event_hint_with_exc_info(exc_info=None):
279
262
  # type: (Optional[ExcInfo]) -> Dict[str, Optional[ExcInfo]]
280
263
  """Creates a hint with the exc info filled in."""
@@ -822,14 +805,17 @@ def exceptions_from_error(
822
805
  ):
823
806
  # type: (...) -> Tuple[int, List[Dict[str, Any]]]
824
807
  """
825
- Creates the list of exceptions.
826
- This can include chained exceptions and exceptions from an ExceptionGroup.
827
-
828
- See the Exception Interface documentation for more details:
829
- https://develop.sentry.dev/sdk/event-payloads/exception/
808
+ Converts the given exception information into the Sentry structured "exception" format.
809
+ This will return a list of exceptions (a flattened tree of exceptions) in the
810
+ format of the Exception Interface documentation:
811
+ https://develop.sentry.dev/sdk/data-model/event-payloads/exception/
812
+
813
+ This function can handle:
814
+ - simple exceptions
815
+ - chained exceptions (raise .. from ..)
816
+ - exception groups
830
817
  """
831
-
832
- parent = single_exception_from_error_tuple(
818
+ base_exception = single_exception_from_error_tuple(
833
819
  exc_type=exc_type,
834
820
  exc_value=exc_value,
835
821
  tb=tb,
@@ -840,64 +826,79 @@ def exceptions_from_error(
840
826
  source=source,
841
827
  full_stack=full_stack,
842
828
  )
843
- exceptions = [parent]
829
+ exceptions = [base_exception]
844
830
 
845
831
  parent_id = exception_id
846
832
  exception_id += 1
847
833
 
848
- should_supress_context = hasattr(exc_value, "__suppress_context__") and exc_value.__suppress_context__ # type: ignore
849
- if should_supress_context:
850
- # Add direct cause.
851
- # The field `__cause__` is set when raised with the exception (using the `from` keyword).
852
- exception_has_cause = (
834
+ if exception_id > MAX_EXCEPTIONS - 1:
835
+ return (exception_id, exceptions)
836
+
837
+ causing_exception = None
838
+ exception_source = None
839
+
840
+ # Add any causing exceptions, if present.
841
+ should_suppress_context = hasattr(exc_value, "__suppress_context__") and exc_value.__suppress_context__ # type: ignore
842
+ # Note: __suppress_context__ is True if the exception is raised with the `from` keyword.
843
+ if should_suppress_context:
844
+ # Explicitly chained exceptions (Like: raise NewException() from OriginalException())
845
+ # The field `__cause__` is set to OriginalException
846
+ has_explicit_causing_exception = (
853
847
  exc_value
854
848
  and hasattr(exc_value, "__cause__")
855
849
  and exc_value.__cause__ is not None
856
850
  )
857
- if exception_has_cause:
858
- cause = exc_value.__cause__ # type: ignore
859
- (exception_id, child_exceptions) = exceptions_from_error(
860
- exc_type=type(cause),
861
- exc_value=cause,
862
- tb=getattr(cause, "__traceback__", None),
863
- client_options=client_options,
864
- mechanism=mechanism,
865
- exception_id=exception_id,
866
- source="__cause__",
867
- full_stack=full_stack,
868
- )
869
- exceptions.extend(child_exceptions)
870
-
851
+ if has_explicit_causing_exception:
852
+ exception_source = "__cause__"
853
+ causing_exception = exc_value.__cause__ # type: ignore
871
854
  else:
872
- # Add indirect cause.
873
- # The field `__context__` is assigned if another exception occurs while handling the exception.
874
- exception_has_content = (
855
+ # Implicitly chained exceptions (when an exception occurs while handling another exception)
856
+ # The field `__context__` is set in the exception that occurs while handling another exception,
857
+ # to the other exception.
858
+ has_implicit_causing_exception = (
875
859
  exc_value
876
860
  and hasattr(exc_value, "__context__")
877
861
  and exc_value.__context__ is not None
878
862
  )
879
- if exception_has_content:
880
- context = exc_value.__context__ # type: ignore
881
- (exception_id, child_exceptions) = exceptions_from_error(
882
- exc_type=type(context),
883
- exc_value=context,
884
- tb=getattr(context, "__traceback__", None),
885
- client_options=client_options,
886
- mechanism=mechanism,
887
- exception_id=exception_id,
888
- source="__context__",
889
- full_stack=full_stack,
890
- )
891
- exceptions.extend(child_exceptions)
863
+ if has_implicit_causing_exception:
864
+ exception_source = "__context__"
865
+ causing_exception = exc_value.__context__ # type: ignore
866
+
867
+ if causing_exception:
868
+ # Some frameworks (e.g. FastAPI) wrap the causing exception in an
869
+ # ExceptionGroup that only contain one exception: the causing exception.
870
+ # This would lead to an infinite loop, so we skip the causing exception
871
+ # in this case. (because it is the same as the base_exception above)
872
+ if (
873
+ BaseExceptionGroup is not None
874
+ and isinstance(causing_exception, BaseExceptionGroup)
875
+ and len(causing_exception.exceptions) == 1
876
+ and causing_exception.exceptions[0] == exc_value
877
+ ):
878
+ causing_exception = None
879
+
880
+ if causing_exception:
881
+ (exception_id, child_exceptions) = exceptions_from_error(
882
+ exc_type=type(causing_exception),
883
+ exc_value=causing_exception,
884
+ tb=getattr(causing_exception, "__traceback__", None),
885
+ client_options=client_options,
886
+ mechanism=mechanism,
887
+ exception_id=exception_id,
888
+ parent_id=parent_id,
889
+ source=exception_source,
890
+ full_stack=full_stack,
891
+ )
892
+ exceptions.extend(child_exceptions)
892
893
 
893
- # Add exceptions from an ExceptionGroup.
894
+ # Add child exceptions from an ExceptionGroup.
894
895
  is_exception_group = exc_value and hasattr(exc_value, "exceptions")
895
896
  if is_exception_group:
896
- for idx, e in enumerate(exc_value.exceptions): # type: ignore
897
+ for idx, causing_exception in enumerate(exc_value.exceptions): # type: ignore
897
898
  (exception_id, child_exceptions) = exceptions_from_error(
898
- exc_type=type(e),
899
- exc_value=e,
900
- tb=getattr(e, "__traceback__", None),
899
+ exc_type=type(causing_exception),
900
+ exc_value=causing_exception,
901
+ tb=getattr(causing_exception, "__traceback__", None),
901
902
  client_options=client_options,
902
903
  mechanism=mechanism,
903
904
  exception_id=exception_id,
@@ -917,38 +918,29 @@ def exceptions_from_error_tuple(
917
918
  full_stack=None, # type: Optional[list[dict[str, Any]]]
918
919
  ):
919
920
  # type: (...) -> List[Dict[str, Any]]
921
+ """
922
+ Convert Python's exception information into Sentry's structured "exception" format in the event.
923
+ See https://develop.sentry.dev/sdk/data-model/event-payloads/exception/
924
+ This is the entry point for the exception handling.
925
+ """
926
+ # unpack the exception info tuple
920
927
  exc_type, exc_value, tb = exc_info
921
928
 
922
- is_exception_group = BaseExceptionGroup is not None and isinstance(
923
- exc_value, BaseExceptionGroup
929
+ # let exceptions_from_error do the actual work
930
+ _, exceptions = exceptions_from_error(
931
+ exc_type=exc_type,
932
+ exc_value=exc_value,
933
+ tb=tb,
934
+ client_options=client_options,
935
+ mechanism=mechanism,
936
+ exception_id=0,
937
+ parent_id=0,
938
+ full_stack=full_stack,
924
939
  )
925
940
 
926
- if is_exception_group:
927
- (_, exceptions) = exceptions_from_error(
928
- exc_type=exc_type,
929
- exc_value=exc_value,
930
- tb=tb,
931
- client_options=client_options,
932
- mechanism=mechanism,
933
- exception_id=0,
934
- parent_id=0,
935
- full_stack=full_stack,
936
- )
937
-
938
- else:
939
- exceptions = []
940
- for exc_type, exc_value, tb in walk_exception_chain(exc_info):
941
- exceptions.append(
942
- single_exception_from_error_tuple(
943
- exc_type=exc_type,
944
- exc_value=exc_value,
945
- tb=tb,
946
- client_options=client_options,
947
- mechanism=mechanism,
948
- full_stack=full_stack,
949
- )
950
- )
951
-
941
+ # make sure the exceptions are sorted
942
+ # from the innermost (oldest)
943
+ # to the outermost (newest) exception
952
944
  exceptions.reverse()
953
945
 
954
946
  return exceptions
@@ -1372,27 +1364,13 @@ def _get_contextvars():
1372
1364
  See https://docs.sentry.io/platforms/python/contextvars/ for more information.
1373
1365
  """
1374
1366
  if not _is_contextvars_broken():
1375
- # aiocontextvars is a PyPI package that ensures that the contextvars
1376
- # backport (also a PyPI package) works with asyncio under Python 3.6
1377
- #
1378
- # Import it if available.
1379
- if sys.version_info < (3, 7):
1380
- # `aiocontextvars` is absolutely required for functional
1381
- # contextvars on Python 3.6.
1382
- try:
1383
- from aiocontextvars import ContextVar
1384
-
1385
- return True, ContextVar
1386
- except ImportError:
1387
- pass
1388
- else:
1389
- # On Python 3.7 contextvars are functional.
1390
- try:
1391
- from contextvars import ContextVar
1367
+ # On Python 3.7+ contextvars are functional.
1368
+ try:
1369
+ from contextvars import ContextVar
1392
1370
 
1393
- return True, ContextVar
1394
- except ImportError:
1395
- pass
1371
+ return True, ContextVar
1372
+ except ImportError:
1373
+ pass
1396
1374
 
1397
1375
  # Fall back to basic thread-local usage.
1398
1376
 
@@ -1792,7 +1770,7 @@ def ensure_integration_enabled(
1792
1770
  ```python
1793
1771
  @ensure_integration_enabled(MyIntegration, my_function)
1794
1772
  def patch_my_function():
1795
- with sentry_sdk.start_transaction(...):
1773
+ with sentry_sdk.start_span(...):
1796
1774
  return my_function()
1797
1775
  ```
1798
1776
  """
@@ -1818,19 +1796,6 @@ def ensure_integration_enabled(
1818
1796
  return patcher
1819
1797
 
1820
1798
 
1821
- if PY37:
1822
-
1823
- def nanosecond_time():
1824
- # type: () -> int
1825
- return time.perf_counter_ns()
1826
-
1827
- else:
1828
-
1829
- def nanosecond_time():
1830
- # type: () -> int
1831
- return int(time.perf_counter() * 1e9)
1832
-
1833
-
1834
1799
  def now():
1835
1800
  # type: () -> float
1836
1801
  return time.perf_counter()
@@ -1842,9 +1807,9 @@ try:
1842
1807
  except ImportError:
1843
1808
 
1844
1809
  # it's not great that the signatures are different, get_hub can't return None
1845
- # consider adding an if TYPE_CHECKING to change the signature to Optional[Hub]
1810
+ # consider adding an if TYPE_CHECKING to change the signature to Optional[GeventHub]
1846
1811
  def get_gevent_hub(): # type: ignore[misc]
1847
- # type: () -> Optional[Hub]
1812
+ # type: () -> Optional[GeventHub]
1848
1813
  return None
1849
1814
 
1850
1815
  def is_module_patched(mod_name):
@@ -1909,6 +1874,56 @@ def get_current_thread_meta(thread=None):
1909
1874
  return None, None
1910
1875
 
1911
1876
 
1877
+ def _serialize_span_attribute(value):
1878
+ # type: (Any) -> Optional[AttributeValue]
1879
+ """Serialize an object so that it's OTel-compatible and displays nicely in Sentry."""
1880
+ # check for allowed primitives
1881
+ if isinstance(value, (int, str, float, bool)):
1882
+ return value
1883
+
1884
+ # lists are allowed too, as long as they don't mix types
1885
+ if isinstance(value, (list, tuple)):
1886
+ for type_ in (int, str, float, bool):
1887
+ if all(isinstance(item, type_) for item in value):
1888
+ return list(value)
1889
+
1890
+ # if this is anything else, just try to coerce to string
1891
+ # we prefer json.dumps since this makes things like dictionaries display
1892
+ # nicely in the UI
1893
+ try:
1894
+ return json.dumps(value)
1895
+ except TypeError:
1896
+ try:
1897
+ return str(value)
1898
+ except Exception:
1899
+ return None
1900
+
1901
+
1902
+ ISO_TZ_SEPARATORS = frozenset(("+", "-"))
1903
+
1904
+
1905
+ def datetime_from_isoformat(value):
1906
+ # type: (str) -> datetime
1907
+ try:
1908
+ result = datetime.fromisoformat(value)
1909
+ except (AttributeError, ValueError):
1910
+ # py 3.6
1911
+ timestamp_format = (
1912
+ "%Y-%m-%dT%H:%M:%S.%f" if "." in value else "%Y-%m-%dT%H:%M:%S"
1913
+ )
1914
+ if value.endswith("Z"):
1915
+ value = value[:-1] + "+0000"
1916
+
1917
+ if value[-6] in ISO_TZ_SEPARATORS:
1918
+ timestamp_format += "%z"
1919
+ value = value[:-3] + value[-2:]
1920
+ elif value[-5] in ISO_TZ_SEPARATORS:
1921
+ timestamp_format += "%z"
1922
+
1923
+ result = datetime.strptime(value, timestamp_format)
1924
+ return result.astimezone(timezone.utc)
1925
+
1926
+
1912
1927
  def should_be_treated_as_error(ty, value):
1913
1928
  # type: (Any, Any) -> bool
1914
1929
  if ty == SystemExit and hasattr(value, "code") and value.code in (0, None):
@@ -1918,18 +1933,20 @@ def should_be_treated_as_error(ty, value):
1918
1933
  return True
1919
1934
 
1920
1935
 
1921
- if TYPE_CHECKING:
1922
- T = TypeVar("T")
1936
+ def http_client_status_to_breadcrumb_level(status_code):
1937
+ # type: (Optional[int]) -> str
1938
+ if status_code is not None:
1939
+ if 500 <= status_code <= 599:
1940
+ return "error"
1941
+ elif 400 <= status_code <= 499:
1942
+ return "warning"
1923
1943
 
1944
+ return "info"
1924
1945
 
1925
- def try_convert(convert_func, value):
1926
- # type: (Callable[[Any], T], Any) -> Optional[T]
1927
- """
1928
- Attempt to convert from an unknown type to a specific type, using the
1929
- given function. Return None if the conversion fails, i.e. if the function
1930
- raises an exception.
1931
- """
1932
- try:
1933
- return convert_func(value)
1934
- except Exception:
1935
- return None
1946
+
1947
+ def set_thread_info_from_span(data, span):
1948
+ # type: (Dict[str, Any], sentry_sdk.tracing.Span) -> None
1949
+ if span.get_attribute(SPANDATA.THREAD_ID) is not None:
1950
+ data[SPANDATA.THREAD_ID] = span.get_attribute(SPANDATA.THREAD_ID)
1951
+ if span.get_attribute(SPANDATA.THREAD_NAME) is not None:
1952
+ data[SPANDATA.THREAD_NAME] = span.get_attribute(SPANDATA.THREAD_NAME)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sentry-sdk
3
- Version: 2.27.0
3
+ Version: 3.0.0a1
4
4
  Summary: Python client for Sentry (https://sentry.io)
5
5
  Home-page: https://github.com/getsentry/sentry-python
6
6
  Author: Sentry Team and Contributors
@@ -15,7 +15,6 @@ Classifier: License :: OSI Approved :: BSD License
15
15
  Classifier: Operating System :: OS Independent
16
16
  Classifier: Programming Language :: Python
17
17
  Classifier: Programming Language :: Python :: 3
18
- Classifier: Programming Language :: Python :: 3.6
19
18
  Classifier: Programming Language :: Python :: 3.7
20
19
  Classifier: Programming Language :: Python :: 3.8
21
20
  Classifier: Programming Language :: Python :: 3.9
@@ -24,11 +23,12 @@ Classifier: Programming Language :: Python :: 3.11
24
23
  Classifier: Programming Language :: Python :: 3.12
25
24
  Classifier: Programming Language :: Python :: 3.13
26
25
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
27
- Requires-Python: >=3.6
26
+ Requires-Python: >=3.7
28
27
  Description-Content-Type: text/markdown
29
28
  License-File: LICENSE
30
29
  Requires-Dist: urllib3>=1.26.11
31
30
  Requires-Dist: certifi
31
+ Requires-Dist: opentelemetry-sdk>=1.4.0
32
32
  Provides-Extra: aiohttp
33
33
  Requires-Dist: aiohttp>=3.5; extra == "aiohttp"
34
34
  Provides-Extra: anthropic
@@ -85,8 +85,6 @@ Provides-Extra: openfeature
85
85
  Requires-Dist: openfeature-sdk>=0.7.1; extra == "openfeature"
86
86
  Provides-Extra: opentelemetry
87
87
  Requires-Dist: opentelemetry-distro>=0.35b0; extra == "opentelemetry"
88
- Provides-Extra: opentelemetry-experimental
89
- Requires-Dist: opentelemetry-distro; extra == "opentelemetry-experimental"
90
88
  Provides-Extra: pure-eval
91
89
  Requires-Dist: pure_eval; extra == "pure-eval"
92
90
  Requires-Dist: executing; extra == "pure-eval"
@@ -0,0 +1,154 @@
1
+ sentry_sdk/__init__.py,sha256=avkzRWQUXBqC2lEg48OSHjR3-ZoYUdCr1qd7sZYzWcg,1197
2
+ sentry_sdk/_compat.py,sha256=gyVJQzMNZHmnSXHnZD_Opx7yCjokpf5pxGNFRkjvTQ8,3055
3
+ sentry_sdk/_init_implementation.py,sha256=5SBRkJ8g7ansx5vtY4tDx1GBWX4BsWCVCUq-k_3F3aY,1516
4
+ sentry_sdk/_log_batcher.py,sha256=bBpspIlf1ejxlbudo17bZOSir226LGAdjDe_3kHkOro,5085
5
+ sentry_sdk/_lru_cache.py,sha256=phZMBm9EKU1m67OOApnKCffnlWAlVz9bYjig7CglQuk,1229
6
+ sentry_sdk/_queue.py,sha256=UUzbmliDYmdVYiDA32NMYkX369ElWMFNSj5kodqVQZE,11250
7
+ sentry_sdk/_types.py,sha256=r54HKNUBQgcFAWNx95r_4JawgEjicnWV2oBRUaxtHRs,8834
8
+ sentry_sdk/_werkzeug.py,sha256=m3GPf-jHd8v3eVOfBHaKw5f0uHoLkXrSO1EcY-8EisY,3734
9
+ sentry_sdk/api.py,sha256=KqQ9DMZZnfrmFg6H5lnGSW2or7zs3fYY-V5onVPoAFo,8811
10
+ sentry_sdk/attachments.py,sha256=0Dylhm065O6hNFjB40fWCd5Hg4qWSXndmi1TPWglZkI,3109
11
+ sentry_sdk/client.py,sha256=OPppi-oNVtdQ-cKGVPIGT5kzy1_nviY0ewrqAzD68SM,35770
12
+ sentry_sdk/consts.py,sha256=VVQAShhY3b_9q6wH0llsIiv2N5KL8AR8Bedpqf-Z1es,39472
13
+ sentry_sdk/debug.py,sha256=OK7eLI_Gd-RLEfpFAf2MJ7lGgGX7boPqCJYD4ovrwbo,785
14
+ sentry_sdk/envelope.py,sha256=ARGQtMcpfzRqZdybYT5Jxy4dfB_fRifhmvfAdGFQRDk,10273
15
+ sentry_sdk/feature_flags.py,sha256=mhGRnefU8I2WwTt53O9eEnCDpq40S0LkCJB1Ms-hYmQ,2212
16
+ sentry_sdk/logger.py,sha256=jQQCAVpn4P6cbn_7vkaLZAzxIi8q5FQBFCx26-WRuGA,1660
17
+ sentry_sdk/monitor.py,sha256=7LydPMKjVRR5eFY9rxgvJv0idExA3sSnrZk-1mHu6G4,3710
18
+ sentry_sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
+ sentry_sdk/scope.py,sha256=7oXCJBKtxHChUIamoaYy0rCG1U-Bl67wUNi0lH-Fx5w,53006
20
+ sentry_sdk/scrubber.py,sha256=rENmQ35buugDl269bRZuIAtgr27B9SzisJYUF-691pc,6064
21
+ sentry_sdk/serializer.py,sha256=iXiRwTuRj0gcKyHRO0GNTZB1Hmk0LMDiBt6Be7RpGt8,13087
22
+ sentry_sdk/session.py,sha256=TqDVmRKKHUDSmZb4jQR-s8wDt7Fwb6QaG21hawUGWEs,5571
23
+ sentry_sdk/sessions.py,sha256=vKlky9_ABnBGUaOVJNigdoCCFOGoaPDPRYwzuI7x96g,6390
24
+ sentry_sdk/spotlight.py,sha256=93kdd8KxdLfcPaxFnFuqHgYAAL4FCfpK1hiiPoD7Ac4,8678
25
+ sentry_sdk/tracing.py,sha256=hgMdYC6CrgNXFuS0PGiZdo4wyd1u7MMtUdra9IUk7MQ,19227
26
+ sentry_sdk/tracing_utils.py,sha256=TJWottpOkF5jFufhV8OIPZVCbFNTd2NUmv--_WhlM4Q,27317
27
+ sentry_sdk/transport.py,sha256=SQ3femwQaA79U5C-dDLjiOALdVfTJi3AT9mH65DyzCQ,29301
28
+ sentry_sdk/types.py,sha256=NLbnRzww2K3_oGz2GzcC8TdX5L2DXYso1-H1uCv2Hwc,1222
29
+ sentry_sdk/utils.py,sha256=j4tWTtvPQcoYIqNt9z36tWa8DQQ8F0Mk6r4HzpEduqc,60857
30
+ sentry_sdk/worker.py,sha256=VSMaigRMbInVyupSFpBC42bft2oIViea-0C_d9ThnIo,4464
31
+ sentry_sdk/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
+ sentry_sdk/ai/monitoring.py,sha256=KNSaTu7B9Ol9Am4b9VXNmg022sjKfnj1kCc4A8wt7SQ,4555
33
+ sentry_sdk/ai/utils.py,sha256=0pTfZkH4H8bVzDLP0gJfTjou5TrxD1xZcdYctgkSq-4,955
34
+ sentry_sdk/crons/__init__.py,sha256=3Zt6g1-pZZ12uRKKsC8QLm3XgJ4K1VYxgVpNNUygOZY,221
35
+ sentry_sdk/crons/api.py,sha256=s3x6SG-jqIdWS-Kj0sAxJv0nz2A3stdGE1UCtQyRUy4,1559
36
+ sentry_sdk/crons/consts.py,sha256=dXqJk5meBSu5rjlGpqAOlkpACnuUi7svQnAFoy1ZNUU,87
37
+ sentry_sdk/crons/decorator.py,sha256=UrjeIqBCbvsuKrfjGkKJbbLBvjw2TQvDWcTO7WwAmrI,3913
38
+ sentry_sdk/integrations/__init__.py,sha256=w5OUgaCOjLsiNwbDypCVw49EVj_XqlAhMjzhlCwVUso,10287
39
+ sentry_sdk/integrations/_asgi_common.py,sha256=8xwx5dFQRnrronAiv9EE1Ahs3im7R_Wbqkx5TCXC42A,3215
40
+ sentry_sdk/integrations/_wsgi_common.py,sha256=BZjAtNlDzLwIJ9oAvqnbU9En3PYKYHdJG4DkTrp2VdY,6682
41
+ sentry_sdk/integrations/aiohttp.py,sha256=eo5NifW1tgJyru6lxtZ5xyKokcHX9Frz3wEJM46-ja8,14095
42
+ sentry_sdk/integrations/anthropic.py,sha256=jDpb-dHz0xan6DhRaWv_OviDMsHs6Wh_3DH0W76wMWM,9528
43
+ sentry_sdk/integrations/argv.py,sha256=GIY7TBFETF8Z0fDzqTXEJldt5XXCDdFNZxpGxP7EPaU,911
44
+ sentry_sdk/integrations/ariadne.py,sha256=C-zKlOrU7jvTWmQHZx0M0tAZNkPPo7Z5-5jXDD92LiU,5834
45
+ sentry_sdk/integrations/arq.py,sha256=wckKLP2g0wMDCxyGa48fgF335SppB7MzQFhw2B97RFk,8145
46
+ sentry_sdk/integrations/asgi.py,sha256=vQG429vlPvGs9qH-mgWtEUoNYI99-rfYQYvr8YbI3WM,12944
47
+ sentry_sdk/integrations/asyncio.py,sha256=fQJtZw3avH8FpR85wNE9rVAPildYTWXzjIoxo25nTEQ,4079
48
+ sentry_sdk/integrations/asyncpg.py,sha256=gw5QDAHfJ45Dpvnlb5Zs2jHcYGFeJPL9xRexpjPeQ_s,6711
49
+ sentry_sdk/integrations/atexit.py,sha256=sY46N2hEvtGuT1DBQhirUXHbjgXjXAm7R_sgiectVKw,1652
50
+ sentry_sdk/integrations/aws_lambda.py,sha256=iD8Wi-Ai2-NKuBvWWUezLe-bgyNVKDzR2RLZXzHgQB4,18123
51
+ sentry_sdk/integrations/beam.py,sha256=qt35UmkA0ng4VNzmwqH9oz7SESU-is9IjFbTJ21ad4U,5182
52
+ sentry_sdk/integrations/boto3.py,sha256=BRmH1bDJaPIMwTj1iOT_OkwMqc-BoTRUZjnizmPgwUc,4963
53
+ sentry_sdk/integrations/bottle.py,sha256=Ezll62T88-CnQpWetTw6t4zWhIXkVjgkAbqJbRwuw20,6614
54
+ sentry_sdk/integrations/chalice.py,sha256=A4K_9FmNUu131El0ctkTmjtyYd184I4hQTlidZcEC54,4699
55
+ sentry_sdk/integrations/clickhouse_driver.py,sha256=m9hEqSA9dCQWBOPac4Dh34LRKHKcam4QANeJTsB96bA,6353
56
+ sentry_sdk/integrations/cloud_resource_context.py,sha256=_gFldMeVHs5pxP5sm8uP7ZKmm6s_5hw3UsnXek9Iw8A,7780
57
+ sentry_sdk/integrations/cohere.py,sha256=QZsLn70w58_Rn-ldTwoUazHhoo8jWrKxmkAivmBtx7A,9332
58
+ sentry_sdk/integrations/dedupe.py,sha256=usREWhtGDFyxVBlIVzyCYj_Qy7NJBJ84FK0B57z11LM,1418
59
+ sentry_sdk/integrations/dramatiq.py,sha256=I09vKWnfiuhdRFCjYYjmE9LOBQvDTPS-KFqf3iHFSsM,5583
60
+ sentry_sdk/integrations/excepthook.py,sha256=tfwpSQuo1b_OmJbNKPPRh90EUjD_OSE4DqqgYY9PVQI,2408
61
+ sentry_sdk/integrations/executing.py,sha256=5lxBAxO5FypY-zTV03AHncGmolmaHd327-3Vrjzskcc,1994
62
+ sentry_sdk/integrations/falcon.py,sha256=FGuG1q2rcwZm3b8HcAnsLHPyKDvRT3Tb7SHYK-lCWc8,8651
63
+ sentry_sdk/integrations/fastapi.py,sha256=Y5zCNeSVE1II0NX-u5eKA7wwCgw_I688ptf8RL5UrhU,4713
64
+ sentry_sdk/integrations/flask.py,sha256=chFuIOYV5redpuVZsGT9peCk8Aw0Y9VgQdeEfa1nraI,8739
65
+ sentry_sdk/integrations/gcp.py,sha256=NSmIf-mpisbLpjV4hiatYR5Wxo-hFKxsJk51NedlK4s,8751
66
+ sentry_sdk/integrations/gnu_backtrace.py,sha256=cVY7t6gjVjeRf4PdnmZrATFqMOZ7-qJu-84xIXOD5R4,2894
67
+ sentry_sdk/integrations/gql.py,sha256=ppC7fjpyQ6jWST-batRt5HtebxE_9IeHbmZ-CJ1TfUU,4179
68
+ sentry_sdk/integrations/graphene.py,sha256=o1hGIt2GDqNFcZzLWwSozIO4VjGhO8Zglo32ftakXUk,4901
69
+ sentry_sdk/integrations/httpx.py,sha256=qMFq7AyNxGEPz6YcWJCdeCMOmnZPNitWhlA-ip9U2YA,6888
70
+ sentry_sdk/integrations/huey.py,sha256=0zmcHBWoDXDldXVrZl5MRMYUgn6X9an0BbzTfDBAJkg,5566
71
+ sentry_sdk/integrations/huggingface_hub.py,sha256=qdWgY3EVa4wvJUX8QeX9geftroTyzzA9pv6V9RUebfc,6570
72
+ sentry_sdk/integrations/langchain.py,sha256=4nwcQterKi2W1LC5rn4zSHK7ZQtWXS5mGHtG9SadImM,17977
73
+ sentry_sdk/integrations/launchdarkly.py,sha256=bvtExuj68xPXZFsQeWTDR-ZBqP087tPuVzP1bNAOZHc,1935
74
+ sentry_sdk/integrations/litestar.py,sha256=Rg163-wzY5wPfL_IlDR82tfultT47_g2zDJgouPtB5Y,11654
75
+ sentry_sdk/integrations/logging.py,sha256=2E2sevnYLIAe3b1WX2Ho9BrO_5s0ME7WnNPv6jv4cAw,13627
76
+ sentry_sdk/integrations/loguru.py,sha256=Yrsgv5yJP9NzbQKOfdhSrJ_M01gmcg954kA32MB44po,3861
77
+ sentry_sdk/integrations/modules.py,sha256=vzLx3Erg77Vl4mnUvAgTg_3teAuWy7zylFpAidBI9I0,820
78
+ sentry_sdk/integrations/openai.py,sha256=rfHJh3LnbmgZj4OttJSSzk9sFgZcEFzpjLPgIRBvKJ8,15615
79
+ sentry_sdk/integrations/openfeature.py,sha256=NXRKnhg0knMKOx_TO_2Z4zSsh4Glgk3tStu-lI99XsE,1235
80
+ sentry_sdk/integrations/pure_eval.py,sha256=OvT76XvllQ_J6ABu3jVNU6KD2QAxnXMtTZ7hqhXNhpY,4581
81
+ sentry_sdk/integrations/pymongo.py,sha256=6blDWS_trV6I4PqF6z3yJTi6993-W13bxGTD55YKqyg,6163
82
+ sentry_sdk/integrations/pyramid.py,sha256=rWO6agrNjw-oduGSvI_8SER89eJFTAPPq7wliDwDXxk,7363
83
+ sentry_sdk/integrations/quart.py,sha256=DQOZwNIHtjdp8sHw3yAWY9of1qsVovpmoJC6X4tVK5s,7432
84
+ sentry_sdk/integrations/ray.py,sha256=9WknIqc8p-wivvcC9Q1KqobuuOVitIPXmMpTASjPsfE,4489
85
+ sentry_sdk/integrations/rq.py,sha256=3l87cVFo_ReNYGKQs-Xs0WnqW3Fc2AeJCsOEgC0icXY,6645
86
+ sentry_sdk/integrations/rust_tracing.py,sha256=FhAXrzyLO6bDqJBAIDz4lsmUkVvf2xp6ViHvM2ZSv6w,8565
87
+ sentry_sdk/integrations/sanic.py,sha256=oX7qJBI6LhPc0PirS4NLdelXBxFMkdxSRDrFHdZZPso,13369
88
+ sentry_sdk/integrations/serverless.py,sha256=npiKJuIy_sEkWT_x0Eu2xSEMiMh_aySqGYlnvIROsYk,1804
89
+ sentry_sdk/integrations/socket.py,sha256=2wO5pbR_1iZRR-yXabsPZ0-zx5V-KXy3QxWdq9UPl0Q,3348
90
+ sentry_sdk/integrations/sqlalchemy.py,sha256=DOfbNjoFjlT6OoFU9swdLbtn3xCm4fEMbfojG0m6RFQ,4392
91
+ sentry_sdk/integrations/starlette.py,sha256=2P1IN3TIhhvkk4892ioWDjCMWDXZYP4KXtH8GJ4U6S4,25681
92
+ sentry_sdk/integrations/starlite.py,sha256=8VMvEuKTqRQghmBEEzyjipj_Y8B1t4-4IVXUQEaH4IU,10705
93
+ sentry_sdk/integrations/statsig.py,sha256=-e57hxHfHo1S13YQKObV65q_UvREyxbR56fnf7bkC9o,1227
94
+ sentry_sdk/integrations/stdlib.py,sha256=CqtEVPvrOb7aokYX-MyOdEBQA1Bc45-7GGePQN1rUXk,10419
95
+ sentry_sdk/integrations/strawberry.py,sha256=ooPdEME9qyDq5lX8FJPBzzmtNpUtbNNuC356iRxZIu8,13604
96
+ sentry_sdk/integrations/sys_exit.py,sha256=AwShgGBWPdiY25aOWDLRAs2RBUKm5T3CrL-Q-zAk0l4,2493
97
+ sentry_sdk/integrations/threading.py,sha256=1kphygBtWeTFevbCVZTS0ykUsFUNcKPF_ucqnJk66C0,4722
98
+ sentry_sdk/integrations/tornado.py,sha256=Fpl2D_yV0euW9SEjzYLCNicgfPcHTUDT50QlZGnT6mo,8596
99
+ sentry_sdk/integrations/trytond.py,sha256=jx8Xrkv24Fx6zDmx3pSOz3DR_tg9dzToy5qp5zsEXQ8,1815
100
+ sentry_sdk/integrations/typer.py,sha256=FQrFgpR9t6yQWF-oWCI9KJLFioEnA2c_1BEtYV-mPAs,1815
101
+ sentry_sdk/integrations/unleash.py,sha256=6JshqyuAY_kbu9Nr20tMOhtgx-ryqPHCrq_EQIzeqm4,1058
102
+ sentry_sdk/integrations/wsgi.py,sha256=yBRc0vLD4ci0AGn9PWP5hprHSQ9HBXhkwyCaB7ThnlA,12374
103
+ sentry_sdk/integrations/celery/__init__.py,sha256=rtSPr7XOvyiW-CNooZ7FRXbI0ZBeL-AQFmao1Xo5N0g,18978
104
+ sentry_sdk/integrations/celery/beat.py,sha256=wIRqiY8lsi-PwAnMwsqVDoAbkMlGDacOE5_xaYgRj_Q,8947
105
+ sentry_sdk/integrations/celery/utils.py,sha256=CMWQOpg9yniEkm3WlXe7YakJfVnLwaY0-jyeo2GX-ZI,1208
106
+ sentry_sdk/integrations/django/__init__.py,sha256=kmX9-Ks7DC9UQn6ygzzPwDyHxADnkloY_qMIJ-u-Tyo,24565
107
+ sentry_sdk/integrations/django/asgi.py,sha256=1_Sjyp9Gr9b26krrFS6mN84NIeMssLtrQs-moUqXFBw,8439
108
+ sentry_sdk/integrations/django/caching.py,sha256=dwnl_xVU_Qn1dedX54k7IwCnkHun4PXQ-V1edU9zY3I,6367
109
+ sentry_sdk/integrations/django/middleware.py,sha256=ZW4crjGSA2A8pKWeTZOn8UpoHDVde86kaYbtHG3NYIQ,6042
110
+ sentry_sdk/integrations/django/signals_handlers.py,sha256=f2zP-QvqCtKHBazf4oC4a0pUg3Hw5UQO4zHZ9JRZkqk,3175
111
+ sentry_sdk/integrations/django/templates.py,sha256=poCaPxfZ_SH8d53aj6t2Pk4q8eyE8rqPbfEoFpevNhU,5711
112
+ sentry_sdk/integrations/django/transactions.py,sha256=RTAyHlL8LCW6R6xd3Wj9Lt9fXbnqvJVM_YBPrLqPcbU,4842
113
+ sentry_sdk/integrations/django/views.py,sha256=mOtgGuVpVIlO5NLXFyjSMmcFBBeOaQ73h6MH0FFFl5s,3232
114
+ sentry_sdk/integrations/grpc/__init__.py,sha256=yPPAF18F9FE3IYGdyUrdR4yEF6T1T4xxd1TbDkEh3Do,4998
115
+ sentry_sdk/integrations/grpc/client.py,sha256=WkEBXBMBbIk1zXbqZj8QAsQY4BoOGD9dxZ0MXWCbU3Q,3478
116
+ sentry_sdk/integrations/grpc/consts.py,sha256=NpsN5gKWDmtGtVK_L5HscgFZBHqjOpmLJLGKyh8GZBA,31
117
+ sentry_sdk/integrations/grpc/server.py,sha256=H3FLBu3ilkrygMoYrqQZvMQaVj9q_ymkBbGjiRxgEZg,2428
118
+ sentry_sdk/integrations/grpc/aio/__init__.py,sha256=2rgrliowpPfLLw40_2YU6ixSzIu_3f8NN3TRplzc8S8,141
119
+ sentry_sdk/integrations/grpc/aio/client.py,sha256=vT9K7efhknsh53rczSoaJ30kJZ_mvjVx5FFuvBuDHcM,3550
120
+ sentry_sdk/integrations/grpc/aio/server.py,sha256=1tGBIcm8pyuVYw5LzapnO1sIK86Lk-LhCimlHu-y-Ag,4005
121
+ sentry_sdk/integrations/redis/__init__.py,sha256=As5XhbOue-9Sy9d8Vr8cZagbO_Bc0uG8n2G3YNMP7TU,1332
122
+ sentry_sdk/integrations/redis/_async_common.py,sha256=Iie5twWxpzMQmsYNAy2KElNTe54IQSPQz5XlXXYn6pU,4418
123
+ sentry_sdk/integrations/redis/_sync_common.py,sha256=k4Jl7wJi-vIvVgOr0EyKI2JQAi-OCJEvIf4L9dxmUus,4160
124
+ sentry_sdk/integrations/redis/consts.py,sha256=jYhloX935YQ1AR9c8giCVo1FpIuGXkGR_Tfn4LOulNU,480
125
+ sentry_sdk/integrations/redis/rb.py,sha256=LjzhGxgiZciZKXbYN3C_gqYCdakiKSvFfloGr1URcqQ,806
126
+ sentry_sdk/integrations/redis/redis.py,sha256=z3Kc8bPbvXpXfewLhTpaNMzovHfDKh5NF-zq9_IsX2o,1702
127
+ sentry_sdk/integrations/redis/redis_cluster.py,sha256=2GwSFKxOkpBix_uR7uQcTd-wfjqjXd_koSRNSpPEgOs,3334
128
+ sentry_sdk/integrations/redis/redis_py_cluster_legacy.py,sha256=NJWxpY3btWWyjKMko9V4YS9MXsglDSezIPPIG_T1jPk,1585
129
+ sentry_sdk/integrations/redis/utils.py,sha256=FsEkY4y8pOAJVeCddnhsvUy1mJBmx09zXXVeJMnaTQs,4957
130
+ sentry_sdk/integrations/redis/modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
+ sentry_sdk/integrations/redis/modules/caches.py,sha256=RP1TTZkeDwCNMeIBiPJQpCbiY9MdoGDjixsV4L25Mp0,3997
132
+ sentry_sdk/integrations/redis/modules/queries.py,sha256=9egWzYjGOJzoLvMagGivH0x-IQoYP0YpajmREPHjzXA,1999
133
+ sentry_sdk/integrations/spark/__init__.py,sha256=oOewMErnZk2rzNvIlZO6URxQexu9bUJuSLM2m_zECy8,208
134
+ sentry_sdk/integrations/spark/spark_driver.py,sha256=mqGQMngDAZWM78lWK5S0FPpmjd1Q65Ta5T4bOH6mNXs,9465
135
+ sentry_sdk/integrations/spark/spark_worker.py,sha256=FGT4yRU2X_iQCC46aasMmvJfYOKmBip8KbDF_wnhvEY,3706
136
+ sentry_sdk/opentelemetry/__init__.py,sha256=Npi53VwdWHE4YTXyxOUzxGvKnNBHkXa3sozE_jfdzaw,283
137
+ sentry_sdk/opentelemetry/consts.py,sha256=LnWze9RVEjtTEVuTknF8nEGasC0U0jRDGVOmhr2eICA,1088
138
+ sentry_sdk/opentelemetry/contextvars_context.py,sha256=q9AKfuDAF0pyEDtOFiz9XrlzjUGeo11eLODbigZYEzM,2623
139
+ sentry_sdk/opentelemetry/propagator.py,sha256=WUJmeCQ5RVrDy_8eA00WATvdv5rOv9ZRxu9tQTuRyes,3447
140
+ sentry_sdk/opentelemetry/sampler.py,sha256=OXCMz2BN5OWApY2uf1DtW6UbPi6hDuwEMNIerY4f2xs,12231
141
+ sentry_sdk/opentelemetry/scope.py,sha256=5UId5GYG1fb8AsfhpVkokIJqx3_03HrbPxzJf_kcZ2g,6548
142
+ sentry_sdk/opentelemetry/span_processor.py,sha256=BOFgmkEcYKmBsE6tt2Sxa9Rhk4wznaQGp9u4vmnRaH4,11108
143
+ sentry_sdk/opentelemetry/tracing.py,sha256=bD_S_Ruu8HbYwQ6OTM-1_xOqTOcNC5wjjMPM7mIWeIc,1118
144
+ sentry_sdk/opentelemetry/utils.py,sha256=i14B_zcWYcP1dhZOyeoY1D0TbFySvNAiBaxxMuOJz4s,14807
145
+ sentry_sdk/profiler/__init__.py,sha256=bYeDkmLQliS2KkNSOGa8Sx4zN3pjTc3WmYIvbkcGkmQ,153
146
+ sentry_sdk/profiler/continuous_profiler.py,sha256=pm3LpasUjvTS1qk6rNT-AzuKb6ym81481aoq0l5r398,21655
147
+ sentry_sdk/profiler/transaction_profiler.py,sha256=o3UZ6J8LrrRbZATuJyQtcno-BlawiM5OmlOa8e2cNyQ,26109
148
+ sentry_sdk/profiler/utils.py,sha256=G5s4tYai9ATJqcHrQ3bOIxlK6jIaHzELrDtU5k3N4HI,6556
149
+ sentry_sdk-3.0.0a1.dist-info/licenses/LICENSE,sha256=KhQNZg9GKBL6KQvHQNBGMxJsXsRdhLebVp4Sew7t3Qs,1093
150
+ sentry_sdk-3.0.0a1.dist-info/METADATA,sha256=aZLn-LkBdHFMpdjG8XGcsU-mnNP4eNNneRevqA8cMvY,10161
151
+ sentry_sdk-3.0.0a1.dist-info/WHEEL,sha256=oSJJyWjO7Z2XSScFQUpXG1HL-N0sFMqqeKVVbZTPkWc,109
152
+ sentry_sdk-3.0.0a1.dist-info/entry_points.txt,sha256=-FP10-IbDq7-9RSn7JcaVV6-nDwVN2kwvA46zNTNwtk,78
153
+ sentry_sdk-3.0.0a1.dist-info/top_level.txt,sha256=XrQz30XE9FKXSY_yGLrd9bsv2Rk390GTDJOSujYaMxI,11
154
+ sentry_sdk-3.0.0a1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (79.0.1)
2
+ Generator: setuptools (80.3.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py2-none-any
5
5
  Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [opentelemetry_propagator]
2
+ sentry = sentry_sdk.opentelemetry:SentryPropagator