Skip to content

Commit e596fcb

Browse files
authored
Merge pull request #12 from govlt/quick-fix-geometry-filtering
Quick fix for geometry filtering
2 parents 0ed69ba + 62f58fc commit e596fcb

File tree

1 file changed

+20
-13
lines changed

1 file changed

+20
-13
lines changed

api/filters.py

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212

1313

1414
class BaseFilter(ABC):
15-
geom_field: type[InstrumentedAttribute]
16-
1715
def apply(
1816
self,
1917
request: schemas.BaseSearchRequest,
@@ -58,9 +56,9 @@ def _apply_geometry_filter(
5856
query: Select,
5957
) -> Select:
6058
filter_func_type = _get_filter_func(geometry_filter.method)
61-
geom_field = getattr(self.geom_field, 'geom')
59+
geom_field = self.Meta.geom_field
6260
if geom_field is None:
63-
raise ValueError('Geometry field is not defined')
61+
raise ValueError('geom_field in meta is not defined')
6462

6563
if ewkb := geometry_filter.ewkb:
6664
query = _filter_by_geometry(
@@ -99,8 +97,6 @@ def _apply_geometry_filter(
9997

10098

10199
class CountiesFilter(BaseFilter):
102-
geom_field = models.Counties.geom
103-
104100
def apply(
105101
self,
106102
request: schemas.CountiesSearchRequest,
@@ -118,9 +114,11 @@ def apply(
118114

119115
return query
120116

117+
class Meta:
118+
geom_field = models.Counties.geom
119+
121120

122121
class MunicipalitiesFilter(CountiesFilter):
123-
geom_field = models.Municipalities.geom
124122

125123
def apply(
126124
self,
@@ -138,9 +136,11 @@ def apply(
138136

139137
return query
140138

139+
class Meta:
140+
geom_field = models.Municipalities.geom
141+
141142

142143
class EldershipsFilter(MunicipalitiesFilter):
143-
geom_field = models.Elderships.geom
144144

145145
def apply(
146146
self,
@@ -157,10 +157,11 @@ def apply(
157157
)
158158
return query
159159

160+
class Meta:
161+
geom_field = models.Elderships.geom
160162

161-
class ResidentialAreasFilter(MunicipalitiesFilter):
162-
geom_field = models.ResidentialAreas.geom
163163

164+
class ResidentialAreasFilter(MunicipalitiesFilter):
164165
def apply(
165166
self,
166167
request: schemas.ResidentialAreasSearchRequest,
@@ -177,10 +178,11 @@ def apply(
177178

178179
return query
179180

181+
class Meta:
182+
geom_field = models.ResidentialAreas.geom
180183

181-
class StreetsFilter(ResidentialAreasFilter):
182-
geom_field = models.Streets.geom
183184

185+
class StreetsFilter(ResidentialAreasFilter):
184186
def apply(
185187
self,
186188
request: schemas.StreetsSearchRequest,
@@ -197,9 +199,11 @@ def apply(
197199

198200
return query
199201

202+
class Meta:
203+
geom_field = models.Streets.geom
204+
200205

201206
class AddressesFilter(StreetsFilter):
202-
geom_field = models.Addresses.geom
203207

204208
def apply(
205209
self,
@@ -211,6 +215,9 @@ def apply(
211215

212216
return query
213217

218+
class Meta:
219+
geom_field = models.Addresses.geom
220+
214221

215222
def _is_valid_geometry(db: Session, geom: GenericFunction) -> bool:
216223
try:

0 commit comments

Comments
 (0)