modmex-lambda 0.1.0__py3-none-any.whl → 0.2.0__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.
- modmex_lambda/__init__.py +12 -1
- modmex_lambda/event_handler/__init__.py +7 -1
- modmex_lambda/event_handler/api_gateway.py +3 -0
- modmex_lambda/event_handler/dependencies/__init__.py +13 -0
- modmex_lambda/event_handler/dependencies/dependant.py +4 -1
- modmex_lambda/event_handler/dependencies/depends.py +85 -5
- modmex_lambda/event_handler/routing.py +1 -0
- modmex_lambda/event_handler/types.py +2 -0
- {modmex_lambda-0.1.0.dist-info → modmex_lambda-0.2.0.dist-info}/METADATA +75 -4
- {modmex_lambda-0.1.0.dist-info → modmex_lambda-0.2.0.dist-info}/RECORD +12 -12
- {modmex_lambda-0.1.0.dist-info → modmex_lambda-0.2.0.dist-info}/WHEEL +0 -0
- {modmex_lambda-0.1.0.dist-info → modmex_lambda-0.2.0.dist-info}/licenses/LICENSE +0 -0
modmex_lambda/__init__.py
CHANGED
|
@@ -13,7 +13,12 @@ if TYPE_CHECKING:
|
|
|
13
13
|
)
|
|
14
14
|
from .event_handler.request import Request
|
|
15
15
|
from .event_sources import event_source
|
|
16
|
-
from .event_handler.dependencies.depends import
|
|
16
|
+
from .event_handler.dependencies.depends import (
|
|
17
|
+
DefaultDependencyResolver,
|
|
18
|
+
DependencyResolver,
|
|
19
|
+
Depends,
|
|
20
|
+
InjectorDependencyResolver,
|
|
21
|
+
)
|
|
17
22
|
from .logging import Logger
|
|
18
23
|
from .parser import event_parser, parse
|
|
19
24
|
from .validation import ModmexValidator, ValidationError
|
|
@@ -26,7 +31,10 @@ _EXPORTS = {
|
|
|
26
31
|
"parse": ("modmex_lambda.parser", "parse"),
|
|
27
32
|
"event_parser": ("modmex_lambda.parser", "event_parser"),
|
|
28
33
|
"event_source": ("modmex_lambda.event_sources", "event_source"),
|
|
34
|
+
"DefaultDependencyResolver": ("modmex_lambda.event_handler.dependencies.depends", "DefaultDependencyResolver"),
|
|
35
|
+
"DependencyResolver": ("modmex_lambda.event_handler.dependencies.depends", "DependencyResolver"),
|
|
29
36
|
"Depends": ("modmex_lambda.event_handler.dependencies.depends", "Depends"),
|
|
37
|
+
"InjectorDependencyResolver": ("modmex_lambda.event_handler.dependencies.depends", "InjectorDependencyResolver"),
|
|
30
38
|
"Logger": ("modmex_lambda.logging", "Logger"),
|
|
31
39
|
"ModmexValidator": ("modmex_lambda.validation", "ModmexValidator"),
|
|
32
40
|
"ValidationError": ("modmex_lambda.validation", "ValidationError"),
|
|
@@ -40,7 +48,10 @@ __all__ = [
|
|
|
40
48
|
"parse",
|
|
41
49
|
"event_parser",
|
|
42
50
|
"event_source",
|
|
51
|
+
"DefaultDependencyResolver",
|
|
52
|
+
"DependencyResolver",
|
|
43
53
|
"Depends",
|
|
54
|
+
"InjectorDependencyResolver",
|
|
44
55
|
"Logger",
|
|
45
56
|
"ModmexValidator",
|
|
46
57
|
"ValidationError",
|
|
@@ -10,13 +10,16 @@ if TYPE_CHECKING:
|
|
|
10
10
|
ApiGatewayRestResolver,
|
|
11
11
|
Response,
|
|
12
12
|
)
|
|
13
|
-
from .dependencies.depends import Depends
|
|
13
|
+
from .dependencies.depends import DefaultDependencyResolver, DependencyResolver, Depends, InjectorDependencyResolver
|
|
14
14
|
|
|
15
15
|
_EXPORTS = {
|
|
16
16
|
"ApiGatewayHttpResolver": ("modmex_lambda.event_handler.api_gateway", "ApiGatewayHttpResolver"),
|
|
17
17
|
"ApiGatewayRestResolver": ("modmex_lambda.event_handler.api_gateway", "ApiGatewayRestResolver"),
|
|
18
18
|
"Response": ("modmex_lambda.event_handler.api_gateway", "Response"),
|
|
19
|
+
"DefaultDependencyResolver": ("modmex_lambda.event_handler.dependencies.depends", "DefaultDependencyResolver"),
|
|
20
|
+
"DependencyResolver": ("modmex_lambda.event_handler.dependencies.depends", "DependencyResolver"),
|
|
19
21
|
"Depends": ("modmex_lambda.event_handler.dependencies.depends", "Depends"),
|
|
22
|
+
"InjectorDependencyResolver": ("modmex_lambda.event_handler.dependencies.depends", "InjectorDependencyResolver"),
|
|
20
23
|
"content_types": ("modmex_lambda.event_handler.content_types", None),
|
|
21
24
|
}
|
|
22
25
|
|
|
@@ -24,7 +27,10 @@ __all__ = [
|
|
|
24
27
|
"ApiGatewayHttpResolver",
|
|
25
28
|
"ApiGatewayRestResolver",
|
|
26
29
|
"Response",
|
|
30
|
+
"DefaultDependencyResolver",
|
|
31
|
+
"DependencyResolver",
|
|
27
32
|
"Depends",
|
|
33
|
+
"InjectorDependencyResolver",
|
|
28
34
|
"content_types",
|
|
29
35
|
]
|
|
30
36
|
|
|
@@ -27,6 +27,7 @@ from modmex_lambda.data_classes.api_gateway_proxy_event import APIGatewayProxyEv
|
|
|
27
27
|
from modmex_lambda.shared.types import AnyCallableT
|
|
28
28
|
from modmex_lambda.event_handler.types import IApiGatewayResolver
|
|
29
29
|
from modmex_lambda.event_handler.dependencies.dependency_middleware import DependencyMiddleware
|
|
30
|
+
from modmex_lambda.event_handler.dependencies.depends import DefaultDependencyResolver, DependencyResolver
|
|
30
31
|
from modmex_lambda.event_handler.middlewares import NextMiddleware
|
|
31
32
|
from modmex_lambda.event_handler.cors import CORSConfig
|
|
32
33
|
from modmex_lambda.shared.json_encoder import JSONEncoder
|
|
@@ -104,6 +105,7 @@ class ApiGatewayResolver(BaseRouter, IApiGatewayResolver):
|
|
|
104
105
|
strip_prefixes: list[str | Pattern] | None = None,
|
|
105
106
|
json_body_deserializer: Callable[[str], dict] | None = None,
|
|
106
107
|
logger: Any | None = None,
|
|
108
|
+
dependency_resolver: DependencyResolver | None = None,
|
|
107
109
|
) -> None:
|
|
108
110
|
self._cors = cors
|
|
109
111
|
self._cors_enabled = cors is not None
|
|
@@ -118,6 +120,7 @@ class ApiGatewayResolver(BaseRouter, IApiGatewayResolver):
|
|
|
118
120
|
self._router_middlewares: list[Middleware] = []
|
|
119
121
|
|
|
120
122
|
self._logger = logger
|
|
123
|
+
self.dependency_resolver = dependency_resolver or DefaultDependencyResolver()
|
|
121
124
|
self.dependency_overrides: dict[Callable[..., Any], Callable[..., Any]] = {}
|
|
122
125
|
self.current_event = None
|
|
123
126
|
self.current_context = None
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from modmex_lambda.event_handler.dependencies.depends import (
|
|
2
|
+
DefaultDependencyResolver,
|
|
3
|
+
DependencyResolver,
|
|
4
|
+
Depends,
|
|
5
|
+
InjectorDependencyResolver,
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
__all__ = [
|
|
9
|
+
"DefaultDependencyResolver",
|
|
10
|
+
"DependencyResolver",
|
|
11
|
+
"Depends",
|
|
12
|
+
"InjectorDependencyResolver",
|
|
13
|
+
]
|
|
@@ -131,12 +131,15 @@ def get_dependant(
|
|
|
131
131
|
|
|
132
132
|
depends = _get_depends_from_annotation(param.annotation)
|
|
133
133
|
if depends is not None:
|
|
134
|
+
depends = depends.resolve_for_annotation(param.annotation)
|
|
134
135
|
_inherit_local_namespace(parent=call, dependency=depends.dependency)
|
|
135
136
|
dependant.dependencies.append(
|
|
136
137
|
DependencyParam(
|
|
137
138
|
param_name=param_name,
|
|
138
139
|
depends=depends,
|
|
139
|
-
dependant=
|
|
140
|
+
dependant=Dependant(call=depends.dependency)
|
|
141
|
+
if inspect.isclass(depends.dependency)
|
|
142
|
+
else get_dependant(path=path, call=depends.dependency),
|
|
140
143
|
),
|
|
141
144
|
)
|
|
142
145
|
continue
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
import inspect
|
|
6
|
+
from typing import Annotated, Any, Callable, Protocol, get_args, get_origin, get_type_hints
|
|
6
7
|
|
|
7
8
|
from modmex_lambda.event_handler.dependencies.compat import ModelField
|
|
8
9
|
from modmex_lambda.event_handler.dependencies.types import CacheKey
|
|
@@ -43,15 +44,83 @@ class DependencyResolutionError(Exception):
|
|
|
43
44
|
"""Raised when a dependency cannot be resolved."""
|
|
44
45
|
|
|
45
46
|
|
|
47
|
+
class DependencyResolver(Protocol):
|
|
48
|
+
"""Resolves a dependency token into the value passed to a route handler."""
|
|
49
|
+
|
|
50
|
+
def resolve(
|
|
51
|
+
self,
|
|
52
|
+
dependency: Callable[..., Any] | type[Any],
|
|
53
|
+
*,
|
|
54
|
+
values: dict[str, Any] | None = None,
|
|
55
|
+
request: Request | None = None,
|
|
56
|
+
) -> Any:
|
|
57
|
+
...
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class DefaultDependencyResolver:
|
|
61
|
+
"""Default resolver that calls dependency functions with solved values."""
|
|
62
|
+
|
|
63
|
+
def resolve(
|
|
64
|
+
self,
|
|
65
|
+
dependency: Callable[..., Any] | type[Any],
|
|
66
|
+
*,
|
|
67
|
+
values: dict[str, Any] | None = None,
|
|
68
|
+
request: Request | None = None,
|
|
69
|
+
) -> Any:
|
|
70
|
+
return dependency(**(values or {}))
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
class InjectorDependencyResolver:
|
|
74
|
+
"""Optional adapter for the ``injector`` package."""
|
|
75
|
+
|
|
76
|
+
def __init__(self, injector: Any) -> None:
|
|
77
|
+
self.injector = injector
|
|
78
|
+
|
|
79
|
+
def resolve(
|
|
80
|
+
self,
|
|
81
|
+
dependency: Callable[..., Any] | type[Any],
|
|
82
|
+
*,
|
|
83
|
+
values: dict[str, Any] | None = None,
|
|
84
|
+
request: Request | None = None,
|
|
85
|
+
) -> Any:
|
|
86
|
+
kwargs = values or {}
|
|
87
|
+
|
|
88
|
+
if hasattr(self.injector, "call_with_injection") and not inspect.isclass(dependency):
|
|
89
|
+
return self.injector.call_with_injection(dependency, kwargs=kwargs)
|
|
90
|
+
|
|
91
|
+
if not kwargs and inspect.isclass(dependency) and hasattr(self.injector, "get"):
|
|
92
|
+
return self.injector.get(dependency)
|
|
93
|
+
|
|
94
|
+
return dependency(**kwargs)
|
|
95
|
+
|
|
96
|
+
|
|
46
97
|
class Depends:
|
|
47
|
-
def __init__(
|
|
48
|
-
|
|
98
|
+
def __init__(
|
|
99
|
+
self,
|
|
100
|
+
dependency: Callable[..., Any] | type[Any] | None = None,
|
|
101
|
+
*,
|
|
102
|
+
use_cache: bool = True,
|
|
103
|
+
) -> None:
|
|
104
|
+
if dependency is not None and not callable(dependency):
|
|
49
105
|
raise DependencyResolutionError(
|
|
50
106
|
f"Depends() requires a callable, got {type(dependency).__name__}: {dependency!r}",
|
|
51
107
|
)
|
|
52
108
|
self.dependency = dependency
|
|
53
109
|
self.use_cache = use_cache
|
|
54
110
|
|
|
111
|
+
def resolve_for_annotation(self, annotation: Any) -> Depends:
|
|
112
|
+
if self.dependency is not None:
|
|
113
|
+
return self
|
|
114
|
+
|
|
115
|
+
if get_origin(annotation) is Annotated:
|
|
116
|
+
dependency = get_args(annotation)[0]
|
|
117
|
+
if callable(dependency):
|
|
118
|
+
return Depends(dependency, use_cache=self.use_cache)
|
|
119
|
+
|
|
120
|
+
raise DependencyResolutionError(
|
|
121
|
+
"Depends() without a callable requires a callable parameter annotation",
|
|
122
|
+
)
|
|
123
|
+
|
|
55
124
|
|
|
56
125
|
class _DependencyNode:
|
|
57
126
|
"""Lightweight node in a dependency tree."""
|
|
@@ -101,12 +170,17 @@ def build_dependency_tree(func: Callable[..., Any]) -> DependencyTree:
|
|
|
101
170
|
depends = _get_depends_from_annotation(annotation)
|
|
102
171
|
if depends is None:
|
|
103
172
|
continue
|
|
173
|
+
depends = depends.resolve_for_annotation(annotation)
|
|
104
174
|
|
|
105
175
|
dependencies.append(
|
|
106
176
|
_DependencyNode(
|
|
107
177
|
param_name=param_name,
|
|
108
178
|
depends=depends,
|
|
109
|
-
sub_tree=
|
|
179
|
+
sub_tree=(
|
|
180
|
+
DependencyTree()
|
|
181
|
+
if inspect.isclass(depends.dependency)
|
|
182
|
+
else build_dependency_tree(depends.dependency)
|
|
183
|
+
),
|
|
110
184
|
),
|
|
111
185
|
)
|
|
112
186
|
|
|
@@ -119,12 +193,14 @@ def solve_dependencies(
|
|
|
119
193
|
request: Request | None = None,
|
|
120
194
|
dependency_overrides: dict[Callable[..., Any], Callable[..., Any]] | None = None,
|
|
121
195
|
dependency_cache: dict[Callable[..., Any], Any] | None = None,
|
|
196
|
+
dependency_resolver: DependencyResolver | None = None,
|
|
122
197
|
) -> dict[str, Any]:
|
|
123
198
|
"""Resolve all Depends parameters for a route or lightweight dependency tree."""
|
|
124
199
|
from modmex_lambda.event_handler.request import Request as RequestClass
|
|
125
200
|
|
|
126
201
|
cache = dependency_cache if dependency_cache is not None else {}
|
|
127
202
|
overrides = dependency_overrides or {}
|
|
203
|
+
resolver = dependency_resolver or DefaultDependencyResolver()
|
|
128
204
|
values: dict[str, Any] = {}
|
|
129
205
|
|
|
130
206
|
for dep in dependant.dependencies:
|
|
@@ -139,11 +215,12 @@ def solve_dependencies(
|
|
|
139
215
|
request=request,
|
|
140
216
|
dependency_overrides=overrides,
|
|
141
217
|
dependency_cache=cache,
|
|
218
|
+
dependency_resolver=resolver,
|
|
142
219
|
)
|
|
143
220
|
sub_values.update(_request_injection_values(dependency, request, RequestClass))
|
|
144
221
|
|
|
145
222
|
try:
|
|
146
|
-
solved = dependency
|
|
223
|
+
solved = resolver.resolve(dependency, values=sub_values, request=request)
|
|
147
224
|
except Exception as exc:
|
|
148
225
|
dep_name = getattr(dependency, "__name__", repr(dependency))
|
|
149
226
|
raise DependencyResolutionError(
|
|
@@ -177,7 +254,10 @@ def _request_injection_values(
|
|
|
177
254
|
__all__ = [
|
|
178
255
|
"Dependant",
|
|
179
256
|
"DependencyParam",
|
|
257
|
+
"DependencyResolver",
|
|
258
|
+
"DefaultDependencyResolver",
|
|
180
259
|
"Depends",
|
|
260
|
+
"InjectorDependencyResolver",
|
|
181
261
|
"_get_depends_from_annotation",
|
|
182
262
|
"build_dependency_tree",
|
|
183
263
|
"solve_dependencies",
|
|
@@ -4,6 +4,7 @@ from typing import Any, Callable, TypeVar, Union
|
|
|
4
4
|
|
|
5
5
|
from abc import ABC
|
|
6
6
|
from modmex_lambda.data_classes.api_gateway_proxy_event import APIGatewayProxyEvent, APIGatewayProxyEventV2
|
|
7
|
+
from modmex_lambda.event_handler.dependencies.depends import DependencyResolver
|
|
7
8
|
from modmex_lambda.event_handler.request import Request
|
|
8
9
|
from modmex_lambda.event_handler.response import Response
|
|
9
10
|
|
|
@@ -11,6 +12,7 @@ from modmex_lambda.event_handler.response import Response
|
|
|
11
12
|
class IApiGatewayResolver(ABC):
|
|
12
13
|
context: dict[str, Any]
|
|
13
14
|
current_event: Union[APIGatewayProxyEvent, APIGatewayProxyEventV2]
|
|
15
|
+
dependency_resolver: DependencyResolver
|
|
14
16
|
dependency_overrides: dict[Callable[..., Any], Callable[..., Any]]
|
|
15
17
|
_dependency_middleware: Callable[..., Any]
|
|
16
18
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: modmex-lambda
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: Ultra-lightweight AWS Lambda utilities for API Gateway routing and event handling.
|
|
5
5
|
Author: Modmex
|
|
6
6
|
License: MIT
|
|
@@ -9,6 +9,8 @@ Requires-Python: >=3.10
|
|
|
9
9
|
Requires-Dist: modmex<2.0.0,>=1.1.10
|
|
10
10
|
Provides-Extra: dev
|
|
11
11
|
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
12
|
+
Provides-Extra: injector
|
|
13
|
+
Requires-Dist: injector<1.0.0,>=0.24.0; extra == 'injector'
|
|
12
14
|
Description-Content-Type: text/markdown
|
|
13
15
|
|
|
14
16
|
# modmex-lambda
|
|
@@ -26,11 +28,17 @@ logging with a small dependency footprint.
|
|
|
26
28
|
pip install modmex-lambda
|
|
27
29
|
```
|
|
28
30
|
|
|
29
|
-
|
|
31
|
+
|
|
32
|
+
To use the optional `injector` integration:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
pip install "modmex-lambda[injector]"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
With Poetry:
|
|
30
39
|
|
|
31
40
|
```bash
|
|
32
|
-
poetry
|
|
33
|
-
poetry run pytest -q
|
|
41
|
+
poetry add "modmex-lambda[injector]"
|
|
34
42
|
```
|
|
35
43
|
|
|
36
44
|
## API Gateway Resolvers
|
|
@@ -236,6 +244,69 @@ def get_user(
|
|
|
236
244
|
return repository.get_user(user_id)
|
|
237
245
|
```
|
|
238
246
|
|
|
247
|
+
For constructor-heavy services, install the optional `injector` extra and pass
|
|
248
|
+
an `InjectorDependencyResolver` to the app. `Depends()` without a callable uses
|
|
249
|
+
the parameter annotation as the dependency token.
|
|
250
|
+
|
|
251
|
+
```python
|
|
252
|
+
from typing import Annotated
|
|
253
|
+
|
|
254
|
+
from injector import Injector, Module, inject, provider, singleton
|
|
255
|
+
from modmex_lambda import ApiGatewayHttpResolver, Depends, InjectorDependencyResolver
|
|
256
|
+
from modmex_lambda.event_handler.params import Path
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
class Settings:
|
|
260
|
+
def __init__(self, tenant_id: str):
|
|
261
|
+
self.tenant_id = tenant_id
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
class UserRepository:
|
|
265
|
+
def __init__(self, settings: Settings):
|
|
266
|
+
self.settings = settings
|
|
267
|
+
|
|
268
|
+
def get_user(self, user_id: int) -> dict:
|
|
269
|
+
return {"id": user_id, "tenant_id": self.settings.tenant_id}
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
class UserService:
|
|
273
|
+
def __init__(self, repository: UserRepository):
|
|
274
|
+
self.repository = repository
|
|
275
|
+
|
|
276
|
+
def get_user(self, user_id: int) -> dict:
|
|
277
|
+
return self.repository.get_user(user_id)
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
class AppModule(Module):
|
|
281
|
+
@singleton
|
|
282
|
+
@provider
|
|
283
|
+
def provide_settings(self) -> Settings:
|
|
284
|
+
return Settings(tenant_id="mx")
|
|
285
|
+
|
|
286
|
+
@singleton
|
|
287
|
+
@provider
|
|
288
|
+
@inject
|
|
289
|
+
def provide_repository(self, settings: Settings) -> UserRepository:
|
|
290
|
+
return UserRepository(settings)
|
|
291
|
+
|
|
292
|
+
@singleton
|
|
293
|
+
@provider
|
|
294
|
+
@inject
|
|
295
|
+
def provide_service(self, repository: UserRepository) -> UserService:
|
|
296
|
+
return UserService(repository)
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
container = Injector([AppModule()])
|
|
300
|
+
app = ApiGatewayHttpResolver(dependency_resolver=InjectorDependencyResolver(container))
|
|
301
|
+
|
|
302
|
+
@app.get("/users/<user_id>")
|
|
303
|
+
def get_user(
|
|
304
|
+
user_id: Annotated[int, Path()],
|
|
305
|
+
service: Annotated[UserService, Depends()],
|
|
306
|
+
):
|
|
307
|
+
return service.get_user(user_id)
|
|
308
|
+
```
|
|
309
|
+
|
|
239
310
|
Disable dependency caching when a dependency must run every time:
|
|
240
311
|
|
|
241
312
|
```python
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
modmex_lambda/__init__.py,sha256=
|
|
1
|
+
modmex_lambda/__init__.py,sha256=qgc6KWY3oA15AsKqC1DkSKrwsXd4l2I8rlLOcIglJn8,2511
|
|
2
2
|
modmex_lambda/event_sources.py,sha256=eLTEN1g9JF2Nk09fMcJn43dBz8BKwCOrtxmZkzr99sM,1714
|
|
3
3
|
modmex_lambda/exceptions.py,sha256=GL6ZZKhXr0BqfCsGwzookBrUJ1M7JIU2Ju3vWdyna_s,128
|
|
4
4
|
modmex_lambda/logging.py,sha256=FFINAvMu25d0Ieow-Wa8fEjr9xvtRtPgtLixsDGFPHc,3335
|
|
@@ -15,8 +15,8 @@ modmex_lambda/data_classes/api_gateway_proxy_event.py,sha256=fetGgKG4QFpPXu0lImt
|
|
|
15
15
|
modmex_lambda/data_classes/api_gateway_websocket_event.py,sha256=EGFqQ4SrC-ssb509UzfNLWpPm7gdtleoYz5Pvb2fIwU,1031
|
|
16
16
|
modmex_lambda/data_classes/cognito_user_pool_event.py,sha256=DwHa9xtqpFYnFKdUi1Y9RRgxvkVGJQXhFkRh7_4iAf4,18582
|
|
17
17
|
modmex_lambda/data_classes/common.py,sha256=8saOnaCxH25G-jQumUJMg6CuOhuJ6ugw4vAWH-Fn4Ls,13656
|
|
18
|
-
modmex_lambda/event_handler/__init__.py,sha256=
|
|
19
|
-
modmex_lambda/event_handler/api_gateway.py,sha256=
|
|
18
|
+
modmex_lambda/event_handler/__init__.py,sha256=yIiz_l7FFZOARIZ2oFCL4ESIFt078zxv-GslZjx78Go,1831
|
|
19
|
+
modmex_lambda/event_handler/api_gateway.py,sha256=Yeucrol7ovZ6uaytRN7QhLxOOs_O-9EtgEjuw1dJ0Rs,12051
|
|
20
20
|
modmex_lambda/event_handler/constants.py,sha256=x53p_BZw2lmISpkO5v6d1nfuP-De9uUsUtwgJLaBHKw,28
|
|
21
21
|
modmex_lambda/event_handler/content_types.py,sha256=FcnCaAVhEOewQXAbkStMBNC63NFMxqwmEFnXcGholug,282
|
|
22
22
|
modmex_lambda/event_handler/cors.py,sha256=j8H81NdPxqRl5ikW8Wdf7o6pEIx7dGkAsCtSysYI1nc,3516
|
|
@@ -27,14 +27,14 @@ modmex_lambda/event_handler/middlewares.py,sha256=oOsQ0nOl7lc_N-kt8wTx7qOXNE5VtR
|
|
|
27
27
|
modmex_lambda/event_handler/params.py,sha256=nNhLKduyeQ6TI9Zli32_XtRM93e973igOOZSY0vcpy4,544
|
|
28
28
|
modmex_lambda/event_handler/request.py,sha256=f5TMv6muYfYOsLbZMPdd6kRMza8U2-UiyNmvuB5grH4,1705
|
|
29
29
|
modmex_lambda/event_handler/response.py,sha256=izW9v_0E91UsQKX6-W26wnuAy-YP2_kTPbA5OW9L3tM,1988
|
|
30
|
-
modmex_lambda/event_handler/routing.py,sha256=
|
|
30
|
+
modmex_lambda/event_handler/routing.py,sha256=MqwHvf9d4qu_1U-qxx85q5m22BQ3kAzfhPeJeMUyaTs,16146
|
|
31
31
|
modmex_lambda/event_handler/routing_fallbacks.py,sha256=vx23xyg4vEKCqGg1bxBP0OxRsN8NbMkAdehfcNiqwjw,3669
|
|
32
|
-
modmex_lambda/event_handler/types.py,sha256=
|
|
33
|
-
modmex_lambda/event_handler/dependencies/__init__.py,sha256=
|
|
32
|
+
modmex_lambda/event_handler/types.py,sha256=VRYaZVipqvwT_PyJ5teGADPIDyt_xRpqJ4bmqhd-lIA,1184
|
|
33
|
+
modmex_lambda/event_handler/dependencies/__init__.py,sha256=KqYkgjAYNlZ2_PIDWAQSG4syIgeTdVmDQC5_lVjfyKI,288
|
|
34
34
|
modmex_lambda/event_handler/dependencies/compat.py,sha256=MPEJ9EKNja_ys4XLGIm8vTgN7Z96nmuqYHTvixHFR9A,7599
|
|
35
|
-
modmex_lambda/event_handler/dependencies/dependant.py,sha256=
|
|
35
|
+
modmex_lambda/event_handler/dependencies/dependant.py,sha256=0Y_-AemuI3DRMgtI9RDdHBFRRIfALulq9Ouqd0Ha8Nk,9496
|
|
36
36
|
modmex_lambda/event_handler/dependencies/dependency_middleware.py,sha256=c_N7UgtbAVYC6xbfn_MaW7zYQxi5pSSdTeIRaz703Ak,14999
|
|
37
|
-
modmex_lambda/event_handler/dependencies/depends.py,sha256=
|
|
37
|
+
modmex_lambda/event_handler/dependencies/depends.py,sha256=t9FlQpbNc4d7N4YqpeKNwAuyWwfNkwb0TX8o2OTNbXo,8451
|
|
38
38
|
modmex_lambda/event_handler/dependencies/params.py,sha256=bc208GHiXCfm1V-GLeIMm8-ypZ8P8Q9qUKQkK2Vh1Fg,10085
|
|
39
39
|
modmex_lambda/event_handler/dependencies/types.py,sha256=5VA8zl-EjQDNKXOrNT7sRv_vNs40Lz8aMP-sf-lf8sk,376
|
|
40
40
|
modmex_lambda/shared/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -42,7 +42,7 @@ modmex_lambda/shared/cookies.py,sha256=E2hTuht5_Xljw9zOQLW6vjsOWEpQSIqD2D3Tl1Co_
|
|
|
42
42
|
modmex_lambda/shared/headers_serializer.py,sha256=Ao-wpx0cmy9E2ACrh7R7RIDUF0h24gax1AMtY_MjIWQ,2505
|
|
43
43
|
modmex_lambda/shared/json_encoder.py,sha256=Mo4tlrhWvlBhhRYoPt2PAP6b_KsEKbk1pK6e5q0gbuk,1297
|
|
44
44
|
modmex_lambda/shared/types.py,sha256=lH3i9MF7EQa1et8dD_qagEjlNzqznNHc0YZawp3toMc,134
|
|
45
|
-
modmex_lambda-0.
|
|
46
|
-
modmex_lambda-0.
|
|
47
|
-
modmex_lambda-0.
|
|
48
|
-
modmex_lambda-0.
|
|
45
|
+
modmex_lambda-0.2.0.dist-info/METADATA,sha256=J_gbX6PVZhgRU5pv3fnY3pGeL1Mc1NzO9EznRQ4BTcI,10816
|
|
46
|
+
modmex_lambda-0.2.0.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
|
|
47
|
+
modmex_lambda-0.2.0.dist-info/licenses/LICENSE,sha256=_C2TDTOsYeJvE4vn9VB51laKvleBKbdNnn96wJVtXhQ,1063
|
|
48
|
+
modmex_lambda-0.2.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|