24
24
25
25
26
26
__all__ = [
27
- ' InBBoxFilter' ,
28
- ' InBBOXFilter' ,
29
- ' GeometryFilter' ,
30
- ' GeoFilterSet' ,
31
- ' TMSTileFilter' ,
32
- ' DistanceToPointFilter' ,
33
- ' DistanceToPointOrderingFilter' ,
27
+ " InBBoxFilter" ,
28
+ " InBBOXFilter" ,
29
+ " GeometryFilter" ,
30
+ " GeoFilterSet" ,
31
+ " TMSTileFilter" ,
32
+ " DistanceToPointFilter" ,
33
+ " DistanceToPointOrderingFilter" ,
34
34
]
35
35
36
36
37
37
class InBBoxFilter (BaseFilterBackend ):
38
- bbox_param = ' in_bbox' # The URL query parameter which contains the bbox.
38
+ bbox_param = " in_bbox" # The URL query parameter which contains the bbox.
39
39
40
40
def get_filter_bbox (self , request ):
41
41
bbox_string = request .query_params .get (self .bbox_param , None )
42
42
if not bbox_string :
43
43
return None
44
44
45
45
try :
46
- p1x , p1y , p2x , p2y = (float (n ) for n in bbox_string .split (',' ))
46
+ p1x , p1y , p2x , p2y = (float (n ) for n in bbox_string .split ("," ))
47
47
except ValueError :
48
48
raise ParseError (
49
- f' Invalid bbox string supplied for parameter { self .bbox_param } '
49
+ f" Invalid bbox string supplied for parameter { self .bbox_param } "
50
50
)
51
51
52
52
x = Polygon .from_bbox ((p1x , p1y , p2x , p2y ))
53
53
return x
54
54
55
55
def filter_queryset (self , request , queryset , view ):
56
- filter_field = getattr (view , ' bbox_filter_field' , None )
57
- include_overlapping = getattr (view , ' bbox_filter_include_overlapping' , False )
56
+ filter_field = getattr (view , " bbox_filter_field" , None )
57
+ include_overlapping = getattr (view , " bbox_filter_include_overlapping" , False )
58
58
if include_overlapping :
59
- geoDjango_filter = ' bboverlaps'
59
+ geoDjango_filter = " bboverlaps"
60
60
else :
61
- geoDjango_filter = ' contained'
61
+ geoDjango_filter = " contained"
62
62
63
63
if not filter_field :
64
64
return queryset
65
65
66
66
bbox = self .get_filter_bbox (request )
67
67
if not bbox :
68
68
return queryset
69
- return queryset .filter (Q (** {f' { filter_field } __{ geoDjango_filter } ' : bbox }))
69
+ return queryset .filter (Q (** {f" { filter_field } __{ geoDjango_filter } " : bbox }))
70
70
71
71
def get_schema_operation_parameters (self , view ):
72
72
return [
@@ -96,13 +96,13 @@ class GeometryFilter(django_filters.Filter):
96
96
field_class = forms .GeometryField
97
97
98
98
def __init__ (self , * args , ** kwargs ):
99
- kwargs .setdefault (' widget' , forms .TextInput )
99
+ kwargs .setdefault (" widget" , forms .TextInput )
100
100
super ().__init__ (* args , ** kwargs )
101
101
102
102
103
103
class GeoFilterSet (django_filters .FilterSet ):
104
104
GEOFILTER_FOR_DBFIELD_DEFAULTS = {
105
- models .GeometryField : {' filterset_class' : GeometryFilter },
105
+ models .GeometryField : {" filterset_class" : GeometryFilter },
106
106
}
107
107
108
108
def __new__ (cls , * args , ** kwargs ):
@@ -116,18 +116,18 @@ def __new__(cls, *args, **kwargs):
116
116
117
117
118
118
class TMSTileFilter (InBBoxFilter ):
119
- tile_param = ' tile' # The URL query parameter which contains the tile address
119
+ tile_param = " tile" # The URL query parameter which contains the tile address
120
120
121
121
def get_filter_bbox (self , request ):
122
122
tile_string = request .query_params .get (self .tile_param , None )
123
123
if not tile_string :
124
124
return None
125
125
126
126
try :
127
- z , x , y = (int (n ) for n in tile_string .split ('/' ))
127
+ z , x , y = (int (n ) for n in tile_string .split ("/" ))
128
128
except ValueError :
129
129
raise ParseError (
130
- f' Invalid tile string supplied for parameter { self .tile_param } '
130
+ f" Invalid tile string supplied for parameter { self .tile_param } "
131
131
)
132
132
133
133
bbox = Polygon .from_bbox (tile_edges (x , y , z ))
@@ -146,19 +146,19 @@ def get_schema_operation_parameters(self, view):
146
146
147
147
148
148
class DistanceToPointFilter (BaseFilterBackend ):
149
- dist_param = ' dist'
150
- point_param = ' point' # The URL query parameter which contains the
149
+ dist_param = " dist"
150
+ point_param = " point" # The URL query parameter which contains the
151
151
152
152
def get_filter_point (self , request , ** kwargs ):
153
153
point_string = request .query_params .get (self .point_param , None )
154
154
if not point_string :
155
155
return None
156
156
157
157
try :
158
- (x , y ) = (float (n ) for n in point_string .split (',' ))
158
+ (x , y ) = (float (n ) for n in point_string .split ("," ))
159
159
except ValueError :
160
160
raise ParseError (
161
- ' Invalid geometry string supplied for parameter {}' .format (
161
+ " Invalid geometry string supplied for parameter {}" .format (
162
162
self .point_param
163
163
)
164
164
)
@@ -195,9 +195,9 @@ def dist_to_deg(self, distance, latitude):
195
195
return distance / (earthRadius * latitudeCorrection ) * rad2deg
196
196
197
197
def filter_queryset (self , request , queryset , view ):
198
- filter_field = getattr (view , ' distance_filter_field' , None )
199
- convert_distance_input = getattr (view , ' distance_filter_convert_meters' , False )
200
- geoDjango_filter = ' dwithin' # use dwithin for points
198
+ filter_field = getattr (view , " distance_filter_field" , None )
199
+ convert_distance_input = getattr (view , " distance_filter_convert_meters" , False )
200
+ geoDjango_filter = " dwithin" # use dwithin for points
201
201
202
202
if not filter_field :
203
203
return queryset
@@ -212,7 +212,7 @@ def filter_queryset(self, request, queryset, view):
212
212
dist = float (dist_string )
213
213
except ValueError :
214
214
raise ParseError (
215
- ' Invalid distance string supplied for parameter {}' .format (
215
+ " Invalid distance string supplied for parameter {}" .format (
216
216
self .dist_param
217
217
)
218
218
)
@@ -222,7 +222,7 @@ def filter_queryset(self, request, queryset, view):
222
222
dist = self .dist_to_deg (dist , point [1 ])
223
223
224
224
return queryset .filter (
225
- Q (** {f' { filter_field } __{ geoDjango_filter } ' : (point , dist )})
225
+ Q (** {f" { filter_field } __{ geoDjango_filter } " : (point , dist )})
226
226
)
227
227
228
228
def get_schema_operation_parameters (self , view ):
@@ -256,10 +256,10 @@ def get_schema_operation_parameters(self, view):
256
256
257
257
class DistanceToPointOrderingFilter (DistanceToPointFilter ):
258
258
srid = 4326
259
- order_param = ' order'
259
+ order_param = " order"
260
260
261
261
def filter_queryset (self , request , queryset , view ):
262
- filter_field = getattr (view , ' distance_ordering_filter_field' , None )
262
+ filter_field = getattr (view , " distance_ordering_filter_field" , None )
263
263
264
264
if not filter_field :
265
265
return queryset
@@ -269,7 +269,7 @@ def filter_queryset(self, request, queryset, view):
269
269
return queryset
270
270
271
271
order = request .query_params .get (self .order_param )
272
- if order == ' desc' :
272
+ if order == " desc" :
273
273
return queryset .order_by (- GeometryDistance (filter_field , point ))
274
274
else :
275
275
return queryset .order_by (GeometryDistance (filter_field , point ))
0 commit comments