mdb-engine 0.2.3__tar.gz → 0.2.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.
Files changed (105) hide show
  1. {mdb_engine-0.2.3/mdb_engine.egg-info → mdb_engine-0.2.4}/PKG-INFO +81 -6
  2. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/README.md +80 -5
  3. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/__init__.py +7 -1
  4. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/README.md +6 -0
  5. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/shared_middleware.py +330 -119
  6. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/core/manifest.py +21 -0
  7. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/embeddings/service.py +37 -8
  8. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/memory/README.md +93 -2
  9. mdb_engine-0.2.4/mdb_engine/memory/service.py +480 -0
  10. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/utils/__init__.py +3 -1
  11. mdb_engine-0.2.4/mdb_engine/utils/mongo.py +117 -0
  12. {mdb_engine-0.2.3 → mdb_engine-0.2.4/mdb_engine.egg-info}/PKG-INFO +81 -6
  13. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine.egg-info/SOURCES.txt +2 -1
  14. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/pyproject.toml +1 -1
  15. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/setup.py +1 -1
  16. mdb_engine-0.2.3/mdb_engine/memory/service.py +0 -1228
  17. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/LICENSE +0 -0
  18. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/MANIFEST.in +0 -0
  19. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/README.md +0 -0
  20. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/ARCHITECTURE.md +0 -0
  21. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/__init__.py +0 -0
  22. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/audit.py +0 -0
  23. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/base.py +0 -0
  24. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/casbin_factory.py +0 -0
  25. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/casbin_models.py +0 -0
  26. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/config_defaults.py +0 -0
  27. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/config_helpers.py +0 -0
  28. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/cookie_utils.py +0 -0
  29. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/csrf.py +0 -0
  30. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/decorators.py +0 -0
  31. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/dependencies.py +0 -0
  32. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/helpers.py +0 -0
  33. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/integration.py +0 -0
  34. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/jwt.py +0 -0
  35. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/middleware.py +0 -0
  36. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/oso_factory.py +0 -0
  37. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/provider.py +0 -0
  38. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/rate_limiter.py +0 -0
  39. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/restrictions.py +0 -0
  40. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/session_manager.py +0 -0
  41. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/shared_users.py +0 -0
  42. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/token_lifecycle.py +0 -0
  43. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/token_store.py +0 -0
  44. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/users.py +0 -0
  45. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/auth/utils.py +0 -0
  46. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/cli/__init__.py +0 -0
  47. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/cli/commands/__init__.py +0 -0
  48. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/cli/commands/generate.py +0 -0
  49. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/cli/commands/migrate.py +0 -0
  50. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/cli/commands/show.py +0 -0
  51. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/cli/commands/validate.py +0 -0
  52. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/cli/main.py +0 -0
  53. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/cli/utils.py +0 -0
  54. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/config.py +0 -0
  55. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/constants.py +0 -0
  56. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/core/README.md +0 -0
  57. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/core/__init__.py +0 -0
  58. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/core/app_registration.py +0 -0
  59. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/core/app_secrets.py +0 -0
  60. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/core/connection.py +0 -0
  61. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/core/encryption.py +0 -0
  62. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/core/engine.py +0 -0
  63. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/core/index_management.py +0 -0
  64. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/core/ray_integration.py +0 -0
  65. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/core/seeding.py +0 -0
  66. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/core/service_initialization.py +0 -0
  67. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/core/types.py +0 -0
  68. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/database/README.md +0 -0
  69. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/database/__init__.py +0 -0
  70. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/database/abstraction.py +0 -0
  71. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/database/connection.py +0 -0
  72. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/database/query_validator.py +0 -0
  73. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/database/resource_limiter.py +0 -0
  74. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/database/scoped_wrapper.py +0 -0
  75. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/dependencies.py +0 -0
  76. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/di/__init__.py +0 -0
  77. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/di/container.py +0 -0
  78. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/di/providers.py +0 -0
  79. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/di/scopes.py +0 -0
  80. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/embeddings/README.md +0 -0
  81. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/embeddings/__init__.py +0 -0
  82. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/embeddings/dependencies.py +0 -0
  83. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/exceptions.py +0 -0
  84. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/indexes/README.md +0 -0
  85. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/indexes/__init__.py +0 -0
  86. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/indexes/helpers.py +0 -0
  87. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/indexes/manager.py +0 -0
  88. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/memory/__init__.py +0 -0
  89. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/observability/README.md +0 -0
  90. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/observability/__init__.py +0 -0
  91. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/observability/health.py +0 -0
  92. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/observability/logging.py +0 -0
  93. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/observability/metrics.py +0 -0
  94. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/repositories/__init__.py +0 -0
  95. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/repositories/base.py +0 -0
  96. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/repositories/mongo.py +0 -0
  97. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/repositories/unit_of_work.py +0 -0
  98. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/routing/README.md +0 -0
  99. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/routing/__init__.py +0 -0
  100. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine/routing/websockets.py +0 -0
  101. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine.egg-info/dependency_links.txt +0 -0
  102. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine.egg-info/entry_points.txt +0 -0
  103. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine.egg-info/requires.txt +0 -0
  104. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/mdb_engine.egg-info/top_level.txt +0 -0
  105. {mdb_engine-0.2.3 → mdb_engine-0.2.4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mdb-engine
3
- Version: 0.2.3
3
+ Version: 0.2.4
4
4
  Summary: MongoDB Engine
5
5
  Home-page: https://github.com/ranfysvalle02/mdb-engine
6
6
  Author: Fabian Valle
@@ -73,6 +73,31 @@ Dynamic: requires-python
73
73
 
74
74
  ---
75
75
 
76
+ ## 🎯 manifest.json: The Key to Everything
77
+
78
+ **`manifest.json` is the foundation of your application.** It's a single configuration file that defines your app's identity, data structure, authentication, indexes, and services. Everything flows from this file.
79
+
80
+ ### Your First manifest.json
81
+
82
+ Create a `manifest.json` file with just 3 fields:
83
+
84
+ ```json
85
+ {
86
+ "schema_version": "2.0",
87
+ "slug": "my_app",
88
+ "name": "My App"
89
+ }
90
+ ```
91
+
92
+ That's it! This minimal manifest gives you:
93
+ - ✅ Automatic data scoping (all queries filtered by `app_id`)
94
+ - ✅ Collection name prefixing (`db.tasks` → `my_app_tasks`)
95
+ - ✅ App registration and lifecycle management
96
+
97
+ **Learn more**: [Quick Start Guide](docs/QUICK_START.md) | [Manifest Deep Dive](docs/MANIFEST_DEEP_DIVE.md)
98
+
99
+ ---
100
+
76
101
  ## Installation
77
102
 
78
103
  ```bash
@@ -83,28 +108,55 @@ pip install mdb-engine
83
108
 
84
109
  ## 30-Second Quick Start
85
110
 
111
+ **Step 1**: Create your `manifest.json`:
112
+
113
+ ```json
114
+ {
115
+ "schema_version": "2.0",
116
+ "slug": "my_app",
117
+ "name": "My App",
118
+ "managed_indexes": {
119
+ "tasks": [
120
+ {
121
+ "type": "regular",
122
+ "keys": {"status": 1, "created_at": -1},
123
+ "name": "status_sort"
124
+ }
125
+ ]
126
+ }
127
+ }
128
+ ```
129
+
130
+ **Step 2**: Create your FastAPI app:
131
+
86
132
  ```python
87
133
  from pathlib import Path
88
134
  from fastapi import Depends
89
135
  from mdb_engine import MongoDBEngine
90
136
  from mdb_engine.dependencies import get_scoped_db
91
137
 
92
- # 1. Initialize the engine
138
+ # Initialize the engine
93
139
  engine = MongoDBEngine(
94
140
  mongo_uri="mongodb://localhost:27017",
95
141
  db_name="my_database"
96
142
  )
97
143
 
98
- # 2. Create a FastAPI app with automatic lifecycle management
144
+ # Create app - manifest.json is loaded automatically!
99
145
  app = engine.create_app(slug="my_app", manifest=Path("manifest.json"))
100
146
 
101
- # 3. Use request-scoped dependencies - all queries automatically isolated
147
+ # Use request-scoped dependencies - all queries automatically isolated
102
148
  @app.post("/tasks")
103
149
  async def create_task(task: dict, db=Depends(get_scoped_db)):
104
150
  result = await db.tasks.insert_one(task)
105
151
  return {"id": str(result.inserted_id)}
106
152
  ```
107
153
 
154
+ **What just happened?**
155
+ - ✅ Engine loaded your `manifest.json`
156
+ - ✅ Indexes created automatically from `managed_indexes`
157
+ - ✅ Database queries automatically scoped to your app
158
+ - ✅ Lifecycle management handled (startup/shutdown)
159
+
108
160
  That's it. Your data is automatically sandboxed, indexes are created, and cleanup is handled.
109
161
 
110
162
  ---
@@ -200,9 +252,11 @@ async def health():
200
252
 
201
253
  ## Why mdb-engine?
202
254
 
255
+ - **manifest.json is everything** — Single source of truth for your entire app configuration
203
256
  - **Zero boilerplate** — No more connection setup, index creation scripts, or auth handlers
204
257
  - **Data isolation** — Multi-tenant ready with automatic app sandboxing
205
258
  - **Manifest-driven** — Define your app's "DNA" in JSON, not scattered code
259
+ - **Incremental adoption** — Start minimal, add features as needed
206
260
  - **No lock-in** — Standard Motor/PyMongo underneath; export anytime with `mongodump --query='{"app_id":"my_app"}'`
207
261
 
208
262
  ---
@@ -300,13 +354,34 @@ async def get_items():
300
354
 
301
355
  ---
302
356
 
357
+ ## Understanding manifest.json
358
+
359
+ Your `manifest.json` is the heart of your application. It defines:
360
+
361
+ - **App Identity**: `slug`, `name`, `description`
362
+ - **Data Access**: `data_access.read_scopes`, `data_access.write_scope`
363
+ - **Indexes**: `managed_indexes` (regular, vector, text, TTL, compound)
364
+ - **Authentication**: `auth.policy`, `auth.users` (Casbin/OSO, demo users)
365
+ - **AI Services**: `embedding_config`, `memory_config`
366
+ - **Real-time**: `websockets` endpoints
367
+ - **CORS**: `cors` settings
368
+
369
+ **Start minimal, grow as needed.** You can begin with just `slug`, `name`, and `schema_version`, then add features incrementally.
370
+
371
+ **📖 Learn More:**
372
+ - [Quick Start Guide](docs/QUICK_START.md) - Get started with manifest.json
373
+ - [Manifest Deep Dive](docs/MANIFEST_DEEP_DIVE.md) - Comprehensive manifest.json guide
374
+ - [Examples](examples/) - Real-world manifest.json files
375
+
376
+ ---
377
+
303
378
  ## Links
304
379
 
305
380
  - [GitHub Repository](https://github.com/ranfysvalle02/mdb-engine)
306
381
  - [Documentation](https://github.com/ranfysvalle02/mdb-engine/tree/main/docs)
307
382
  - [All Examples](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples)
308
- - [Quick Start Guide](https://github.com/ranfysvalle02/mdb-engine/blob/main/docs/QUICK_START.md)
309
- - [Contributing](https://github.com/ranfysvalle02/mdb-engine/blob/main/CONTRIBUTING.md)
383
+ - [Quick Start Guide](docs/QUICK_START.md) - **Start here!**
384
+ - [Contributing](CONTRIBUTING.md)
310
385
 
311
386
  ---
312
387
 
@@ -8,6 +8,31 @@
8
8
 
9
9
  ---
10
10
 
11
+ ## 🎯 manifest.json: The Key to Everything
12
+
13
+ **`manifest.json` is the foundation of your application.** It's a single configuration file that defines your app's identity, data structure, authentication, indexes, and services. Everything flows from this file.
14
+
15
+ ### Your First manifest.json
16
+
17
+ Create a `manifest.json` file with just 3 fields:
18
+
19
+ ```json
20
+ {
21
+ "schema_version": "2.0",
22
+ "slug": "my_app",
23
+ "name": "My App"
24
+ }
25
+ ```
26
+
27
+ That's it! This minimal manifest gives you:
28
+ - ✅ Automatic data scoping (all queries filtered by `app_id`)
29
+ - ✅ Collection name prefixing (`db.tasks` → `my_app_tasks`)
30
+ - ✅ App registration and lifecycle management
31
+
32
+ **Learn more**: [Quick Start Guide](docs/QUICK_START.md) | [Manifest Deep Dive](docs/MANIFEST_DEEP_DIVE.md)
33
+
34
+ ---
35
+
11
36
  ## Installation
12
37
 
13
38
  ```bash
@@ -18,28 +43,55 @@ pip install mdb-engine
18
43
 
19
44
  ## 30-Second Quick Start
20
45
 
46
+ **Step 1**: Create your `manifest.json`:
47
+
48
+ ```json
49
+ {
50
+ "schema_version": "2.0",
51
+ "slug": "my_app",
52
+ "name": "My App",
53
+ "managed_indexes": {
54
+ "tasks": [
55
+ {
56
+ "type": "regular",
57
+ "keys": {"status": 1, "created_at": -1},
58
+ "name": "status_sort"
59
+ }
60
+ ]
61
+ }
62
+ }
63
+ ```
64
+
65
+ **Step 2**: Create your FastAPI app:
66
+
21
67
  ```python
22
68
  from pathlib import Path
23
69
  from fastapi import Depends
24
70
  from mdb_engine import MongoDBEngine
25
71
  from mdb_engine.dependencies import get_scoped_db
26
72
 
27
- # 1. Initialize the engine
73
+ # Initialize the engine
28
74
  engine = MongoDBEngine(
29
75
  mongo_uri="mongodb://localhost:27017",
30
76
  db_name="my_database"
31
77
  )
32
78
 
33
- # 2. Create a FastAPI app with automatic lifecycle management
79
+ # Create app - manifest.json is loaded automatically!
34
80
  app = engine.create_app(slug="my_app", manifest=Path("manifest.json"))
35
81
 
36
- # 3. Use request-scoped dependencies - all queries automatically isolated
82
+ # Use request-scoped dependencies - all queries automatically isolated
37
83
  @app.post("/tasks")
38
84
  async def create_task(task: dict, db=Depends(get_scoped_db)):
39
85
  result = await db.tasks.insert_one(task)
40
86
  return {"id": str(result.inserted_id)}
41
87
  ```
42
88
 
89
+ **What just happened?**
90
+ - ✅ Engine loaded your `manifest.json`
91
+ - ✅ Indexes created automatically from `managed_indexes`
92
+ - ✅ Database queries automatically scoped to your app
93
+ - ✅ Lifecycle management handled (startup/shutdown)
94
+
43
95
  That's it. Your data is automatically sandboxed, indexes are created, and cleanup is handled.
44
96
 
45
97
  ---
@@ -135,9 +187,11 @@ async def health():
135
187
 
136
188
  ## Why mdb-engine?
137
189
 
190
+ - **manifest.json is everything** — Single source of truth for your entire app configuration
138
191
  - **Zero boilerplate** — No more connection setup, index creation scripts, or auth handlers
139
192
  - **Data isolation** — Multi-tenant ready with automatic app sandboxing
140
193
  - **Manifest-driven** — Define your app's "DNA" in JSON, not scattered code
194
+ - **Incremental adoption** — Start minimal, add features as needed
141
195
  - **No lock-in** — Standard Motor/PyMongo underneath; export anytime with `mongodump --query='{"app_id":"my_app"}'`
142
196
 
143
197
  ---
@@ -235,13 +289,34 @@ async def get_items():
235
289
 
236
290
  ---
237
291
 
292
+ ## Understanding manifest.json
293
+
294
+ Your `manifest.json` is the heart of your application. It defines:
295
+
296
+ - **App Identity**: `slug`, `name`, `description`
297
+ - **Data Access**: `data_access.read_scopes`, `data_access.write_scope`
298
+ - **Indexes**: `managed_indexes` (regular, vector, text, TTL, compound)
299
+ - **Authentication**: `auth.policy`, `auth.users` (Casbin/OSO, demo users)
300
+ - **AI Services**: `embedding_config`, `memory_config`
301
+ - **Real-time**: `websockets` endpoints
302
+ - **CORS**: `cors` settings
303
+
304
+ **Start minimal, grow as needed.** You can begin with just `slug`, `name`, and `schema_version`, then add features incrementally.
305
+
306
+ **📖 Learn More:**
307
+ - [Quick Start Guide](docs/QUICK_START.md) - Get started with manifest.json
308
+ - [Manifest Deep Dive](docs/MANIFEST_DEEP_DIVE.md) - Comprehensive manifest.json guide
309
+ - [Examples](examples/) - Real-world manifest.json files
310
+
311
+ ---
312
+
238
313
  ## Links
239
314
 
240
315
  - [GitHub Repository](https://github.com/ranfysvalle02/mdb-engine)
241
316
  - [Documentation](https://github.com/ranfysvalle02/mdb-engine/tree/main/docs)
242
317
  - [All Examples](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples)
243
- - [Quick Start Guide](https://github.com/ranfysvalle02/mdb-engine/blob/main/docs/QUICK_START.md)
244
- - [Contributing](https://github.com/ranfysvalle02/mdb-engine/blob/main/CONTRIBUTING.md)
318
+ - [Quick Start Guide](docs/QUICK_START.md) - **Start here!**
319
+ - [Contributing](CONTRIBUTING.md)
245
320
 
246
321
  ---
247
322
 
@@ -78,7 +78,10 @@ from .indexes import (
78
78
  # Repository pattern
79
79
  from .repositories import Entity, MongoRepository, Repository, UnitOfWork
80
80
 
81
- __version__ = "0.2.1" # Major version bump for new DI system
81
+ # Utilities
82
+ from .utils import clean_mongo_doc, clean_mongo_docs
83
+
84
+ __version__ = "0.2.4" # Patch version bump for exception handling improvements
82
85
 
83
86
  __all__ = [
84
87
  # Core Engine
@@ -127,4 +130,7 @@ __all__ = [
127
130
  "AsyncAtlasIndexManager",
128
131
  "AutoIndexManager",
129
132
  "run_index_creation_for_collection",
133
+ # Utilities
134
+ "clean_mongo_doc",
135
+ "clean_mongo_docs",
130
136
  ]
@@ -42,6 +42,10 @@ All apps share a central user pool. Users authenticate once and can access any a
42
42
  {
43
43
  "auth": {
44
44
  "mode": "shared",
45
+ "auth_hub_url": "http://localhost:8000",
46
+ "related_apps": {
47
+ "dashboard": "http://localhost:8001"
48
+ },
45
49
  "roles": ["viewer", "editor", "admin"],
46
50
  "default_role": "viewer",
47
51
  "require_role": "viewer",
@@ -60,6 +64,8 @@ All apps share a central user pool. Users authenticate once and can access any a
60
64
  | Field | Description |
61
65
  |-------|-------------|
62
66
  | `roles` | Available roles for this app |
67
+ | `auth_hub_url` | URL of the authentication hub for SSO apps. Used for redirecting unauthenticated users to login. Can be overridden via `AUTH_HUB_URL` environment variable |
68
+ | `related_apps` | Map of related app slugs to their URLs for cross-app navigation. Keys are app slugs, values are URLs. Can be overridden via `{APP_SLUG_UPPER}_URL` environment variables |
63
69
  | `default_role` | Role assigned to new users |
64
70
  | `require_role` | Minimum role required to access app |
65
71
  | `public_routes` | Routes that don't require authentication |