Skip to content

Commit dcd2a1a

Browse files
committed
fix: Don't reset state of generator on each invocation
1 parent 3997c93 commit dcd2a1a

3 files changed

Lines changed: 36 additions & 2 deletions

File tree

fast_depends/use.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,6 @@ def __init__(
199199
self.overrides = overrides
200200

201201
def __aiter__(self) -> "solve_async_gen":
202-
self._iter = None
203202
self.stack = AsyncExitStack()
204203
return self
205204

@@ -246,7 +245,6 @@ def __init__(
246245
self.overrides = overrides
247246

248247
def __iter__(self) -> "solve_gen":
249-
self._iter = None
250248
self.stack = ExitStack()
251249
return self
252250

tests/async/test_depends.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from contextlib import asynccontextmanager
33
from dataclasses import dataclass
44
from functools import partial
5+
from typing import AsyncGenerator
56
from unittest.mock import Mock
67

78
import pytest
@@ -484,3 +485,21 @@ async def func(a: str, b: str = Depends(dep)):
484485

485486
async with func("a") as is_equal:
486487
assert is_equal
488+
489+
490+
@pytest.mark.anyio
491+
async def test_asyncgenerator_iter():
492+
# ref: https://github.com/Lancetnik/FastDepends/issues/165
493+
494+
async def simple_dependency(a: int, b: int = 3):
495+
return a + b
496+
497+
@inject
498+
async def method(a: int, d: int = Depends(simple_dependency)) -> AsyncGenerator[int, None]:
499+
for i in range(a + d):
500+
yield i
501+
502+
iterator = method(5)
503+
504+
assert len([v async for v in iterator]) == 13
505+
assert len([v async for v in iterator]) == 0

tests/sync/test_depends.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from contextlib import contextmanager
33
from dataclasses import dataclass
44
from functools import partial
5+
from typing import Generator
56
from unittest.mock import Mock
67

78
import pytest
@@ -366,3 +367,19 @@ def func(a: str, b: str = Depends(dep)):
366367

367368
with func("a") as is_equal:
368369
assert is_equal
370+
371+
372+
def test_generator_iter():
373+
# ref: https://github.com/Lancetnik/FastDepends/issues/165
374+
375+
def simple_dependency(a: int, b: int = 3):
376+
return a + b
377+
378+
@inject
379+
def method(a: int, d: int = Depends(simple_dependency)) -> Generator[int, None, None]:
380+
yield from range(a + d)
381+
382+
iterator = method(5)
383+
384+
assert len(list(iterator)) == 13
385+
assert len(list(iterator)) == 0

0 commit comments

Comments
 (0)