diff --git a/osmcal/test_views.py b/osmcal/test_views.py index 63681b0..9bead31 100644 --- a/osmcal/test_views.py +++ b/osmcal/test_views.py @@ -8,6 +8,11 @@ def test_location_out_of_range(self): resp = c.get("/events.ics?around=5564") # The around parameter obviously doesn't make any sense. self.assertEqual(resp.status_code, 400) + def test_location_radius_out_of_range(self): + c = Client() + resp = c.get("/events.ics?around=52,13&around_radius=260") # The around radius parameter is too large. + self.assertEqual(resp.status_code, 400) + def test_location_around_50k(self): c = Client() resp = c.get("/events.ics?around=52,13") diff --git a/osmcal/views.py b/osmcal/views.py index ca14497..6b7cc95 100644 --- a/osmcal/views.py +++ b/osmcal/views.py @@ -68,9 +68,10 @@ def get_queryset(self, params, after=None): if filter_around: filter_around_radius = params.get("around_radius", None) if filter_around_radius: - dist = filter_around_radius * 1000 - else - dist = 50000 + dist = float(filter_around_radius) + if dist == 0 or dist > 250: raise BadRequest("filter_around_radius invalid") + else: + dist = 50 filter_around = [float(x) for x in filter_around.split(",")] if len(filter_around) == 2: lat = filter_around[0] @@ -81,7 +82,7 @@ def get_queryset(self, params, after=None): upcoming_events = upcoming_events.annotate( distance = Distance("location", pt) ).filter( - distance__lte = dist # distance in meters + distance__lte = dist * 1000 # dist variable contains km, filter must be in meters ) days = params.get("days", None)