omserv 0.0.0.dev280__py3-none-any.whl → 0.0.0.dev281__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.
- omserv/apps/inject.py +6 -25
- omserv/apps/markers.py +6 -0
- omserv/apps/routes.py +27 -2
- omserv/server/types.py +7 -7
- {omserv-0.0.0.dev280.dist-info → omserv-0.0.0.dev281.dist-info}/METADATA +2 -2
- {omserv-0.0.0.dev280.dist-info → omserv-0.0.0.dev281.dist-info}/RECORD +10 -10
- {omserv-0.0.0.dev280.dist-info → omserv-0.0.0.dev281.dist-info}/WHEEL +0 -0
- {omserv-0.0.0.dev280.dist-info → omserv-0.0.0.dev281.dist-info}/entry_points.txt +0 -0
- {omserv-0.0.0.dev280.dist-info → omserv-0.0.0.dev281.dist-info}/licenses/LICENSE +0 -0
- {omserv-0.0.0.dev280.dist-info → omserv-0.0.0.dev281.dist-info}/top_level.txt +0 -0
omserv/apps/inject.py
CHANGED
@@ -2,17 +2,15 @@ import typing as ta
|
|
2
2
|
|
3
3
|
from omlish import inject as inj
|
4
4
|
from omlish.http import sessions
|
5
|
-
from omlish.http.asgi import AsgiApp
|
6
5
|
from omlish.http.asgi import AsgiScope
|
7
6
|
|
8
7
|
from .base import SCOPE
|
9
8
|
from .markers import AppMarker
|
10
9
|
from .markers import AppMarkerProcessor
|
11
10
|
from .markers import NopAppMarkerProcessor
|
12
|
-
from .
|
13
|
-
from .routes import Handler_
|
14
|
-
from .routes import Route
|
11
|
+
from .routes import RouteHandler_
|
15
12
|
from .routes import _HandlesAppMarker
|
13
|
+
from .routes import build_route_handler_map
|
16
14
|
from .sessions import SESSION
|
17
15
|
from .sessions import _WithSessionAppMarker
|
18
16
|
from .sessions import _WithSessionAppMarkerProcessor
|
@@ -20,10 +18,10 @@ from .templates import JinjaNamespace
|
|
20
18
|
from .templates import JinjaTemplates
|
21
19
|
|
22
20
|
|
23
|
-
def bind_handler(hc: type[
|
21
|
+
def bind_handler(hc: type[RouteHandler_]) -> inj.Elemental:
|
24
22
|
return inj.as_elements(
|
25
23
|
inj.bind(hc, singleton=True),
|
26
|
-
inj.set_binder[
|
24
|
+
inj.set_binder[RouteHandler_]().bind(hc),
|
27
25
|
)
|
28
26
|
|
29
27
|
|
@@ -34,26 +32,9 @@ def bind_app_marker_processor(mc: type[AppMarker], pc: type[AppMarkerProcessor])
|
|
34
32
|
)
|
35
33
|
|
36
34
|
|
37
|
-
def _build_route_handler_map(
|
38
|
-
handlers: ta.AbstractSet[Handler_],
|
39
|
-
processors: ta.Mapping[type[AppMarker], AppMarkerProcessor],
|
40
|
-
) -> ta.Mapping[Route, AsgiApp]:
|
41
|
-
route_handlers: dict[Route, AsgiApp] = {}
|
42
|
-
for h in handlers:
|
43
|
-
for rh in h.get_route_handlers():
|
44
|
-
app = rh.handler
|
45
|
-
markers = get_app_markers(rh.handler)
|
46
|
-
for m in markers:
|
47
|
-
mp = processors[type(m)]
|
48
|
-
if mp is not None:
|
49
|
-
app = mp(app)
|
50
|
-
route_handlers[rh.route] = app
|
51
|
-
return route_handlers
|
52
|
-
|
53
|
-
|
54
35
|
def bind_route_handler_map() -> inj.Elemental:
|
55
36
|
return inj.as_elements(
|
56
|
-
inj.bind(
|
37
|
+
inj.bind(build_route_handler_map, singleton=True),
|
57
38
|
inj.map_binder[type[AppMarker], AppMarkerProcessor](),
|
58
39
|
)
|
59
40
|
|
@@ -72,7 +53,7 @@ def bind() -> inj.Elemental:
|
|
72
53
|
|
73
54
|
##
|
74
55
|
|
75
|
-
inj.set_binder[
|
56
|
+
inj.set_binder[RouteHandler_](),
|
76
57
|
)
|
77
58
|
|
78
59
|
|
omserv/apps/markers.py
CHANGED
@@ -42,3 +42,9 @@ class AppMarkerProcessor(lang.Abstract):
|
|
42
42
|
class NopAppMarkerProcessor(AppMarkerProcessor, lang.Final):
|
43
43
|
def __call__(self, app: AsgiApp) -> AsgiApp:
|
44
44
|
return app
|
45
|
+
|
46
|
+
|
47
|
+
##
|
48
|
+
|
49
|
+
|
50
|
+
AppMarkerProcessorMap: ta.TypeAlias = ta.Mapping[type[AppMarker], AppMarkerProcessor]
|
omserv/apps/routes.py
CHANGED
@@ -17,6 +17,9 @@ from .base import BASE_SERVER_URL
|
|
17
17
|
from .base import SCOPE
|
18
18
|
from .base import BaseServerUrl
|
19
19
|
from .markers import AppMarker
|
20
|
+
from .markers import AppMarkerProcessor
|
21
|
+
from .markers import AppMarkerProcessorMap
|
22
|
+
from .markers import NopAppMarkerProcessor
|
20
23
|
from .markers import append_app_marker
|
21
24
|
from .markers import get_app_markers
|
22
25
|
|
@@ -67,15 +70,20 @@ def handles(*routes: Route):
|
|
67
70
|
return inner
|
68
71
|
|
69
72
|
|
73
|
+
HANDLES_APP_MARKER_PROCESSORS: AppMarkerProcessorMap = {
|
74
|
+
_HandlesAppMarker: NopAppMarkerProcessor(),
|
75
|
+
}
|
76
|
+
|
77
|
+
|
70
78
|
##
|
71
79
|
|
72
80
|
|
73
|
-
class
|
81
|
+
class RouteHandler_(lang.Abstract): # noqa
|
74
82
|
def get_route_handlers(self) -> ta.Iterable[RouteHandler]:
|
75
83
|
return get_marked_route_handlers(self)
|
76
84
|
|
77
85
|
|
78
|
-
def get_marked_route_handlers(h:
|
86
|
+
def get_marked_route_handlers(h: RouteHandler_) -> ta.Sequence[RouteHandler]:
|
79
87
|
ret: list[RouteHandler] = []
|
80
88
|
|
81
89
|
cdct: dict[str, ta.Any] = {}
|
@@ -96,6 +104,23 @@ def get_marked_route_handlers(h: Handler_) -> ta.Sequence[RouteHandler]:
|
|
96
104
|
return ret
|
97
105
|
|
98
106
|
|
107
|
+
def build_route_handler_map(
|
108
|
+
handlers: ta.AbstractSet[RouteHandler_],
|
109
|
+
processors: ta.Mapping[type[AppMarker], AppMarkerProcessor],
|
110
|
+
) -> ta.Mapping[Route, AsgiApp]:
|
111
|
+
route_handlers: dict[Route, AsgiApp] = {}
|
112
|
+
for h in handlers:
|
113
|
+
for rh in h.get_route_handlers():
|
114
|
+
app = rh.handler
|
115
|
+
markers = get_app_markers(rh.handler)
|
116
|
+
for m in markers:
|
117
|
+
mp = processors[type(m)]
|
118
|
+
if mp is not None:
|
119
|
+
app = mp(app)
|
120
|
+
route_handlers[rh.route] = app
|
121
|
+
return route_handlers
|
122
|
+
|
123
|
+
|
99
124
|
##
|
100
125
|
|
101
126
|
|
omserv/server/types.py
CHANGED
@@ -4,13 +4,13 @@ import typing as ta
|
|
4
4
|
##
|
5
5
|
|
6
6
|
|
7
|
-
AsgiReceiveEvent: ta.TypeAlias =
|
8
|
-
AsgiSendEvent: ta.TypeAlias =
|
7
|
+
AsgiReceiveEvent: ta.TypeAlias = ta.Mapping[str, ta.Any]
|
8
|
+
AsgiSendEvent: ta.TypeAlias = ta.Mapping[str, ta.Any]
|
9
9
|
|
10
10
|
AsgiReceiveCallable: ta.TypeAlias = ta.Callable[[], ta.Awaitable[AsgiReceiveEvent]]
|
11
11
|
AsgiSendCallable: ta.TypeAlias = ta.Callable[[AsgiSendEvent], ta.Awaitable[None]]
|
12
12
|
|
13
|
-
Scope: ta.TypeAlias =
|
13
|
+
Scope: ta.TypeAlias = ta.Mapping[str, ta.Any]
|
14
14
|
AsgiFramework: ta.TypeAlias = ta.Callable[
|
15
15
|
[
|
16
16
|
Scope,
|
@@ -22,13 +22,13 @@ AsgiFramework: ta.TypeAlias = ta.Callable[
|
|
22
22
|
|
23
23
|
LifespanScope: ta.TypeAlias = Scope
|
24
24
|
|
25
|
-
HttpResponseStartEvent: ta.TypeAlias =
|
25
|
+
HttpResponseStartEvent: ta.TypeAlias = ta.Mapping[str, ta.Any]
|
26
26
|
HttpScope: ta.TypeAlias = Scope
|
27
27
|
WebsocketScope: ta.TypeAlias = Scope
|
28
28
|
|
29
|
-
WebsocketAcceptEvent: ta.TypeAlias =
|
30
|
-
WebsocketResponseBodyEvent: ta.TypeAlias =
|
31
|
-
WebsocketResponseStartEvent: ta.TypeAlias =
|
29
|
+
WebsocketAcceptEvent: ta.TypeAlias = ta.Mapping[str, ta.Any]
|
30
|
+
WebsocketResponseBodyEvent: ta.TypeAlias = ta.Mapping[str, ta.Any]
|
31
|
+
WebsocketResponseStartEvent: ta.TypeAlias = ta.Mapping[str, ta.Any]
|
32
32
|
|
33
33
|
|
34
34
|
##
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: omserv
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev281
|
4
4
|
Summary: omserv
|
5
5
|
Author: wrmsr
|
6
6
|
License: BSD-3-Clause
|
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
|
|
12
12
|
Classifier: Operating System :: POSIX
|
13
13
|
Requires-Python: >=3.12
|
14
14
|
License-File: LICENSE
|
15
|
-
Requires-Dist: omlish==0.0.0.
|
15
|
+
Requires-Dist: omlish==0.0.0.dev281
|
16
16
|
Provides-Extra: all
|
17
17
|
Requires-Dist: h11~=0.14; extra == "all"
|
18
18
|
Requires-Dist: h2~=4.2; extra == "all"
|
@@ -3,9 +3,9 @@ omserv/__about__.py,sha256=w4jEBHhEVT7VZlwqMAh-4SecngU8xM6rehzWqi5ULZM,765
|
|
3
3
|
omserv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
omserv/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
5
|
omserv/apps/base.py,sha256=KSwxbC0_fY87_DucvpEOHG6gZ2wL78D-N3We8RTEU4Q,385
|
6
|
-
omserv/apps/inject.py,sha256=
|
7
|
-
omserv/apps/markers.py,sha256=
|
8
|
-
omserv/apps/routes.py,sha256=
|
6
|
+
omserv/apps/inject.py,sha256=ora2yPGl8vz1vdLNKQYa_NuUHyMUo9JRHkMNbvN6joA,2083
|
7
|
+
omserv/apps/markers.py,sha256=sLTd6d2HYH_lc37nDtDQK_ej10G9qeg4m_TC_v0IW6k,963
|
8
|
+
omserv/apps/routes.py,sha256=n7LBAzkclUlWfhk2e2cv0GR5EkMDUpjqhyXWMWwTeVY,4604
|
9
9
|
omserv/apps/sessions.py,sha256=glruQSbOSbCYLPp6nDRNSHCyp5hj4oiOPhh3R0F9BTM,1537
|
10
10
|
omserv/apps/templates.py,sha256=PBRZHIF9UbnFnq-4EC6RmPeRkeH8lCBbpJkSdseHs6A,2125
|
11
11
|
omserv/nginx/__init__.py,sha256=2d63LCGFA2qS7gdl2nCvNPmQWXNICu19wZIihQJPHCs,48
|
@@ -33,7 +33,7 @@ omserv/server/server.py,sha256=hgUTfZAUwF7V-HdsdV98KbYmE1IRKmEO3B1LlKTiPWc,5223
|
|
33
33
|
omserv/server/sockets.py,sha256=lwqNP7URlp605ibsjHzp0pc-lyjcyTu-hD-uyojLUYk,3389
|
34
34
|
omserv/server/ssl.py,sha256=gmB5ecM8Mck-YtGYF8pb2dwFdjABVGzERFCDzM9lBck,1483
|
35
35
|
omserv/server/taskspawner.py,sha256=ljzF26UPtnp7GLAY_BvjzuwCoCO9aL7TKLwRNTmUy1M,3008
|
36
|
-
omserv/server/types.py,sha256=
|
36
|
+
omserv/server/types.py,sha256=02GcS_zDxBzkleaptwr7kT7viefNh7fhFJixPdDpL_M,2059
|
37
37
|
omserv/server/workercontext.py,sha256=4rcLuGsyiU7URO7T_eHylOBPPNUS9C23QfEUVyJUtIY,1200
|
38
38
|
omserv/server/protocols/__init__.py,sha256=Ryu2PDZ1TUI6F2l-HBEYgyzZ7wHqE6VmjqnS0tIvmQI,47
|
39
39
|
omserv/server/protocols/h11.py,sha256=_q_paD-ff0AWJEPaNK-6MUsQVtYRiALnWGwFyM3D0KU,11976
|
@@ -46,9 +46,9 @@ omserv/server/streams/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
46
46
|
omserv/server/streams/httpstream.py,sha256=0DeiAPLGbEGNa0fHTs8lUpi_CFZs4M5_QB-TiS8mobQ,8015
|
47
47
|
omserv/server/streams/utils.py,sha256=aMOrqWIg_Hht5W4kLg3y7oR5AEkVvMrZhyjzo6U5owE,1527
|
48
48
|
omserv/server/streams/wsstream.py,sha256=3Vyzox7dCE1tDSXjb6xBubWo41ZF9d38Hrsrlj6h1J8,15482
|
49
|
-
omserv-0.0.0.
|
50
|
-
omserv-0.0.0.
|
51
|
-
omserv-0.0.0.
|
52
|
-
omserv-0.0.0.
|
53
|
-
omserv-0.0.0.
|
54
|
-
omserv-0.0.0.
|
49
|
+
omserv-0.0.0.dev281.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
50
|
+
omserv-0.0.0.dev281.dist-info/METADATA,sha256=6kaceg5VdEC213N0KXR4OlC9d5GxYFXD56bg3bB74yk,1005
|
51
|
+
omserv-0.0.0.dev281.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
52
|
+
omserv-0.0.0.dev281.dist-info/entry_points.txt,sha256=ivSrdA_ahEbI-eVMu-XZS-z4VrnQISvpecIkOqC9zFM,35
|
53
|
+
omserv-0.0.0.dev281.dist-info/top_level.txt,sha256=HXehpnxeKscKNULzKNzZ27oNawBrsh1PaNAirbX-XNA,7
|
54
|
+
omserv-0.0.0.dev281.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|