dmart 1.4.41.post38__py3-none-any.whl → 1.4.41.post39__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.
- dmart/main.py +27 -9
- {dmart-1.4.41.post38.dist-info → dmart-1.4.41.post39.dist-info}/METADATA +1 -1
- {dmart-1.4.41.post38.dist-info → dmart-1.4.41.post39.dist-info}/RECORD +6 -6
- {dmart-1.4.41.post38.dist-info → dmart-1.4.41.post39.dist-info}/WHEEL +0 -0
- {dmart-1.4.41.post38.dist-info → dmart-1.4.41.post39.dist-info}/entry_points.txt +0 -0
- {dmart-1.4.41.post38.dist-info → dmart-1.4.41.post39.dist-info}/top_level.txt +0 -0
dmart/main.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env -S BACKEND_ENV=config.env python3
|
|
2
2
|
""" Main module """
|
|
3
3
|
import socket
|
|
4
|
+
import mimetypes
|
|
4
5
|
from starlette.datastructures import UploadFile
|
|
5
6
|
from contextlib import asynccontextmanager
|
|
6
7
|
import asyncio
|
|
@@ -47,33 +48,50 @@ from pathlib import Path
|
|
|
47
48
|
class SPAStaticFiles(StaticFiles):
|
|
48
49
|
async def get_response(self, path: str, scope) -> Response:
|
|
49
50
|
if path == "" or path == "index.html":
|
|
50
|
-
return await self.
|
|
51
|
+
return await self.serve_file("index.html", "text/html")
|
|
52
|
+
|
|
53
|
+
ext = os.path.splitext(path)[1]
|
|
54
|
+
if ext in [".js", ".css", ".html"]:
|
|
55
|
+
try:
|
|
56
|
+
return await self.serve_file(path)
|
|
57
|
+
except StarletteHTTPException:
|
|
58
|
+
pass
|
|
51
59
|
|
|
52
60
|
try:
|
|
53
61
|
return await super().get_response(path, scope)
|
|
54
62
|
except StarletteHTTPException as ex:
|
|
55
63
|
if ex.status_code == 404 and path != "index.html" and not os.path.splitext(path)[1]:
|
|
56
64
|
try:
|
|
57
|
-
return await self.
|
|
65
|
+
return await self.serve_file("index.html", "text/html")
|
|
58
66
|
except Exception:
|
|
59
67
|
pass
|
|
60
68
|
raise ex
|
|
61
69
|
|
|
62
|
-
async def
|
|
63
|
-
|
|
64
|
-
if not os.path.exists(
|
|
70
|
+
async def serve_file(self, path, media_type=None):
|
|
71
|
+
full_path = os.path.join(self.directory, path)
|
|
72
|
+
if not os.path.exists(full_path):
|
|
65
73
|
raise StarletteHTTPException(status_code=404)
|
|
66
74
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
75
|
+
if media_type is None:
|
|
76
|
+
media_type, _ = mimetypes.guess_type(full_path)
|
|
77
|
+
|
|
78
|
+
try:
|
|
79
|
+
with open(full_path, "r", encoding="utf-8") as f:
|
|
80
|
+
content = f.read()
|
|
81
|
+
except UnicodeDecodeError:
|
|
82
|
+
return FileResponse(full_path, media_type=media_type)
|
|
83
|
+
|
|
70
84
|
target_url = settings.cxb_url
|
|
71
85
|
if not target_url.endswith("/"):
|
|
72
86
|
target_url += "/"
|
|
73
87
|
|
|
74
88
|
content = content.replace("/cxb/", target_url)
|
|
75
89
|
|
|
76
|
-
|
|
90
|
+
cxb_name = settings.cxb_url.strip("/")
|
|
91
|
+
if cxb_name != "cxb":
|
|
92
|
+
content = content.replace('"cxb"', f'"{cxb_name}"')
|
|
93
|
+
|
|
94
|
+
return Response(content, media_type=media_type)
|
|
77
95
|
|
|
78
96
|
|
|
79
97
|
@asynccontextmanager
|
|
@@ -14,7 +14,7 @@ dmart/hypercorn_config.toml,sha256=-eryppEG8HBOM_KbFc4dTQePnpyfoW9ZG5aUATU_6yM,5
|
|
|
14
14
|
dmart/info.json,sha256=1VYb3TIoWeUp8-9IPkNkfqHIb3znxlrd8qa7oBl3_No,123
|
|
15
15
|
dmart/login_creds.sh,sha256=Aht1LwL11uzR13sa8p3BdeUCprIa9tq0vzOoplJjH5U,235
|
|
16
16
|
dmart/login_creds.sh.sample,sha256=Sb43HNNn1g11rrJrtDsPgAxcXu3_wJvdNn--8S62dTE,227
|
|
17
|
-
dmart/main.py,sha256=
|
|
17
|
+
dmart/main.py,sha256=nvpxQ8Ht0FCl5opAxDVGpYD7atmfSD-NopeefQKrtrs,21407
|
|
18
18
|
dmart/manifest.sh,sha256=K3mY5MsUlrTyHa5cARslkShegvXh-UeqJcE2UZobdrE,544
|
|
19
19
|
dmart/migrate.py,sha256=hn1MZoVby_Jjqhc7y3CrLcGD619QmVZv3PONNvO7VKQ,665
|
|
20
20
|
dmart/password_gen.py,sha256=xjx8wi105ZYvhLBBQj7_rugACpxifGXHse6f7YlGXWQ,196
|
|
@@ -483,8 +483,8 @@ dmart/utils/ticket_sys_utils.py,sha256=9QAlW2iiy8KyxQRBDj_WmzS5kKb0aYJmGwd4qzmGV
|
|
|
483
483
|
dmart/utils/web_notifier.py,sha256=QM87VVid2grC5lK3NdS1yzz0z1wXljr4GChJOeK86W4,843
|
|
484
484
|
dmart/utils/templates/activation.html.j2,sha256=XAMKCdoqONoc4ZQucD0yV-Pg5DlHHASZrTVItNS-iBE,640
|
|
485
485
|
dmart/utils/templates/reminder.html.j2,sha256=aoS8bTs56q4hjAZKsb0jV9c-PIURBELuBOpT_qPZNVU,639
|
|
486
|
-
dmart-1.4.41.
|
|
487
|
-
dmart-1.4.41.
|
|
488
|
-
dmart-1.4.41.
|
|
489
|
-
dmart-1.4.41.
|
|
490
|
-
dmart-1.4.41.
|
|
486
|
+
dmart-1.4.41.post39.dist-info/METADATA,sha256=AIuQR0p6jubbZBtSkC-SMphgUZ55uipsvrkzsivFqyM,839
|
|
487
|
+
dmart-1.4.41.post39.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
488
|
+
dmart-1.4.41.post39.dist-info/entry_points.txt,sha256=N832M4wG8d2GDw1xztKRVM3TnxpY2QDzvdFE8XaWaG8,43
|
|
489
|
+
dmart-1.4.41.post39.dist-info/top_level.txt,sha256=zJo4qk9fUW0BGIR9f4DCfpxaXbvQXH9izIOom6JsyAo,6
|
|
490
|
+
dmart-1.4.41.post39.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|