fastapi-observer 1.3.2__tar.gz → 1.4.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 (123) hide show
  1. {fastapi_observer-1.3.2/src/fastapi_observer.egg-info → fastapi_observer-1.4.0}/PKG-INFO +52 -51
  2. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/README.md +19 -20
  3. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/pyproject.toml +32 -35
  4. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0/src/fastapi_observer.egg-info}/PKG-INFO +52 -51
  5. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapi_observer.egg-info/SOURCES.txt +1 -0
  6. fastapi_observer-1.4.0/src/fastapi_observer.egg-info/requires.txt +61 -0
  7. fastapi_observer-1.4.0/src/fastapiobserver/_version.py +1 -0
  8. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/config.py +2 -8
  9. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/fastapi.py +146 -92
  10. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/logging/setup.py +72 -59
  11. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/middleware/metrics.py +3 -2
  12. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/middleware/request_logging.py +60 -37
  13. fastapi_observer-1.4.0/src/fastapiobserver/otel/exclusions.py +45 -0
  14. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/otel/lifecycle.py +16 -1
  15. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/otel/settings.py +39 -91
  16. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/security/policy.py +4 -14
  17. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/security/redaction.py +3 -2
  18. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/utils.py +12 -1
  19. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_config_settings.py +2 -2
  20. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_excluded_url_precedence.py +3 -2
  21. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_fastapi_install.py +51 -4
  22. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_fork_queue_listener.py +1 -2
  23. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_graphql_integrations.py +5 -2
  24. fastapi_observer-1.4.0/tests/test_lifespan_teardown.py +109 -0
  25. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_metrics_contracts.py +1 -1
  26. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_otel_lifecycle.py +26 -10
  27. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_otel_logs_pipeline.py +2 -1
  28. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_profiles.py +5 -5
  29. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_security_audit_fixes.py +13 -0
  30. fastapi_observer-1.3.2/src/fastapi_observer.egg-info/requires.txt +0 -56
  31. fastapi_observer-1.3.2/src/fastapiobserver/_version.py +0 -1
  32. fastapi_observer-1.3.2/tests/test_lifespan_teardown.py +0 -53
  33. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/LICENSE +0 -0
  34. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/setup.cfg +0 -0
  35. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapi_observer.egg-info/dependency_links.txt +0 -0
  36. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapi_observer.egg-info/top_level.txt +0 -0
  37. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/__init__.py +0 -0
  38. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/audit/__init__.py +0 -0
  39. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/audit/formatter.py +0 -0
  40. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/audit/providers.py +0 -0
  41. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/audit/verify.py +0 -0
  42. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/control_plane.py +0 -0
  43. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/db_tracing.py +0 -0
  44. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/integrations/__init__.py +0 -0
  45. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/integrations/strawberry.py +0 -0
  46. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/logging/__init__.py +0 -0
  47. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/logging/circuit_breaker.py +0 -0
  48. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/logging/filters.py +0 -0
  49. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/logging/formatter.py +0 -0
  50. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/logging/queueing.py +0 -0
  51. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/logging/state.py +0 -0
  52. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/loguru.py +0 -0
  53. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/metrics/__init__.py +0 -0
  54. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/metrics/builder.py +0 -0
  55. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/metrics/contracts.py +0 -0
  56. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/metrics/endpoint.py +0 -0
  57. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/metrics/noop.py +0 -0
  58. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/metrics/pathing.py +0 -0
  59. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/metrics/prometheus/__init__.py +0 -0
  60. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/metrics/prometheus/backend.py +0 -0
  61. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/metrics/prometheus/client.py +0 -0
  62. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/metrics/prometheus/collector.py +0 -0
  63. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/metrics/prometheus/exemplars.py +0 -0
  64. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/metrics/prometheus/multiprocess.py +0 -0
  65. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/metrics/registry.py +0 -0
  66. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/middleware/__init__.py +0 -0
  67. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/middleware/body_capture.py +0 -0
  68. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/middleware/context.py +0 -0
  69. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/middleware/events.py +0 -0
  70. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/middleware/headers.py +0 -0
  71. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/middleware/ip.py +0 -0
  72. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/middleware/span_errors.py +0 -0
  73. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/otel/__init__.py +0 -0
  74. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/otel/logs.py +0 -0
  75. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/otel/metrics.py +0 -0
  76. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/otel/resource.py +0 -0
  77. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/otel/tracing.py +0 -0
  78. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/otel/types.py +0 -0
  79. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/plugins.py +0 -0
  80. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/profiles.py +0 -0
  81. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/propagation.py +0 -0
  82. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/py.typed +0 -0
  83. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/request_context.py +0 -0
  84. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/security/__init__.py +0 -0
  85. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/security/normalize.py +0 -0
  86. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/security/proxies.py +0 -0
  87. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/sinks/__init__.py +0 -0
  88. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/sinks/builtin.py +0 -0
  89. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/sinks/discovery.py +0 -0
  90. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/sinks/factory.py +0 -0
  91. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/sinks/logtail/__init__.py +0 -0
  92. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/sinks/logtail/dlq.py +0 -0
  93. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/sinks/logtail/handler.py +0 -0
  94. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/sinks/logtail/sink.py +0 -0
  95. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/sinks/protocol.py +0 -0
  96. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/sinks/registry.py +0 -0
  97. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/src/fastapiobserver/sinks/stats.py +0 -0
  98. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_audit_chain.py +0 -0
  99. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_body_media_allowlist.py +0 -0
  100. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_db_tracing.py +0 -0
  101. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_dx_parity.py +0 -0
  102. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_log_queue_controls.py +0 -0
  103. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_logging_schema_contract.py +0 -0
  104. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_logtail_dlq.py +0 -0
  105. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_loguru_bridge.py +0 -0
  106. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_metrics_optional_dependency.py +0 -0
  107. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_middleware.py +0 -0
  108. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_negotiate_content_type.py +0 -0
  109. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_otel_integration.py +0 -0
  110. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_otel_log_correlation.py +0 -0
  111. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_otel_logs_from_env.py +0 -0
  112. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_otel_metrics_from_env.py +0 -0
  113. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_otlp_export_integration.py +0 -0
  114. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_plugin_isolation.py +0 -0
  115. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_propagation.py +0 -0
  116. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_redaction_presets.py +0 -0
  117. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_route_template_cardinality.py +0 -0
  118. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_runtime_control_auth.py +0 -0
  119. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_security_redaction.py +0 -0
  120. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_sink_circuit_breaker.py +0 -0
  121. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_sinks.py +0 -0
  122. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_trust_boundary.py +0 -0
  123. {fastapi_observer-1.3.2 → fastapi_observer-1.4.0}/tests/test_utils_refactors.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastapi-observer
3
- Version: 1.3.2
3
+ Version: 1.4.0
4
4
  Summary: Zero-glue FastAPI observability with security presets and runtime controls
5
5
  Author-email: Vitaee <opensource@vitaee.dev>
6
6
  License-Expression: MIT
@@ -19,16 +19,17 @@ Classifier: Programming Language :: Python :: 3.11
19
19
  Classifier: Programming Language :: Python :: 3.12
20
20
  Classifier: Programming Language :: Python :: 3.13
21
21
  Classifier: Programming Language :: Python :: 3.14
22
+ Classifier: Programming Language :: Python :: 3.15
22
23
  Classifier: Framework :: FastAPI
23
24
  Classifier: Topic :: System :: Logging
24
25
  Classifier: Topic :: System :: Monitoring
25
26
  Classifier: Typing :: Typed
26
- Requires-Python: <3.15,>=3.10
27
+ Requires-Python: <3.16,>=3.10
27
28
  Description-Content-Type: text/markdown
28
29
  License-File: LICENSE
29
- Requires-Dist: fastapi>=0.129.0
30
+ Requires-Dist: fastapi>=0.133.0
30
31
  Requires-Dist: pydantic-settings>=2.10.1
31
- Requires-Dist: starlette>=0.52.1
32
+ Requires-Dist: starlette>=1.3.1
32
33
  Provides-Extra: fast-json
33
34
  Requires-Dist: orjson>=3.11.7; extra == "fast-json"
34
35
  Provides-Extra: prometheus
@@ -36,42 +37,43 @@ Requires-Dist: prometheus-client>=0.24.1; extra == "prometheus"
36
37
  Provides-Extra: loguru
37
38
  Requires-Dist: loguru>=0.7.2; extra == "loguru"
38
39
  Provides-Extra: otel
39
- Requires-Dist: opentelemetry-api>=1.39.1; extra == "otel"
40
- Requires-Dist: opentelemetry-sdk>=1.39.1; extra == "otel"
41
- Requires-Dist: opentelemetry-exporter-otlp>=1.39.1; extra == "otel"
42
- Requires-Dist: opentelemetry-instrumentation-fastapi>=0.60b1; extra == "otel"
43
- Requires-Dist: opentelemetry-instrumentation-logging>=0.60b1; extra == "otel"
40
+ Requires-Dist: opentelemetry-api>=1.45.1; extra == "otel"
41
+ Requires-Dist: opentelemetry-sdk>=1.45.1; extra == "otel"
42
+ Requires-Dist: opentelemetry-exporter-otlp>=1.45.1; extra == "otel"
43
+ Requires-Dist: opentelemetry-instrumentation-fastapi>=0.66b1; extra == "otel"
44
+ Requires-Dist: opentelemetry-instrumentation-logging>=0.66b1; extra == "otel"
44
45
  Provides-Extra: otel-httpx
45
- Requires-Dist: opentelemetry-instrumentation-httpx>=0.60b1; extra == "otel-httpx"
46
+ Requires-Dist: opentelemetry-instrumentation-httpx>=0.66b1; extra == "otel-httpx"
46
47
  Provides-Extra: otel-requests
47
- Requires-Dist: opentelemetry-instrumentation-requests>=0.60b1; extra == "otel-requests"
48
+ Requires-Dist: opentelemetry-instrumentation-requests>=0.66b1; extra == "otel-requests"
48
49
  Provides-Extra: audit
49
- Requires-Dist: cryptography>=46.0.5; extra == "audit"
50
+ Requires-Dist: cryptography>=50.0.0; extra == "audit"
50
51
  Provides-Extra: otel-sqlalchemy
51
- Requires-Dist: opentelemetry-instrumentation-sqlalchemy>=0.60b1; extra == "otel-sqlalchemy"
52
+ Requires-Dist: opentelemetry-instrumentation-sqlalchemy>=0.66b1; extra == "otel-sqlalchemy"
52
53
  Provides-Extra: all
53
54
  Requires-Dist: orjson>=3.11.7; extra == "all"
54
55
  Requires-Dist: prometheus-client>=0.24.1; extra == "all"
55
56
  Requires-Dist: loguru>=0.7.2; extra == "all"
56
- Requires-Dist: opentelemetry-api>=1.39.1; extra == "all"
57
- Requires-Dist: opentelemetry-sdk>=1.39.1; extra == "all"
58
- Requires-Dist: opentelemetry-exporter-otlp>=1.39.1; extra == "all"
59
- Requires-Dist: opentelemetry-instrumentation-fastapi>=0.60b1; extra == "all"
60
- Requires-Dist: opentelemetry-instrumentation-logging>=0.60b1; extra == "all"
61
- Requires-Dist: opentelemetry-instrumentation-httpx>=0.60b1; extra == "all"
62
- Requires-Dist: opentelemetry-instrumentation-requests>=0.60b1; extra == "all"
63
- Requires-Dist: opentelemetry-instrumentation-sqlalchemy>=0.60b1; extra == "all"
64
- Requires-Dist: cryptography>=46.0.5; extra == "all"
57
+ Requires-Dist: opentelemetry-api>=1.45.1; extra == "all"
58
+ Requires-Dist: opentelemetry-sdk>=1.45.1; extra == "all"
59
+ Requires-Dist: opentelemetry-exporter-otlp>=1.45.1; extra == "all"
60
+ Requires-Dist: opentelemetry-instrumentation-fastapi>=0.66b1; extra == "all"
61
+ Requires-Dist: opentelemetry-instrumentation-logging>=0.66b1; extra == "all"
62
+ Requires-Dist: opentelemetry-instrumentation-httpx>=0.66b1; extra == "all"
63
+ Requires-Dist: opentelemetry-instrumentation-requests>=0.66b1; extra == "all"
64
+ Requires-Dist: opentelemetry-instrumentation-sqlalchemy>=0.66b1; extra == "all"
65
+ Requires-Dist: cryptography>=50.0.0; extra == "all"
65
66
  Provides-Extra: dev
66
- Requires-Dist: httpx>=0.28.1; extra == "dev"
67
- Requires-Dist: loguru>=0.7.2; extra == "dev"
68
- Requires-Dist: mypy>=1.19.1; extra == "dev"
69
- Requires-Dist: pip-audit>=2.10.0; extra == "dev"
70
- Requires-Dist: pytest>=9.0.2; extra == "dev"
71
- Requires-Dist: pytest-randomly>=3.16.0; extra == "dev"
72
- Requires-Dist: ruff>=0.15.1; extra == "dev"
73
- Requires-Dist: cyclonedx-bom>=7.2.1; extra == "dev"
74
- Requires-Dist: uvicorn>=0.30.0; extra == "dev"
67
+ Requires-Dist: httpx>=0.28.1; python_version < "3.11" and extra == "dev"
68
+ Requires-Dist: httpx2>=2.16.0; python_version >= "3.11" and extra == "dev"
69
+ Requires-Dist: loguru>=0.7.3; extra == "dev"
70
+ Requires-Dist: mypy>=2.4.1; extra == "dev"
71
+ Requires-Dist: pip-audit>=2.10.1; extra == "dev"
72
+ Requires-Dist: pytest>=9.2.0; extra == "dev"
73
+ Requires-Dist: pytest-randomly>=5.0.0; extra == "dev"
74
+ Requires-Dist: ruff>=0.17.3; extra == "dev"
75
+ Requires-Dist: cyclonedx-bom>=7.6.0; extra == "dev"
76
+ Requires-Dist: uvicorn>=0.54.0; extra == "dev"
75
77
  Dynamic: license-file
76
78
 
77
79
  # fastapi-observer
@@ -83,7 +85,7 @@ Dynamic: license-file
83
85
 
84
86
  `fastapi-observer` gives you structured JSON logs, request correlation, Prometheus metrics, OpenTelemetry tracing, security redaction presets, and runtime controls in one install step and one function call.
85
87
 
86
- **Supported Python versions:** `3.10` to `3.14`
88
+ **Supported Python versions:** `3.10` to `3.15`
87
89
 
88
90
  ---
89
91
 
@@ -92,12 +94,12 @@ Dynamic: license-file
92
94
 
93
95
  | Component | Supported / Tested |
94
96
  |---|---|
95
- | Python | `3.10` to `3.14` (CI matrix) |
96
- | FastAPI | `>=0.129.0` |
97
- | Starlette | `>=0.52.1` |
97
+ | Python | `3.10` to `3.15` (CI matrix) |
98
+ | FastAPI | `>=0.133.0` |
99
+ | Starlette | `>=1.3.1` |
98
100
  | pydantic-settings | `>=2.10.1` |
99
101
  | Prometheus backend | `prometheus-client>=0.24.1` (optional extra) |
100
- | OpenTelemetry | `opentelemetry-api/sdk/exporter>=1.39.1` (optional extra) |
102
+ | OpenTelemetry | `opentelemetry-api/sdk/exporter>=1.45.1` (optional extra) |
101
103
  | Loguru bridge | `loguru>=0.7.2` (optional extra) |
102
104
 
103
105
  ---
@@ -172,8 +174,6 @@ import fastapiobserver
172
174
 
173
175
  ---
174
176
 
175
- ## 5-Minute Quick Start
176
-
177
177
  ## 5-Minute Quick Start ("Zero-Glue")
178
178
 
179
179
  You can configure the entire library via environment variables simply by calling `install_observability(app)`.
@@ -233,16 +233,17 @@ To dramatically reduce boilerplate, you can use the `OBS_PROFILE` environment va
233
233
 
234
234
  ## Documentation Map
235
235
 
236
- For deep-dive documentation, please explore the official documentation site (or read the `docs/` folder directly):
237
- - [Security & Presets](security.md)
238
- - [Environment Variables](configuration.md)
239
- - [Runtime Control](runtime-control.md)
240
- - [OpenTelemetry](opentelemetry.md)
241
- - [Logtail Sink](logtail-sink.md)
242
- - [Audit Logging](audit-logging.md)
243
- - [Database Tracing](db-tracing.md)
244
- - [GraphQL Support](graphql.md)
245
- - [Architecture & Operations](architecture.md)
246
- - [Production Deployment](deployment.md)
247
- - [Performance Tuning](tuning.md)
248
- - [Advanced Operations](advanced.md)
236
+ For deep-dive documentation, read the `docs/` folder:
237
+ - [Security & Presets](docs/security.md)
238
+ - [Environment Variables](docs/configuration.md)
239
+ - [Runtime Control](docs/runtime-control.md)
240
+ - [OpenTelemetry](docs/opentelemetry.md)
241
+ - [Logtail Sink](docs/logtail-sink.md)
242
+ - [Audit Logging](docs/audit-logging.md)
243
+ - [Database Tracing](docs/db-tracing.md)
244
+ - [GraphQL Support](docs/graphql.md)
245
+ - [Architecture & Operations](docs/architecture.md)
246
+ - [Production Deployment](docs/deployment.md)
247
+ - [Performance Tuning](docs/tuning.md)
248
+ - [Advanced Operations](docs/advanced.md)
249
+ - [Maintenance & Contributing](docs/contributing.md) (quality gates, release flow, runtime stress harness)
@@ -7,7 +7,7 @@
7
7
 
8
8
  `fastapi-observer` gives you structured JSON logs, request correlation, Prometheus metrics, OpenTelemetry tracing, security redaction presets, and runtime controls in one install step and one function call.
9
9
 
10
- **Supported Python versions:** `3.10` to `3.14`
10
+ **Supported Python versions:** `3.10` to `3.15`
11
11
 
12
12
  ---
13
13
 
@@ -16,12 +16,12 @@
16
16
 
17
17
  | Component | Supported / Tested |
18
18
  |---|---|
19
- | Python | `3.10` to `3.14` (CI matrix) |
20
- | FastAPI | `>=0.129.0` |
21
- | Starlette | `>=0.52.1` |
19
+ | Python | `3.10` to `3.15` (CI matrix) |
20
+ | FastAPI | `>=0.133.0` |
21
+ | Starlette | `>=1.3.1` |
22
22
  | pydantic-settings | `>=2.10.1` |
23
23
  | Prometheus backend | `prometheus-client>=0.24.1` (optional extra) |
24
- | OpenTelemetry | `opentelemetry-api/sdk/exporter>=1.39.1` (optional extra) |
24
+ | OpenTelemetry | `opentelemetry-api/sdk/exporter>=1.45.1` (optional extra) |
25
25
  | Loguru bridge | `loguru>=0.7.2` (optional extra) |
26
26
 
27
27
  ---
@@ -96,8 +96,6 @@ import fastapiobserver
96
96
 
97
97
  ---
98
98
 
99
- ## 5-Minute Quick Start
100
-
101
99
  ## 5-Minute Quick Start ("Zero-Glue")
102
100
 
103
101
  You can configure the entire library via environment variables simply by calling `install_observability(app)`.
@@ -157,16 +155,17 @@ To dramatically reduce boilerplate, you can use the `OBS_PROFILE` environment va
157
155
 
158
156
  ## Documentation Map
159
157
 
160
- For deep-dive documentation, please explore the official documentation site (or read the `docs/` folder directly):
161
- - [Security & Presets](security.md)
162
- - [Environment Variables](configuration.md)
163
- - [Runtime Control](runtime-control.md)
164
- - [OpenTelemetry](opentelemetry.md)
165
- - [Logtail Sink](logtail-sink.md)
166
- - [Audit Logging](audit-logging.md)
167
- - [Database Tracing](db-tracing.md)
168
- - [GraphQL Support](graphql.md)
169
- - [Architecture & Operations](architecture.md)
170
- - [Production Deployment](deployment.md)
171
- - [Performance Tuning](tuning.md)
172
- - [Advanced Operations](advanced.md)
158
+ For deep-dive documentation, read the `docs/` folder:
159
+ - [Security & Presets](docs/security.md)
160
+ - [Environment Variables](docs/configuration.md)
161
+ - [Runtime Control](docs/runtime-control.md)
162
+ - [OpenTelemetry](docs/opentelemetry.md)
163
+ - [Logtail Sink](docs/logtail-sink.md)
164
+ - [Audit Logging](docs/audit-logging.md)
165
+ - [Database Tracing](docs/db-tracing.md)
166
+ - [GraphQL Support](docs/graphql.md)
167
+ - [Architecture & Operations](docs/architecture.md)
168
+ - [Production Deployment](docs/deployment.md)
169
+ - [Performance Tuning](docs/tuning.md)
170
+ - [Advanced Operations](docs/advanced.md)
171
+ - [Maintenance & Contributing](docs/contributing.md) (quality gates, release flow, runtime stress harness)
@@ -7,7 +7,7 @@ name = "fastapi-observer"
7
7
  dynamic = ["version"]
8
8
  description = "Zero-glue FastAPI observability with security presets and runtime controls"
9
9
  readme = "README.md"
10
- requires-python = ">=3.10,<3.15"
10
+ requires-python = ">=3.10,<3.16"
11
11
  authors = [
12
12
  { name = "Vitaee", email = "opensource@vitaee.dev" },
13
13
  ]
@@ -21,6 +21,7 @@ classifiers = [
21
21
  "Programming Language :: Python :: 3.12",
22
22
  "Programming Language :: Python :: 3.13",
23
23
  "Programming Language :: Python :: 3.14",
24
+ "Programming Language :: Python :: 3.15",
24
25
  "Framework :: FastAPI",
25
26
  "Topic :: System :: Logging",
26
27
  "Topic :: System :: Monitoring",
@@ -30,9 +31,9 @@ keywords = ["fastapi", "observability", "logging", "metrics", "opentelemetry"]
30
31
  license = "MIT"
31
32
  license-files = ["LICENSE"]
32
33
  dependencies = [
33
- "fastapi>=0.129.0",
34
+ "fastapi>=0.133.0",
34
35
  "pydantic-settings>=2.10.1",
35
- "starlette>=0.52.1",
36
+ "starlette>=1.3.1",
36
37
  ]
37
38
 
38
39
  [project.urls]
@@ -53,48 +54,49 @@ loguru = [
53
54
  "loguru>=0.7.2",
54
55
  ]
55
56
  otel = [
56
- "opentelemetry-api>=1.39.1",
57
- "opentelemetry-sdk>=1.39.1",
58
- "opentelemetry-exporter-otlp>=1.39.1",
59
- "opentelemetry-instrumentation-fastapi>=0.60b1",
60
- "opentelemetry-instrumentation-logging>=0.60b1",
57
+ "opentelemetry-api>=1.45.1",
58
+ "opentelemetry-sdk>=1.45.1",
59
+ "opentelemetry-exporter-otlp>=1.45.1",
60
+ "opentelemetry-instrumentation-fastapi>=0.66b1",
61
+ "opentelemetry-instrumentation-logging>=0.66b1",
61
62
  ]
62
63
  otel-httpx = [
63
- "opentelemetry-instrumentation-httpx>=0.60b1",
64
+ "opentelemetry-instrumentation-httpx>=0.66b1",
64
65
  ]
65
66
  otel-requests = [
66
- "opentelemetry-instrumentation-requests>=0.60b1",
67
+ "opentelemetry-instrumentation-requests>=0.66b1",
67
68
  ]
68
69
  audit = [
69
- "cryptography>=46.0.5",
70
+ "cryptography>=50.0.0",
70
71
  ]
71
72
  otel-sqlalchemy = [
72
- "opentelemetry-instrumentation-sqlalchemy>=0.60b1",
73
+ "opentelemetry-instrumentation-sqlalchemy>=0.66b1",
73
74
  ]
74
75
  all = [
75
76
  "orjson>=3.11.7",
76
77
  "prometheus-client>=0.24.1",
77
78
  "loguru>=0.7.2",
78
- "opentelemetry-api>=1.39.1",
79
- "opentelemetry-sdk>=1.39.1",
80
- "opentelemetry-exporter-otlp>=1.39.1",
81
- "opentelemetry-instrumentation-fastapi>=0.60b1",
82
- "opentelemetry-instrumentation-logging>=0.60b1",
83
- "opentelemetry-instrumentation-httpx>=0.60b1",
84
- "opentelemetry-instrumentation-requests>=0.60b1",
85
- "opentelemetry-instrumentation-sqlalchemy>=0.60b1",
86
- "cryptography>=46.0.5",
79
+ "opentelemetry-api>=1.45.1",
80
+ "opentelemetry-sdk>=1.45.1",
81
+ "opentelemetry-exporter-otlp>=1.45.1",
82
+ "opentelemetry-instrumentation-fastapi>=0.66b1",
83
+ "opentelemetry-instrumentation-logging>=0.66b1",
84
+ "opentelemetry-instrumentation-httpx>=0.66b1",
85
+ "opentelemetry-instrumentation-requests>=0.66b1",
86
+ "opentelemetry-instrumentation-sqlalchemy>=0.66b1",
87
+ "cryptography>=50.0.0",
87
88
  ]
88
89
  dev = [
89
- "httpx>=0.28.1",
90
- "loguru>=0.7.2",
91
- "mypy>=1.19.1",
92
- "pip-audit>=2.10.0",
93
- "pytest>=9.0.2",
94
- "pytest-randomly>=3.16.0",
95
- "ruff>=0.15.1",
96
- "cyclonedx-bom>=7.2.1",
97
- "uvicorn>=0.30.0",
90
+ "httpx>=0.28.1; python_version < '3.11'",
91
+ "httpx2>=2.16.0; python_version >= '3.11'",
92
+ "loguru>=0.7.3",
93
+ "mypy>=2.4.1",
94
+ "pip-audit>=2.10.1",
95
+ "pytest>=9.2.0",
96
+ "pytest-randomly>=5.0.0",
97
+ "ruff>=0.17.3",
98
+ "cyclonedx-bom>=7.6.0",
99
+ "uvicorn>=0.54.0",
98
100
  ]
99
101
 
100
102
  [tool.setuptools]
@@ -124,8 +126,3 @@ ignore_missing_imports = true
124
126
  [tool.pytest.ini_options]
125
127
  pythonpath = ["src"]
126
128
  testpaths = ["tests"]
127
-
128
- [dependency-groups]
129
- dev = [
130
- "mkdocs-material>=9.7.3",
131
- ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastapi-observer
3
- Version: 1.3.2
3
+ Version: 1.4.0
4
4
  Summary: Zero-glue FastAPI observability with security presets and runtime controls
5
5
  Author-email: Vitaee <opensource@vitaee.dev>
6
6
  License-Expression: MIT
@@ -19,16 +19,17 @@ Classifier: Programming Language :: Python :: 3.11
19
19
  Classifier: Programming Language :: Python :: 3.12
20
20
  Classifier: Programming Language :: Python :: 3.13
21
21
  Classifier: Programming Language :: Python :: 3.14
22
+ Classifier: Programming Language :: Python :: 3.15
22
23
  Classifier: Framework :: FastAPI
23
24
  Classifier: Topic :: System :: Logging
24
25
  Classifier: Topic :: System :: Monitoring
25
26
  Classifier: Typing :: Typed
26
- Requires-Python: <3.15,>=3.10
27
+ Requires-Python: <3.16,>=3.10
27
28
  Description-Content-Type: text/markdown
28
29
  License-File: LICENSE
29
- Requires-Dist: fastapi>=0.129.0
30
+ Requires-Dist: fastapi>=0.133.0
30
31
  Requires-Dist: pydantic-settings>=2.10.1
31
- Requires-Dist: starlette>=0.52.1
32
+ Requires-Dist: starlette>=1.3.1
32
33
  Provides-Extra: fast-json
33
34
  Requires-Dist: orjson>=3.11.7; extra == "fast-json"
34
35
  Provides-Extra: prometheus
@@ -36,42 +37,43 @@ Requires-Dist: prometheus-client>=0.24.1; extra == "prometheus"
36
37
  Provides-Extra: loguru
37
38
  Requires-Dist: loguru>=0.7.2; extra == "loguru"
38
39
  Provides-Extra: otel
39
- Requires-Dist: opentelemetry-api>=1.39.1; extra == "otel"
40
- Requires-Dist: opentelemetry-sdk>=1.39.1; extra == "otel"
41
- Requires-Dist: opentelemetry-exporter-otlp>=1.39.1; extra == "otel"
42
- Requires-Dist: opentelemetry-instrumentation-fastapi>=0.60b1; extra == "otel"
43
- Requires-Dist: opentelemetry-instrumentation-logging>=0.60b1; extra == "otel"
40
+ Requires-Dist: opentelemetry-api>=1.45.1; extra == "otel"
41
+ Requires-Dist: opentelemetry-sdk>=1.45.1; extra == "otel"
42
+ Requires-Dist: opentelemetry-exporter-otlp>=1.45.1; extra == "otel"
43
+ Requires-Dist: opentelemetry-instrumentation-fastapi>=0.66b1; extra == "otel"
44
+ Requires-Dist: opentelemetry-instrumentation-logging>=0.66b1; extra == "otel"
44
45
  Provides-Extra: otel-httpx
45
- Requires-Dist: opentelemetry-instrumentation-httpx>=0.60b1; extra == "otel-httpx"
46
+ Requires-Dist: opentelemetry-instrumentation-httpx>=0.66b1; extra == "otel-httpx"
46
47
  Provides-Extra: otel-requests
47
- Requires-Dist: opentelemetry-instrumentation-requests>=0.60b1; extra == "otel-requests"
48
+ Requires-Dist: opentelemetry-instrumentation-requests>=0.66b1; extra == "otel-requests"
48
49
  Provides-Extra: audit
49
- Requires-Dist: cryptography>=46.0.5; extra == "audit"
50
+ Requires-Dist: cryptography>=50.0.0; extra == "audit"
50
51
  Provides-Extra: otel-sqlalchemy
51
- Requires-Dist: opentelemetry-instrumentation-sqlalchemy>=0.60b1; extra == "otel-sqlalchemy"
52
+ Requires-Dist: opentelemetry-instrumentation-sqlalchemy>=0.66b1; extra == "otel-sqlalchemy"
52
53
  Provides-Extra: all
53
54
  Requires-Dist: orjson>=3.11.7; extra == "all"
54
55
  Requires-Dist: prometheus-client>=0.24.1; extra == "all"
55
56
  Requires-Dist: loguru>=0.7.2; extra == "all"
56
- Requires-Dist: opentelemetry-api>=1.39.1; extra == "all"
57
- Requires-Dist: opentelemetry-sdk>=1.39.1; extra == "all"
58
- Requires-Dist: opentelemetry-exporter-otlp>=1.39.1; extra == "all"
59
- Requires-Dist: opentelemetry-instrumentation-fastapi>=0.60b1; extra == "all"
60
- Requires-Dist: opentelemetry-instrumentation-logging>=0.60b1; extra == "all"
61
- Requires-Dist: opentelemetry-instrumentation-httpx>=0.60b1; extra == "all"
62
- Requires-Dist: opentelemetry-instrumentation-requests>=0.60b1; extra == "all"
63
- Requires-Dist: opentelemetry-instrumentation-sqlalchemy>=0.60b1; extra == "all"
64
- Requires-Dist: cryptography>=46.0.5; extra == "all"
57
+ Requires-Dist: opentelemetry-api>=1.45.1; extra == "all"
58
+ Requires-Dist: opentelemetry-sdk>=1.45.1; extra == "all"
59
+ Requires-Dist: opentelemetry-exporter-otlp>=1.45.1; extra == "all"
60
+ Requires-Dist: opentelemetry-instrumentation-fastapi>=0.66b1; extra == "all"
61
+ Requires-Dist: opentelemetry-instrumentation-logging>=0.66b1; extra == "all"
62
+ Requires-Dist: opentelemetry-instrumentation-httpx>=0.66b1; extra == "all"
63
+ Requires-Dist: opentelemetry-instrumentation-requests>=0.66b1; extra == "all"
64
+ Requires-Dist: opentelemetry-instrumentation-sqlalchemy>=0.66b1; extra == "all"
65
+ Requires-Dist: cryptography>=50.0.0; extra == "all"
65
66
  Provides-Extra: dev
66
- Requires-Dist: httpx>=0.28.1; extra == "dev"
67
- Requires-Dist: loguru>=0.7.2; extra == "dev"
68
- Requires-Dist: mypy>=1.19.1; extra == "dev"
69
- Requires-Dist: pip-audit>=2.10.0; extra == "dev"
70
- Requires-Dist: pytest>=9.0.2; extra == "dev"
71
- Requires-Dist: pytest-randomly>=3.16.0; extra == "dev"
72
- Requires-Dist: ruff>=0.15.1; extra == "dev"
73
- Requires-Dist: cyclonedx-bom>=7.2.1; extra == "dev"
74
- Requires-Dist: uvicorn>=0.30.0; extra == "dev"
67
+ Requires-Dist: httpx>=0.28.1; python_version < "3.11" and extra == "dev"
68
+ Requires-Dist: httpx2>=2.16.0; python_version >= "3.11" and extra == "dev"
69
+ Requires-Dist: loguru>=0.7.3; extra == "dev"
70
+ Requires-Dist: mypy>=2.4.1; extra == "dev"
71
+ Requires-Dist: pip-audit>=2.10.1; extra == "dev"
72
+ Requires-Dist: pytest>=9.2.0; extra == "dev"
73
+ Requires-Dist: pytest-randomly>=5.0.0; extra == "dev"
74
+ Requires-Dist: ruff>=0.17.3; extra == "dev"
75
+ Requires-Dist: cyclonedx-bom>=7.6.0; extra == "dev"
76
+ Requires-Dist: uvicorn>=0.54.0; extra == "dev"
75
77
  Dynamic: license-file
76
78
 
77
79
  # fastapi-observer
@@ -83,7 +85,7 @@ Dynamic: license-file
83
85
 
84
86
  `fastapi-observer` gives you structured JSON logs, request correlation, Prometheus metrics, OpenTelemetry tracing, security redaction presets, and runtime controls in one install step and one function call.
85
87
 
86
- **Supported Python versions:** `3.10` to `3.14`
88
+ **Supported Python versions:** `3.10` to `3.15`
87
89
 
88
90
  ---
89
91
 
@@ -92,12 +94,12 @@ Dynamic: license-file
92
94
 
93
95
  | Component | Supported / Tested |
94
96
  |---|---|
95
- | Python | `3.10` to `3.14` (CI matrix) |
96
- | FastAPI | `>=0.129.0` |
97
- | Starlette | `>=0.52.1` |
97
+ | Python | `3.10` to `3.15` (CI matrix) |
98
+ | FastAPI | `>=0.133.0` |
99
+ | Starlette | `>=1.3.1` |
98
100
  | pydantic-settings | `>=2.10.1` |
99
101
  | Prometheus backend | `prometheus-client>=0.24.1` (optional extra) |
100
- | OpenTelemetry | `opentelemetry-api/sdk/exporter>=1.39.1` (optional extra) |
102
+ | OpenTelemetry | `opentelemetry-api/sdk/exporter>=1.45.1` (optional extra) |
101
103
  | Loguru bridge | `loguru>=0.7.2` (optional extra) |
102
104
 
103
105
  ---
@@ -172,8 +174,6 @@ import fastapiobserver
172
174
 
173
175
  ---
174
176
 
175
- ## 5-Minute Quick Start
176
-
177
177
  ## 5-Minute Quick Start ("Zero-Glue")
178
178
 
179
179
  You can configure the entire library via environment variables simply by calling `install_observability(app)`.
@@ -233,16 +233,17 @@ To dramatically reduce boilerplate, you can use the `OBS_PROFILE` environment va
233
233
 
234
234
  ## Documentation Map
235
235
 
236
- For deep-dive documentation, please explore the official documentation site (or read the `docs/` folder directly):
237
- - [Security & Presets](security.md)
238
- - [Environment Variables](configuration.md)
239
- - [Runtime Control](runtime-control.md)
240
- - [OpenTelemetry](opentelemetry.md)
241
- - [Logtail Sink](logtail-sink.md)
242
- - [Audit Logging](audit-logging.md)
243
- - [Database Tracing](db-tracing.md)
244
- - [GraphQL Support](graphql.md)
245
- - [Architecture & Operations](architecture.md)
246
- - [Production Deployment](deployment.md)
247
- - [Performance Tuning](tuning.md)
248
- - [Advanced Operations](advanced.md)
236
+ For deep-dive documentation, read the `docs/` folder:
237
+ - [Security & Presets](docs/security.md)
238
+ - [Environment Variables](docs/configuration.md)
239
+ - [Runtime Control](docs/runtime-control.md)
240
+ - [OpenTelemetry](docs/opentelemetry.md)
241
+ - [Logtail Sink](docs/logtail-sink.md)
242
+ - [Audit Logging](docs/audit-logging.md)
243
+ - [Database Tracing](docs/db-tracing.md)
244
+ - [GraphQL Support](docs/graphql.md)
245
+ - [Architecture & Operations](docs/architecture.md)
246
+ - [Production Deployment](docs/deployment.md)
247
+ - [Performance Tuning](docs/tuning.md)
248
+ - [Advanced Operations](docs/advanced.md)
249
+ - [Maintenance & Contributing](docs/contributing.md) (quality gates, release flow, runtime stress harness)
@@ -55,6 +55,7 @@ src/fastapiobserver/middleware/metrics.py
55
55
  src/fastapiobserver/middleware/request_logging.py
56
56
  src/fastapiobserver/middleware/span_errors.py
57
57
  src/fastapiobserver/otel/__init__.py
58
+ src/fastapiobserver/otel/exclusions.py
58
59
  src/fastapiobserver/otel/lifecycle.py
59
60
  src/fastapiobserver/otel/logs.py
60
61
  src/fastapiobserver/otel/metrics.py
@@ -0,0 +1,61 @@
1
+ fastapi>=0.133.0
2
+ pydantic-settings>=2.10.1
3
+ starlette>=1.3.1
4
+
5
+ [all]
6
+ orjson>=3.11.7
7
+ prometheus-client>=0.24.1
8
+ loguru>=0.7.2
9
+ opentelemetry-api>=1.45.1
10
+ opentelemetry-sdk>=1.45.1
11
+ opentelemetry-exporter-otlp>=1.45.1
12
+ opentelemetry-instrumentation-fastapi>=0.66b1
13
+ opentelemetry-instrumentation-logging>=0.66b1
14
+ opentelemetry-instrumentation-httpx>=0.66b1
15
+ opentelemetry-instrumentation-requests>=0.66b1
16
+ opentelemetry-instrumentation-sqlalchemy>=0.66b1
17
+ cryptography>=50.0.0
18
+
19
+ [audit]
20
+ cryptography>=50.0.0
21
+
22
+ [dev]
23
+ loguru>=0.7.3
24
+ mypy>=2.4.1
25
+ pip-audit>=2.10.1
26
+ pytest>=9.2.0
27
+ pytest-randomly>=5.0.0
28
+ ruff>=0.17.3
29
+ cyclonedx-bom>=7.6.0
30
+ uvicorn>=0.54.0
31
+
32
+ [dev:python_version < "3.11"]
33
+ httpx>=0.28.1
34
+
35
+ [dev:python_version >= "3.11"]
36
+ httpx2>=2.16.0
37
+
38
+ [fast-json]
39
+ orjson>=3.11.7
40
+
41
+ [loguru]
42
+ loguru>=0.7.2
43
+
44
+ [otel]
45
+ opentelemetry-api>=1.45.1
46
+ opentelemetry-sdk>=1.45.1
47
+ opentelemetry-exporter-otlp>=1.45.1
48
+ opentelemetry-instrumentation-fastapi>=0.66b1
49
+ opentelemetry-instrumentation-logging>=0.66b1
50
+
51
+ [otel-httpx]
52
+ opentelemetry-instrumentation-httpx>=0.66b1
53
+
54
+ [otel-requests]
55
+ opentelemetry-instrumentation-requests>=0.66b1
56
+
57
+ [otel-sqlalchemy]
58
+ opentelemetry-instrumentation-sqlalchemy>=0.66b1
59
+
60
+ [prometheus]
61
+ prometheus-client>=0.24.1
@@ -0,0 +1 @@
1
+ __version__ = "1.4.0"
@@ -5,9 +5,8 @@ import re
5
5
  from typing import Literal
6
6
 
7
7
  from pydantic import Field, field_validator
8
- from pydantic_settings import BaseSettings, SettingsConfigDict
9
8
 
10
- from .utils import normalize_path, parse_csv
9
+ from .utils import InternalSettingsBase, normalize_path, parse_csv
11
10
 
12
11
  _HEADER_NAME_RE = re.compile(r"^[A-Za-z0-9-]+$")
13
12
  DEFAULT_METRICS_EXCLUDE_PATHS = (
@@ -22,12 +21,7 @@ MetricsFormat = Literal["prometheus", "openmetrics", "negotiate"]
22
21
  LogQueueOverflowPolicy = Literal["drop_oldest", "drop_newest", "block"]
23
22
 
24
23
 
25
- class ObservabilitySettings(BaseSettings):
26
- model_config = SettingsConfigDict(
27
- extra="ignore",
28
- case_sensitive=False,
29
- populate_by_name=True,
30
- )
24
+ class ObservabilitySettings(InternalSettingsBase):
31
25
 
32
26
  # --- identity ---
33
27
  app_name: str = Field(default="app", validation_alias="APP_NAME")