analygo-foundation 2.1.1__tar.gz → 2.1.3.dev0__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 (72) hide show
  1. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/PKG-INFO +1 -1
  2. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/_db.py +9 -2
  3. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/observability.py +8 -0
  4. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation.egg-info/PKG-INFO +1 -1
  5. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/pyproject.toml +1 -1
  6. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/README.md +0 -0
  7. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/__init__.py +0 -0
  8. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/_config.py +0 -0
  9. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/_correlation.py +0 -0
  10. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/_diagnostics.py +0 -0
  11. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/_jwt.py +0 -0
  12. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/_portal_db.py +0 -0
  13. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/_redis.py +0 -0
  14. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/authority/__init__.py +0 -0
  15. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/authority/admin_authority.py +0 -0
  16. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/authority/authority_service.py +0 -0
  17. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/authority/client_directory.py +0 -0
  18. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/authority/org_authority.py +0 -0
  19. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/authority/org_clients.py +0 -0
  20. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/authority/surface_c.py +0 -0
  21. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/authority_service.py +0 -0
  22. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/bootstrap/__init__.py +0 -0
  23. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/bootstrap/identity_resolver.py +0 -0
  24. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/contracts.py +0 -0
  25. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/entitlements/__init__.py +0 -0
  26. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/entitlements/entitlement_dependency.py +0 -0
  27. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/entitlements/entitlement_service.py +0 -0
  28. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/entitlements/queries.py +0 -0
  29. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/guards.py +0 -0
  30. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/identity/__init__.py +0 -0
  31. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/identity/models.py +0 -0
  32. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/identity/seat_resolver.py +0 -0
  33. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/identity_resolution_log.py +0 -0
  34. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/me_orgs_resolved_context.py +0 -0
  35. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/onboarding.py +0 -0
  36. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/org_membership_cache.py +0 -0
  37. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/org_membership_resolver.py +0 -0
  38. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/org_scope.py +0 -0
  39. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/py.typed +0 -0
  40. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/rbac/__init__.py +0 -0
  41. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/rbac/aegis_permission_service.py +0 -0
  42. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/rbac/permission_checker.py +0 -0
  43. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/rbac/permission_registry.py +0 -0
  44. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/request_context.py +0 -0
  45. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/runtime/__init__.py +0 -0
  46. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/runtime/boundary_logging.py +0 -0
  47. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/runtime/context.py +0 -0
  48. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/runtime/correlation_id.py +0 -0
  49. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/runtime/depends.py +0 -0
  50. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/runtime/exceptions.py +0 -0
  51. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/runtime/health.py +0 -0
  52. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/runtime/middleware.py +0 -0
  53. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/runtime/resolver.py +0 -0
  54. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/runtime/tracer.py +0 -0
  55. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/user_identity.py +0 -0
  56. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/utils/__init__.py +0 -0
  57. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/utils/portal_dsn.py +0 -0
  58. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation/utils/portal_user_sub.py +0 -0
  59. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation.egg-info/SOURCES.txt +0 -0
  60. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation.egg-info/dependency_links.txt +0 -0
  61. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation.egg-info/requires.txt +0 -0
  62. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/analygo_foundation.egg-info/top_level.txt +0 -0
  63. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/setup.cfg +0 -0
  64. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/tests/test_imports.py +0 -0
  65. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/tests/test_observability.py +0 -0
  66. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/tests/test_runtime_boundary_logging.py +0 -0
  67. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/tests/test_runtime_context.py +0 -0
  68. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/tests/test_runtime_correlation_id.py +0 -0
  69. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/tests/test_runtime_health.py +0 -0
  70. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/tests/test_runtime_middleware.py +0 -0
  71. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/tests/test_runtime_resolver.py +0 -0
  72. {analygo_foundation-2.1.1 → analygo_foundation-2.1.3.dev0}/tests/test_runtime_tracer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: analygo-foundation
3
- Version: 2.1.1
3
+ Version: 2.1.3.dev0
4
4
  Summary: Foundation runtime — shared identity, org resolution, RBAC, authority services, and observability for the Analygo ecosystem
5
5
  Author-email: Analygo <engineering@analygo.com>
6
6
  License-Expression: MIT
@@ -37,12 +37,19 @@ def _get_database_url() -> Optional[str]:
37
37
 
38
38
 
39
39
  def _normalize_pg_dsn(dsn: str) -> str:
40
- """Normalise DSN to a plain postgresql:// URL accepted by SQLAlchemy."""
40
+ """Normalise DSN to a postgresql+psycopg:// URL accepted by SQLAlchemy.
41
+
42
+ Converts postgres:// → postgresql+psycopg:// and ensures postgresql://
43
+ gets the +psycopg driver suffix so SQLAlchemy uses psycopg (v3) rather
44
+ than the missing psycopg2.
45
+ """
41
46
  if not dsn:
42
47
  return dsn
43
48
  u = dsn.strip()
44
49
  if u.startswith("postgres://"):
45
- return "postgresql://" + u[len("postgres://"):]
50
+ u = "postgresql://" + u[len("postgres://"):]
51
+ if u.startswith("postgresql://"):
52
+ u = "postgresql+psycopg://" + u[len("postgresql://"):]
46
53
  return u
47
54
 
48
55
 
@@ -256,6 +256,7 @@ def _setup_tracing(app, service_name: str):
256
256
  from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
257
257
  from opentelemetry.instrumentation.httpx import HTTPXClientInstrumentor
258
258
  from opentelemetry.instrumentation.redis import RedisInstrumentor
259
+ from opentelemetry.instrumentation.requests import RequestsInstrumentor
259
260
  from opentelemetry.instrumentation.sqlalchemy import SQLAlchemyInstrumentor
260
261
  from opentelemetry.sdk.resources import Resource
261
262
  from opentelemetry.sdk.trace import TracerProvider
@@ -278,6 +279,12 @@ def _setup_tracing(app, service_name: str):
278
279
  if cid:
279
280
  span.set_attribute("correlation_id", cid)
280
281
 
282
+ # Disable metrics by default — httpx/redis/sqlalchemy instrumentors
283
+ # emit duration histograms for every call, adding noise + cost.
284
+ # Set OTEL_METRICS_EXPORTER=otlp to enable when dashboards are needed.
285
+ if not os.getenv("OTEL_METRICS_EXPORTER"):
286
+ os.environ["OTEL_METRICS_EXPORTER"] = "none"
287
+
281
288
  # Set default endpoint via env var so the SDK's _append_trace_path()
282
289
  # logic appends /v1/traces correctly. Passing endpoint= explicitly
283
290
  # bypasses this logic and causes the exporter to POST to the bare
@@ -329,6 +336,7 @@ def _setup_tracing(app, service_name: str):
329
336
  HTTPXClientInstrumentor().instrument()
330
337
  RedisInstrumentor().instrument()
331
338
  SQLAlchemyInstrumentor().instrument()
339
+ RequestsInstrumentor().instrument()
332
340
 
333
341
  _log.info(
334
342
  "OpenTelemetry tracing configured (service=%s, endpoint=%s)",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: analygo-foundation
3
- Version: 2.1.1
3
+ Version: 2.1.3.dev0
4
4
  Summary: Foundation runtime — shared identity, org resolution, RBAC, authority services, and observability for the Analygo ecosystem
5
5
  Author-email: Analygo <engineering@analygo.com>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "analygo-foundation"
3
- version = "2.1.1"
3
+ version = "2.1.3.dev0"
4
4
  description = "Foundation runtime — shared identity, org resolution, RBAC, authority services, and observability for the Analygo ecosystem"
5
5
  requires-python = ">=3.11"
6
6
  license = "MIT"