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.
@@ -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
- """Normalize origin handling localhost variants."""
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 = re.sub(
481
- r"://(0\.0\.0\.0|127\.0\.0\.1|localhost|::1)",
482
- "://localhost",
483
- orig.lower(),
484
- flags=re.IGNORECASE,
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.2
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
  [![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)
73
73
  [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](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=12PLLmXDANoV30dDxw5To9taKAZnIMolRoV1Vwdjkwk,3618
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=MJuYQhZ9ZGzXlip1ha5zba9Rvn04HDPWahJFJH81Q2s,14107
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=cp-fxcijZN4o4taBTP2sR57Y1A-ZId0Qga7AhgrU48o,811
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=wSJ99FP3NRUejGCXliwi9fW_pVZPpLjdUMG8FsU5Kms,185252
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=N4varRswExBYahAgPfcPtNhqszOjm0JQ0u7r7mfFyqM,15018
57
- mdb_engine/core/types.py,sha256=u0LDGE4A3txGDlc9PNoQX8jwVYFjJSw4K5LDnpatsNc,11254
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=Xa7pYut4zgZyRcb2TALcucMVAHCAu9uNGBKSwE7stY8,14764
78
- mdb_engine/memory/__init__.py,sha256=e4kAYgxd_-WAH8GovTwjEBO9hvASu_kXEupMgksAL-U,1008
79
- mdb_engine/memory/service.py,sha256=QWMNZfMaS3-SPZZswnO410C4-3ibAOUw0LH93WjZLsM,29550
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=jgdLsrSOKyBiY4yzE7XYXV1MOChLw2CIWpT6RDL23hk,51649
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.2.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
95
- mdb_engine-0.7.2.dist-info/METADATA,sha256=NkjWW4qrAnJs_T4NxvCvQvZkln4vRYSRa101sBbsXY4,19695
96
- mdb_engine-0.7.2.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
97
- mdb_engine-0.7.2.dist-info/entry_points.txt,sha256=INCbYdFbBzJalwPwxliEzLmPfR57IvQ7RAXG_pn8cL8,48
98
- mdb_engine-0.7.2.dist-info/top_level.txt,sha256=PH0UEBwTtgkm2vWvC9He_EOMn7hVn_Wg_Jyc0SmeO8k,11
99
- mdb_engine-0.7.2.dist-info/RECORD,,
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,,