Skip to content

Commit 7adf6f3

Browse files
committed
Improve engine.result
1 parent 69ffb51 commit 7adf6f3

File tree

1 file changed

+83
-61
lines changed

1 file changed

+83
-61
lines changed

sqlalchemy-stubs/engine/result.pyi

Lines changed: 83 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,114 +1,134 @@
1+
import sys
12
from typing import Any
2-
from typing import Int
3+
from typing import Iterable
34
from typing import Iterator
45
from typing import List
56
from typing import Mapping
67
from typing import Optional
8+
from typing import Tuple
9+
from typing import TypeVar
710

8-
from sqlalchemy.cresultproxy import tuplegetter as tuplegetter
911
from .row import Row as Row
10-
from .. import exc as exc
11-
from .. import util as util
12-
from ..sql.base import HasMemoized as HasMemoized
13-
from ..sql.base import InPlaceGenerative as InPlaceGenerative
14-
from ..util import collections_abc as collections_abc
15-
from ..util import py2k as py2k
12+
from ..sql.base import InPlaceGenerative
13+
from ..util import collections_abc
14+
15+
_TResult = TypeVar("_TResult", bound=Result)
16+
_TScalarResult = TypeVar("_TScalarResult", bound=ScalarResult)
17+
_TMappingResult = TypeVar("_TMappingResult", bound=MappingResult)
18+
_TChunkedIteratorResult = TypeVar(
19+
"_TChunkedIteratorResult", bound=ChunkedIteratorResult
20+
)
1621

1722
class ResultMetaData:
1823
@property
19-
def keys(self): ...
24+
def keys(self) -> RMKeyView: ...
2025

21-
class RMKeyView(collections_abc.KeysView):
26+
class RMKeyView(collections_abc.KeysView[str]):
2227
def __init__(self, parent: Any) -> None: ...
23-
def __len__(self): ...
24-
def __iter__(self) -> Any: ...
25-
def __contains__(self, item: Any): ...
26-
def __eq__(self, other: Any) -> Any: ...
27-
def __ne__(self, other: Any) -> Any: ...
28+
def __len__(self) -> int: ...
29+
def __iter__(self) -> Iterator[str]: ...
30+
def __contains__(self, item: object) -> bool: ...
31+
def __eq__(self, other: Any) -> bool: ...
32+
def __ne__(self, other: Any) -> bool: ...
2833

2934
class SimpleResultMetaData(ResultMetaData):
3035
def __init__(
3136
self,
32-
keys: Any,
37+
keys: Iterable[str],
3338
extra: Optional[Any] = ...,
3439
_processors: Optional[Any] = ...,
3540
_tuplefilter: Optional[Any] = ...,
3641
_translated_indexes: Optional[Any] = ...,
3742
_unique_filters: Optional[Any] = ...,
3843
) -> None: ...
3944

40-
def result_tuple(fields: Any, extra: Optional[Any] = ...): ...
45+
def result_tuple(fields: Any, extra: Optional[Any] = ...) -> Row: ...
4146

4247
class ResultInternal(InPlaceGenerative): ...
4348

4449
class _WithKeys:
45-
def keys(self): ...
50+
def keys(self) -> RMKeyView: ...
4651

4752
class Result(_WithKeys, ResultInternal):
4853
def __init__(self, cursor_metadata: Any) -> None: ...
49-
def yield_per(self, num: Any) -> None: ...
50-
def unique(self, strategy: Optional[object] = ...) -> Result: ...
51-
def columns(self, *col_expressions: object) -> Result: ...
52-
def scalars(self, index: Int = ...) -> ScalarResult: ...
53-
def mappings(self): ...
54-
def __iter__(self) -> Any: ...
55-
def __next__(self): ...
56-
def next(self): ...
57-
def partitions(self, size: Optional[Int] = ...) -> Iterator[List[Row]]: ...
54+
def yield_per(self: _TResult, num: Any) -> _TResult: ...
55+
def unique(
56+
self: _TResult, strategy: Optional[object] = ...
57+
) -> _TResult: ...
58+
def columns(self: _TResult, *col_expressions: object) -> _TResult: ...
59+
def scalars(self, index: int = ...) -> ScalarResult: ...
60+
def mappings(self) -> MappingResult: ...
61+
def __iter__(self) -> Iterator[Row]: ...
62+
def __next__(self) -> Row: ...
63+
if sys.version_info < (3, 0):
64+
def next(self) -> Row: ...
65+
def partitions(self, size: Optional[int] = ...) -> Iterator[List[Row]]: ...
5866
def fetchall(self) -> List[Row]: ...
59-
def fetchone(self) -> Row: ...
60-
def fetchmany(self, size: Optional[Int] = ...) -> List[Row]: ...
67+
def fetchone(self) -> Optional[Row]: ...
68+
def fetchmany(self, size: Optional[int] = ...) -> List[Row]: ...
6169
def all(self) -> List[Row]: ...
62-
def first(self) -> Row: ...
70+
def first(self) -> Optional[Row]: ...
6371
def one_or_none(self) -> Optional[Row]: ...
6472
def scalar_one(self) -> Any: ...
6573
def scalar_one_or_none(self) -> Optional[Any]: ...
6674
def one(self) -> Row: ...
6775
def scalar(self) -> Optional[Any]: ...
68-
def freeze(self): ...
69-
def merge(self, *others: Any): ...
76+
def freeze(self) -> FrozenResult: ...
77+
def merge(self, *others: Result) -> MergedResult: ...
7078

7179
class FilterResult(ResultInternal): ...
7280

7381
class ScalarResult(FilterResult):
74-
def __init__(self, real_result: Any, index: Any) -> None: ...
75-
def unique(self, strategy: Optional[Any] = ...): ...
76-
def partitions(self, size: Optional[Int] = ...) -> Iterator[List[Any]]: ...
82+
def __init__(self, real_result: Result, index: Any) -> None: ...
83+
def unique(
84+
self: _TScalarResult, strategy: Optional[Any] = ...
85+
) -> _TScalarResult: ...
86+
def partitions(self, size: Optional[int] = ...) -> Iterator[List[Any]]: ...
7787
def fetchall(self) -> List[Any]: ...
78-
def fetchmany(self, size: Optional[Int] = ...) -> List[Any]: ...
88+
def fetchmany(self, size: Optional[int] = ...) -> List[Any]: ...
7989
def all(self) -> List[Any]: ...
80-
def __iter__(self) -> Any: ...
81-
def __next__(self): ...
82-
def next(self): ...
90+
def __iter__(self) -> Iterator[Any]: ...
91+
def __next__(self) -> Any: ...
92+
if sys.version_info < (3, 0):
93+
def next(self) -> Any: ...
8394
def first(self) -> Optional[Any]: ...
8495
def one_or_none(self) -> Optional[Any]: ...
8596
def one(self) -> Any: ...
8697

8798
class MappingResult(_WithKeys, FilterResult):
88-
def __init__(self, result: Any) -> None: ...
89-
def unique(self, strategy: Optional[Any] = ...): ...
90-
def columns(self, *col_expressions: object) -> MappingResult: ...
99+
def __init__(self, result: Result) -> None: ...
100+
def unique(
101+
self: _TMappingResult, strategy: Optional[Any] = ...
102+
) -> _TMappingResult: ...
103+
def columns(
104+
self: _TMappingResult, *col_expressions: object
105+
) -> _TMappingResult: ...
91106
def partitions(
92-
self, size: Optional[Int] = ...
93-
) -> Iterator[List[Mapping]]: ...
94-
def fetchall(self) -> List[Mapping]: ...
95-
def fetchone(self) -> Mapping: ...
96-
def fetchmany(self, size: Optional[Int] = ...) -> List[Mapping]: ...
97-
def all(self) -> List[Mapping]: ...
98-
def __iter__(self) -> Any: ...
99-
def __next__(self): ...
100-
def next(self): ...
101-
def first(self) -> Optional[Mapping]: ...
102-
def one_or_none(self) -> Optional[Mapping]: ...
103-
def one(self) -> Mapping: ...
107+
self, size: Optional[int] = ...
108+
) -> Iterator[List[Mapping[Any, Any]]]: ...
109+
def fetchall(self) -> List[Mapping[Any, Any]]: ...
110+
def fetchone(self) -> Mapping[Any, Any]: ...
111+
def fetchmany(
112+
self, size: Optional[int] = ...
113+
) -> List[Mapping[Any, Any]]: ...
114+
def all(self) -> List[Mapping[Any, Any]]: ...
115+
def __iter__(self) -> Iterator[Mapping[Any, Any]]: ...
116+
def __next__(self) -> Mapping[Any, Any]: ...
117+
if sys.version_info < (3, 0):
118+
def next(self) -> Mapping[Any, Any]: ...
119+
def first(self) -> Optional[Mapping[Any, Any]]: ...
120+
def one_or_none(self) -> Optional[Mapping[Any, Any]]: ...
121+
def one(self) -> Mapping[Any, Any]: ...
104122

105123
class FrozenResult:
106124
metadata: Any = ...
107125
data: Any = ...
108-
def __init__(self, result: Any) -> None: ...
109-
def rewrite_rows(self): ...
110-
def with_new_rows(self, tuple_data: Any): ...
111-
def __call__(self): ...
126+
def __init__(self, result: Result) -> None: ...
127+
def rewrite_rows(self) -> List[List[Any]]: ...
128+
def with_new_rows(
129+
self, tuple_data: List[Tuple[Any, ...]]
130+
) -> FrozenResult: ...
131+
def __call__(self) -> IteratorResult: ...
112132

113133
class IteratorResult(Result):
114134
iterator: Any = ...
@@ -117,7 +137,7 @@ class IteratorResult(Result):
117137
self, cursor_metadata: Any, iterator: Any, raw: Optional[Any] = ...
118138
) -> None: ...
119139

120-
def null_result(): ...
140+
def null_result() -> IteratorResult: ...
121141

122142
class ChunkedIteratorResult(IteratorResult):
123143
chunks: Any = ...
@@ -132,9 +152,11 @@ class ChunkedIteratorResult(IteratorResult):
132152
raw: Optional[Any] = ...,
133153
dynamic_yield_per: bool = ...,
134154
) -> None: ...
135-
def yield_per(self, num: Any) -> None: ...
155+
def yield_per(
156+
self: _TChunkedIteratorResult, num: Any
157+
) -> _TChunkedIteratorResult: ...
136158

137159
class MergedResult(IteratorResult):
138160
closed: bool = ...
139-
def __init__(self, cursor_metadata: Any, results: Any) -> None: ...
161+
def __init__(self, cursor_metadata: Any, results: Result) -> None: ...
140162
def close(self) -> None: ...

0 commit comments

Comments
 (0)