5
5
This is an internal API not covered by versioning policy.
6
6
"""
7
7
8
+ from __future__ import annotations
9
+
8
10
import logging
9
11
import re
10
12
import traceback
@@ -20,8 +22,8 @@ class LookupProtocol(t.Protocol):
20
22
21
23
def __call__ (
22
24
self ,
23
- data : t . Union [ str , list [str ], " Mapping[str, str]" ],
24
- rhs : t . Union [ str , list [str ], " Mapping[str, str]" , " re.Pattern[str]" ],
25
+ data : str | list [str ] | Mapping [str , str ],
26
+ rhs : str | list [str ] | Mapping [str , str ] | re .Pattern [str ],
25
27
) -> bool :
26
28
"""Return callback for :class:`QueryList` filtering operators."""
27
29
...
@@ -41,9 +43,9 @@ class ObjectDoesNotExist(Exception):
41
43
42
44
43
45
def keygetter (
44
- obj : " Mapping[str, t.Any]" ,
46
+ obj : Mapping [str , t .Any ],
45
47
path : str ,
46
- ) -> t . Union [ None , t .Any , str , list [str ], " Mapping[str, str]" ]:
48
+ ) -> None | t .Any | str | list [str ] | Mapping [str , str ]:
47
49
"""Fetch values in objects and keys, supported nested data.
48
50
49
51
**With dictionaries**:
@@ -112,10 +114,10 @@ def keygetter(
112
114
113
115
114
116
def parse_lookup (
115
- obj : " Mapping[str, t.Any]" ,
117
+ obj : Mapping [str , t .Any ],
116
118
path : str ,
117
119
lookup : str ,
118
- ) -> t .Optional [ t . Any ] :
120
+ ) -> t .Any | None :
119
121
"""Check if field lookup key, e.g. "my__path__contains" has comparator, return val.
120
122
121
123
If comparator not used or value not found, return None.
@@ -151,15 +153,15 @@ def parse_lookup(
151
153
152
154
153
155
def lookup_exact (
154
- data : t . Union [ str , list [str ], " Mapping[str, str]" ],
155
- rhs : t . Union [ str , list [str ], " Mapping[str, str]" , " re.Pattern[str]" ],
156
+ data : str | list [str ] | Mapping [str , str ],
157
+ rhs : str | list [str ] | Mapping [str , str ] | re .Pattern [str ],
156
158
) -> bool :
157
159
return rhs == data
158
160
159
161
160
162
def lookup_iexact (
161
- data : t . Union [ str , list [str ], " Mapping[str, str]" ],
162
- rhs : t . Union [ str , list [str ], " Mapping[str, str]" , " re.Pattern[str]" ],
163
+ data : str | list [str ] | Mapping [str , str ],
164
+ rhs : str | list [str ] | Mapping [str , str ] | re .Pattern [str ],
163
165
) -> bool :
164
166
if not isinstance (rhs , str ) or not isinstance (data , str ):
165
167
return False
@@ -168,8 +170,8 @@ def lookup_iexact(
168
170
169
171
170
172
def lookup_contains (
171
- data : t . Union [ str , list [str ], " Mapping[str, str]" ],
172
- rhs : t . Union [ str , list [str ], " Mapping[str, str]" , " re.Pattern[str]" ],
173
+ data : str | list [str ] | Mapping [str , str ],
174
+ rhs : str | list [str ] | Mapping [str , str ] | re .Pattern [str ],
173
175
) -> bool :
174
176
if not isinstance (rhs , str ) or not isinstance (data , (str , Mapping , list )):
175
177
return False
@@ -178,8 +180,8 @@ def lookup_contains(
178
180
179
181
180
182
def lookup_icontains (
181
- data : t . Union [ str , list [str ], " Mapping[str, str]" ],
182
- rhs : t . Union [ str , list [str ], " Mapping[str, str]" , " re.Pattern[str]" ],
183
+ data : str | list [str ] | Mapping [str , str ],
184
+ rhs : str | list [str ] | Mapping [str , str ] | re .Pattern [str ],
183
185
) -> bool :
184
186
if not isinstance (rhs , str ) or not isinstance (data , (str , Mapping , list )):
185
187
return False
@@ -193,8 +195,8 @@ def lookup_icontains(
193
195
194
196
195
197
def lookup_startswith (
196
- data : t . Union [ str , list [str ], " Mapping[str, str]" ],
197
- rhs : t . Union [ str , list [str ], " Mapping[str, str]" , " re.Pattern[str]" ],
198
+ data : str | list [str ] | Mapping [str , str ],
199
+ rhs : str | list [str ] | Mapping [str , str ] | re .Pattern [str ],
198
200
) -> bool :
199
201
if not isinstance (rhs , str ) or not isinstance (data , str ):
200
202
return False
@@ -203,8 +205,8 @@ def lookup_startswith(
203
205
204
206
205
207
def lookup_istartswith (
206
- data : t . Union [ str , list [str ], " Mapping[str, str]" ],
207
- rhs : t . Union [ str , list [str ], " Mapping[str, str]" , " re.Pattern[str]" ],
208
+ data : str | list [str ] | Mapping [str , str ],
209
+ rhs : str | list [str ] | Mapping [str , str ] | re .Pattern [str ],
208
210
) -> bool :
209
211
if not isinstance (rhs , str ) or not isinstance (data , str ):
210
212
return False
@@ -213,8 +215,8 @@ def lookup_istartswith(
213
215
214
216
215
217
def lookup_endswith (
216
- data : t . Union [ str , list [str ], " Mapping[str, str]" ],
217
- rhs : t . Union [ str , list [str ], " Mapping[str, str]" , " re.Pattern[str]" ],
218
+ data : str | list [str ] | Mapping [str , str ],
219
+ rhs : str | list [str ] | Mapping [str , str ] | re .Pattern [str ],
218
220
) -> bool :
219
221
if not isinstance (rhs , str ) or not isinstance (data , str ):
220
222
return False
@@ -223,17 +225,17 @@ def lookup_endswith(
223
225
224
226
225
227
def lookup_iendswith (
226
- data : t . Union [ str , list [str ], " Mapping[str, str]" ],
227
- rhs : t . Union [ str , list [str ], " Mapping[str, str]" , " re.Pattern[str]" ],
228
+ data : str | list [str ] | Mapping [str , str ],
229
+ rhs : str | list [str ] | Mapping [str , str ] | re .Pattern [str ],
228
230
) -> bool :
229
231
if not isinstance (rhs , str ) or not isinstance (data , str ):
230
232
return False
231
233
return data .lower ().endswith (rhs .lower ())
232
234
233
235
234
236
def lookup_in (
235
- data : t . Union [ str , list [str ], " Mapping[str, str]" ],
236
- rhs : t . Union [ str , list [str ], " Mapping[str, str]" , " re.Pattern[str]" ],
237
+ data : str | list [str ] | Mapping [str , str ],
238
+ rhs : str | list [str ] | Mapping [str , str ] | re .Pattern [str ],
237
239
) -> bool :
238
240
if isinstance (rhs , list ):
239
241
return data in rhs
@@ -254,8 +256,8 @@ def lookup_in(
254
256
255
257
256
258
def lookup_nin (
257
- data : t . Union [ str , list [str ], " Mapping[str, str]" ],
258
- rhs : t . Union [ str , list [str ], " Mapping[str, str]" , " re.Pattern[str]" ],
259
+ data : str | list [str ] | Mapping [str , str ],
260
+ rhs : str | list [str ] | Mapping [str , str ] | re .Pattern [str ],
259
261
) -> bool :
260
262
if isinstance (rhs , list ):
261
263
return data not in rhs
@@ -276,24 +278,24 @@ def lookup_nin(
276
278
277
279
278
280
def lookup_regex (
279
- data : t . Union [ str , list [str ], " Mapping[str, str]" ],
280
- rhs : t . Union [ str , list [str ], " Mapping[str, str]" , " re.Pattern[str]" ],
281
+ data : str | list [str ] | Mapping [str , str ],
282
+ rhs : str | list [str ] | Mapping [str , str ] | re .Pattern [str ],
281
283
) -> bool :
282
284
if isinstance (data , (str , bytes , re .Pattern )) and isinstance (rhs , (str , bytes )):
283
285
return bool (re .search (rhs , data ))
284
286
return False
285
287
286
288
287
289
def lookup_iregex (
288
- data : t . Union [ str , list [str ], " Mapping[str, str]" ],
289
- rhs : t . Union [ str , list [str ], " Mapping[str, str]" , " re.Pattern[str]" ],
290
+ data : str | list [str ] | Mapping [str , str ],
291
+ rhs : str | list [str ] | Mapping [str , str ] | re .Pattern [str ],
290
292
) -> bool :
291
293
if isinstance (data , (str , bytes , re .Pattern )) and isinstance (rhs , (str , bytes )):
292
294
return bool (re .search (rhs , data , re .IGNORECASE ))
293
295
return False
294
296
295
297
296
- LOOKUP_NAME_MAP : ' Mapping[str, " LookupProtocol"]' = {
298
+ LOOKUP_NAME_MAP : Mapping [str , LookupProtocol ] = {
297
299
"eq" : lookup_exact ,
298
300
"exact" : lookup_exact ,
299
301
"iexact" : lookup_iexact ,
@@ -469,10 +471,10 @@ class QueryList(list[T], t.Generic[T]):
469
471
[]
470
472
"""
471
473
472
- data : " Sequence[T]"
473
- pk_key : t . Optional [ str ]
474
+ data : Sequence [T ]
475
+ pk_key : str | None
474
476
475
- def __init__ (self , items : t . Optional [ " Iterable[T]" ] = None ) -> None :
477
+ def __init__ (self , items : Iterable [T ] | None = None ) -> None :
476
478
super ().__init__ (items if items is not None else [])
477
479
478
480
def items (self ) -> list [tuple [str , T ]]:
@@ -505,9 +507,9 @@ def __eq__(
505
507
506
508
def filter (
507
509
self ,
508
- matcher : t . Optional [ t . Union [ Callable [[T ], bool ], T ]] = None ,
510
+ matcher : Callable [[T ], bool ] | T | None = None ,
509
511
** kwargs : t .Any ,
510
- ) -> " QueryList[T]" :
512
+ ) -> QueryList [T ]:
511
513
"""Filter list of objects."""
512
514
513
515
def filter_lookup (obj : t .Any ) -> bool :
@@ -534,7 +536,7 @@ def filter_lookup(obj: t.Any) -> bool:
534
536
filter_ = matcher
535
537
elif matcher is not None :
536
538
537
- def val_match (obj : t . Union [ str , list [t .Any ], T ] ) -> bool :
539
+ def val_match (obj : str | list [t .Any ] | T ) -> bool :
538
540
if isinstance (matcher , list ):
539
541
return obj in matcher
540
542
return bool (obj == matcher )
@@ -547,10 +549,10 @@ def val_match(obj: t.Union[str, list[t.Any], T]) -> bool:
547
549
548
550
def get (
549
551
self ,
550
- matcher : t . Optional [ t . Union [ Callable [[T ], bool ], T ]] = None ,
551
- default : t .Optional [ t . Any ] = no_arg ,
552
+ matcher : Callable [[T ], bool ] | T | None = None ,
553
+ default : t .Any | None = no_arg ,
552
554
** kwargs : t .Any ,
553
- ) -> t . Optional [ T ] :
555
+ ) -> T | None :
554
556
"""Retrieve one object.
555
557
556
558
Raises :exc:`MultipleObjectsReturned` if multiple objects found.
0 commit comments