mdb-engine 0.1.6__tar.gz → 0.1.7__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 (100) hide show
  1. mdb_engine-0.1.7/PKG-INFO +285 -0
  2. mdb_engine-0.1.7/README.md +220 -0
  3. mdb_engine-0.1.7/mdb_engine/__init__.py +69 -0
  4. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/README.md +534 -11
  5. mdb_engine-0.1.7/mdb_engine/auth/__init__.py +229 -0
  6. mdb_engine-0.1.7/mdb_engine/auth/audit.py +592 -0
  7. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/casbin_factory.py +10 -14
  8. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/config_helpers.py +7 -6
  9. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/cookie_utils.py +3 -7
  10. mdb_engine-0.1.7/mdb_engine/auth/csrf.py +373 -0
  11. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/decorators.py +3 -10
  12. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/dependencies.py +37 -45
  13. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/helpers.py +3 -3
  14. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/integration.py +30 -73
  15. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/jwt.py +2 -6
  16. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/middleware.py +77 -34
  17. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/oso_factory.py +16 -36
  18. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/provider.py +17 -38
  19. mdb_engine-0.1.7/mdb_engine/auth/rate_limiter.py +504 -0
  20. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/restrictions.py +8 -24
  21. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/session_manager.py +14 -29
  22. mdb_engine-0.1.7/mdb_engine/auth/shared_middleware.py +600 -0
  23. mdb_engine-0.1.7/mdb_engine/auth/shared_users.py +759 -0
  24. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/token_store.py +14 -28
  25. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/users.py +54 -113
  26. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/utils.py +213 -15
  27. mdb_engine-0.1.7/mdb_engine/cli/commands/generate.py +641 -0
  28. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/cli/commands/validate.py +3 -7
  29. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/cli/utils.py +3 -3
  30. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/config.py +7 -21
  31. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/constants.py +65 -0
  32. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/core/README.md +117 -6
  33. mdb_engine-0.1.7/mdb_engine/core/__init__.py +74 -0
  34. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/core/app_registration.py +22 -41
  35. mdb_engine-0.1.7/mdb_engine/core/app_secrets.py +290 -0
  36. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/core/connection.py +18 -9
  37. mdb_engine-0.1.7/mdb_engine/core/encryption.py +223 -0
  38. mdb_engine-0.1.7/mdb_engine/core/engine.py +1412 -0
  39. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/core/index_management.py +12 -16
  40. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/core/manifest.py +424 -135
  41. mdb_engine-0.1.7/mdb_engine/core/ray_integration.py +435 -0
  42. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/core/seeding.py +10 -18
  43. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/core/service_initialization.py +12 -23
  44. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/core/types.py +2 -5
  45. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/database/README.md +112 -16
  46. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/database/__init__.py +17 -6
  47. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/database/abstraction.py +25 -37
  48. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/database/connection.py +11 -18
  49. mdb_engine-0.1.7/mdb_engine/database/query_validator.py +367 -0
  50. mdb_engine-0.1.7/mdb_engine/database/resource_limiter.py +204 -0
  51. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/database/scoped_wrapper.py +713 -196
  52. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/embeddings/__init__.py +17 -9
  53. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/embeddings/dependencies.py +1 -3
  54. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/embeddings/service.py +11 -25
  55. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/exceptions.py +92 -0
  56. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/indexes/README.md +30 -13
  57. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/indexes/__init__.py +1 -0
  58. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/indexes/helpers.py +1 -1
  59. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/indexes/manager.py +50 -114
  60. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/memory/README.md +2 -2
  61. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/memory/__init__.py +1 -2
  62. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/memory/service.py +30 -87
  63. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/observability/README.md +4 -2
  64. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/observability/__init__.py +26 -9
  65. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/observability/health.py +8 -9
  66. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/observability/metrics.py +32 -12
  67. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/routing/README.md +1 -1
  68. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/routing/__init__.py +1 -3
  69. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/routing/websockets.py +25 -60
  70. mdb_engine-0.1.7/mdb_engine.egg-info/PKG-INFO +285 -0
  71. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine.egg-info/SOURCES.txt +10 -0
  72. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine.egg-info/requires.txt +3 -7
  73. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/pyproject.toml +48 -9
  74. mdb_engine-0.1.6/PKG-INFO +0 -213
  75. mdb_engine-0.1.6/README.md +0 -369
  76. mdb_engine-0.1.6/mdb_engine/__init__.py +0 -37
  77. mdb_engine-0.1.6/mdb_engine/auth/__init__.py +0 -128
  78. mdb_engine-0.1.6/mdb_engine/cli/commands/generate.py +0 -105
  79. mdb_engine-0.1.6/mdb_engine/core/__init__.py +0 -42
  80. mdb_engine-0.1.6/mdb_engine/core/engine.py +0 -749
  81. mdb_engine-0.1.6/mdb_engine.egg-info/PKG-INFO +0 -213
  82. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/LICENSE +0 -0
  83. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/MANIFEST.in +0 -0
  84. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/README.md +0 -0
  85. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/casbin_models.py +0 -0
  86. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/config_defaults.py +0 -0
  87. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/auth/token_lifecycle.py +0 -0
  88. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/cli/__init__.py +0 -0
  89. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/cli/commands/__init__.py +0 -0
  90. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/cli/commands/migrate.py +0 -0
  91. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/cli/commands/show.py +0 -0
  92. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/cli/main.py +0 -0
  93. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/embeddings/README.md +0 -0
  94. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/observability/logging.py +0 -0
  95. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine/utils/__init__.py +0 -0
  96. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine.egg-info/dependency_links.txt +0 -0
  97. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine.egg-info/entry_points.txt +0 -0
  98. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/mdb_engine.egg-info/top_level.txt +0 -0
  99. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/setup.cfg +0 -0
  100. {mdb_engine-0.1.6 → mdb_engine-0.1.7}/setup.py +0 -0
@@ -0,0 +1,285 @@
1
+ Metadata-Version: 2.4
2
+ Name: mdb-engine
3
+ Version: 0.1.7
4
+ Summary: MongoDB Engine
5
+ Home-page: https://github.com/ranfysvalle02/mdb-engine
6
+ Author: Your Name
7
+ Author-email: Your Name <your.email@example.com>
8
+ License: AGPL-3.0
9
+ Project-URL: Homepage, https://github.com/ranfysvalle02/mdb-engine
10
+ Project-URL: Documentation, https://github.com/ranfysvalle02/mdb-engine#readme
11
+ Project-URL: Repository, https://github.com/ranfysvalle02/mdb-engine
12
+ Project-URL: Issues, https://github.com/ranfysvalle02/mdb-engine/issues
13
+ Keywords: mongodb,runtime,engine,database,scoping
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.8
19
+ Classifier: Programming Language :: Python :: 3.9
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Topic :: Database
23
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
24
+ Requires-Python: >=3.8
25
+ Description-Content-Type: text/markdown
26
+ License-File: LICENSE
27
+ Requires-Dist: motor>=3.0.0
28
+ Requires-Dist: pymongo>=4.0.0
29
+ Requires-Dist: fastapi>=0.100.0
30
+ Requires-Dist: pydantic>=2.0.0
31
+ Requires-Dist: pyjwt>=2.8.0
32
+ Requires-Dist: jsonschema>=4.0.0
33
+ Requires-Dist: bcrypt>=4.0.0
34
+ Requires-Dist: cryptography>=41.0.0
35
+ Requires-Dist: mem0ai>=1.0.0
36
+ Requires-Dist: semantic-text-splitter>=0.9.0
37
+ Requires-Dist: numpy<2.0.0,>=1.0.0
38
+ Requires-Dist: openai>=1.0.0
39
+ Requires-Dist: azure-identity>=1.15.0
40
+ Requires-Dist: click>=8.0.0
41
+ Provides-Extra: casbin
42
+ Requires-Dist: casbin>=1.0.0; extra == "casbin"
43
+ Requires-Dist: casbin-motor-adapter>=0.1.0; extra == "casbin"
44
+ Provides-Extra: oso
45
+ Requires-Dist: oso-cloud>=0.1.0; extra == "oso"
46
+ Provides-Extra: llm
47
+ Provides-Extra: test
48
+ Requires-Dist: pytest>=7.4.0; extra == "test"
49
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == "test"
50
+ Requires-Dist: pytest-cov>=4.1.0; extra == "test"
51
+ Requires-Dist: pytest-mock>=3.11.0; extra == "test"
52
+ Requires-Dist: pytest-timeout>=2.1.0; extra == "test"
53
+ Requires-Dist: testcontainers>=3.7.0; extra == "test"
54
+ Provides-Extra: dev
55
+ Requires-Dist: ruff>=0.4.0; extra == "dev"
56
+ Requires-Dist: semgrep>=1.50.0; extra == "dev"
57
+ Provides-Extra: all
58
+ Requires-Dist: casbin>=1.0.0; extra == "all"
59
+ Requires-Dist: casbin-motor-adapter>=0.1.0; extra == "all"
60
+ Requires-Dist: oso-cloud>=0.1.0; extra == "all"
61
+ Dynamic: author
62
+ Dynamic: home-page
63
+ Dynamic: license-file
64
+ Dynamic: requires-python
65
+
66
+ # mdb-engine
67
+
68
+ **The MongoDB Engine for Python Apps** — Auto-sandboxing, index management, and auth in one package.
69
+
70
+ [![PyPI](https://img.shields.io/pypi/v/mdb-engine)](https://pypi.org/project/mdb-engine/)
71
+ [![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)
72
+ [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](https://opensource.org/licenses/AGPL-3.0)
73
+
74
+ ---
75
+
76
+ ## Installation
77
+
78
+ ```bash
79
+ pip install mdb-engine
80
+ ```
81
+
82
+ ---
83
+
84
+ ## 30-Second Quick Start
85
+
86
+ ```python
87
+ from pathlib import Path
88
+ from mdb_engine import MongoDBEngine
89
+
90
+ # 1. Initialize the engine
91
+ engine = MongoDBEngine(
92
+ mongo_uri="mongodb://localhost:27017",
93
+ db_name="my_database"
94
+ )
95
+
96
+ # 2. Create a FastAPI app with automatic lifecycle management
97
+ app = engine.create_app(slug="my_app", manifest=Path("manifest.json"))
98
+
99
+ # 3. Use the scoped database - all queries automatically isolated
100
+ @app.post("/tasks")
101
+ async def create_task(task: dict):
102
+ db = engine.get_scoped_db("my_app")
103
+ result = await db.tasks.insert_one(task)
104
+ return {"id": str(result.inserted_id)}
105
+ ```
106
+
107
+ That's it. Your data is automatically sandboxed, indexes are created, and cleanup is handled.
108
+
109
+ ---
110
+
111
+ ## Basic Examples
112
+
113
+ ### 1. Index Management
114
+
115
+ Define indexes in your `manifest.json` — they're auto-created on startup:
116
+
117
+ ```json
118
+ {
119
+ "schema_version": "2.0",
120
+ "slug": "my_app",
121
+ "name": "My App",
122
+ "status": "active",
123
+ "managed_indexes": {
124
+ "tasks": [
125
+ {
126
+ "type": "regular",
127
+ "keys": {"status": 1, "created_at": -1},
128
+ "name": "status_sort"
129
+ },
130
+ {
131
+ "type": "regular",
132
+ "keys": {"priority": -1},
133
+ "name": "priority_idx"
134
+ }
135
+ ],
136
+ "users": [
137
+ {
138
+ "type": "regular",
139
+ "keys": {"email": 1},
140
+ "name": "email_unique",
141
+ "unique": true
142
+ }
143
+ ]
144
+ }
145
+ }
146
+ ```
147
+
148
+ Supported index types: `regular`, `text`, `vector`, `ttl`, `compound`.
149
+
150
+ ### 2. CRUD Operations (Auto-Scoped)
151
+
152
+ All database operations are automatically scoped to your app:
153
+
154
+ ```python
155
+ db = engine.get_scoped_db("my_app")
156
+
157
+ # Create
158
+ await db.tasks.insert_one({"title": "Build feature", "status": "pending"})
159
+
160
+ # Read
161
+ tasks = await db.tasks.find({"status": "pending"}).to_list(length=10)
162
+
163
+ # Update
164
+ await db.tasks.update_one({"_id": task_id}, {"$set": {"status": "done"}})
165
+
166
+ # Delete
167
+ await db.tasks.delete_one({"_id": task_id})
168
+ ```
169
+
170
+ **What happens under the hood:**
171
+ ```python
172
+ # You write:
173
+ await db.tasks.find({}).to_list(length=10)
174
+
175
+ # Engine executes:
176
+ # Collection: my_app_tasks
177
+ # Query: {"app_id": "my_app"}
178
+ ```
179
+
180
+ ### 3. Health Checks
181
+
182
+ Built-in observability:
183
+
184
+ ```python
185
+ @app.get("/health")
186
+ async def health():
187
+ status = await engine.get_health_status()
188
+ return {"status": status.get("status", "unknown")}
189
+ ```
190
+
191
+ ---
192
+
193
+ ## Why mdb-engine?
194
+
195
+ - **Zero boilerplate** — No more connection setup, index creation scripts, or auth handlers
196
+ - **Data isolation** — Multi-tenant ready with automatic app sandboxing
197
+ - **Manifest-driven** — Define your app's "DNA" in JSON, not scattered code
198
+ - **No lock-in** — Standard Motor/PyMongo underneath; export anytime with `mongodump --query='{"app_id":"my_app"}'`
199
+
200
+ ---
201
+
202
+ ## Advanced Features
203
+
204
+ | Feature | Description | Learn More |
205
+ |---------|-------------|------------|
206
+ | **Authentication** | JWT + Casbin/OSO RBAC | [Auth Guide](https://github.com/ranfysvalle02/mdb-engine/blob/main/docs/AUTHZ.md) |
207
+ | **Vector Search** | Atlas Vector Search + embeddings | [RAG Example](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/basic/interactive_rag) |
208
+ | **Memory Service** | Persistent AI memory with Mem0 | [Chat Example](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/basic/chit_chat) |
209
+ | **WebSockets** | Real-time updates from manifest | [Docs](https://github.com/ranfysvalle02/mdb-engine/blob/main/docs/ARCHITECTURE.md) |
210
+ | **Multi-App** | Secure cross-app data access | [Multi-App Example](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/advanced/multi_app) |
211
+ | **SSO** | Shared auth across apps | [Shared Auth Example](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/advanced/multi_app_shared) |
212
+
213
+ ---
214
+
215
+ ## Full Examples
216
+
217
+ Clone and run:
218
+
219
+ ```bash
220
+ git clone https://github.com/ranfysvalle02/mdb-engine.git
221
+ cd mdb-engine/examples/basic/chit_chat
222
+ docker-compose up --build
223
+ ```
224
+
225
+ ### Basic Examples
226
+
227
+ | Example | Description |
228
+ |---------|-------------|
229
+ | [chit_chat](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/basic/chit_chat) | AI chat with persistent memory |
230
+ | [interactive_rag](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/basic/interactive_rag) | RAG with vector search |
231
+ | [oso_hello_world](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/basic/oso_hello_world) | OSO Cloud authorization |
232
+ | [parallax](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/basic/parallax) | Dynamic schema generation |
233
+ | [vector_hacking](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/basic/vector_hacking) | Vector embeddings & attacks |
234
+
235
+ ### Advanced Examples
236
+
237
+ | Example | Description |
238
+ |---------|-------------|
239
+ | [simple_app](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/advanced/simple_app) | Task management with `create_app()` pattern |
240
+ | [multi_app](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/advanced/multi_app) | Multi-tenant with cross-app access |
241
+ | [multi_app_shared](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/advanced/multi_app_shared) | SSO with shared user pool |
242
+
243
+ ---
244
+
245
+ ## Manual Setup (Alternative)
246
+
247
+ If you need more control over the FastAPI lifecycle:
248
+
249
+ ```python
250
+ from pathlib import Path
251
+ from fastapi import FastAPI
252
+ from mdb_engine import MongoDBEngine
253
+
254
+ app = FastAPI()
255
+ engine = MongoDBEngine(mongo_uri="mongodb://localhost:27017", db_name="my_database")
256
+
257
+ @app.on_event("startup")
258
+ async def startup():
259
+ await engine.initialize()
260
+ manifest = await engine.load_manifest(Path("manifest.json"))
261
+ await engine.register_app(manifest, create_indexes=True)
262
+
263
+ @app.on_event("shutdown")
264
+ async def shutdown():
265
+ await engine.shutdown()
266
+
267
+ @app.get("/items")
268
+ async def get_items():
269
+ db = engine.get_scoped_db("my_app")
270
+ return await db.items.find({}).to_list(length=10)
271
+ ```
272
+
273
+ ---
274
+
275
+ ## Links
276
+
277
+ - [GitHub Repository](https://github.com/ranfysvalle02/mdb-engine)
278
+ - [Documentation](https://github.com/ranfysvalle02/mdb-engine/tree/main/docs)
279
+ - [All Examples](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples)
280
+ - [Quick Start Guide](https://github.com/ranfysvalle02/mdb-engine/blob/main/docs/QUICK_START.md)
281
+ - [Contributing](https://github.com/ranfysvalle02/mdb-engine/blob/main/CONTRIBUTING.md)
282
+
283
+ ---
284
+
285
+ **Stop building scaffolding. Start building features.**
@@ -0,0 +1,220 @@
1
+ # mdb-engine
2
+
3
+ **The MongoDB Engine for Python Apps** — Auto-sandboxing, index management, and auth in one package.
4
+
5
+ [![PyPI](https://img.shields.io/pypi/v/mdb-engine)](https://pypi.org/project/mdb-engine/)
6
+ [![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)
7
+ [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](https://opensource.org/licenses/AGPL-3.0)
8
+
9
+ ---
10
+
11
+ ## Installation
12
+
13
+ ```bash
14
+ pip install mdb-engine
15
+ ```
16
+
17
+ ---
18
+
19
+ ## 30-Second Quick Start
20
+
21
+ ```python
22
+ from pathlib import Path
23
+ from mdb_engine import MongoDBEngine
24
+
25
+ # 1. Initialize the engine
26
+ engine = MongoDBEngine(
27
+ mongo_uri="mongodb://localhost:27017",
28
+ db_name="my_database"
29
+ )
30
+
31
+ # 2. Create a FastAPI app with automatic lifecycle management
32
+ app = engine.create_app(slug="my_app", manifest=Path("manifest.json"))
33
+
34
+ # 3. Use the scoped database - all queries automatically isolated
35
+ @app.post("/tasks")
36
+ async def create_task(task: dict):
37
+ db = engine.get_scoped_db("my_app")
38
+ result = await db.tasks.insert_one(task)
39
+ return {"id": str(result.inserted_id)}
40
+ ```
41
+
42
+ That's it. Your data is automatically sandboxed, indexes are created, and cleanup is handled.
43
+
44
+ ---
45
+
46
+ ## Basic Examples
47
+
48
+ ### 1. Index Management
49
+
50
+ Define indexes in your `manifest.json` — they're auto-created on startup:
51
+
52
+ ```json
53
+ {
54
+ "schema_version": "2.0",
55
+ "slug": "my_app",
56
+ "name": "My App",
57
+ "status": "active",
58
+ "managed_indexes": {
59
+ "tasks": [
60
+ {
61
+ "type": "regular",
62
+ "keys": {"status": 1, "created_at": -1},
63
+ "name": "status_sort"
64
+ },
65
+ {
66
+ "type": "regular",
67
+ "keys": {"priority": -1},
68
+ "name": "priority_idx"
69
+ }
70
+ ],
71
+ "users": [
72
+ {
73
+ "type": "regular",
74
+ "keys": {"email": 1},
75
+ "name": "email_unique",
76
+ "unique": true
77
+ }
78
+ ]
79
+ }
80
+ }
81
+ ```
82
+
83
+ Supported index types: `regular`, `text`, `vector`, `ttl`, `compound`.
84
+
85
+ ### 2. CRUD Operations (Auto-Scoped)
86
+
87
+ All database operations are automatically scoped to your app:
88
+
89
+ ```python
90
+ db = engine.get_scoped_db("my_app")
91
+
92
+ # Create
93
+ await db.tasks.insert_one({"title": "Build feature", "status": "pending"})
94
+
95
+ # Read
96
+ tasks = await db.tasks.find({"status": "pending"}).to_list(length=10)
97
+
98
+ # Update
99
+ await db.tasks.update_one({"_id": task_id}, {"$set": {"status": "done"}})
100
+
101
+ # Delete
102
+ await db.tasks.delete_one({"_id": task_id})
103
+ ```
104
+
105
+ **What happens under the hood:**
106
+ ```python
107
+ # You write:
108
+ await db.tasks.find({}).to_list(length=10)
109
+
110
+ # Engine executes:
111
+ # Collection: my_app_tasks
112
+ # Query: {"app_id": "my_app"}
113
+ ```
114
+
115
+ ### 3. Health Checks
116
+
117
+ Built-in observability:
118
+
119
+ ```python
120
+ @app.get("/health")
121
+ async def health():
122
+ status = await engine.get_health_status()
123
+ return {"status": status.get("status", "unknown")}
124
+ ```
125
+
126
+ ---
127
+
128
+ ## Why mdb-engine?
129
+
130
+ - **Zero boilerplate** — No more connection setup, index creation scripts, or auth handlers
131
+ - **Data isolation** — Multi-tenant ready with automatic app sandboxing
132
+ - **Manifest-driven** — Define your app's "DNA" in JSON, not scattered code
133
+ - **No lock-in** — Standard Motor/PyMongo underneath; export anytime with `mongodump --query='{"app_id":"my_app"}'`
134
+
135
+ ---
136
+
137
+ ## Advanced Features
138
+
139
+ | Feature | Description | Learn More |
140
+ |---------|-------------|------------|
141
+ | **Authentication** | JWT + Casbin/OSO RBAC | [Auth Guide](https://github.com/ranfysvalle02/mdb-engine/blob/main/docs/AUTHZ.md) |
142
+ | **Vector Search** | Atlas Vector Search + embeddings | [RAG Example](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/basic/interactive_rag) |
143
+ | **Memory Service** | Persistent AI memory with Mem0 | [Chat Example](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/basic/chit_chat) |
144
+ | **WebSockets** | Real-time updates from manifest | [Docs](https://github.com/ranfysvalle02/mdb-engine/blob/main/docs/ARCHITECTURE.md) |
145
+ | **Multi-App** | Secure cross-app data access | [Multi-App Example](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/advanced/multi_app) |
146
+ | **SSO** | Shared auth across apps | [Shared Auth Example](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/advanced/multi_app_shared) |
147
+
148
+ ---
149
+
150
+ ## Full Examples
151
+
152
+ Clone and run:
153
+
154
+ ```bash
155
+ git clone https://github.com/ranfysvalle02/mdb-engine.git
156
+ cd mdb-engine/examples/basic/chit_chat
157
+ docker-compose up --build
158
+ ```
159
+
160
+ ### Basic Examples
161
+
162
+ | Example | Description |
163
+ |---------|-------------|
164
+ | [chit_chat](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/basic/chit_chat) | AI chat with persistent memory |
165
+ | [interactive_rag](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/basic/interactive_rag) | RAG with vector search |
166
+ | [oso_hello_world](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/basic/oso_hello_world) | OSO Cloud authorization |
167
+ | [parallax](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/basic/parallax) | Dynamic schema generation |
168
+ | [vector_hacking](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/basic/vector_hacking) | Vector embeddings & attacks |
169
+
170
+ ### Advanced Examples
171
+
172
+ | Example | Description |
173
+ |---------|-------------|
174
+ | [simple_app](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/advanced/simple_app) | Task management with `create_app()` pattern |
175
+ | [multi_app](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/advanced/multi_app) | Multi-tenant with cross-app access |
176
+ | [multi_app_shared](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples/advanced/multi_app_shared) | SSO with shared user pool |
177
+
178
+ ---
179
+
180
+ ## Manual Setup (Alternative)
181
+
182
+ If you need more control over the FastAPI lifecycle:
183
+
184
+ ```python
185
+ from pathlib import Path
186
+ from fastapi import FastAPI
187
+ from mdb_engine import MongoDBEngine
188
+
189
+ app = FastAPI()
190
+ engine = MongoDBEngine(mongo_uri="mongodb://localhost:27017", db_name="my_database")
191
+
192
+ @app.on_event("startup")
193
+ async def startup():
194
+ await engine.initialize()
195
+ manifest = await engine.load_manifest(Path("manifest.json"))
196
+ await engine.register_app(manifest, create_indexes=True)
197
+
198
+ @app.on_event("shutdown")
199
+ async def shutdown():
200
+ await engine.shutdown()
201
+
202
+ @app.get("/items")
203
+ async def get_items():
204
+ db = engine.get_scoped_db("my_app")
205
+ return await db.items.find({}).to_list(length=10)
206
+ ```
207
+
208
+ ---
209
+
210
+ ## Links
211
+
212
+ - [GitHub Repository](https://github.com/ranfysvalle02/mdb-engine)
213
+ - [Documentation](https://github.com/ranfysvalle02/mdb-engine/tree/main/docs)
214
+ - [All Examples](https://github.com/ranfysvalle02/mdb-engine/tree/main/examples)
215
+ - [Quick Start Guide](https://github.com/ranfysvalle02/mdb-engine/blob/main/docs/QUICK_START.md)
216
+ - [Contributing](https://github.com/ranfysvalle02/mdb-engine/blob/main/CONTRIBUTING.md)
217
+
218
+ ---
219
+
220
+ **Stop building scaffolding. Start building features.**
@@ -0,0 +1,69 @@
1
+ """
2
+ MDB_ENGINE - MongoDB Engine
3
+
4
+ Enterprise-grade engine for building applications
5
+ with automatic database scoping, authentication, and resource management.
6
+
7
+ Usage:
8
+ # Simple usage
9
+ from mdb_engine import MongoDBEngine
10
+ engine = MongoDBEngine(mongo_uri=..., db_name=...)
11
+ await engine.initialize()
12
+ db = engine.get_scoped_db("my_app")
13
+
14
+ # With FastAPI integration
15
+ app = engine.create_app(slug="my_app", manifest=Path("manifest.json"))
16
+
17
+ # With Ray support (optional)
18
+ engine = MongoDBEngine(..., enable_ray=True)
19
+ """
20
+
21
+ # Authentication
22
+ from .auth import AuthorizationProvider, get_current_user, require_admin
23
+
24
+ # Optional Ray integration
25
+ # Core MongoDB Engine
26
+ from .core import (
27
+ RAY_AVAILABLE,
28
+ AppRayActor,
29
+ ManifestParser,
30
+ ManifestValidator,
31
+ MongoDBEngine,
32
+ get_ray_actor_handle,
33
+ ray_actor_decorator,
34
+ )
35
+
36
+ # Database layer
37
+ from .database import AppDB, ScopedMongoWrapper
38
+
39
+ # Index management
40
+ from .indexes import (
41
+ AsyncAtlasIndexManager,
42
+ AutoIndexManager,
43
+ run_index_creation_for_collection,
44
+ )
45
+
46
+ __version__ = "0.1.6"
47
+
48
+ __all__ = [
49
+ # Core (includes FastAPI integration and optional Ray)
50
+ "MongoDBEngine",
51
+ "ManifestValidator",
52
+ "ManifestParser",
53
+ # Ray Integration (optional - only active if Ray installed)
54
+ "RAY_AVAILABLE",
55
+ "AppRayActor",
56
+ "get_ray_actor_handle",
57
+ "ray_actor_decorator",
58
+ # Database
59
+ "ScopedMongoWrapper",
60
+ "AppDB",
61
+ # Auth
62
+ "AuthorizationProvider",
63
+ "get_current_user",
64
+ "require_admin",
65
+ # Indexes
66
+ "AsyncAtlasIndexManager",
67
+ "AutoIndexManager",
68
+ "run_index_creation_for_collection",
69
+ ]