logfire-api 5.0.0__tar.gz → 5.1.0__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 (125) hide show
  1. {logfire_api-5.0.0 → logfire_api-5.1.0}/PKG-INFO +1 -1
  2. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/__init__.py +4 -0
  3. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/__init__.pyi +2 -1
  4. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/cli/run.pyi +1 -0
  5. logfire_api-5.1.0/logfire_api/_internal/integrations/litestar.pyi +7 -0
  6. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/logs.pyi +2 -2
  7. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/main.pyi +24 -0
  8. {logfire_api-5.0.0 → logfire_api-5.1.0}/pyproject.toml +1 -1
  9. {logfire_api-5.0.0 → logfire_api-5.1.0}/.gitignore +0 -0
  10. {logfire_api-5.0.0 → logfire_api-5.1.0}/README.md +0 -0
  11. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/__init__.pyi +0 -0
  12. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/ast_utils.pyi +0 -0
  13. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/async_.pyi +0 -0
  14. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/auth.pyi +0 -0
  15. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/auto_trace/__init__.pyi +0 -0
  16. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/auto_trace/import_hook.pyi +0 -0
  17. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/auto_trace/rewrite_ast.pyi +0 -0
  18. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/auto_trace/types.pyi +0 -0
  19. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/baggage.pyi +0 -0
  20. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/cli/__init__.pyi +0 -0
  21. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/cli/ai_tools.pyi +0 -0
  22. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/cli/auth.pyi +0 -0
  23. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/cli/gateway.pyi +0 -0
  24. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/cli/gateway_auth.pyi +0 -0
  25. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/cli/prompt.pyi +0 -0
  26. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/cli.pyi +0 -0
  27. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/client.pyi +0 -0
  28. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/collect_system_info.pyi +0 -0
  29. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/config.pyi +0 -0
  30. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/config_params.pyi +0 -0
  31. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/constants.pyi +0 -0
  32. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/db_statement_summary.pyi +0 -0
  33. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/exporters/__init__.pyi +0 -0
  34. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/exporters/console.pyi +0 -0
  35. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/exporters/dynamic_batch.pyi +0 -0
  36. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/exporters/logs.pyi +0 -0
  37. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/exporters/otlp.pyi +0 -0
  38. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/exporters/processor_wrapper.pyi +0 -0
  39. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/exporters/quiet_metrics.pyi +0 -0
  40. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/exporters/remove_pending.pyi +0 -0
  41. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/exporters/tail_sampling.pyi +0 -0
  42. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/exporters/wrapper.pyi +0 -0
  43. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/formatter.pyi +0 -0
  44. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/forwarding.pyi +0 -0
  45. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/instrument.pyi +0 -0
  46. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/__init__.pyi +0 -0
  47. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/aiohttp_client.pyi +0 -0
  48. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/aiohttp_server.pyi +0 -0
  49. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/asgi.pyi +0 -0
  50. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/asyncpg.pyi +0 -0
  51. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/aws_lambda.pyi +0 -0
  52. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/celery.pyi +0 -0
  53. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/claude_agent_sdk.pyi +0 -0
  54. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/django.pyi +0 -0
  55. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/dspy.pyi +0 -0
  56. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/executors.pyi +0 -0
  57. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/fastapi.pyi +0 -0
  58. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/flask.pyi +0 -0
  59. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/google_genai.pyi +0 -0
  60. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/httpx.pyi +0 -0
  61. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/litellm.pyi +0 -0
  62. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/mcp.pyi +0 -0
  63. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/mysql.pyi +0 -0
  64. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/openai_agents.pyi +0 -0
  65. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/print.pyi +0 -0
  66. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/psycopg.pyi +0 -0
  67. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/pydantic_ai.pyi +0 -0
  68. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/pymongo.pyi +0 -0
  69. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/pytest.pyi +0 -0
  70. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/redis.pyi +0 -0
  71. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/requests.pyi +0 -0
  72. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/sqlalchemy.pyi +0 -0
  73. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/sqlite3.pyi +0 -0
  74. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/starlette.pyi +0 -0
  75. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/surrealdb.pyi +0 -0
  76. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/system_metrics.pyi +0 -0
  77. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/integrations/wsgi.pyi +0 -0
  78. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/interactive.pyi +0 -0
  79. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/json_encoder.pyi +0 -0
  80. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/json_formatter.pyi +0 -0
  81. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/json_schema.pyi +0 -0
  82. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/json_types.pyi +0 -0
  83. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/metrics.pyi +0 -0
  84. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/scrubbing.pyi +0 -0
  85. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/server_response.pyi +0 -0
  86. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/stack_info.pyi +0 -0
  87. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/tracer.pyi +0 -0
  88. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/ulid.pyi +0 -0
  89. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/_internal/utils.pyi +0 -0
  90. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/cli.pyi +0 -0
  91. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/db_api.pyi +0 -0
  92. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/exceptions.pyi +0 -0
  93. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/experimental/__init__.pyi +0 -0
  94. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/experimental/annotations.pyi +0 -0
  95. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/experimental/api_client.pyi +0 -0
  96. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/experimental/datasets/__init__.pyi +0 -0
  97. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/experimental/query_client.pyi +0 -0
  98. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/integrations/__init__.pyi +0 -0
  99. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/integrations/aiohttp_client.pyi +0 -0
  100. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/integrations/flask.pyi +0 -0
  101. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/integrations/httpx.pyi +0 -0
  102. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/integrations/logging.pyi +0 -0
  103. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/integrations/loguru.pyi +0 -0
  104. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/integrations/psycopg.pyi +0 -0
  105. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/integrations/pydantic.pyi +0 -0
  106. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/integrations/redis.pyi +0 -0
  107. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/integrations/sqlalchemy.pyi +0 -0
  108. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/integrations/structlog.pyi +0 -0
  109. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/integrations/wsgi.pyi +0 -0
  110. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/propagate.pyi +0 -0
  111. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/py.typed +0 -0
  112. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/query_client.pyi +0 -0
  113. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/sampling/__init__.pyi +0 -0
  114. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/sampling/_tail_sampling.pyi +0 -0
  115. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/types.pyi +0 -0
  116. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/variables/__init__.pyi +0 -0
  117. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/variables/_handlebars.pyi +0 -0
  118. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/variables/abstract.pyi +0 -0
  119. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/variables/composition.pyi +0 -0
  120. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/variables/config.pyi +0 -0
  121. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/variables/local.pyi +0 -0
  122. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/variables/remote.pyi +0 -0
  123. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/variables/template_validation.pyi +0 -0
  124. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/variables/variable.pyi +0 -0
  125. {logfire_api-5.0.0 → logfire_api-5.1.0}/logfire_api/version.pyi +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: logfire-api
3
- Version: 5.0.0
3
+ Version: 5.1.0
4
4
  Summary: Shim for the Logfire SDK which does nothing unless Logfire is installed
5
5
  Author-email: Pydantic Team <engineering@pydantic.dev>, Samuel Colvin <samuel@pydantic.dev>, Hasan Ramezani <hasan@pydantic.dev>, Adrian Garcia Badaracco <adrian@pydantic.dev>, David Montague <david@pydantic.dev>, Marcelo Trylesinski <marcelo@pydantic.dev>, David Hewitt <david.hewitt@pydantic.dev>, Alex Hall <alex@pydantic.dev>
6
6
  License-Expression: MIT
@@ -167,6 +167,9 @@ except ImportError:
167
167
 
168
168
  def instrument_starlette(self, *args, **kwargs) -> None: ...
169
169
 
170
+ def instrument_litestar(self, app, *args, **kwargs):
171
+ return app
172
+
170
173
  def instrument_django(self, *args, **kwargs) -> None: ...
171
174
 
172
175
  def instrument_psycopg(self, *args, **kwargs) -> None: ...
@@ -256,6 +259,7 @@ except ImportError:
256
259
  instrument_django = DEFAULT_LOGFIRE_INSTANCE.instrument_django
257
260
  instrument_flask = DEFAULT_LOGFIRE_INSTANCE.instrument_flask
258
261
  instrument_starlette = DEFAULT_LOGFIRE_INSTANCE.instrument_starlette
262
+ instrument_litestar = DEFAULT_LOGFIRE_INSTANCE.instrument_litestar
259
263
  instrument_aiohttp_client = DEFAULT_LOGFIRE_INSTANCE.instrument_aiohttp_client
260
264
  instrument_aiohttp_server = DEFAULT_LOGFIRE_INSTANCE.instrument_aiohttp_server
261
265
  instrument_sqlalchemy = DEFAULT_LOGFIRE_INSTANCE.instrument_sqlalchemy
@@ -16,7 +16,7 @@ from logfire.propagate import attach_context as attach_context, get_context as g
16
16
  from logfire.sampling import SamplingOptions as SamplingOptions
17
17
  from typing import Any
18
18
 
19
- __all__ = ['Logfire', 'LogfireSpan', 'LevelName', 'AdvancedOptions', 'ConsoleOptions', 'CodeSource', 'PydanticPlugin', 'configure', 'span', 'instrument', 'log', 'trace', 'debug', 'notice', 'info', 'warn', 'warning', 'error', 'exception', 'fatal', 'force_flush', 'log_slow_async_callbacks', 'install_auto_tracing', 'instrument_asgi', 'instrument_wsgi', 'instrument_pydantic', 'instrument_pydantic_ai', 'instrument_fastapi', 'instrument_openai', 'instrument_openai_agents', 'instrument_anthropic', 'instrument_google_genai', 'instrument_litellm', 'instrument_dspy', 'instrument_print', 'instrument_asyncpg', 'instrument_httpx', 'instrument_celery', 'instrument_requests', 'instrument_psycopg', 'instrument_django', 'instrument_flask', 'instrument_starlette', 'instrument_aiohttp_client', 'instrument_aiohttp_server', 'instrument_sqlalchemy', 'instrument_sqlite3', 'instrument_aws_lambda', 'instrument_redis', 'instrument_pymongo', 'instrument_mysql', 'instrument_surrealdb', 'instrument_system_metrics', 'instrument_mcp', 'instrument_claude_agent_sdk', 'AutoTraceModule', 'with_tags', 'with_settings', 'suppress_scopes', 'shutdown', 'no_auto_trace', 'ScrubMatch', 'ScrubbingOptions', 'VERSION', 'add_non_user_code_prefix', 'suppress_instrumentation', 'StructlogProcessor', 'LogfireLoggingHandler', 'loguru_handler', 'SamplingOptions', 'MetricsOptions', 'VariablesOptions', 'LocalVariablesOptions', 'variables', 'var', 'template_var', 'variables_get', 'variables_push', 'variables_push_types', 'variables_validate', 'variables_push_config', 'variables_pull_config', 'variables_build_config', 'logfire_info', 'get_baggage', 'set_baggage', 'get_context', 'attach_context', 'url_from_eval', 'forward_export_request', 'forward_export_request_starlette']
19
+ __all__ = ['Logfire', 'LogfireSpan', 'LevelName', 'AdvancedOptions', 'ConsoleOptions', 'CodeSource', 'PydanticPlugin', 'configure', 'span', 'instrument', 'log', 'trace', 'debug', 'notice', 'info', 'warn', 'warning', 'error', 'exception', 'fatal', 'force_flush', 'log_slow_async_callbacks', 'install_auto_tracing', 'instrument_asgi', 'instrument_wsgi', 'instrument_pydantic', 'instrument_pydantic_ai', 'instrument_fastapi', 'instrument_openai', 'instrument_openai_agents', 'instrument_anthropic', 'instrument_google_genai', 'instrument_litellm', 'instrument_dspy', 'instrument_print', 'instrument_asyncpg', 'instrument_httpx', 'instrument_celery', 'instrument_requests', 'instrument_psycopg', 'instrument_django', 'instrument_flask', 'instrument_starlette', 'instrument_litestar', 'instrument_aiohttp_client', 'instrument_aiohttp_server', 'instrument_sqlalchemy', 'instrument_sqlite3', 'instrument_aws_lambda', 'instrument_redis', 'instrument_pymongo', 'instrument_mysql', 'instrument_surrealdb', 'instrument_system_metrics', 'instrument_mcp', 'instrument_claude_agent_sdk', 'AutoTraceModule', 'with_tags', 'with_settings', 'suppress_scopes', 'shutdown', 'no_auto_trace', 'ScrubMatch', 'ScrubbingOptions', 'VERSION', 'add_non_user_code_prefix', 'suppress_instrumentation', 'StructlogProcessor', 'LogfireLoggingHandler', 'loguru_handler', 'SamplingOptions', 'MetricsOptions', 'VariablesOptions', 'LocalVariablesOptions', 'variables', 'var', 'template_var', 'variables_get', 'variables_push', 'variables_push_types', 'variables_validate', 'variables_push_config', 'variables_pull_config', 'variables_build_config', 'logfire_info', 'get_baggage', 'set_baggage', 'get_context', 'attach_context', 'url_from_eval', 'forward_export_request', 'forward_export_request_starlette']
20
20
 
21
21
  DEFAULT_LOGFIRE_INSTANCE = Logfire()
22
22
  span = DEFAULT_LOGFIRE_INSTANCE.span
@@ -44,6 +44,7 @@ instrument_psycopg = DEFAULT_LOGFIRE_INSTANCE.instrument_psycopg
44
44
  instrument_django = DEFAULT_LOGFIRE_INSTANCE.instrument_django
45
45
  instrument_flask = DEFAULT_LOGFIRE_INSTANCE.instrument_flask
46
46
  instrument_starlette = DEFAULT_LOGFIRE_INSTANCE.instrument_starlette
47
+ instrument_litestar = DEFAULT_LOGFIRE_INSTANCE.instrument_litestar
47
48
  instrument_aiohttp_client = DEFAULT_LOGFIRE_INSTANCE.instrument_aiohttp_client
48
49
  instrument_aiohttp_server = DEFAULT_LOGFIRE_INSTANCE.instrument_aiohttp_server
49
50
  instrument_sqlalchemy = DEFAULT_LOGFIRE_INSTANCE.instrument_sqlalchemy
@@ -14,6 +14,7 @@ TARGET_PACKAGE_ALIASES: Incomplete
14
14
  INSTRUMENTATION_CALL_ARGUMENTS: Incomplete
15
15
  MINIMUM_INSTRUMENTATION_VERSIONS: Incomplete
16
16
  OTEL_INSTRUMENTATION_MAP: Incomplete
17
+ INSTRUMENTATION_TO_EXTRA: dict[str, str]
17
18
 
18
19
  @dataclass(frozen=True, order=True)
19
20
  class InstrumentationRecommendation:
@@ -0,0 +1,7 @@
1
+ from .asgi import ASGIApp as ASGIApp, ASGIInstrumentKwargs as ASGIInstrumentKwargs, instrument_asgi as instrument_asgi
2
+ from litestar import Litestar
3
+ from logfire import Logfire as Logfire
4
+ from typing_extensions import Unpack
5
+
6
+ def instrument_litestar(logfire_instance: Logfire, app: Litestar, *, record_send_receive: bool = False, capture_headers: bool = False, **kwargs: Unpack[ASGIInstrumentKwargs]) -> ASGIApp:
7
+ """Wrap a Litestar app with OpenTelemetry middleware configured for Logfire."""
@@ -3,7 +3,7 @@ from dataclasses import dataclass
3
3
  from logfire._internal.constants import LEVEL_NUMBERS as LEVEL_NUMBERS
4
4
  from opentelemetry._logs import LogRecord, Logger, LoggerProvider
5
5
  from opentelemetry.util.types import _ExtendedAttributes
6
- from threading import Lock
6
+ from threading import RLock
7
7
  from typing import Any, overload
8
8
  from weakref import WeakSet
9
9
 
@@ -12,7 +12,7 @@ class ProxyLoggerProvider(LoggerProvider):
12
12
  """A logger provider that wraps another internal logger provider allowing it to be re-assigned."""
13
13
  provider: LoggerProvider
14
14
  loggers: WeakSet[ProxyLogger] = dataclasses.field(default_factory=WeakSet['ProxyLogger'])
15
- lock: Lock = dataclasses.field(default_factory=Lock)
15
+ lock: RLock = dataclasses.field(default_factory=RLock)
16
16
  suppressed_scopes: set[str] = dataclasses.field(default_factory=set[str])
17
17
  min_level: int = ...
18
18
  def get_logger(self, name: str, version: str | None = None, schema_url: str | None = None, attributes: _ExtendedAttributes | None = None) -> Logger: ...
@@ -42,6 +42,7 @@ from contextlib import AbstractContextManager
42
42
  from django.http import HttpRequest as HttpRequest, HttpResponse as HttpResponse
43
43
  from fastapi import FastAPI
44
44
  from flask.app import Flask
45
+ from litestar import Litestar
45
46
  from opentelemetry.context import Context as Context
46
47
  from opentelemetry.instrumentation.asgi.types import ClientRequestHook, ClientResponseHook, ServerRequestHook
47
48
  from opentelemetry.metrics import CallbackT as CallbackT, Counter, Histogram, UpDownCounter, _Gauge as Gauge
@@ -800,6 +801,29 @@ class Logfire:
800
801
  response_hook: A function called right before a span is finished for the response.
801
802
  **kwargs: Additional keyword arguments to pass to the OpenTelemetry Flask instrumentation.
802
803
  """
804
+ def instrument_litestar(self, app: Litestar, *, capture_headers: bool = False, record_send_receive: bool = False, **kwargs: Unpack[ASGIInstrumentKwargs]) -> ASGIApp:
805
+ """Instrument a Litestar app to record requests with canonical route templates.
806
+
807
+ Uses `instrument_asgi()` with a Litestar route extractor, so requests to
808
+ `/users/1` and `/users/2` share the route `/users/{user_id}`.
809
+
810
+ Warning:
811
+ This method returns an ASGI wrapper instead of modifying the app in place.
812
+ Pass the returned app to your server. Access Litestar-specific attributes
813
+ through the original app.
814
+
815
+ Args:
816
+ app: The Litestar app to instrument.
817
+ capture_headers: Set to `True` to capture all request and response headers.
818
+ record_send_receive: Set to `True` to record low-level ASGI send and receive spans.
819
+ These are disabled by default to reduce noise.
820
+ **kwargs: Additional options for the OpenTelemetry ASGI middleware, including
821
+ `server_request_hook`, `client_request_hook`, `client_response_hook`,
822
+ `excluded_urls`, and `default_span_details`.
823
+
824
+ Returns:
825
+ The instrumented ASGI application.
826
+ """
803
827
  def instrument_starlette(self, app: Starlette, *, capture_headers: bool = False, record_send_receive: bool = False, server_request_hook: ServerRequestHook | None = None, client_request_hook: ClientRequestHook | None = None, client_response_hook: ClientResponseHook | None = None, **kwargs: Any) -> None:
804
828
  """Instrument `app` so that spans are automatically created for each request.
805
829
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "logfire-api"
7
- version = "5.0.0"
7
+ version = "5.1.0"
8
8
  description = "Shim for the Logfire SDK which does nothing unless Logfire is installed"
9
9
  authors = [
10
10
  { name = "Pydantic Team", email = "engineering@pydantic.dev" },
File without changes
File without changes