redis.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. """
  2. Instrumentation for Redis
  3. https://github.com/redis/redis-py
  4. """
  5. from sentry_sdk.integrations.redis._sync_common import (
  6. patch_redis_client,
  7. patch_redis_pipeline,
  8. )
  9. from sentry_sdk.integrations.redis.modules.queries import _set_db_data
  10. from typing import TYPE_CHECKING
  11. if TYPE_CHECKING:
  12. from typing import Any, Sequence
  13. def _get_redis_command_args(command: "Any") -> "Sequence[Any]":
  14. return command[0]
  15. def _patch_redis(StrictRedis: "Any", client: "Any") -> None: # noqa: N803
  16. patch_redis_client(
  17. StrictRedis,
  18. is_cluster=False,
  19. set_db_data_fn=_set_db_data,
  20. )
  21. patch_redis_pipeline(
  22. client.Pipeline,
  23. is_cluster=False,
  24. get_command_args_fn=_get_redis_command_args,
  25. set_db_data_fn=_set_db_data,
  26. )
  27. try:
  28. strict_pipeline = client.StrictPipeline
  29. except AttributeError:
  30. pass
  31. else:
  32. patch_redis_pipeline(
  33. strict_pipeline,
  34. is_cluster=False,
  35. get_command_args_fn=_get_redis_command_args,
  36. set_db_data_fn=_set_db_data,
  37. )
  38. try:
  39. import redis.asyncio
  40. except ImportError:
  41. pass
  42. else:
  43. from sentry_sdk.integrations.redis._async_common import (
  44. patch_redis_async_client,
  45. patch_redis_async_pipeline,
  46. )
  47. patch_redis_async_client(
  48. redis.asyncio.client.StrictRedis,
  49. is_cluster=False,
  50. set_db_data_fn=_set_db_data,
  51. )
  52. patch_redis_async_pipeline(
  53. redis.asyncio.client.Pipeline,
  54. False,
  55. _get_redis_command_args,
  56. set_db_data_fn=_set_db_data,
  57. )