11"""sqlalchemy query related things."""
2+
23from collections import namedtuple
34from functools import partial
45
1415# todo add transforms support - e.g. column__date__gt
1516LOOKUP_TO_EXPRESSION = {
1617 "contains" : lambda column , value : column .contains (value ),
17- # "date"
18- # "day"
1918 "endswith" : lambda column , value : column .endswith (value ),
2019 "exact" : lambda column , value : column == value ,
2120 "gt" : lambda column , value : column > value ,
2221 "gte" : lambda column , value : column >= value ,
23- # "hour"
24- "icontains" : lambda column , value : sa .func .lower (column ).contains (lower (value )),
25- "iendswith" : lambda column , value : sa .func .lower (column ).endswith (lower (value )),
22+ "icontains" : lambda column , value : sa .func .lower (column ).contains (
23+ lower (value )
24+ ),
25+ "iendswith" : lambda column , value : sa .func .lower (column ).endswith (
26+ lower (value )
27+ ),
2628 "iexact" : lambda column , value : sa .func .lower (column ) == lower (value ),
27- "iin" : lambda column , value : sa .func .lower (column ).in_ (lower (i ) for i in value ),
29+ "iin" : lambda column , value : sa .func .lower (column ).in_ (
30+ lower (i ) for i in value
31+ ),
2832 "in" : lambda column , value : column .in_ (value ),
29- # "iregex"
30- "isnull" : lambda column , value : column == None if value else column != None , # noqa
31- "istartswith" : lambda column , value : sa .func .lower (column ).startswith (lower (value )),
33+ "isnull" : lambda column , value : column is None
34+ if value
35+ else column != None ,
36+ "istartswith" : lambda column , value : sa .func .lower (column ).startswith (
37+ lower (value )
38+ ),
3239 "lt" : lambda column , value : column < value ,
3340 "lte" : lambda column , value : column <= value ,
34- # "minute"
35- # "month"
36- # "quarter"
3741 "range" : lambda column , value : column .between (* value ),
38- # "regex"
39- # "second"
4042 "startswith" : lambda column , value : column .startswith (value ),
41- # "time"
42- # "week"
43- # "week_day"
44- # "year"
4543}
4644
4745
@@ -58,11 +56,7 @@ def get(self, *args, **kwargs):
5856 mapper = self ._only_full_mapper_zero ("get" )
5957 pk = meta .model_info (mapper ).primary_keys_from_dict (kwargs )
6058
61- if pk is not None :
62- return super ().get (pk )
63-
64- return None
65-
59+ return super ().get (pk ) if pk is not None else None
6660 return super ().get (* args , ** kwargs )
6761
6862 def order_by (self , * criterion ):
@@ -236,11 +230,10 @@ def __get__(self, instance, owner):
236230
237231 if not model :
238232 raise AttributeError (
239- "Cannot access {} when not bound to a model. "
240- "You can explicitly instantiate descriptor with model class - `db.queryproperty(Model)`."
241- "" .format (self .__class__ .__name__ )
233+ f"Cannot access { self .__class__ .__name__ } when not bound to a model. You can explicitly instantiate descriptor with model class - `db.queryproperty(Model)`."
242234 )
243235
236+
244237 try :
245238 mapper = sa .orm .class_mapper (model )
246239 except sa .orm .exc .UnmappedClassError :
0 commit comments