mdb-engine 0.7.2__py3-none-any.whl → 0.7.4__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 +1 -9
- mdb_engine/cli/main.py +1 -1
- mdb_engine/core/engine.py +3 -2
- mdb_engine/core/service_initialization.py +5 -4
- mdb_engine/core/types.py +2 -2
- mdb_engine/dependencies.py +3 -3
- mdb_engine/memory/README.md +145 -21
- mdb_engine/memory/__init__.py +9 -0
- mdb_engine/memory/base.py +194 -0
- mdb_engine/memory/service.py +323 -187
- mdb_engine/routing/websockets.py +45 -6
- {mdb_engine-0.7.2.dist-info → mdb_engine-0.7.4.dist-info}/METADATA +1 -15
- {mdb_engine-0.7.2.dist-info → mdb_engine-0.7.4.dist-info}/RECORD +17 -16
- {mdb_engine-0.7.2.dist-info → mdb_engine-0.7.4.dist-info}/WHEEL +0 -0
- {mdb_engine-0.7.2.dist-info → mdb_engine-0.7.4.dist-info}/entry_points.txt +0 -0
- {mdb_engine-0.7.2.dist-info → mdb_engine-0.7.4.dist-info}/licenses/LICENSE +0 -0
- {mdb_engine-0.7.2.dist-info → mdb_engine-0.7.4.dist-info}/top_level.txt +0 -0
mdb_engine/routing/websockets.py
CHANGED
|
@@ -472,19 +472,58 @@ async def _validate_websocket_origin_in_handler(websocket: Any, app_slug: str) -
|
|
|
472
472
|
|
|
473
473
|
# Normalize origin for comparison
|
|
474
474
|
def normalize_origin(orig: str) -> str:
|
|
475
|
-
"""
|
|
475
|
+
"""
|
|
476
|
+
Normalize origin handling localhost variants and protocol differences.
|
|
477
|
+
|
|
478
|
+
Handles:
|
|
479
|
+
- Protocol conversion: ws/wss -> http/https (browsers send http/https)
|
|
480
|
+
- Localhost normalization: 127.0.0.1, 0.0.0.0, ::1 -> localhost
|
|
481
|
+
- Docker IP normalization: container IPs -> localhost (in development)
|
|
482
|
+
- Port normalization: removes :80 and :443
|
|
483
|
+
"""
|
|
476
484
|
if not orig:
|
|
477
485
|
return orig
|
|
486
|
+
import os
|
|
478
487
|
import re
|
|
479
488
|
|
|
480
|
-
normalized =
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
489
|
+
normalized = orig.lower()
|
|
490
|
+
|
|
491
|
+
# Normalize protocol: convert ws/wss to http/https for comparison
|
|
492
|
+
# WebSocket origins come as http/https from browsers, but configs may use ws/wss
|
|
493
|
+
normalized = re.sub(r"^ws://", "http://", normalized)
|
|
494
|
+
normalized = re.sub(r"^wss://", "https://", normalized)
|
|
495
|
+
|
|
496
|
+
# Check if we're in development/Docker environment
|
|
497
|
+
is_dev = (
|
|
498
|
+
os.getenv("ENVIRONMENT", "").lower() in ["development", "dev"]
|
|
499
|
+
or os.getenv("G_NOME_ENV", "").lower() in ["development", "dev"]
|
|
500
|
+
or os.path.exists("/.dockerenv") # Docker container indicator
|
|
485
501
|
)
|
|
502
|
+
|
|
503
|
+
# Normalize localhost variants
|
|
504
|
+
# In development/Docker, also normalize common Docker IP ranges to localhost
|
|
505
|
+
if is_dev:
|
|
506
|
+
# Match localhost, 127.0.0.1, 0.0.0.0, ::1, and Docker container IPs
|
|
507
|
+
# Docker typically uses 172.17.0.0/16 or 172.20.0.0/16
|
|
508
|
+
normalized = re.sub(
|
|
509
|
+
r"://(0\.0\.0\.0|127\.0\.0\.1|localhost|::1|172\.(17|20)\.\d+\.\d+)",
|
|
510
|
+
"://localhost",
|
|
511
|
+
normalized,
|
|
512
|
+
flags=re.IGNORECASE,
|
|
513
|
+
)
|
|
514
|
+
else:
|
|
515
|
+
# Production: only normalize standard localhost variants
|
|
516
|
+
normalized = re.sub(
|
|
517
|
+
r"://(0\.0\.0\.0|127\.0\.0\.1|localhost|::1)",
|
|
518
|
+
"://localhost",
|
|
519
|
+
normalized,
|
|
520
|
+
flags=re.IGNORECASE,
|
|
521
|
+
)
|
|
522
|
+
|
|
523
|
+
# Remove default ports
|
|
486
524
|
normalized = re.sub(r":80$", "", normalized)
|
|
487
525
|
normalized = re.sub(r":443$", "", normalized)
|
|
526
|
+
|
|
488
527
|
return normalized.rstrip("/")
|
|
489
528
|
|
|
490
529
|
normalized_origin = normalize_origin(origin)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mdb-engine
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.4
|
|
4
4
|
Summary: MongoDB Engine
|
|
5
5
|
Home-page: https://github.com/ranfysvalle02/mdb-engine
|
|
6
6
|
Author: Fabian Valle
|
|
@@ -72,20 +72,6 @@ Dynamic: requires-python
|
|
|
72
72
|
[](https://www.python.org/downloads/)
|
|
73
73
|
[](https://opensource.org/licenses/AGPL-3.0)
|
|
74
74
|
|
|
75
|
-
## 🎉 What's New in v0.7.0
|
|
76
|
-
|
|
77
|
-
**FastAPI Native WebSocket Support**: MDB-Engine now uses FastAPI's `APIRouter` approach for WebSocket registration in both single-app and multi-app modes. This provides:
|
|
78
|
-
|
|
79
|
-
- ✅ **Full FastAPI Feature Support**: Dependency injection, OpenAPI documentation, request/response models
|
|
80
|
-
- ✅ **Consistency**: Same registration pattern across single-app and multi-app modes
|
|
81
|
-
- ✅ **Best Practices**: Follows FastAPI's recommended WebSocket registration patterns
|
|
82
|
-
- ✅ **Better Maintainability**: Uses FastAPI abstractions instead of low-level Starlette APIs
|
|
83
|
-
- ✅ **Route Priority**: WebSocket routes registered before mounted apps ensure proper routing
|
|
84
|
-
|
|
85
|
-
**Value**: This change ensures WebSocket endpoints benefit from all FastAPI features, making your code more maintainable and consistent with FastAPI best practices.
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
|
|
89
75
|
## 🎯 manifest.json: The Key to Everything
|
|
90
76
|
|
|
91
77
|
**`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.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
mdb_engine/README.md,sha256=T3EFGcPopY9LslYW3lxgG3hohWkAOmBNbYG0FDMUJiY,3502
|
|
2
|
-
mdb_engine/__init__.py,sha256=
|
|
2
|
+
mdb_engine/__init__.py,sha256=OkNHx17I4f8jI5IAJGK0HbSTrZrUVnl1QlvtPZLri-I,3097
|
|
3
3
|
mdb_engine/config.py,sha256=DTAyxfKB8ogyI0v5QR9Y-SJOgXQr_eDBCKxNBSqEyLc,7269
|
|
4
4
|
mdb_engine/constants.py,sha256=eaotvW57TVOg7rRbLziGrVNoP7adgw_G9iVByHezc_A,7837
|
|
5
|
-
mdb_engine/dependencies.py,sha256=
|
|
5
|
+
mdb_engine/dependencies.py,sha256=F2_hbtK-lyeqB_iPeJVCh8jFbHi7sx0fduCUCNCKoUc,14128
|
|
6
6
|
mdb_engine/exceptions.py,sha256=NkBSdTBNP9bVTtI6w6mAoEfeVZDq-Bg7vCF2L26ZDZo,8442
|
|
7
7
|
mdb_engine/auth/ARCHITECTURE.md,sha256=JXZsjEIpNz4Szk18KaOiEabhEuz1pmYWXQRN-EJEHDM,4076
|
|
8
8
|
mdb_engine/auth/README.md,sha256=IVlUOat96V3yM6wk4T-u4GxJ4-WF05eBSJBlvIexyBo,37285
|
|
@@ -35,7 +35,7 @@ mdb_engine/auth/utils.py,sha256=YkexCo0xV37mpOJUI32cntRHVOUUS7r19TIMPWHcgpA,2734
|
|
|
35
35
|
mdb_engine/auth/websocket_sessions.py,sha256=7eFNagY2K3Rp1x7d_cO5JcpT-DrYkc__cmVhl6pAC2M,15081
|
|
36
36
|
mdb_engine/auth/websocket_tickets.py,sha256=VoIArcnQBtYqXRMs-5m7NSvCJB1dEeHrLl7j7yG-H-A,9887
|
|
37
37
|
mdb_engine/cli/__init__.py,sha256=PANRi4THmL34d1mawlqxIrnuItXMdqoMTq5Z1zHd7rM,301
|
|
38
|
-
mdb_engine/cli/main.py,sha256=
|
|
38
|
+
mdb_engine/cli/main.py,sha256=4etDTeg4DIPQQ5HdWIwcpg9FWLx21NXF6f2fj4xG8gQ,811
|
|
39
39
|
mdb_engine/cli/utils.py,sha256=bNRGJgdzxUjXAOVe1aoxWJ5M_IqtAE-eW4pfAkwiDDM,2760
|
|
40
40
|
mdb_engine/cli/commands/__init__.py,sha256=ZSzMhKdV9ILD5EbOSxDV9nURHo1e4bQ0c8AWpqsTEqM,115
|
|
41
41
|
mdb_engine/cli/commands/generate.py,sha256=VEcn7qNQkIPQlLEK3oXUBgYMwD-G0FyomXQcWTtKsbs,17304
|
|
@@ -48,13 +48,13 @@ mdb_engine/core/app_registration.py,sha256=w7wjrlNQsEekuDQkG6HM4Z5t00E65baEzncnh
|
|
|
48
48
|
mdb_engine/core/app_secrets.py,sha256=bo-syg9UUATibNyXEZs-0TTYWG-JaY-2S0yNSGA12n0,10524
|
|
49
49
|
mdb_engine/core/connection.py,sha256=XnwuPG34pJ7kJGJ84T0mhj1UZ6_CLz_9qZf6NRYGIS8,8346
|
|
50
50
|
mdb_engine/core/encryption.py,sha256=RZ5LPF5g28E3ZBn6v1IMw_oas7u9YGFtBcEj8lTi9LM,7515
|
|
51
|
-
mdb_engine/core/engine.py,sha256=
|
|
51
|
+
mdb_engine/core/engine.py,sha256=tzR5Gh5wTv9ACPYF7Z7aaAUInbF0l0Dtj2HrMB4VFes,185326
|
|
52
52
|
mdb_engine/core/index_management.py,sha256=9-r7MIy3JnjQ35sGqsbj8K_I07vAUWtAVgSWC99lJcE,5555
|
|
53
53
|
mdb_engine/core/manifest.py,sha256=D3OGRjm1It8dmS3IMoxHckHUerhs5PtcQgPz8o5ZL9w,140785
|
|
54
54
|
mdb_engine/core/ray_integration.py,sha256=csAgICl2g7Plqy4N49MJU1Ca-lr8KZznAouXMMRwhG8,13706
|
|
55
55
|
mdb_engine/core/seeding.py,sha256=c5IhdwlqUf_4Q5FFTAhPLaHPaUr_Txo3z_DUwZmWsFs,6421
|
|
56
|
-
mdb_engine/core/service_initialization.py,sha256=
|
|
57
|
-
mdb_engine/core/types.py,sha256=
|
|
56
|
+
mdb_engine/core/service_initialization.py,sha256=LVCbc911YA07cTdy4UbPC7eho3L_Ub_8aX-HIp4MHq4,15145
|
|
57
|
+
mdb_engine/core/types.py,sha256=MAFAqIR-Oj8CF24jlVnOQevrlXOcME3npIgRAzfZXcA,11254
|
|
58
58
|
mdb_engine/database/README.md,sha256=-31mVxBeVQaYsF3AD1-gQbD2NCYVcPjdFoA6sZ6b02Y,19354
|
|
59
59
|
mdb_engine/database/__init__.py,sha256=rrc3eZFli3K2zrvVdDbMBi8YkmoHYzP6JNT0AUBE5VU,981
|
|
60
60
|
mdb_engine/database/abstraction.py,sha256=H6f2WYY80r3onqN6s139uDSyG9W_QpadaoQ84hJuG1E,23438
|
|
@@ -74,9 +74,10 @@ mdb_engine/indexes/README.md,sha256=r7duq-1vtqHhBk1cwoBMYYh_dfTzxiaQaPE3mLB_3JQ,
|
|
|
74
74
|
mdb_engine/indexes/__init__.py,sha256=9QFJ6qo_yD26dZcKyKjj-hhesFpaomBt-mWTtYTQvqc,613
|
|
75
75
|
mdb_engine/indexes/helpers.py,sha256=tJHqDm18jKLrW-P2ofmnUnaf4_-V5xDLjqP_WU8W9MM,4190
|
|
76
76
|
mdb_engine/indexes/manager.py,sha256=ekrYBfKD-GOBpZMjXIZWSQ7UPLgrD5BINYzVteWkSI8,32508
|
|
77
|
-
mdb_engine/memory/README.md,sha256=
|
|
78
|
-
mdb_engine/memory/__init__.py,sha256=
|
|
79
|
-
mdb_engine/memory/
|
|
77
|
+
mdb_engine/memory/README.md,sha256=3NqI-Sm8Cy-4lsU1wAWxSg92XpRFK19OfDU_dLo3go0,20581
|
|
78
|
+
mdb_engine/memory/__init__.py,sha256=VEB8PuNBB6q1mSlIYXv9xWt14YmxdiSV5D9hrgmMW94,1328
|
|
79
|
+
mdb_engine/memory/base.py,sha256=bI1Rl14mEAsRSMKe8_3jxzrs-N8LGdYWPwXXRziRDLs,5759
|
|
80
|
+
mdb_engine/memory/service.py,sha256=9uReFG5FaTIs7Fl6Kz7sXES4Uj_4ao7bgcfs32Nvd9U,37164
|
|
80
81
|
mdb_engine/observability/README.md,sha256=CMgQaC1H8ESmCitfbhJifz6-XoXH_FPNE4MvuZ-oFas,13085
|
|
81
82
|
mdb_engine/observability/__init__.py,sha256=jjLsrW6Gy2ayrbfLrgHsDB61NxWWkYLHwv0q-N3fxjA,1213
|
|
82
83
|
mdb_engine/observability/health.py,sha256=ORjxF_rHYA9vCoxUqel5p0n9g3PLmHsHQn68Q402b6g,9212
|
|
@@ -88,12 +89,12 @@ mdb_engine/repositories/mongo.py,sha256=Wg32_6v0KHAHumhz5z8QkoqJRWAMJFA7Y2lYIJ7L
|
|
|
88
89
|
mdb_engine/repositories/unit_of_work.py,sha256=XvmwGOspEDj4hsfOULPsQKjB1QZqh83TJo6vGV4tiqU,5118
|
|
89
90
|
mdb_engine/routing/README.md,sha256=zk-Wux-QpuWWhprfVeiUREv8PEDJZNgh2QblXIa4v4M,14201
|
|
90
91
|
mdb_engine/routing/__init__.py,sha256=reupjHi_RTc2ZBA4AH5XzobAmqy4EQIsfSUcTkFknUM,2438
|
|
91
|
-
mdb_engine/routing/websockets.py,sha256=
|
|
92
|
+
mdb_engine/routing/websockets.py,sha256=w0m1XMpXKPpPrEBcZNIj8B8PwWeTNrseUZE1P8cipdM,53441
|
|
92
93
|
mdb_engine/utils/__init__.py,sha256=lDxQSGqkV4fVw5TWIk6FA6_eey_ZnEtMY0fir3cpAe8,236
|
|
93
94
|
mdb_engine/utils/mongo.py,sha256=Oqtv4tQdpiiZzrilGLEYQPo8Vmh8WsTQypxQs8Of53s,3369
|
|
94
|
-
mdb_engine-0.7.
|
|
95
|
-
mdb_engine-0.7.
|
|
96
|
-
mdb_engine-0.7.
|
|
97
|
-
mdb_engine-0.7.
|
|
98
|
-
mdb_engine-0.7.
|
|
99
|
-
mdb_engine-0.7.
|
|
95
|
+
mdb_engine-0.7.4.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
|
|
96
|
+
mdb_engine-0.7.4.dist-info/METADATA,sha256=T67AUeMaWC1ybxcQRAbPlYgKv9S5yWOJpWsIGCJVyrI,18843
|
|
97
|
+
mdb_engine-0.7.4.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
98
|
+
mdb_engine-0.7.4.dist-info/entry_points.txt,sha256=INCbYdFbBzJalwPwxliEzLmPfR57IvQ7RAXG_pn8cL8,48
|
|
99
|
+
mdb_engine-0.7.4.dist-info/top_level.txt,sha256=PH0UEBwTtgkm2vWvC9He_EOMn7hVn_Wg_Jyc0SmeO8k,11
|
|
100
|
+
mdb_engine-0.7.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|