wellapi 0.3.0__tar.gz → 0.3.3__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 (45) hide show
  1. wellapi-0.3.3/.github/workflows/build.pipeline.yml +31 -0
  2. {wellapi-0.3.0 → wellapi-0.3.3}/PKG-INFO +1 -1
  3. {wellapi-0.3.0 → wellapi-0.3.3}/pyproject.toml +1 -1
  4. wellapi-0.3.3/src/wellapi/__init__.py +10 -0
  5. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/local/router.py +2 -3
  6. wellapi-0.3.3/uv.lock +359 -0
  7. wellapi-0.3.0/handlers/other.py +0 -87
  8. wellapi-0.3.0/main.py +0 -21
  9. wellapi-0.3.0/openapi.json +0 -365
  10. wellapi-0.3.0/src/wellapi/__init__.py +0 -5
  11. wellapi-0.3.0/src/wellapi/openapi/__init__.py +0 -0
  12. wellapi-0.3.0/uv.lock +0 -1429
  13. {wellapi-0.3.0 → wellapi-0.3.3}/.gitignore +0 -0
  14. {wellapi-0.3.0 → wellapi-0.3.3}/.python-version +0 -0
  15. {wellapi-0.3.0 → wellapi-0.3.3}/README.md +0 -0
  16. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/__main__.py +0 -0
  17. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/applications.py +0 -0
  18. {wellapi-0.3.0/handlers → wellapi-0.3.3/src/wellapi/build}/__init__.py +0 -0
  19. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/build/cdk.py +0 -0
  20. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/build/packager.py +0 -0
  21. {wellapi-0.3.0/src/wellapi/build → wellapi-0.3.3/src/wellapi/cli}/__init__.py +0 -0
  22. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/cli/main.py +0 -0
  23. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/convertors.py +0 -0
  24. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/datastructures.py +0 -0
  25. {wellapi-0.3.0/src/wellapi/cli → wellapi-0.3.3/src/wellapi/dependencies}/__init__.py +0 -0
  26. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/dependencies/models.py +0 -0
  27. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/dependencies/utils.py +0 -0
  28. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/exceptions.py +0 -0
  29. {wellapi-0.3.0/src/wellapi/dependencies → wellapi-0.3.3/src/wellapi/local}/__init__.py +0 -0
  30. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/local/reloader.py +0 -0
  31. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/local/server.py +0 -0
  32. {wellapi-0.3.0/src/wellapi/local → wellapi-0.3.3/src/wellapi/middleware}/__init__.py +0 -0
  33. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/middleware/base.py +0 -0
  34. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/middleware/error.py +0 -0
  35. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/middleware/exceptions.py +0 -0
  36. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/middleware/main.py +0 -0
  37. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/models.py +0 -0
  38. {wellapi-0.3.0/src/wellapi/middleware → wellapi-0.3.3/src/wellapi/openapi}/__init__.py +0 -0
  39. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/openapi/docs.py +0 -0
  40. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/openapi/models.py +0 -0
  41. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/openapi/utils.py +0 -0
  42. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/params.py +0 -0
  43. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/routing.py +0 -0
  44. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/security.py +0 -0
  45. {wellapi-0.3.0 → wellapi-0.3.3}/src/wellapi/utils.py +0 -0
@@ -0,0 +1,31 @@
1
+ name: Python package
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - '*'
7
+
8
+ jobs:
9
+ build:
10
+ runs-on: ubuntu-latest
11
+ permissions:
12
+ id-token: write
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+
16
+ - name: Install uv
17
+ uses: astral-sh/setup-uv@v5
18
+ with:
19
+ version: "0.6.14"
20
+
21
+ - name: Set up Python
22
+ run: uv python install
23
+
24
+ - name: Install the project
25
+ run: uv sync --all-extras --dev
26
+
27
+ - name: Build package
28
+ run: uv build
29
+
30
+ - name: Publish package
31
+ run: uv publish --trusted-publishing always
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wellapi
3
- Version: 0.3.0
3
+ Version: 0.3.3
4
4
  Summary: A simple web framework for aws lambda
5
5
  Author-email: romayuhym <romayuhym@gmail.com>
6
6
  Requires-Python: >=3.12
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "wellapi"
3
- version = "0.3.0"
3
+ version = "0.3.3"
4
4
  description = "A simple web framework for aws lambda"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -0,0 +1,10 @@
1
+ from wellapi.applications import WellApi as WellApi
2
+ from wellapi.params import Path as Path
3
+ from wellapi.params import Query as Query
4
+ from wellapi.params import Header as Header
5
+ from wellapi.params import Body as Body
6
+ from wellapi.params import Cache as Cache
7
+ from wellapi.models import RequestAPIGateway as RequestAPIGateway
8
+ from wellapi.models import ResponseAPIGateway as ResponseAPIGateway
9
+ from wellapi.security import OAuth2PasswordBearer as OAuth2PasswordBearer
10
+ from wellapi.security import APIKeyHeader as APIKeyHeader
@@ -2,7 +2,6 @@ import sys
2
2
  from collections.abc import Callable
3
3
  from enum import Enum
4
4
 
5
- from wellapi import Scope
6
5
  from wellapi.applications import Lambda
7
6
  from wellapi.routing import compile_path
8
7
  from wellapi.utils import import_app, load_handlers
@@ -53,7 +52,7 @@ class Route:
53
52
  module = sys.modules[self.endpoint_module]
54
53
  return getattr(module, self.endpoint_name)(*args, **kwargs)
55
54
 
56
- def matches(self, scope: Scope, method, path) -> tuple[Match, Scope]:
55
+ def matches(self, scope: dict, method, path) -> tuple[Match, dict]:
57
56
  route_path = get_route_path(path)
58
57
  match = self.path_regex.match(route_path)
59
58
  if match:
@@ -98,7 +97,7 @@ class Router:
98
97
 
99
98
  self.add_route(path, method, e.endpoint)
100
99
 
101
- def __call__(self, scope: Scope, method, path):
100
+ def __call__(self, scope: dict, method, path):
102
101
  for route in self.routes:
103
102
  match, child_scope = route.matches(scope, method, path)
104
103
  if match == Match.FULL:
wellapi-0.3.3/uv.lock ADDED
@@ -0,0 +1,359 @@
1
+ version = 1
2
+ revision = 1
3
+ requires-python = ">=3.12"
4
+
5
+ [[package]]
6
+ name = "annotated-types"
7
+ version = "0.7.0"
8
+ source = { registry = "https://pypi.org/simple" }
9
+ sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 }
10
+ wheels = [
11
+ { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 },
12
+ ]
13
+
14
+ [[package]]
15
+ name = "attrs"
16
+ version = "25.3.0"
17
+ source = { registry = "https://pypi.org/simple" }
18
+ sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032 }
19
+ wheels = [
20
+ { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815 },
21
+ ]
22
+
23
+ [[package]]
24
+ name = "aws-cdk-asset-awscli-v1"
25
+ version = "2.2.232"
26
+ source = { registry = "https://pypi.org/simple" }
27
+ dependencies = [
28
+ { name = "jsii" },
29
+ { name = "publication" },
30
+ { name = "typeguard" },
31
+ ]
32
+ sdist = { url = "https://files.pythonhosted.org/packages/8e/e6/0d8bd888fffb834e3f5294d1a88d8284d7200118fc157a1226befb9915dc/aws_cdk_asset_awscli_v1-2.2.232.tar.gz", hash = "sha256:a5bd7d4c265ada09f9b95c392bcac7c95500e5d7ce192d1341ea9585d1b182b5", size = 17990296 }
33
+ wheels = [
34
+ { url = "https://files.pythonhosted.org/packages/e6/cf/bea8511e2bab6f8d5c9628f61fa307edec2d41dcd863842432f2fc8cbfb2/aws_cdk_asset_awscli_v1-2.2.232-py3-none-any.whl", hash = "sha256:0099d39dd74b466acbccf6a1bae4bf8081de05732727057b10a80b8a9b091908", size = 17988767 },
35
+ ]
36
+
37
+ [[package]]
38
+ name = "aws-cdk-asset-node-proxy-agent-v6"
39
+ version = "2.1.0"
40
+ source = { registry = "https://pypi.org/simple" }
41
+ dependencies = [
42
+ { name = "jsii" },
43
+ { name = "publication" },
44
+ { name = "typeguard" },
45
+ ]
46
+ sdist = { url = "https://files.pythonhosted.org/packages/d5/ab/09ac3ecc0067988d02398328e088d66cbe8555c991563c8ddfa1db5296ae/aws_cdk_asset_node_proxy_agent_v6-2.1.0.tar.gz", hash = "sha256:1f292c0631f86708ba4ee328b3a2b229f7e46ea1c79fbde567ee9eb119c2b0e2", size = 1540231 }
47
+ wheels = [
48
+ { url = "https://files.pythonhosted.org/packages/8d/86/1817a6da223aa80aeb94a504f07f930170284694b18f6053729e9930cc6a/aws_cdk.asset_node_proxy_agent_v6-2.1.0-py3-none-any.whl", hash = "sha256:24a388b69a44d03bae6dbf864c4e25ba650d4b61c008b4568b94ffbb9a69e40e", size = 1538724 },
49
+ ]
50
+
51
+ [[package]]
52
+ name = "aws-cdk-cloud-assembly-schema"
53
+ version = "41.2.0"
54
+ source = { registry = "https://pypi.org/simple" }
55
+ dependencies = [
56
+ { name = "jsii" },
57
+ { name = "publication" },
58
+ { name = "typeguard" },
59
+ ]
60
+ sdist = { url = "https://files.pythonhosted.org/packages/81/b4/4f3073b1c29dfe97eacd44c69d3144c5b95d8cc76439dbe40b7d8d7973c9/aws_cdk_cloud_assembly_schema-41.2.0.tar.gz", hash = "sha256:7064ac13f6944fd53f8d8eace611d3c5d8db7014049d629f5c47ede8dc5f2e3b", size = 192007 }
61
+ wheels = [
62
+ { url = "https://files.pythonhosted.org/packages/44/13/cd49f3c83768782d3a90ed0748953d5305755e236de624b9b691577372cc/aws_cdk.cloud_assembly_schema-41.2.0-py3-none-any.whl", hash = "sha256:779ca7e3edb02695e0a94a1f38e322b04fbe192cd7944553f80b681a21edd670", size = 190879 },
63
+ ]
64
+
65
+ [[package]]
66
+ name = "aws-cdk-lib"
67
+ version = "2.189.1"
68
+ source = { registry = "https://pypi.org/simple" }
69
+ dependencies = [
70
+ { name = "aws-cdk-asset-awscli-v1" },
71
+ { name = "aws-cdk-asset-node-proxy-agent-v6" },
72
+ { name = "aws-cdk-cloud-assembly-schema" },
73
+ { name = "constructs" },
74
+ { name = "jsii" },
75
+ { name = "publication" },
76
+ { name = "typeguard" },
77
+ ]
78
+ sdist = { url = "https://files.pythonhosted.org/packages/21/5a/7946cbeb0ed64605ce53d12de23126ae37b92fb01692de9a521b871e7bff/aws_cdk_lib-2.189.1.tar.gz", hash = "sha256:e7fd745d132d92f053c6927c85e8f6decf49d345d4767be2cde8df423c3e10f4", size = 40203166 }
79
+ wheels = [
80
+ { url = "https://files.pythonhosted.org/packages/33/9f/462827dfd0437cf7794fd052ee9ec2fd0233be5a3f98291e1a833402df4b/aws_cdk_lib-2.189.1-py3-none-any.whl", hash = "sha256:bb2d8c803244d49e861fd7f0554ed7f7fe4b269cc6529ca41d187c9f1b93cf51", size = 40483356 },
81
+ ]
82
+
83
+ [[package]]
84
+ name = "cattrs"
85
+ version = "24.1.3"
86
+ source = { registry = "https://pypi.org/simple" }
87
+ dependencies = [
88
+ { name = "attrs" },
89
+ ]
90
+ sdist = { url = "https://files.pythonhosted.org/packages/29/7b/da4aa2f95afb2f28010453d03d6eedf018f9e085bd001f039e15731aba89/cattrs-24.1.3.tar.gz", hash = "sha256:981a6ef05875b5bb0c7fb68885546186d306f10f0f6718fe9b96c226e68821ff", size = 426684 }
91
+ wheels = [
92
+ { url = "https://files.pythonhosted.org/packages/3c/ee/d68a3de23867a9156bab7e0a22fb9a0305067ee639032a22982cf7f725e7/cattrs-24.1.3-py3-none-any.whl", hash = "sha256:adf957dddd26840f27ffbd060a6c4dd3b2192c5b7c2c0525ef1bd8131d8a83f5", size = 66462 },
93
+ ]
94
+
95
+ [[package]]
96
+ name = "click"
97
+ version = "8.1.8"
98
+ source = { registry = "https://pypi.org/simple" }
99
+ dependencies = [
100
+ { name = "colorama", marker = "sys_platform == 'win32'" },
101
+ ]
102
+ sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 }
103
+ wheels = [
104
+ { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188 },
105
+ ]
106
+
107
+ [[package]]
108
+ name = "colorama"
109
+ version = "0.4.6"
110
+ source = { registry = "https://pypi.org/simple" }
111
+ sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 }
112
+ wheels = [
113
+ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
114
+ ]
115
+
116
+ [[package]]
117
+ name = "constructs"
118
+ version = "10.4.2"
119
+ source = { registry = "https://pypi.org/simple" }
120
+ dependencies = [
121
+ { name = "jsii" },
122
+ { name = "publication" },
123
+ { name = "typeguard" },
124
+ ]
125
+ sdist = { url = "https://files.pythonhosted.org/packages/46/84/f608a0a71a05a476b2f1761ab8f3f776677d39f7996ecf1092a1ce741a7c/constructs-10.4.2.tar.gz", hash = "sha256:ce54724360fffe10bab27d8a081844eb81f5ace7d7c62c84b719c49f164d5307", size = 65434 }
126
+ wheels = [
127
+ { url = "https://files.pythonhosted.org/packages/f2/d9/c5e7458f323bf063a9a54200742f2494e2ce3c7c6873e0ff80f88033c75f/constructs-10.4.2-py3-none-any.whl", hash = "sha256:1f0f59b004edebfde0f826340698b8c34611f57848139b7954904c61645f13c1", size = 63509 },
128
+ ]
129
+
130
+ [[package]]
131
+ name = "dnspython"
132
+ version = "2.7.0"
133
+ source = { registry = "https://pypi.org/simple" }
134
+ sdist = { url = "https://files.pythonhosted.org/packages/b5/4a/263763cb2ba3816dd94b08ad3a33d5fdae34ecb856678773cc40a3605829/dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1", size = 345197 }
135
+ wheels = [
136
+ { url = "https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86", size = 313632 },
137
+ ]
138
+
139
+ [[package]]
140
+ name = "email-validator"
141
+ version = "2.2.0"
142
+ source = { registry = "https://pypi.org/simple" }
143
+ dependencies = [
144
+ { name = "dnspython" },
145
+ { name = "idna" },
146
+ ]
147
+ sdist = { url = "https://files.pythonhosted.org/packages/48/ce/13508a1ec3f8bb981ae4ca79ea40384becc868bfae97fd1c942bb3a001b1/email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7", size = 48967 }
148
+ wheels = [
149
+ { url = "https://files.pythonhosted.org/packages/d7/ee/bf0adb559ad3c786f12bcbc9296b3f5675f529199bef03e2df281fa1fadb/email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631", size = 33521 },
150
+ ]
151
+
152
+ [[package]]
153
+ name = "idna"
154
+ version = "3.10"
155
+ source = { registry = "https://pypi.org/simple" }
156
+ sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 }
157
+ wheels = [
158
+ { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
159
+ ]
160
+
161
+ [[package]]
162
+ name = "importlib-resources"
163
+ version = "6.5.2"
164
+ source = { registry = "https://pypi.org/simple" }
165
+ sdist = { url = "https://files.pythonhosted.org/packages/cf/8c/f834fbf984f691b4f7ff60f50b514cc3de5cc08abfc3295564dd89c5e2e7/importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c", size = 44693 }
166
+ wheels = [
167
+ { url = "https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec", size = 37461 },
168
+ ]
169
+
170
+ [[package]]
171
+ name = "jsii"
172
+ version = "1.111.0"
173
+ source = { registry = "https://pypi.org/simple" }
174
+ dependencies = [
175
+ { name = "attrs" },
176
+ { name = "cattrs" },
177
+ { name = "importlib-resources" },
178
+ { name = "publication" },
179
+ { name = "python-dateutil" },
180
+ { name = "typeguard" },
181
+ { name = "typing-extensions" },
182
+ ]
183
+ sdist = { url = "https://files.pythonhosted.org/packages/29/e0/f1edbe7adb75c58ef13f4b24a8f2521cc3f7f5bd79751d071900065cf0a7/jsii-1.111.0.tar.gz", hash = "sha256:db523ab9b6575c84d6ed8779cdbdc739abd48a7cb0723b66beb84c1a9dc31c7c", size = 624365 }
184
+ wheels = [
185
+ { url = "https://files.pythonhosted.org/packages/3c/8a/d3a80a0b0ecb2c175eacbe48542695213ef4315b2e6bd62bafd244c06ae0/jsii-1.111.0-py3-none-any.whl", hash = "sha256:3084e31173e73d2eefee678c8ee31aa49428830509043057a421a4c0dde94434", size = 600503 },
186
+ ]
187
+
188
+ [[package]]
189
+ name = "publication"
190
+ version = "0.0.3"
191
+ source = { registry = "https://pypi.org/simple" }
192
+ sdist = { url = "https://files.pythonhosted.org/packages/6b/8e/8c9fe7e32fdf9c386f83d59610cc819a25dadb874b5920f2d0ef7d35f46d/publication-0.0.3.tar.gz", hash = "sha256:68416a0de76dddcdd2930d1c8ef853a743cc96c82416c4e4d3b5d901c6276dc4", size = 5484 }
193
+ wheels = [
194
+ { url = "https://files.pythonhosted.org/packages/f8/d3/6308debad7afcdb3ea5f50b4b3d852f41eb566a311fbcb4da23755a28155/publication-0.0.3-py2.py3-none-any.whl", hash = "sha256:0248885351febc11d8a1098d5c8e3ab2dabcf3e8c0c96db1e17ecd12b53afbe6", size = 7687 },
195
+ ]
196
+
197
+ [[package]]
198
+ name = "pydantic"
199
+ version = "2.11.3"
200
+ source = { registry = "https://pypi.org/simple" }
201
+ dependencies = [
202
+ { name = "annotated-types" },
203
+ { name = "pydantic-core" },
204
+ { name = "typing-extensions" },
205
+ { name = "typing-inspection" },
206
+ ]
207
+ sdist = { url = "https://files.pythonhosted.org/packages/10/2e/ca897f093ee6c5f3b0bee123ee4465c50e75431c3d5b6a3b44a47134e891/pydantic-2.11.3.tar.gz", hash = "sha256:7471657138c16adad9322fe3070c0116dd6c3ad8d649300e3cbdfe91f4db4ec3", size = 785513 }
208
+ wheels = [
209
+ { url = "https://files.pythonhosted.org/packages/b0/1d/407b29780a289868ed696d1616f4aad49d6388e5a77f567dcd2629dcd7b8/pydantic-2.11.3-py3-none-any.whl", hash = "sha256:a082753436a07f9ba1289c6ffa01cd93db3548776088aa917cc43b63f68fa60f", size = 443591 },
210
+ ]
211
+
212
+ [[package]]
213
+ name = "pydantic-core"
214
+ version = "2.33.1"
215
+ source = { registry = "https://pypi.org/simple" }
216
+ dependencies = [
217
+ { name = "typing-extensions" },
218
+ ]
219
+ sdist = { url = "https://files.pythonhosted.org/packages/17/19/ed6a078a5287aea7922de6841ef4c06157931622c89c2a47940837b5eecd/pydantic_core-2.33.1.tar.gz", hash = "sha256:bcc9c6fdb0ced789245b02b7d6603e17d1563064ddcfc36f046b61c0c05dd9df", size = 434395 }
220
+ wheels = [
221
+ { url = "https://files.pythonhosted.org/packages/c8/ce/3cb22b07c29938f97ff5f5bb27521f95e2ebec399b882392deb68d6c440e/pydantic_core-2.33.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1293d7febb995e9d3ec3ea09caf1a26214eec45b0f29f6074abb004723fc1de8", size = 2026640 },
222
+ { url = "https://files.pythonhosted.org/packages/19/78/f381d643b12378fee782a72126ec5d793081ef03791c28a0fd542a5bee64/pydantic_core-2.33.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:99b56acd433386c8f20be5c4000786d1e7ca0523c8eefc995d14d79c7a081498", size = 1852649 },
223
+ { url = "https://files.pythonhosted.org/packages/9d/2b/98a37b80b15aac9eb2c6cfc6dbd35e5058a352891c5cce3a8472d77665a6/pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35a5ec3fa8c2fe6c53e1b2ccc2454398f95d5393ab398478f53e1afbbeb4d939", size = 1892472 },
224
+ { url = "https://files.pythonhosted.org/packages/4e/d4/3c59514e0f55a161004792b9ff3039da52448f43f5834f905abef9db6e4a/pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b172f7b9d2f3abc0efd12e3386f7e48b576ef309544ac3a63e5e9cdd2e24585d", size = 1977509 },
225
+ { url = "https://files.pythonhosted.org/packages/a9/b6/c2c7946ef70576f79a25db59a576bce088bdc5952d1b93c9789b091df716/pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9097b9f17f91eea659b9ec58148c0747ec354a42f7389b9d50701610d86f812e", size = 2128702 },
226
+ { url = "https://files.pythonhosted.org/packages/88/fe/65a880f81e3f2a974312b61f82a03d85528f89a010ce21ad92f109d94deb/pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc77ec5b7e2118b152b0d886c7514a4653bcb58c6b1d760134a9fab915f777b3", size = 2679428 },
227
+ { url = "https://files.pythonhosted.org/packages/6f/ff/4459e4146afd0462fb483bb98aa2436d69c484737feaceba1341615fb0ac/pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3d15245b08fa4a84cefc6c9222e6f37c98111c8679fbd94aa145f9a0ae23d", size = 2008753 },
228
+ { url = "https://files.pythonhosted.org/packages/7c/76/1c42e384e8d78452ededac8b583fe2550c84abfef83a0552e0e7478ccbc3/pydantic_core-2.33.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ef99779001d7ac2e2461d8ab55d3373fe7315caefdbecd8ced75304ae5a6fc6b", size = 2114849 },
229
+ { url = "https://files.pythonhosted.org/packages/00/72/7d0cf05095c15f7ffe0eb78914b166d591c0eed72f294da68378da205101/pydantic_core-2.33.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:fc6bf8869e193855e8d91d91f6bf59699a5cdfaa47a404e278e776dd7f168b39", size = 2069541 },
230
+ { url = "https://files.pythonhosted.org/packages/b3/69/94a514066bb7d8be499aa764926937409d2389c09be0b5107a970286ef81/pydantic_core-2.33.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:b1caa0bc2741b043db7823843e1bde8aaa58a55a58fda06083b0569f8b45693a", size = 2239225 },
231
+ { url = "https://files.pythonhosted.org/packages/84/b0/e390071eadb44b41f4f54c3cef64d8bf5f9612c92686c9299eaa09e267e2/pydantic_core-2.33.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ec259f62538e8bf364903a7d0d0239447059f9434b284f5536e8402b7dd198db", size = 2248373 },
232
+ { url = "https://files.pythonhosted.org/packages/d6/b2/288b3579ffc07e92af66e2f1a11be3b056fe1214aab314748461f21a31c3/pydantic_core-2.33.1-cp312-cp312-win32.whl", hash = "sha256:e14f369c98a7c15772b9da98987f58e2b509a93235582838bd0d1d8c08b68fda", size = 1907034 },
233
+ { url = "https://files.pythonhosted.org/packages/02/28/58442ad1c22b5b6742b992ba9518420235adced665513868f99a1c2638a5/pydantic_core-2.33.1-cp312-cp312-win_amd64.whl", hash = "sha256:1c607801d85e2e123357b3893f82c97a42856192997b95b4d8325deb1cd0c5f4", size = 1956848 },
234
+ { url = "https://files.pythonhosted.org/packages/a1/eb/f54809b51c7e2a1d9f439f158b8dd94359321abcc98767e16fc48ae5a77e/pydantic_core-2.33.1-cp312-cp312-win_arm64.whl", hash = "sha256:8d13f0276806ee722e70a1c93da19748594f19ac4299c7e41237fc791d1861ea", size = 1903986 },
235
+ { url = "https://files.pythonhosted.org/packages/7a/24/eed3466a4308d79155f1cdd5c7432c80ddcc4530ba8623b79d5ced021641/pydantic_core-2.33.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:70af6a21237b53d1fe7b9325b20e65cbf2f0a848cf77bed492b029139701e66a", size = 2033551 },
236
+ { url = "https://files.pythonhosted.org/packages/ab/14/df54b1a0bc9b6ded9b758b73139d2c11b4e8eb43e8ab9c5847c0a2913ada/pydantic_core-2.33.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:282b3fe1bbbe5ae35224a0dbd05aed9ccabccd241e8e6b60370484234b456266", size = 1852785 },
237
+ { url = "https://files.pythonhosted.org/packages/fa/96/e275f15ff3d34bb04b0125d9bc8848bf69f25d784d92a63676112451bfb9/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b315e596282bbb5822d0c7ee9d255595bd7506d1cb20c2911a4da0b970187d3", size = 1897758 },
238
+ { url = "https://files.pythonhosted.org/packages/b7/d8/96bc536e975b69e3a924b507d2a19aedbf50b24e08c80fb00e35f9baaed8/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1dfae24cf9921875ca0ca6a8ecb4bb2f13c855794ed0d468d6abbec6e6dcd44a", size = 1986109 },
239
+ { url = "https://files.pythonhosted.org/packages/90/72/ab58e43ce7e900b88cb571ed057b2fcd0e95b708a2e0bed475b10130393e/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6dd8ecfde08d8bfadaea669e83c63939af76f4cf5538a72597016edfa3fad516", size = 2129159 },
240
+ { url = "https://files.pythonhosted.org/packages/dc/3f/52d85781406886c6870ac995ec0ba7ccc028b530b0798c9080531b409fdb/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f593494876eae852dc98c43c6f260f45abdbfeec9e4324e31a481d948214764", size = 2680222 },
241
+ { url = "https://files.pythonhosted.org/packages/f4/56/6e2ef42f363a0eec0fd92f74a91e0ac48cd2e49b695aac1509ad81eee86a/pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:948b73114f47fd7016088e5186d13faf5e1b2fe83f5e320e371f035557fd264d", size = 2006980 },
242
+ { url = "https://files.pythonhosted.org/packages/4c/c0/604536c4379cc78359f9ee0aa319f4aedf6b652ec2854953f5a14fc38c5a/pydantic_core-2.33.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e11f3864eb516af21b01e25fac915a82e9ddad3bb0fb9e95a246067398b435a4", size = 2120840 },
243
+ { url = "https://files.pythonhosted.org/packages/1f/46/9eb764814f508f0edfb291a0f75d10854d78113fa13900ce13729aaec3ae/pydantic_core-2.33.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:549150be302428b56fdad0c23c2741dcdb5572413776826c965619a25d9c6bde", size = 2072518 },
244
+ { url = "https://files.pythonhosted.org/packages/42/e3/fb6b2a732b82d1666fa6bf53e3627867ea3131c5f39f98ce92141e3e3dc1/pydantic_core-2.33.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:495bc156026efafd9ef2d82372bd38afce78ddd82bf28ef5276c469e57c0c83e", size = 2248025 },
245
+ { url = "https://files.pythonhosted.org/packages/5c/9d/fbe8fe9d1aa4dac88723f10a921bc7418bd3378a567cb5e21193a3c48b43/pydantic_core-2.33.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ec79de2a8680b1a67a07490bddf9636d5c2fab609ba8c57597e855fa5fa4dacd", size = 2254991 },
246
+ { url = "https://files.pythonhosted.org/packages/aa/99/07e2237b8a66438d9b26482332cda99a9acccb58d284af7bc7c946a42fd3/pydantic_core-2.33.1-cp313-cp313-win32.whl", hash = "sha256:ee12a7be1742f81b8a65b36c6921022301d466b82d80315d215c4c691724986f", size = 1915262 },
247
+ { url = "https://files.pythonhosted.org/packages/8a/f4/e457a7849beeed1e5defbcf5051c6f7b3c91a0624dd31543a64fc9adcf52/pydantic_core-2.33.1-cp313-cp313-win_amd64.whl", hash = "sha256:ede9b407e39949d2afc46385ce6bd6e11588660c26f80576c11c958e6647bc40", size = 1956626 },
248
+ { url = "https://files.pythonhosted.org/packages/20/d0/e8d567a7cff7b04e017ae164d98011f1e1894269fe8e90ea187a3cbfb562/pydantic_core-2.33.1-cp313-cp313-win_arm64.whl", hash = "sha256:aa687a23d4b7871a00e03ca96a09cad0f28f443690d300500603bd0adba4b523", size = 1909590 },
249
+ { url = "https://files.pythonhosted.org/packages/ef/fd/24ea4302d7a527d672c5be06e17df16aabfb4e9fdc6e0b345c21580f3d2a/pydantic_core-2.33.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:401d7b76e1000d0dd5538e6381d28febdcacb097c8d340dde7d7fc6e13e9f95d", size = 1812963 },
250
+ { url = "https://files.pythonhosted.org/packages/5f/95/4fbc2ecdeb5c1c53f1175a32d870250194eb2fdf6291b795ab08c8646d5d/pydantic_core-2.33.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7aeb055a42d734c0255c9e489ac67e75397d59c6fbe60d155851e9782f276a9c", size = 1986896 },
251
+ { url = "https://files.pythonhosted.org/packages/71/ae/fe31e7f4a62431222d8f65a3bd02e3fa7e6026d154a00818e6d30520ea77/pydantic_core-2.33.1-cp313-cp313t-win_amd64.whl", hash = "sha256:338ea9b73e6e109f15ab439e62cb3b78aa752c7fd9536794112e14bee02c8d18", size = 1931810 },
252
+ ]
253
+
254
+ [[package]]
255
+ name = "python-dateutil"
256
+ version = "2.9.0.post0"
257
+ source = { registry = "https://pypi.org/simple" }
258
+ dependencies = [
259
+ { name = "six" },
260
+ ]
261
+ sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 }
262
+ wheels = [
263
+ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 },
264
+ ]
265
+
266
+ [[package]]
267
+ name = "six"
268
+ version = "1.17.0"
269
+ source = { registry = "https://pypi.org/simple" }
270
+ sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 }
271
+ wheels = [
272
+ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 },
273
+ ]
274
+
275
+ [[package]]
276
+ name = "typeguard"
277
+ version = "2.13.3"
278
+ source = { registry = "https://pypi.org/simple" }
279
+ sdist = { url = "https://files.pythonhosted.org/packages/3a/38/c61bfcf62a7b572b5e9363a802ff92559cb427ee963048e1442e3aef7490/typeguard-2.13.3.tar.gz", hash = "sha256:00edaa8da3a133674796cf5ea87d9f4b4c367d77476e185e80251cc13dfbb8c4", size = 40604 }
280
+ wheels = [
281
+ { url = "https://files.pythonhosted.org/packages/9a/bb/d43e5c75054e53efce310e79d63df0ac3f25e34c926be5dffb7d283fb2a8/typeguard-2.13.3-py3-none-any.whl", hash = "sha256:5e3e3be01e887e7eafae5af63d1f36c849aaa94e3a0112097312aabfa16284f1", size = 17605 },
282
+ ]
283
+
284
+ [[package]]
285
+ name = "typing-extensions"
286
+ version = "4.13.2"
287
+ source = { registry = "https://pypi.org/simple" }
288
+ sdist = { url = "https://files.pythonhosted.org/packages/f6/37/23083fcd6e35492953e8d2aaaa68b860eb422b34627b13f2ce3eb6106061/typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef", size = 106967 }
289
+ wheels = [
290
+ { url = "https://files.pythonhosted.org/packages/8b/54/b1ae86c0973cc6f0210b53d508ca3641fb6d0c56823f288d108bc7ab3cc8/typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", size = 45806 },
291
+ ]
292
+
293
+ [[package]]
294
+ name = "typing-inspection"
295
+ version = "0.4.0"
296
+ source = { registry = "https://pypi.org/simple" }
297
+ dependencies = [
298
+ { name = "typing-extensions" },
299
+ ]
300
+ sdist = { url = "https://files.pythonhosted.org/packages/82/5c/e6082df02e215b846b4b8c0b887a64d7d08ffaba30605502639d44c06b82/typing_inspection-0.4.0.tar.gz", hash = "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122", size = 76222 }
301
+ wheels = [
302
+ { url = "https://files.pythonhosted.org/packages/31/08/aa4fdfb71f7de5176385bd9e90852eaf6b5d622735020ad600f2bab54385/typing_inspection-0.4.0-py3-none-any.whl", hash = "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f", size = 14125 },
303
+ ]
304
+
305
+ [[package]]
306
+ name = "watchdog"
307
+ version = "4.0.2"
308
+ source = { registry = "https://pypi.org/simple" }
309
+ sdist = { url = "https://files.pythonhosted.org/packages/4f/38/764baaa25eb5e35c9a043d4c4588f9836edfe52a708950f4b6d5f714fd42/watchdog-4.0.2.tar.gz", hash = "sha256:b4dfbb6c49221be4535623ea4474a4d6ee0a9cef4a80b20c28db4d858b64e270", size = 126587 }
310
+ wheels = [
311
+ { url = "https://files.pythonhosted.org/packages/92/f5/ea22b095340545faea37ad9a42353b265ca751f543da3fb43f5d00cdcd21/watchdog-4.0.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1cdcfd8142f604630deef34722d695fb455d04ab7cfe9963055df1fc69e6727a", size = 100342 },
312
+ { url = "https://files.pythonhosted.org/packages/cb/d2/8ce97dff5e465db1222951434e3115189ae54a9863aef99c6987890cc9ef/watchdog-4.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d7ab624ff2f663f98cd03c8b7eedc09375a911794dfea6bf2a359fcc266bff29", size = 92306 },
313
+ { url = "https://files.pythonhosted.org/packages/49/c4/1aeba2c31b25f79b03b15918155bc8c0b08101054fc727900f1a577d0d54/watchdog-4.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:132937547a716027bd5714383dfc40dc66c26769f1ce8a72a859d6a48f371f3a", size = 92915 },
314
+ { url = "https://files.pythonhosted.org/packages/79/63/eb8994a182672c042d85a33507475c50c2ee930577524dd97aea05251527/watchdog-4.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:cd67c7df93eb58f360c43802acc945fa8da70c675b6fa37a241e17ca698ca49b", size = 100343 },
315
+ { url = "https://files.pythonhosted.org/packages/ce/82/027c0c65c2245769580605bcd20a1dc7dfd6c6683c8c4e2ef43920e38d27/watchdog-4.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bcfd02377be80ef3b6bc4ce481ef3959640458d6feaae0bd43dd90a43da90a7d", size = 92313 },
316
+ { url = "https://files.pythonhosted.org/packages/2a/89/ad4715cbbd3440cb0d336b78970aba243a33a24b1a79d66f8d16b4590d6a/watchdog-4.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:980b71510f59c884d684b3663d46e7a14b457c9611c481e5cef08f4dd022eed7", size = 92919 },
317
+ { url = "https://files.pythonhosted.org/packages/8a/b1/25acf6767af6f7e44e0086309825bd8c098e301eed5868dc5350642124b9/watchdog-4.0.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:936acba76d636f70db8f3c66e76aa6cb5136a936fc2a5088b9ce1c7a3508fc83", size = 82947 },
318
+ { url = "https://files.pythonhosted.org/packages/e8/90/aebac95d6f954bd4901f5d46dcd83d68e682bfd21798fd125a95ae1c9dbf/watchdog-4.0.2-py3-none-manylinux2014_armv7l.whl", hash = "sha256:e252f8ca942a870f38cf785aef420285431311652d871409a64e2a0a52a2174c", size = 82942 },
319
+ { url = "https://files.pythonhosted.org/packages/15/3a/a4bd8f3b9381824995787488b9282aff1ed4667e1110f31a87b871ea851c/watchdog-4.0.2-py3-none-manylinux2014_i686.whl", hash = "sha256:0e83619a2d5d436a7e58a1aea957a3c1ccbf9782c43c0b4fed80580e5e4acd1a", size = 82947 },
320
+ { url = "https://files.pythonhosted.org/packages/09/cc/238998fc08e292a4a18a852ed8274159019ee7a66be14441325bcd811dfd/watchdog-4.0.2-py3-none-manylinux2014_ppc64.whl", hash = "sha256:88456d65f207b39f1981bf772e473799fcdc10801062c36fd5ad9f9d1d463a73", size = 82946 },
321
+ { url = "https://files.pythonhosted.org/packages/80/f1/d4b915160c9d677174aa5fae4537ae1f5acb23b3745ab0873071ef671f0a/watchdog-4.0.2-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:32be97f3b75693a93c683787a87a0dc8db98bb84701539954eef991fb35f5fbc", size = 82947 },
322
+ { url = "https://files.pythonhosted.org/packages/db/02/56ebe2cf33b352fe3309588eb03f020d4d1c061563d9858a9216ba004259/watchdog-4.0.2-py3-none-manylinux2014_s390x.whl", hash = "sha256:c82253cfc9be68e3e49282831afad2c1f6593af80c0daf1287f6a92657986757", size = 82944 },
323
+ { url = "https://files.pythonhosted.org/packages/01/d2/c8931ff840a7e5bd5dcb93f2bb2a1fd18faf8312e9f7f53ff1cf76ecc8ed/watchdog-4.0.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:c0b14488bd336c5b1845cee83d3e631a1f8b4e9c5091ec539406e4a324f882d8", size = 82947 },
324
+ { url = "https://files.pythonhosted.org/packages/d0/d8/cdb0c21a4a988669d7c210c75c6a2c9a0e16a3b08d9f7e633df0d9a16ad8/watchdog-4.0.2-py3-none-win32.whl", hash = "sha256:0d8a7e523ef03757a5aa29f591437d64d0d894635f8a50f370fe37f913ce4e19", size = 82935 },
325
+ { url = "https://files.pythonhosted.org/packages/99/2e/b69dfaae7a83ea64ce36538cc103a3065e12c447963797793d5c0a1d5130/watchdog-4.0.2-py3-none-win_amd64.whl", hash = "sha256:c344453ef3bf875a535b0488e3ad28e341adbd5a9ffb0f7d62cefacc8824ef2b", size = 82934 },
326
+ { url = "https://files.pythonhosted.org/packages/b0/0b/43b96a9ecdd65ff5545b1b13b687ca486da5c6249475b1a45f24d63a1858/watchdog-4.0.2-py3-none-win_ia64.whl", hash = "sha256:baececaa8edff42cd16558a639a9b0ddf425f93d892e8392a56bf904f5eff22c", size = 82933 },
327
+ ]
328
+
329
+ [[package]]
330
+ name = "wellapi"
331
+ version = "0.3.3"
332
+ source = { editable = "." }
333
+ dependencies = [
334
+ { name = "email-validator" },
335
+ { name = "pydantic" },
336
+ { name = "typing-extensions" },
337
+ ]
338
+
339
+ [package.optional-dependencies]
340
+ deploy = [
341
+ { name = "aws-cdk-lib" },
342
+ { name = "constructs" },
343
+ ]
344
+ local = [
345
+ { name = "click" },
346
+ { name = "watchdog" },
347
+ ]
348
+
349
+ [package.metadata]
350
+ requires-dist = [
351
+ { name = "aws-cdk-lib", marker = "extra == 'deploy'", specifier = ">=2.189.1" },
352
+ { name = "click", marker = "extra == 'local'", specifier = ">=8.1.8" },
353
+ { name = "constructs", marker = "extra == 'deploy'", specifier = ">=10.0.0" },
354
+ { name = "email-validator", specifier = ">=2.0.0" },
355
+ { name = "pydantic", specifier = "==2.11.3" },
356
+ { name = "typing-extensions", specifier = ">=4.8.0" },
357
+ { name = "watchdog", marker = "extra == 'local'", specifier = ">=4.0.2" },
358
+ ]
359
+ provides-extras = ["deploy", "local"]
@@ -1,87 +0,0 @@
1
- from typing import Annotated
2
-
3
- from pydantic import BaseModel, Field
4
-
5
- from main import app
6
- from wellapi.exceptions import HTTPException, RequestValidationError
7
- from wellapi.models import RequestAPIGateway, ResponseAPIGateway
8
- from wellapi.params import Query, Depends, Cache, Header
9
- from wellapi.security import OAuth2PasswordBearer, APIKeyHeader
10
-
11
-
12
- class OtherResponse(BaseModel):
13
- message: str
14
-
15
-
16
- class OtherBody(BaseModel):
17
- name: str
18
- age: int
19
-
20
-
21
- class FilterParams(BaseModel):
22
- limit: int = Field(100, gt=0, le=100)
23
- offset: int = Field(0, ge=0)
24
-
25
-
26
- oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
27
- header_scheme = APIKeyHeader(name="x-api-key")
28
-
29
-
30
- def verify_token(token: Annotated[str, Depends(oauth2_scheme)]):
31
- if token != "fake-token":
32
- raise HTTPException(status_code=403, detail="Not authenticated")
33
-
34
- return token
35
-
36
-
37
- class Session:
38
- def __init__(self):
39
- self.session = "session"
40
-
41
-
42
- def db() -> Session:
43
- print("DB connection")
44
- return Session()
45
-
46
-
47
- @app.post(
48
- "/ping/{ping_id}",
49
- dependencies=[Depends(header_scheme)],
50
- status_code=201,
51
- tags=["ping"],
52
- cache_parameters=Cache(path='ping_id', header=['user-agent'], query=['limit', 'offset']),
53
- )
54
- def ping(ping_id: int, item: list[OtherBody], user_agent: Annotated[str, Header(alias="user-agent")], param: Annotated[FilterParams, Query()]) -> OtherResponse:
55
- return OtherResponse(
56
- message=f"Pong {ping_id}.",
57
- )
58
-
59
-
60
- @app.post("/ping", dependencies=[Depends(verify_token)], status_code=201, tags=["ping"])
61
- def ping_v2(item: list[OtherBody], param: Annotated[FilterParams, Query()]) -> OtherResponse:
62
- return OtherResponse(
63
- message=f"Pong {param.limit} {param.offset}",
64
- )
65
-
66
-
67
- @app.sqs("ping-sqs")
68
- def ping_sqs(events: list[OtherBody]):
69
- print(events)
70
-
71
-
72
- @app.job("rate(5 minutes)", name="ping_job")
73
- def ping_job(dbbb: Annotated[Session, Depends(db)]):
74
- print(f"Ping job {dbbb.session}")
75
-
76
-
77
- @app.middleware()
78
- def db_connection(request: RequestAPIGateway, next_call) -> ResponseAPIGateway:
79
- print("Before request")
80
- response = next_call(request)
81
- print("After request")
82
- return response
83
-
84
-
85
- @app.exception_handler(RequestValidationError)
86
- def validation_exception_handler(request, exc):
87
- return ResponseAPIGateway(exc.errors(), status_code=422)
wellapi-0.3.0/main.py DELETED
@@ -1,21 +0,0 @@
1
- from typing import Annotated
2
-
3
- from wellapi import WellApi as FastAPI
4
- from wellapi.params import Header
5
-
6
- app = FastAPI(
7
- debug=True,
8
- servers=[{"url": "http://localhost:8000", "description": "Local server"}],
9
- )
10
-
11
-
12
-
13
-
14
- @app.get("/hello")
15
- def hello(test: Annotated[list[str] | None, Header()]):
16
- """
17
- A simple hello world endpoint.
18
- :return:
19
- """
20
- print(test)
21
- return test