diff --git a/src/c3nav/mapdata/api.py b/src/c3nav/mapdata/api.py index a6ce3d8e..19085067 100644 --- a/src/c3nav/mapdata/api.py +++ b/src/c3nav/mapdata/api.py @@ -55,6 +55,14 @@ class MapdataViewSet(ReadOnlyModelViewSet): except LocationGroupCategory.DoesNotExist: raise NotFound(detail=_('category not found.')) qs = qs.filter(category=category) + if issubclass(qs.model, SpecificLocation) and 'group' in request.GET: + if not request.GET['group'].isdigit(): + raise ValidationError(detail={'detail': _('%s is not an integer.') % 'group'}) + try: + group = LocationGroup.objects.get(pk=request.GET['group']) + except LocationGroupCategory.DoesNotExist: + raise NotFound(detail=_('group not found.')) + qs = qs.filter(groups=group) if qs.model == Level and 'on_top_of' in request.GET: if request.GET['on_top_of'] == 'null': qs = qs.filter(on_top_of__isnull=False) @@ -79,7 +87,7 @@ class MapdataViewSet(ReadOnlyModelViewSet): class LevelViewSet(MapdataViewSet): - """ Add ?on_top_of=null or ?on_top_of= to filter by on_top_of. """ + """ Add ?on_top_of= to filter by on_top_of, add ?group= to filter by group. """ queryset = Level.objects.all() @list_route(methods=['get']) @@ -99,7 +107,7 @@ class BuildingViewSet(MapdataViewSet): class SpaceViewSet(MapdataViewSet): - """ Add ?geometry=1 to get geometries, add ?level= to filter by level. """ + """ Add ?geometry=1 to get geometries, add ?level= to filter by level, add ?group= to filter by group. """ queryset = Space.objects.all() @list_route(methods=['get']) @@ -118,7 +126,7 @@ class HoleViewSet(MapdataViewSet): class AreaViewSet(MapdataViewSet): - """ Add ?geometry=1 to get geometries, add ?space= to filter by space. """ + """ Add ?geometry=1 to get geometries, add ?space= to filter by space, add ?group= to filter by group. """ queryset = Area.objects.all() @@ -143,7 +151,7 @@ class ColumnViewSet(MapdataViewSet): class POIViewSet(MapdataViewSet): - """ Add ?geometry=1 to get geometries, add ?space= to filter by space. """ + """ Add ?geometry=1 to get geometries, add ?space= to filter by space, add ?group= to filter by group. """ queryset = POI.objects.all()