omserv 0.0.0.dev280__tar.gz → 0.0.0.dev281__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 (60) hide show
  1. {omserv-0.0.0.dev280/omserv.egg-info → omserv-0.0.0.dev281}/PKG-INFO +2 -2
  2. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/apps/inject.py +6 -25
  3. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/apps/markers.py +6 -0
  4. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/apps/routes.py +27 -2
  5. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/types.py +7 -7
  6. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281/omserv.egg-info}/PKG-INFO +2 -2
  7. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv.egg-info/requires.txt +1 -1
  8. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/pyproject.toml +2 -2
  9. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/LICENSE +0 -0
  10. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/MANIFEST.in +0 -0
  11. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/README.rst +0 -0
  12. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/.manifests.json +0 -0
  13. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/__about__.py +0 -0
  14. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/__init__.py +0 -0
  15. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/apps/__init__.py +0 -0
  16. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/apps/base.py +0 -0
  17. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/apps/sessions.py +0 -0
  18. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/apps/templates.py +0 -0
  19. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/nginx/__init__.py +0 -0
  20. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/nginx/build.py +0 -0
  21. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/nginx/logs.py +0 -0
  22. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/nginx/patches/__init__.py +0 -0
  23. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/nginx/patches/nginx-1.27.4_http_status.patch +0 -0
  24. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/nginx/stubstatus.py +0 -0
  25. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/nodes/__init__.py +0 -0
  26. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/nodes/models.py +0 -0
  27. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/nodes/registry.py +0 -0
  28. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/nodes/sql.py +0 -0
  29. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/LICENSE +0 -0
  30. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/__init__.py +0 -0
  31. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/config.py +0 -0
  32. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/debug.py +0 -0
  33. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/default.py +0 -0
  34. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/events.py +0 -0
  35. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/headers.py +0 -0
  36. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/inject.py +0 -0
  37. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/lifespans.py +0 -0
  38. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/listener.py +0 -0
  39. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/multiprocess.py +0 -0
  40. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/protocols/__init__.py +0 -0
  41. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/protocols/h11.py +0 -0
  42. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/protocols/h2.py +0 -0
  43. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/protocols/protocols.py +0 -0
  44. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/protocols/types.py +0 -0
  45. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/resources/__init__.py +0 -0
  46. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/resources/favicon.ico +0 -0
  47. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/server.py +0 -0
  48. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/sockets.py +0 -0
  49. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/ssl.py +0 -0
  50. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/streams/__init__.py +0 -0
  51. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/streams/httpstream.py +0 -0
  52. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/streams/utils.py +0 -0
  53. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/streams/wsstream.py +0 -0
  54. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/taskspawner.py +0 -0
  55. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv/server/workercontext.py +0 -0
  56. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv.egg-info/SOURCES.txt +0 -0
  57. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv.egg-info/dependency_links.txt +0 -0
  58. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv.egg-info/entry_points.txt +0 -0
  59. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/omserv.egg-info/top_level.txt +0 -0
  60. {omserv-0.0.0.dev280 → omserv-0.0.0.dev281}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omserv
3
- Version: 0.0.0.dev280
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.dev280
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"
@@ -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 .markers import get_app_markers
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[Handler_]) -> inj.Elemental:
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[Handler_]().bind(hc),
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(_build_route_handler_map, singleton=True),
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[Handler_](),
56
+ inj.set_binder[RouteHandler_](),
76
57
  )
77
58
 
78
59
 
@@ -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]
@@ -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 Handler_(lang.Abstract): # noqa
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: Handler_) -> ta.Sequence[RouteHandler]:
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
 
@@ -4,13 +4,13 @@ import typing as ta
4
4
  ##
5
5
 
6
6
 
7
- AsgiReceiveEvent: ta.TypeAlias = dict[str, ta.Any]
8
- AsgiSendEvent: ta.TypeAlias = dict[str, ta.Any]
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 = dict[str, ta.Any]
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 = dict[str, ta.Any]
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 = dict[str, ta.Any]
30
- WebsocketResponseBodyEvent: ta.TypeAlias = dict[str, ta.Any]
31
- WebsocketResponseStartEvent: ta.TypeAlias = dict[str, ta.Any]
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.dev280
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.dev280
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"
@@ -1,4 +1,4 @@
1
- omlish==0.0.0.dev280
1
+ omlish==0.0.0.dev281
2
2
 
3
3
  [all]
4
4
  h11~=0.14
@@ -12,7 +12,7 @@ authors = [
12
12
  urls = {source = 'https://github.com/wrmsr/omlish'}
13
13
  license = {text = 'BSD-3-Clause'}
14
14
  requires-python = '>=3.12'
15
- version = '0.0.0.dev280'
15
+ version = '0.0.0.dev281'
16
16
  classifiers = [
17
17
  'License :: OSI Approved :: BSD License',
18
18
  'Development Status :: 2 - Pre-Alpha',
@@ -22,7 +22,7 @@ classifiers = [
22
22
  ]
23
23
  description = 'omserv'
24
24
  dependencies = [
25
- 'omlish == 0.0.0.dev280',
25
+ 'omlish == 0.0.0.dev281',
26
26
  ]
27
27
 
28
28
  [project.optional-dependencies]
File without changes
File without changes
File without changes
File without changes