@@ -84,50 +84,72 @@ class AioModelRaw(peewee.ModelRaw, AioQueryMixin):
84
84
pass
85
85
86
86
87
- class AioSelectMixin (AioQueryMixin ):
87
+ class AioSelectMixin (AioQueryMixin , peewee .SelectBase ):
88
+
88
89
89
90
@peewee .database_required
90
- async def aio_scalar (self , database : AioDatabase , as_tuple : bool = False ) -> Any :
91
+ async def aio_peek (self , database : AioDatabase , n : int = 1 ) -> Any :
91
92
"""
92
- Get single value from ``select()`` query, i.e. for aggregation.
93
-
94
- :return: result is the same as after sync ``query.scalar()`` call
95
-
96
- See also:
97
- http://docs.peewee-orm.com/en/3.15.3/peewee/api.html#SelectBase.scalar
93
+ Asynchronous version of
94
+ `peewee.SelectBase.peek <https://docs.peewee-orm.com/en/latest/peewee/api.html#SelectBase.peek>`_
98
95
"""
96
+
99
97
async def fetch_results (cursor : CursorProtocol ) -> Any :
100
- return await cursor . fetchone ( )
98
+ return await fetch_models ( cursor , self , n )
101
99
102
100
rows = await database .aio_execute (self , fetch_results = fetch_results )
101
+ if rows :
102
+ return rows [0 ] if n == 1 else rows
103
103
104
- return rows [0 ] if rows and not as_tuple else rows
104
+ @peewee .database_required
105
+ async def aio_scalar (
106
+ self ,
107
+ database : AioDatabase ,
108
+ as_tuple : bool = False ,
109
+ as_dict : bool = False
110
+ ) -> Any :
111
+ """
112
+ Asynchronous version of `peewee.SelectBase.scalar
113
+ <https://docs.peewee-orm.com/en/latest/peewee/api.html#SelectBase.scalar>`_
114
+ """
115
+ if as_dict :
116
+ return await self .dicts ().aio_peek (database )
117
+ row = await self .tuples ().aio_peek (database )
105
118
106
- async def aio_get (self , database : Optional [AioDatabase ] = None ) -> Any :
119
+ return row [0 ] if row and not as_tuple else row
120
+
121
+ @peewee .database_required
122
+ async def aio_first (self , database : AioDatabase , n : int = 1 ) -> Any :
123
+ """
124
+ Asynchronous version of `peewee.SelectBase.first
125
+ <https://docs.peewee-orm.com/en/latest/peewee/api.html#SelectBase.first>`_
107
126
"""
108
- Async version of **peewee.SelectBase.get**
109
127
110
- See also:
111
- http://docs.peewee-orm.com/en/3.15.3/peewee/api.html#SelectBase.get
128
+ if self ._limit != n : # type: ignore
129
+ self ._limit = n
130
+ return await self .aio_peek (database , n = n )
131
+
132
+ async def aio_get (self , database : Optional [AioDatabase ] = None ) -> Any :
112
133
"""
113
- clone = self .paginate (1 , 1 ) # type: ignore
134
+ Asynchronous version of `peewee.SelectBase.get
135
+ <https://docs.peewee-orm.com/en/latest/peewee/api.html#SelectBase.get>`_
136
+ """
137
+ clone = self .paginate (1 , 1 )
114
138
try :
115
139
return (await clone .aio_execute (database ))[0 ]
116
140
except IndexError :
117
141
sql , params = clone .sql ()
118
- raise self .model .DoesNotExist ('%s instance matching query does ' # type: ignore
142
+ raise self .model .DoesNotExist ('%s instance matching query does '
119
143
'not exist:\n SQL: %s\n Params: %s' %
120
144
(clone .model , sql , params ))
121
145
122
146
@peewee .database_required
123
147
async def aio_count (self , database : AioDatabase , clear_limit : bool = False ) -> int :
124
148
"""
125
- Async version of **peewee.SelectBase.count**
126
-
127
- See also:
128
- http://docs.peewee-orm.com/en/3.15.3/peewee/api.html#SelectBase.count
149
+ Asynchronous version of `peewee.SelectBase.count
150
+ <https://docs.peewee-orm.com/en/latest/peewee/api.html#SelectBase.count>`_
129
151
"""
130
- clone = self .order_by ().alias ('_wrapped' ) # type: ignore
152
+ clone = self .order_by ().alias ('_wrapped' )
131
153
if clear_limit :
132
154
clone ._limit = clone ._offset = None
133
155
try :
@@ -145,38 +167,34 @@ async def aio_count(self, database: AioDatabase, clear_limit: bool = False) -> i
145
167
@peewee .database_required
146
168
async def aio_exists (self , database : AioDatabase ) -> bool :
147
169
"""
148
- Async version of **peewee.SelectBase.exists**
149
-
150
- See also:
151
- http://docs.peewee-orm.com/en/3.15.3/peewee/api.html#SelectBase.exists
170
+ Asynchronous version of `peewee.SelectBase.exists
171
+ <https://docs.peewee-orm.com/en/latest/peewee/api.html#SelectBase.exists>`_
152
172
"""
153
- clone = self .columns (peewee .SQL ('1' )) # type: ignore
173
+ clone = self .columns (peewee .SQL ('1' ))
154
174
clone ._limit = 1
155
175
clone ._offset = None
156
176
return bool (await clone .aio_scalar ())
157
177
158
178
def union_all (self , rhs : Any ) -> "AioModelCompoundSelectQuery" :
159
- return AioModelCompoundSelectQuery (self .model , self , 'UNION ALL' , rhs ) # type: ignore
179
+ return AioModelCompoundSelectQuery (self .model , self , 'UNION ALL' , rhs )
160
180
__add__ = union_all
161
181
162
182
def union (self , rhs : Any ) -> "AioModelCompoundSelectQuery" :
163
- return AioModelCompoundSelectQuery (self .model , self , 'UNION' , rhs ) # type: ignore
183
+ return AioModelCompoundSelectQuery (self .model , self , 'UNION' , rhs )
164
184
__or__ = union
165
185
166
186
def intersect (self , rhs : Any ) -> "AioModelCompoundSelectQuery" :
167
- return AioModelCompoundSelectQuery (self .model , self , 'INTERSECT' , rhs ) # type: ignore
187
+ return AioModelCompoundSelectQuery (self .model , self , 'INTERSECT' , rhs )
168
188
__and__ = intersect
169
189
170
190
def except_ (self , rhs : Any ) -> "AioModelCompoundSelectQuery" :
171
- return AioModelCompoundSelectQuery (self .model , self , 'EXCEPT' , rhs ) # type: ignore
191
+ return AioModelCompoundSelectQuery (self .model , self , 'EXCEPT' , rhs )
172
192
__sub__ = except_
173
193
174
194
def aio_prefetch (self , * subqueries : Any , prefetch_type : PREFETCH_TYPE = PREFETCH_TYPE .WHERE ) -> Any :
175
195
"""
176
- Async version of **peewee.ModelSelect.prefetch**
177
-
178
- See also:
179
- http://docs.peewee-orm.com/en/3.15.3/peewee/api.html#ModelSelect.prefetch
196
+ Asynchronous version of `peewee.ModelSelect.prefetch
197
+ <https://docs.peewee-orm.com/en/latest/peewee/api.html#ModelSelect.prefetch>`_
180
198
"""
181
199
return aio_prefetch (self , * subqueries , prefetch_type = prefetch_type )
182
200
@@ -186,7 +204,7 @@ class AioSelect(AioSelectMixin, peewee.Select):
186
204
187
205
188
206
class AioModelSelect (AioSelectMixin , peewee .ModelSelect ):
189
- """Async version of **peewee.ModelSelect** that provides async versions of ModelSelect methods
207
+ """Asynchronous version of **peewee.ModelSelect** that provides async versions of ModelSelect methods
190
208
"""
191
209
pass
192
210
0 commit comments