analygo-foundation 2.1.3.dev0__tar.gz → 2.1.4__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.
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/PKG-INFO +1 -1
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/entitlements/entitlement_service.py +9 -9
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/entitlements/queries.py +6 -6
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation.egg-info/PKG-INFO +1 -1
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/pyproject.toml +1 -1
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/README.md +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/__init__.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/_config.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/_correlation.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/_db.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/_diagnostics.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/_jwt.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/_portal_db.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/_redis.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/authority/__init__.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/authority/admin_authority.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/authority/authority_service.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/authority/client_directory.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/authority/org_authority.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/authority/org_clients.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/authority/surface_c.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/authority_service.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/bootstrap/__init__.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/bootstrap/identity_resolver.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/contracts.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/entitlements/__init__.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/entitlements/entitlement_dependency.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/guards.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/identity/__init__.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/identity/models.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/identity/seat_resolver.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/identity_resolution_log.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/me_orgs_resolved_context.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/observability.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/onboarding.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/org_membership_cache.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/org_membership_resolver.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/org_scope.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/py.typed +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/rbac/__init__.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/rbac/aegis_permission_service.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/rbac/permission_checker.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/rbac/permission_registry.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/request_context.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/runtime/__init__.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/runtime/boundary_logging.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/runtime/context.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/runtime/correlation_id.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/runtime/depends.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/runtime/exceptions.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/runtime/health.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/runtime/middleware.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/runtime/resolver.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/runtime/tracer.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/user_identity.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/utils/__init__.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/utils/portal_dsn.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/utils/portal_user_sub.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation.egg-info/SOURCES.txt +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation.egg-info/dependency_links.txt +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation.egg-info/requires.txt +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation.egg-info/top_level.txt +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/setup.cfg +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/tests/test_imports.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/tests/test_observability.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/tests/test_runtime_boundary_logging.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/tests/test_runtime_context.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/tests/test_runtime_correlation_id.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/tests/test_runtime_health.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/tests/test_runtime_middleware.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/tests/test_runtime_resolver.py +0 -0
- {analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/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.
|
|
3
|
+
Version: 2.1.4
|
|
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,14 +1,14 @@
|
|
|
1
|
-
"""Entitlement service — resolve org capabilities from
|
|
1
|
+
"""Entitlement service — resolve org capabilities live from org_plans + offerings.
|
|
2
2
|
|
|
3
3
|
Provides:
|
|
4
4
|
- getOrgEntitlements(org_id, product_area): resolve an org's plan_type,
|
|
5
|
-
billing_status, and capabilities
|
|
5
|
+
billing_status, and capabilities.
|
|
6
6
|
- Redis-backed caching (5-min TTL) with fail-open DB fallback.
|
|
7
7
|
|
|
8
|
-
Resolution chain:
|
|
8
|
+
Resolution chain (single read-time JOIN, no cache drift):
|
|
9
9
|
1. organization_plans (org_id) → plan_type, billing_status
|
|
10
|
-
2.
|
|
11
|
-
3. license_tiers (
|
|
10
|
+
2. offerings (plan_type, product_area) → entitlements (capabilities JSONB)
|
|
11
|
+
3. license_tiers (plan_type) → tier_name, monthly_price_cents
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
14
|
from __future__ import annotations
|
|
@@ -78,11 +78,11 @@ def _resolve_entitlement_from_db(
|
|
|
78
78
|
org_id: str,
|
|
79
79
|
product_area: str,
|
|
80
80
|
) -> Optional[dict[str, Any]]:
|
|
81
|
-
"""
|
|
81
|
+
"""Resolve an org's entitlement from the live source of truth.
|
|
82
82
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
83
|
+
Joins core_identity.organization_plans (canonical plan state) with
|
|
84
|
+
product_catalog.offerings (capabilities per plan) — no stale cache
|
|
85
|
+
table, no drift possible.
|
|
86
86
|
"""
|
|
87
87
|
import psycopg
|
|
88
88
|
|
|
@@ -7,12 +7,12 @@ and changed independently of the service logic.
|
|
|
7
7
|
# ── psycopg (raw) queries ─────────────────────────────────────────
|
|
8
8
|
|
|
9
9
|
ORG_OFFERING_ENTITLEMENTS_SQL = """
|
|
10
|
-
SELECT plan_type,
|
|
11
|
-
FROM
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
AND
|
|
15
|
-
|
|
10
|
+
SELECT op.plan_type, op.billing_status, o.entitlements
|
|
11
|
+
FROM core_identity.organization_plans op
|
|
12
|
+
JOIN product_catalog.offerings o ON o.tier = op.plan_type
|
|
13
|
+
WHERE op.org_id = %s::uuid
|
|
14
|
+
AND op.billing_status = 'active'
|
|
15
|
+
AND o.product_area = %s
|
|
16
16
|
LIMIT 1
|
|
17
17
|
"""
|
|
18
18
|
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: analygo-foundation
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.4
|
|
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.
|
|
3
|
+
version = "2.1.4"
|
|
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"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/_correlation.py
RENAMED
|
File without changes
|
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/_diagnostics.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/authority/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/authority/surface_c.py
RENAMED
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/authority_service.py
RENAMED
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/bootstrap/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/identity/__init__.py
RENAMED
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/identity/models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/observability.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/rbac/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/request_context.py
RENAMED
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/runtime/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/runtime/context.py
RENAMED
|
File without changes
|
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/runtime/depends.py
RENAMED
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/runtime/exceptions.py
RENAMED
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/runtime/health.py
RENAMED
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/runtime/middleware.py
RENAMED
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/runtime/resolver.py
RENAMED
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/runtime/tracer.py
RENAMED
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/user_identity.py
RENAMED
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/utils/__init__.py
RENAMED
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation/utils/portal_dsn.py
RENAMED
|
File without changes
|
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation.egg-info/requires.txt
RENAMED
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/analygo_foundation.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/tests/test_runtime_boundary_logging.py
RENAMED
|
File without changes
|
|
File without changes
|
{analygo_foundation-2.1.3.dev0 → analygo_foundation-2.1.4}/tests/test_runtime_correlation_id.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|