mdb-engine 0.1.6__py3-none-any.whl → 0.2.0__py3-none-any.whl
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.
- mdb_engine/__init__.py +104 -11
- mdb_engine/auth/ARCHITECTURE.md +112 -0
- mdb_engine/auth/README.md +648 -11
- mdb_engine/auth/__init__.py +136 -29
- mdb_engine/auth/audit.py +592 -0
- mdb_engine/auth/base.py +252 -0
- mdb_engine/auth/casbin_factory.py +264 -69
- mdb_engine/auth/config_helpers.py +7 -6
- mdb_engine/auth/cookie_utils.py +3 -7
- mdb_engine/auth/csrf.py +373 -0
- mdb_engine/auth/decorators.py +3 -10
- mdb_engine/auth/dependencies.py +47 -50
- mdb_engine/auth/helpers.py +3 -3
- mdb_engine/auth/integration.py +53 -80
- mdb_engine/auth/jwt.py +2 -6
- mdb_engine/auth/middleware.py +77 -34
- mdb_engine/auth/oso_factory.py +18 -38
- mdb_engine/auth/provider.py +270 -171
- mdb_engine/auth/rate_limiter.py +504 -0
- mdb_engine/auth/restrictions.py +8 -24
- mdb_engine/auth/session_manager.py +14 -29
- mdb_engine/auth/shared_middleware.py +600 -0
- mdb_engine/auth/shared_users.py +759 -0
- mdb_engine/auth/token_store.py +14 -28
- mdb_engine/auth/users.py +54 -113
- mdb_engine/auth/utils.py +213 -15
- mdb_engine/cli/commands/generate.py +545 -9
- mdb_engine/cli/commands/validate.py +3 -7
- mdb_engine/cli/utils.py +3 -3
- mdb_engine/config.py +7 -21
- mdb_engine/constants.py +65 -0
- mdb_engine/core/README.md +117 -6
- mdb_engine/core/__init__.py +39 -7
- mdb_engine/core/app_registration.py +22 -41
- mdb_engine/core/app_secrets.py +290 -0
- mdb_engine/core/connection.py +18 -9
- mdb_engine/core/encryption.py +223 -0
- mdb_engine/core/engine.py +1057 -93
- mdb_engine/core/index_management.py +12 -16
- mdb_engine/core/manifest.py +459 -150
- mdb_engine/core/ray_integration.py +435 -0
- mdb_engine/core/seeding.py +10 -18
- mdb_engine/core/service_initialization.py +12 -23
- mdb_engine/core/types.py +2 -5
- mdb_engine/database/README.md +140 -17
- mdb_engine/database/__init__.py +17 -6
- mdb_engine/database/abstraction.py +25 -37
- mdb_engine/database/connection.py +11 -18
- mdb_engine/database/query_validator.py +367 -0
- mdb_engine/database/resource_limiter.py +204 -0
- mdb_engine/database/scoped_wrapper.py +713 -196
- mdb_engine/dependencies.py +426 -0
- mdb_engine/di/__init__.py +34 -0
- mdb_engine/di/container.py +248 -0
- mdb_engine/di/providers.py +205 -0
- mdb_engine/di/scopes.py +139 -0
- mdb_engine/embeddings/README.md +54 -24
- mdb_engine/embeddings/__init__.py +31 -24
- mdb_engine/embeddings/dependencies.py +37 -154
- mdb_engine/embeddings/service.py +11 -25
- mdb_engine/exceptions.py +92 -0
- mdb_engine/indexes/README.md +30 -13
- mdb_engine/indexes/__init__.py +1 -0
- mdb_engine/indexes/helpers.py +1 -1
- mdb_engine/indexes/manager.py +50 -114
- mdb_engine/memory/README.md +2 -2
- mdb_engine/memory/__init__.py +1 -2
- mdb_engine/memory/service.py +30 -87
- mdb_engine/observability/README.md +4 -2
- mdb_engine/observability/__init__.py +26 -9
- mdb_engine/observability/health.py +8 -9
- mdb_engine/observability/metrics.py +32 -12
- mdb_engine/repositories/__init__.py +34 -0
- mdb_engine/repositories/base.py +325 -0
- mdb_engine/repositories/mongo.py +233 -0
- mdb_engine/repositories/unit_of_work.py +166 -0
- mdb_engine/routing/README.md +1 -1
- mdb_engine/routing/__init__.py +1 -3
- mdb_engine/routing/websockets.py +25 -60
- mdb_engine-0.2.0.dist-info/METADATA +313 -0
- mdb_engine-0.2.0.dist-info/RECORD +96 -0
- mdb_engine-0.1.6.dist-info/METADATA +0 -213
- mdb_engine-0.1.6.dist-info/RECORD +0 -75
- {mdb_engine-0.1.6.dist-info → mdb_engine-0.2.0.dist-info}/WHEEL +0 -0
- {mdb_engine-0.1.6.dist-info → mdb_engine-0.2.0.dist-info}/entry_points.txt +0 -0
- {mdb_engine-0.1.6.dist-info → mdb_engine-0.2.0.dist-info}/licenses/LICENSE +0 -0
- {mdb_engine-0.1.6.dist-info → mdb_engine-0.2.0.dist-info}/top_level.txt +0 -0
|
@@ -11,8 +11,12 @@ import logging
|
|
|
11
11
|
from typing import TYPE_CHECKING
|
|
12
12
|
|
|
13
13
|
from motor.motor_asyncio import AsyncIOMotorDatabase
|
|
14
|
-
from pymongo.errors import (
|
|
15
|
-
|
|
14
|
+
from pymongo.errors import (
|
|
15
|
+
ConnectionFailure,
|
|
16
|
+
InvalidOperation,
|
|
17
|
+
OperationFailure,
|
|
18
|
+
ServerSelectionTimeoutError,
|
|
19
|
+
)
|
|
16
20
|
|
|
17
21
|
from ..indexes import run_index_creation_for_collection
|
|
18
22
|
|
|
@@ -56,20 +60,16 @@ class IndexManager:
|
|
|
56
60
|
)
|
|
57
61
|
if not managed_indexes:
|
|
58
62
|
logger.warning(
|
|
59
|
-
f"[{slug}] No 'managed_indexes' found in manifest. "
|
|
60
|
-
f"Skipping index creation."
|
|
63
|
+
f"[{slug}] No 'managed_indexes' found in manifest. " f"Skipping index creation."
|
|
61
64
|
)
|
|
62
65
|
return
|
|
63
66
|
|
|
64
67
|
# Validate indexes
|
|
65
68
|
logger.info(
|
|
66
|
-
f"[{slug}] Validating {len(managed_indexes)} collection(s) "
|
|
67
|
-
f"with managed indexes..."
|
|
69
|
+
f"[{slug}] Validating {len(managed_indexes)} collection(s) " f"with managed indexes..."
|
|
68
70
|
)
|
|
69
71
|
is_valid, error = validate_managed_indexes(managed_indexes)
|
|
70
|
-
logger.info(
|
|
71
|
-
f"[{slug}] Index validation result: is_valid={is_valid}, " f"error={error}"
|
|
72
|
-
)
|
|
72
|
+
logger.info(f"[{slug}] Index validation result: is_valid={is_valid}, " f"error={error}")
|
|
73
73
|
if not is_valid:
|
|
74
74
|
logger.error(
|
|
75
75
|
f"[{slug}] ❌ Invalid 'managed_indexes' configuration: {error}. "
|
|
@@ -79,8 +79,7 @@ class IndexManager:
|
|
|
79
79
|
|
|
80
80
|
# Create indexes for each collection
|
|
81
81
|
logger.info(
|
|
82
|
-
f"[{slug}] Processing {len(managed_indexes)} collection(s) "
|
|
83
|
-
f"with managed indexes"
|
|
82
|
+
f"[{slug}] Processing {len(managed_indexes)} collection(s) " f"with managed indexes"
|
|
84
83
|
)
|
|
85
84
|
for collection_base_name, indexes in managed_indexes.items():
|
|
86
85
|
logger.info(
|
|
@@ -98,9 +97,7 @@ class IndexManager:
|
|
|
98
97
|
|
|
99
98
|
prefixed_collection_name = f"{slug}_{collection_base_name}"
|
|
100
99
|
prefixed_defs = []
|
|
101
|
-
logger.debug(
|
|
102
|
-
f"[{slug}] Prefixed collection name: '{prefixed_collection_name}'"
|
|
103
|
-
)
|
|
100
|
+
logger.debug(f"[{slug}] Prefixed collection name: '{prefixed_collection_name}'")
|
|
104
101
|
|
|
105
102
|
for idx_def in indexes:
|
|
106
103
|
idx_n = idx_def.get("name")
|
|
@@ -143,8 +140,7 @@ class IndexManager:
|
|
|
143
140
|
# Wait a bit after all indexes are created to ensure they're all ready
|
|
144
141
|
await asyncio.sleep(1.0) # Extra wait after all indexes are created
|
|
145
142
|
logger.info(
|
|
146
|
-
f"[{slug}] ✅ Completed index creation for "
|
|
147
|
-
f"'{prefixed_collection_name}'"
|
|
143
|
+
f"[{slug}] ✅ Completed index creation for " f"'{prefixed_collection_name}'"
|
|
148
144
|
)
|
|
149
145
|
except (
|
|
150
146
|
OperationFailure,
|