fastapi-injected 0.1.0__tar.gz → 0.1.2__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.
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/PKG-INFO +1 -1
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/fastapi_injected/__init__.py +2 -2
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/fastapi_injected/sign.py +2 -2
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/fastapi_injected/types.py +3 -3
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/pyproject.toml +3 -2
- fastapi_injected-0.1.2/tests/ext/__init__.py +0 -0
- fastapi_injected-0.1.2/tests/ext/test_pydantic_ai.py +41 -0
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/tests/test_inject.py +7 -7
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/tests/test_typing.py +2 -2
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/uv.lock +167 -1
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/.github/dependabot.yml +0 -0
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/.github/workflows/automerge.yml +0 -0
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/.github/workflows/lint.yml +0 -0
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/.github/workflows/publish.yml +0 -0
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/.github/workflows/test.yml +0 -0
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/.gitignore +0 -0
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/.pre-commit-config.yaml +0 -0
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/LICENSE +0 -0
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/README.md +0 -0
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/fastapi_injected/deps.py +0 -0
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/fastapi_injected/inject.py +1 -1
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/fastapi_injected/scope.py +0 -0
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/fastapi_injected/solve.py +0 -0
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/tests/__init__.py +0 -0
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/tests/deps.py +0 -0
- {fastapi_injected-0.1.0 → fastapi_injected-0.1.2}/tests/test_solve.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fastapi-injected
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Yet another library to reuse fastapi dependency injection
|
|
5
5
|
Project-URL: Repository, https://github.com/uriyyo/fastapi-injected
|
|
6
6
|
Author-email: Yurii Karabas <1998uriyyo@gmail.com>
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
from .inject import inject
|
|
2
2
|
from .scope import push_inject_scope
|
|
3
3
|
from .solve import solve
|
|
4
|
-
from .types import Dep, DepFactory,
|
|
4
|
+
from .types import Dep, DepFactory, Injected
|
|
5
5
|
|
|
6
6
|
__all__ = [
|
|
7
7
|
"Dep",
|
|
8
8
|
"DepFactory",
|
|
9
|
-
"
|
|
9
|
+
"Injected",
|
|
10
10
|
"inject",
|
|
11
11
|
"push_inject_scope",
|
|
12
12
|
"solve",
|
|
@@ -4,7 +4,7 @@ from typing import cast
|
|
|
4
4
|
from fastapi.dependencies.models import Dependant
|
|
5
5
|
from fastapi.dependencies.utils import analyze_param
|
|
6
6
|
|
|
7
|
-
from .types import Decorator, Func, HasSignature,
|
|
7
|
+
from .types import Decorator, Func, HasSignature, Injected
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
def update_func_sign[**P, R](func: Func[P, R], sign: inspect.Signature) -> Func[P, R]:
|
|
@@ -14,7 +14,7 @@ def update_func_sign[**P, R](func: Func[P, R], sign: inspect.Signature) -> Func[
|
|
|
14
14
|
|
|
15
15
|
def prepare_sign(sign: inspect.Signature) -> inspect.Signature:
|
|
16
16
|
def _update_param(param: inspect.Parameter) -> inspect.Parameter:
|
|
17
|
-
if param.default is
|
|
17
|
+
if param.default is Injected:
|
|
18
18
|
param = param.replace(default=inspect.Parameter.empty)
|
|
19
19
|
|
|
20
20
|
return param
|
|
@@ -7,9 +7,9 @@ from fastapi.types import DependencyCacheKey
|
|
|
7
7
|
from typing_extensions import sentinel
|
|
8
8
|
|
|
9
9
|
if TYPE_CHECKING:
|
|
10
|
-
|
|
10
|
+
Injected: Any = object()
|
|
11
11
|
else:
|
|
12
|
-
|
|
12
|
+
Injected = sentinel("Injected")
|
|
13
13
|
|
|
14
14
|
if TYPE_CHECKING:
|
|
15
15
|
type Dep[T] = Annotated[T, Depends()]
|
|
@@ -58,5 +58,5 @@ __all__ = [
|
|
|
58
58
|
"DependencyCache",
|
|
59
59
|
"Func",
|
|
60
60
|
"HasSignature",
|
|
61
|
-
"
|
|
61
|
+
"Injected",
|
|
62
62
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "fastapi-injected"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.2"
|
|
4
4
|
description = "Yet another library to reuse fastapi dependency injection"
|
|
5
5
|
authors = [
|
|
6
6
|
{ name = "Yurii Karabas", email = "1998uriyyo@gmail.com" },
|
|
@@ -29,6 +29,7 @@ dev = [
|
|
|
29
29
|
"ruff>=0.15.22",
|
|
30
30
|
"ty>=0.0.62",
|
|
31
31
|
"pre-commit>=4.6.1",
|
|
32
|
+
"pydantic-ai-slim>=2.15.0",
|
|
32
33
|
]
|
|
33
34
|
|
|
34
35
|
[project.urls]
|
|
@@ -103,4 +104,4 @@ exclude_lines = [
|
|
|
103
104
|
"@abstractmethod",
|
|
104
105
|
"@overload",
|
|
105
106
|
"if TYPE_CHECKING:",
|
|
106
|
-
]
|
|
107
|
+
]
|
|
File without changes
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
from pydantic_ai import Agent, RunContext
|
|
5
|
+
from pydantic_ai.models.test import TestModel
|
|
6
|
+
|
|
7
|
+
from fastapi_injected import Dep, Injected, inject
|
|
8
|
+
from tests.deps import Container
|
|
9
|
+
|
|
10
|
+
pytestmark = pytest.mark.asyncio
|
|
11
|
+
|
|
12
|
+
agent = Agent()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@agent.tool
|
|
16
|
+
@inject
|
|
17
|
+
async def tool1(
|
|
18
|
+
ctx: RunContext[Any],
|
|
19
|
+
a: int,
|
|
20
|
+
*,
|
|
21
|
+
container: Dep[Container] = Injected,
|
|
22
|
+
) -> int:
|
|
23
|
+
assert isinstance(container, Container)
|
|
24
|
+
|
|
25
|
+
return a * 2
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@agent.tool_plain
|
|
29
|
+
@inject
|
|
30
|
+
async def tool2(
|
|
31
|
+
a: int,
|
|
32
|
+
*,
|
|
33
|
+
container: Dep[Container] = Injected,
|
|
34
|
+
) -> int:
|
|
35
|
+
assert isinstance(container, Container)
|
|
36
|
+
return a * 2
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
async def test_agent_integration():
|
|
40
|
+
with agent.override(model=TestModel()):
|
|
41
|
+
await agent.run("test")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import pytest
|
|
2
2
|
|
|
3
|
-
from fastapi_injected import Dep,
|
|
3
|
+
from fastapi_injected import Dep, Injected, inject, push_inject_scope
|
|
4
4
|
|
|
5
5
|
from .deps import Child, Container, ContextState
|
|
6
6
|
|
|
@@ -12,7 +12,7 @@ async def test_inject():
|
|
|
12
12
|
@inject
|
|
13
13
|
async def func(
|
|
14
14
|
*,
|
|
15
|
-
bar: Dep[Container] =
|
|
15
|
+
bar: Dep[Container] = Injected,
|
|
16
16
|
) -> None:
|
|
17
17
|
assert isinstance(bar, Container)
|
|
18
18
|
assert isinstance(bar.child, Child)
|
|
@@ -25,7 +25,7 @@ async def test_inject_reuse_cache():
|
|
|
25
25
|
@inject
|
|
26
26
|
async def func(
|
|
27
27
|
*,
|
|
28
|
-
bar: Dep[Container] =
|
|
28
|
+
bar: Dep[Container] = Injected,
|
|
29
29
|
) -> Container:
|
|
30
30
|
return bar
|
|
31
31
|
|
|
@@ -40,7 +40,7 @@ async def test_inject_new_scope_use_different_cache():
|
|
|
40
40
|
@inject(new_scope=True)
|
|
41
41
|
async def func(
|
|
42
42
|
*,
|
|
43
|
-
bar: Dep[Container] =
|
|
43
|
+
bar: Dep[Container] = Injected,
|
|
44
44
|
) -> Container:
|
|
45
45
|
return bar
|
|
46
46
|
|
|
@@ -57,7 +57,7 @@ async def test_inject_func_with_args():
|
|
|
57
57
|
a: int,
|
|
58
58
|
b: int,
|
|
59
59
|
*,
|
|
60
|
-
bar: Dep[Container] =
|
|
60
|
+
bar: Dep[Container] = Injected,
|
|
61
61
|
) -> int:
|
|
62
62
|
assert isinstance(bar, Container)
|
|
63
63
|
assert isinstance(bar.child, Child)
|
|
@@ -73,7 +73,7 @@ async def test_inject_teardown():
|
|
|
73
73
|
@inject
|
|
74
74
|
async def func(
|
|
75
75
|
*,
|
|
76
|
-
bar: Dep[Container] =
|
|
76
|
+
bar: Dep[Container] = Injected,
|
|
77
77
|
) -> ContextState:
|
|
78
78
|
assert not bar.ctx.closed
|
|
79
79
|
return bar.ctx
|
|
@@ -86,7 +86,7 @@ async def test_inject_teardown_in_scope():
|
|
|
86
86
|
@inject
|
|
87
87
|
async def func(
|
|
88
88
|
*,
|
|
89
|
-
bar: Dep[Container] =
|
|
89
|
+
bar: Dep[Container] = Injected,
|
|
90
90
|
) -> ContextState:
|
|
91
91
|
assert not bar.ctx.closed
|
|
92
92
|
return bar.ctx
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from typing import TYPE_CHECKING
|
|
2
2
|
|
|
3
|
-
from fastapi_injected import Dep, DepFactory,
|
|
3
|
+
from fastapi_injected import Dep, DepFactory, Injected, inject, solve
|
|
4
4
|
|
|
5
5
|
from .deps import Child, Container, ContextState, ctx_dep
|
|
6
6
|
|
|
@@ -13,7 +13,7 @@ if TYPE_CHECKING:
|
|
|
13
13
|
async def func(
|
|
14
14
|
a: int,
|
|
15
15
|
*,
|
|
16
|
-
container: Dep[Container] =
|
|
16
|
+
container: Dep[Container] = Injected,
|
|
17
17
|
) -> int:
|
|
18
18
|
static_assert(is_equivalent_to(TypeOf[container], Container))
|
|
19
19
|
static_assert(is_equivalent_to(TypeOf[container.child], Child))
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
version = 1
|
|
2
2
|
revision = 3
|
|
3
3
|
requires-python = ">=3.12"
|
|
4
|
+
resolution-markers = [
|
|
5
|
+
"python_full_version >= '3.14'",
|
|
6
|
+
"python_full_version < '3.14'",
|
|
7
|
+
]
|
|
4
8
|
|
|
5
9
|
[[package]]
|
|
6
10
|
name = "annotated-doc"
|
|
@@ -33,6 +37,15 @@ wheels = [
|
|
|
33
37
|
{ url = "https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494", size = 125813, upload-time = "2026-07-12T20:29:05.763Z" },
|
|
34
38
|
]
|
|
35
39
|
|
|
40
|
+
[[package]]
|
|
41
|
+
name = "certifi"
|
|
42
|
+
version = "2026.7.22"
|
|
43
|
+
source = { registry = "https://pypi.org/simple" }
|
|
44
|
+
sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" }
|
|
45
|
+
wheels = [
|
|
46
|
+
{ url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" },
|
|
47
|
+
]
|
|
48
|
+
|
|
36
49
|
[[package]]
|
|
37
50
|
name = "cfgv"
|
|
38
51
|
version = "3.5.0"
|
|
@@ -147,7 +160,7 @@ wheels = [
|
|
|
147
160
|
|
|
148
161
|
[[package]]
|
|
149
162
|
name = "fastapi-injected"
|
|
150
|
-
version = "0.1.
|
|
163
|
+
version = "0.1.2"
|
|
151
164
|
source = { editable = "." }
|
|
152
165
|
dependencies = [
|
|
153
166
|
{ name = "fastapi" },
|
|
@@ -156,6 +169,7 @@ dependencies = [
|
|
|
156
169
|
[package.dev-dependencies]
|
|
157
170
|
dev = [
|
|
158
171
|
{ name = "pre-commit" },
|
|
172
|
+
{ name = "pydantic-ai-slim" },
|
|
159
173
|
{ name = "pytest" },
|
|
160
174
|
{ name = "pytest-asyncio" },
|
|
161
175
|
{ name = "pytest-cov" },
|
|
@@ -169,6 +183,7 @@ requires-dist = [{ name = "fastapi", specifier = ">=0.139.2" }]
|
|
|
169
183
|
[package.metadata.requires-dev]
|
|
170
184
|
dev = [
|
|
171
185
|
{ name = "pre-commit", specifier = ">=4.6.1" },
|
|
186
|
+
{ name = "pydantic-ai-slim", specifier = ">=2.15.0" },
|
|
172
187
|
{ name = "pytest", specifier = ">=9.1.1" },
|
|
173
188
|
{ name = "pytest-asyncio", specifier = ">=1.4.0" },
|
|
174
189
|
{ name = "pytest-cov", specifier = ">=7.1.0" },
|
|
@@ -185,6 +200,94 @@ wheels = [
|
|
|
185
200
|
{ url = "https://files.pythonhosted.org/packages/06/79/b4c714bef36bc4ec2beeae1e0c124f0223888cd8c6feb1cdc56038116920/filelock-3.32.0-py3-none-any.whl", hash = "sha256:d396bea984af47333ef05e50eae7eff88c84256de6112aea0ec48a233c064fe3", size = 97732, upload-time = "2026-07-21T13:17:41.55Z" },
|
|
186
201
|
]
|
|
187
202
|
|
|
203
|
+
[[package]]
|
|
204
|
+
name = "genai-prices"
|
|
205
|
+
version = "0.0.71"
|
|
206
|
+
source = { registry = "https://pypi.org/simple" }
|
|
207
|
+
dependencies = [
|
|
208
|
+
{ name = "httpx2" },
|
|
209
|
+
{ name = "pydantic" },
|
|
210
|
+
]
|
|
211
|
+
sdist = { url = "https://files.pythonhosted.org/packages/1d/e4/5072862613fba039da2b7c981a8649c6c6bbcb2863bd8bc81617c09ce5ee/genai_prices-0.0.71.tar.gz", hash = "sha256:de4db34ec38404f9ef383cb1ab29e204d16ccf27071af0b16d5747ee7affe36b", size = 82105, upload-time = "2026-07-10T00:38:30.491Z" }
|
|
212
|
+
wheels = [
|
|
213
|
+
{ url = "https://files.pythonhosted.org/packages/0d/98/c06c1318f6834a26268a2d4280e4183f60c5ea92152aea841feff29826ff/genai_prices-0.0.71-py3-none-any.whl", hash = "sha256:1d13111563af2b1ce43ccfacf77b7ac3216ad704c644408a56e11b181fe0d128", size = 84586, upload-time = "2026-07-10T00:38:29.252Z" },
|
|
214
|
+
]
|
|
215
|
+
|
|
216
|
+
[[package]]
|
|
217
|
+
name = "griffelib"
|
|
218
|
+
version = "2.1.0"
|
|
219
|
+
source = { registry = "https://pypi.org/simple" }
|
|
220
|
+
sdist = { url = "https://files.pythonhosted.org/packages/33/e4/8d187ea29c2e30b3a09505c567513077d6117861bde1fbd997a167f262ec/griffelib-2.1.0.tar.gz", hash = "sha256:762a186d2c6fd6794d4ea20d428d597ffb857cb56b66421651cbba15bdd5e813", size = 216234, upload-time = "2026-06-19T12:05:42.278Z" }
|
|
221
|
+
wheels = [
|
|
222
|
+
{ url = "https://files.pythonhosted.org/packages/e4/d3/5268aeabf2ad82658c4e2ff3a060648d0f02f3926cb53247c0e4d0dab49e/griffelib-2.1.0-py3-none-any.whl", hash = "sha256:cc7b3d2d2865ad0b909fcc38086e3f554b5ea7acbaa7bbb7ecaa3f5dfb7d9f00", size = 142560, upload-time = "2026-06-19T12:05:38.742Z" },
|
|
223
|
+
]
|
|
224
|
+
|
|
225
|
+
[[package]]
|
|
226
|
+
name = "h11"
|
|
227
|
+
version = "0.16.0"
|
|
228
|
+
source = { registry = "https://pypi.org/simple" }
|
|
229
|
+
sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" }
|
|
230
|
+
wheels = [
|
|
231
|
+
{ url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" },
|
|
232
|
+
]
|
|
233
|
+
|
|
234
|
+
[[package]]
|
|
235
|
+
name = "httpcore"
|
|
236
|
+
version = "1.0.9"
|
|
237
|
+
source = { registry = "https://pypi.org/simple" }
|
|
238
|
+
dependencies = [
|
|
239
|
+
{ name = "certifi" },
|
|
240
|
+
{ name = "h11" },
|
|
241
|
+
]
|
|
242
|
+
sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" }
|
|
243
|
+
wheels = [
|
|
244
|
+
{ url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" },
|
|
245
|
+
]
|
|
246
|
+
|
|
247
|
+
[[package]]
|
|
248
|
+
name = "httpcore2"
|
|
249
|
+
version = "2.7.0"
|
|
250
|
+
source = { registry = "https://pypi.org/simple" }
|
|
251
|
+
dependencies = [
|
|
252
|
+
{ name = "h11" },
|
|
253
|
+
{ name = "truststore" },
|
|
254
|
+
]
|
|
255
|
+
sdist = { url = "https://files.pythonhosted.org/packages/d5/fe/6a3f9f1a8bb8733326140737446aaf72fddb8b54b8f202302f5c84960613/httpcore2-2.7.0.tar.gz", hash = "sha256:6dc0fedf329a52a990930a5579edfebaea81118ea700ea0dd7de2b5e5be49efc", size = 65593, upload-time = "2026-07-14T20:40:01.111Z" }
|
|
256
|
+
wheels = [
|
|
257
|
+
{ url = "https://files.pythonhosted.org/packages/6f/6c/62e2e279e63fc4f7a5ee841ef13175a8bbc613f258e9dcc186e9de803a42/httpcore2-2.7.0-py3-none-any.whl", hash = "sha256:1452f589fe23f55b44546cd884294c41a29330af902bc0b71a761fd52d18f92b", size = 81506, upload-time = "2026-07-14T20:39:58.053Z" },
|
|
258
|
+
]
|
|
259
|
+
|
|
260
|
+
[[package]]
|
|
261
|
+
name = "httpx"
|
|
262
|
+
version = "0.28.1"
|
|
263
|
+
source = { registry = "https://pypi.org/simple" }
|
|
264
|
+
dependencies = [
|
|
265
|
+
{ name = "anyio" },
|
|
266
|
+
{ name = "certifi" },
|
|
267
|
+
{ name = "httpcore" },
|
|
268
|
+
{ name = "idna" },
|
|
269
|
+
]
|
|
270
|
+
sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" }
|
|
271
|
+
wheels = [
|
|
272
|
+
{ url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" },
|
|
273
|
+
]
|
|
274
|
+
|
|
275
|
+
[[package]]
|
|
276
|
+
name = "httpx2"
|
|
277
|
+
version = "2.7.0"
|
|
278
|
+
source = { registry = "https://pypi.org/simple" }
|
|
279
|
+
dependencies = [
|
|
280
|
+
{ name = "anyio" },
|
|
281
|
+
{ name = "httpcore2" },
|
|
282
|
+
{ name = "idna" },
|
|
283
|
+
{ name = "truststore" },
|
|
284
|
+
{ name = "typing-extensions", marker = "python_full_version < '3.13'" },
|
|
285
|
+
]
|
|
286
|
+
sdist = { url = "https://files.pythonhosted.org/packages/a3/4a/129b2e21b90ac2985d3928d96792bccc39bc6dfe796c5eee2d8ec06d4105/httpx2-2.7.0.tar.gz", hash = "sha256:8b30709aed5c8465b0dd3b95c09ce301c8f79e7e7a2d00ab0af551e0d0375b07", size = 94487, upload-time = "2026-07-14T20:40:02.318Z" }
|
|
287
|
+
wheels = [
|
|
288
|
+
{ url = "https://files.pythonhosted.org/packages/1d/b8/c341bba6411bdfda786020343c47a75ef472f6085caf82391b142b1a3ad9/httpx2-2.7.0-py3-none-any.whl", hash = "sha256:ed2a2719c696789e09493bd8e2bec3d8bd925cc6e26b68389ec25ade132f7bf4", size = 90234, upload-time = "2026-07-14T20:39:59.531Z" },
|
|
289
|
+
]
|
|
290
|
+
|
|
188
291
|
[[package]]
|
|
189
292
|
name = "identify"
|
|
190
293
|
version = "2.6.19"
|
|
@@ -212,6 +315,15 @@ wheels = [
|
|
|
212
315
|
{ url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" },
|
|
213
316
|
]
|
|
214
317
|
|
|
318
|
+
[[package]]
|
|
319
|
+
name = "logfire-api"
|
|
320
|
+
version = "4.38.0"
|
|
321
|
+
source = { registry = "https://pypi.org/simple" }
|
|
322
|
+
sdist = { url = "https://files.pythonhosted.org/packages/10/1a/17af258260cf8378fabd10bacef0c585e19697eab1deea25f8e4f4fb6462/logfire_api-4.38.0.tar.gz", hash = "sha256:e773cd4a26edb48ef4ec6f88661d1c670bb68c303a71c7043a236d64a9699cd2", size = 90364, upload-time = "2026-07-20T12:15:34.913Z" }
|
|
323
|
+
wheels = [
|
|
324
|
+
{ url = "https://files.pythonhosted.org/packages/26/22/598f988f293ce391e88baddeeaa1acaea625822653193935301e7149b5c6/logfire_api-4.38.0-py3-none-any.whl", hash = "sha256:6c0612d9200727b64b42eba6068d0d6afd45308f4b844ffd6290c2d33aa6a6f6", size = 140109, upload-time = "2026-07-20T12:15:31.973Z" },
|
|
325
|
+
]
|
|
326
|
+
|
|
215
327
|
[[package]]
|
|
216
328
|
name = "nodeenv"
|
|
217
329
|
version = "1.10.0"
|
|
@@ -221,6 +333,18 @@ wheels = [
|
|
|
221
333
|
{ url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" },
|
|
222
334
|
]
|
|
223
335
|
|
|
336
|
+
[[package]]
|
|
337
|
+
name = "opentelemetry-api"
|
|
338
|
+
version = "1.43.0"
|
|
339
|
+
source = { registry = "https://pypi.org/simple" }
|
|
340
|
+
dependencies = [
|
|
341
|
+
{ name = "typing-extensions" },
|
|
342
|
+
]
|
|
343
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ae/cc/e4c9584181f86494df0f6bdec1a4f3280c50db44704dc2a407e994fc87bb/opentelemetry_api-1.43.0.tar.gz", hash = "sha256:107d0d03857ea8fc7c5fcbbbd83f800c281f0d560553d61c1d675fccfd1761c1", size = 73476, upload-time = "2026-06-24T15:19:55.323Z" }
|
|
344
|
+
wheels = [
|
|
345
|
+
{ url = "https://files.pythonhosted.org/packages/17/83/6dba32b85f31868400440dc7ad2ca1eab94cbbf3a7b0459ed39f8311a9e2/opentelemetry_api-1.43.0-py3-none-any.whl", hash = "sha256:20acf45e9b21851926835292e4045d290acade1edd2ff3de86d2f069687ba1fd", size = 61912, upload-time = "2026-06-24T15:19:35.434Z" },
|
|
346
|
+
]
|
|
347
|
+
|
|
224
348
|
[[package]]
|
|
225
349
|
name = "packaging"
|
|
226
350
|
version = "26.2"
|
|
@@ -279,6 +403,24 @@ wheels = [
|
|
|
279
403
|
{ url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" },
|
|
280
404
|
]
|
|
281
405
|
|
|
406
|
+
[[package]]
|
|
407
|
+
name = "pydantic-ai-slim"
|
|
408
|
+
version = "2.15.0"
|
|
409
|
+
source = { registry = "https://pypi.org/simple" }
|
|
410
|
+
dependencies = [
|
|
411
|
+
{ name = "genai-prices" },
|
|
412
|
+
{ name = "griffelib" },
|
|
413
|
+
{ name = "httpx" },
|
|
414
|
+
{ name = "opentelemetry-api" },
|
|
415
|
+
{ name = "pydantic" },
|
|
416
|
+
{ name = "pydantic-graph" },
|
|
417
|
+
{ name = "typing-inspection" },
|
|
418
|
+
]
|
|
419
|
+
sdist = { url = "https://files.pythonhosted.org/packages/54/bc/65fabea030e6b40c04b25b7069b559ff5cabea6e7cadf640839ceeb08af6/pydantic_ai_slim-2.15.0.tar.gz", hash = "sha256:29d804b6caf582337f4e99f98ba4f4bf0b9e164761429daa87c392a176315e20", size = 879375, upload-time = "2026-07-22T03:59:19.447Z" }
|
|
420
|
+
wheels = [
|
|
421
|
+
{ url = "https://files.pythonhosted.org/packages/66/d9/28a6010b1d1937fc5c0fa1516d8a7e05d871920269e1dedd28db3c138195/pydantic_ai_slim-2.15.0-py3-none-any.whl", hash = "sha256:758f9cf5bf1c7e83bf4e7459e71006a3d5da46443416f71281fea202365ce7a7", size = 1066704, upload-time = "2026-07-22T03:59:12.047Z" },
|
|
422
|
+
]
|
|
423
|
+
|
|
282
424
|
[[package]]
|
|
283
425
|
name = "pydantic-core"
|
|
284
426
|
version = "2.46.4"
|
|
@@ -354,6 +496,21 @@ wheels = [
|
|
|
354
496
|
{ url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" },
|
|
355
497
|
]
|
|
356
498
|
|
|
499
|
+
[[package]]
|
|
500
|
+
name = "pydantic-graph"
|
|
501
|
+
version = "2.15.0"
|
|
502
|
+
source = { registry = "https://pypi.org/simple" }
|
|
503
|
+
dependencies = [
|
|
504
|
+
{ name = "httpx" },
|
|
505
|
+
{ name = "logfire-api" },
|
|
506
|
+
{ name = "pydantic" },
|
|
507
|
+
{ name = "typing-inspection" },
|
|
508
|
+
]
|
|
509
|
+
sdist = { url = "https://files.pythonhosted.org/packages/6a/39/f56cfeb84754b07470c4149bdc2f242308c057975d51ca1d1695a58f36c3/pydantic_graph-2.15.0.tar.gz", hash = "sha256:3cc82597ed9bfff4806e5c5105bc64e6e627924a21933962e4d8a3aebe25bc6d", size = 43934, upload-time = "2026-07-22T03:59:21.684Z" }
|
|
510
|
+
wheels = [
|
|
511
|
+
{ url = "https://files.pythonhosted.org/packages/a0/b6/6d6360afbc91b9430abe7f50266f2f0b78fcfc55a88b5681618948d60ab1/pydantic_graph-2.15.0-py3-none-any.whl", hash = "sha256:ed5b3fa18dccea9cef95a09fbbf087e49d9e244f11376ee0454d8f89059a95e6", size = 51660, upload-time = "2026-07-22T03:59:15.108Z" },
|
|
512
|
+
]
|
|
513
|
+
|
|
357
514
|
[[package]]
|
|
358
515
|
name = "pygments"
|
|
359
516
|
version = "2.20.0"
|
|
@@ -503,6 +660,15 @@ wheels = [
|
|
|
503
660
|
{ url = "https://files.pythonhosted.org/packages/ec/bb/2799cc2ede3ed41131f8975621e7213dfc7ef4acbbaadfa440f32500c370/starlette-1.3.1-py3-none-any.whl", hash = "sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6", size = 73632, upload-time = "2026-06-12T09:23:10.017Z" },
|
|
504
661
|
]
|
|
505
662
|
|
|
663
|
+
[[package]]
|
|
664
|
+
name = "truststore"
|
|
665
|
+
version = "0.10.4"
|
|
666
|
+
source = { registry = "https://pypi.org/simple" }
|
|
667
|
+
sdist = { url = "https://files.pythonhosted.org/packages/53/a3/1585216310e344e8102c22482f6060c7a6ea0322b63e026372e6dcefcfd6/truststore-0.10.4.tar.gz", hash = "sha256:9d91bd436463ad5e4ee4aba766628dd6cd7010cf3e2461756b3303710eebc301", size = 26169, upload-time = "2025-08-12T18:49:02.73Z" }
|
|
668
|
+
wheels = [
|
|
669
|
+
{ url = "https://files.pythonhosted.org/packages/19/97/56608b2249fe206a67cd573bc93cd9896e1efb9e98bce9c163bcdc704b88/truststore-0.10.4-py3-none-any.whl", hash = "sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981", size = 18660, upload-time = "2025-08-12T18:49:01.46Z" },
|
|
670
|
+
]
|
|
671
|
+
|
|
506
672
|
[[package]]
|
|
507
673
|
name = "ty"
|
|
508
674
|
version = "0.0.62"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|