Skip to content

Commit b1eb441

Browse files
committed
Use py36 async generators for simplicity
1 parent 023d4b4 commit b1eb441

3 files changed

Lines changed: 9 additions & 33 deletions

File tree

tortoise/fields.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
from pypika import Table
1111

1212
from tortoise.exceptions import ConfigurationError, NoValuesFetched, OperationalError
13-
from tortoise.utils import QueryAsyncIterator
1413

1514
if TYPE_CHECKING: # pragma: nocoverage
1615
from tortoise.models import Model
@@ -533,12 +532,13 @@ def __getitem__(self, item):
533532
def __await__(self):
534533
return self._query.__await__()
535534

536-
def __aiter__(self) -> QueryAsyncIterator:
537-
async def fetched_callback(iterator_wrapper):
535+
async def __aiter__(self):
536+
if not self._fetched:
537+
self.related_objects = await self
538538
self._fetched = True
539-
self.related_objects = iterator_wrapper.sequence
540539

541-
return QueryAsyncIterator(self._query, callback=fetched_callback)
540+
for val in self.related_objects:
541+
yield val
542542

543543
def filter(self, *args, **kwargs):
544544
"""

tortoise/queryset.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
from tortoise.backends.base.client import BaseDBAsyncClient
1010
from tortoise.exceptions import DoesNotExist, FieldError, IntegrityError, MultipleObjectsReturned
1111
from tortoise.query_utils import Prefetch, Q, QueryModifier, _get_joins_for_related_field
12-
from tortoise.utils import QueryAsyncIterator
1312

1413
# Empty placeholder - Should never be edited.
1514
QUERY = Query()
@@ -81,8 +80,9 @@ def __await__(self):
8180
self._make_query()
8281
return self._execute().__await__()
8382

84-
def __aiter__(self) -> QueryAsyncIterator:
85-
return QueryAsyncIterator(self)
83+
async def __aiter__(self):
84+
for val in await self:
85+
yield val
8686

8787
async def _execute(self):
8888
raise NotImplementedError() # pragma: nocoverage

tortoise/utils.py

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,9 @@
11
import logging
2-
from typing import Awaitable, Callable, Iterator, List, Optional
2+
from typing import List
33

44
logger = logging.getLogger("tortoise")
55

66

7-
class QueryAsyncIterator:
8-
__slots__ = ("query", "sequence", "_sequence_iterator", "_callback")
9-
10-
def __init__(self, query: Awaitable[Iterator], callback: Optional[Callable] = None) -> None:
11-
self.query = query
12-
self.sequence: Optional[Iterator] = None
13-
self._sequence_iterator = None
14-
self._callback = callback
15-
16-
def __aiter__(self):
17-
return self # pragma: nocoverage
18-
19-
async def __anext__(self):
20-
if self.sequence is None:
21-
self.sequence = await self.query
22-
self._sequence_iterator = self.sequence.__iter__()
23-
if self._callback: # pragma: no branch
24-
await self._callback(self)
25-
try:
26-
return next(self._sequence_iterator)
27-
except StopIteration:
28-
raise StopAsyncIteration
29-
30-
317
def get_schema_sql(client, safe: bool) -> str:
328
generator = client.schema_generator(client)
339
return generator.get_create_schema_sql(safe)

0 commit comments

Comments
 (0)