diff --git a/ifbcat_api/serializers.py b/ifbcat_api/serializers.py index bff91a3..0dfbfae 100644 --- a/ifbcat_api/serializers.py +++ b/ifbcat_api/serializers.py @@ -916,6 +916,20 @@ class Meta: ) +class TeamOnMapSerializer(TeamSerializer): + class Meta: + model = models.Team + fields = ( + 'id', + 'name', + 'logo_url', + 'description', + 'lat', + 'lng', + 'updated_at', + ) + + # Model serializer for service class ServiceSerializer(serializers.HyperlinkedModelSerializer): """Serializes a service (Service object).""" diff --git a/ifbcat_api/tests/test_no_views_crash.py b/ifbcat_api/tests/test_no_views_crash.py index a7b4a48..7e054c8 100644 --- a/ifbcat_api/tests/test_no_views_crash.py +++ b/ifbcat_api/tests/test_no_views_crash.py @@ -5,6 +5,7 @@ from django.contrib.contenttypes.models import ContentType from django.core import management from django.core.exceptions import FieldError +from django.db.models import Q from django.test import TestCase from django.urls import reverse, NoReverseMatch @@ -125,6 +126,10 @@ def test_all_at_once_to_spare_resource(self): # def test_detail(self): ####################################################################### cpt = 0 + failing_get_urls = [ + reverse("team-on-map-detail", kwargs=dict(name=o.name)) + for o in Team.annotate_is_active().filter(Q(is_active=False) | Q(lat__isnull=True) | Q(lng__isnull=True)) + ] for url_instance in [u for u in router.urls if u.name.endswith("-detail")]: lookup_field = getattr(url_instance.callback.cls, "lookup_field") attr_field = lookup_field.replace("__unaccent", "") @@ -143,7 +148,7 @@ def test_all_at_once_to_spare_resource(self): ] + [f'?format={fmt}' for fmt in available_formats]: response = self.client.get(url_detail + suffix) status_code = 200 - if getattr(o, 'is_draft', False): + if getattr(o, 'is_draft', False) or url_detail in failing_get_urls: status_code = 404 self.assertEqual( response.status_code, diff --git a/ifbcat_api/urls.py b/ifbcat_api/urls.py index 0ca473c..a9cca87 100644 --- a/ifbcat_api/urls.py +++ b/ifbcat_api/urls.py @@ -38,6 +38,7 @@ router.register('service', views.ServiceViewSet) router.register('source-info', views.SourceInfoViewSet, basename='source_info') router.register('team', views.TeamViewSet, basename='team') +router.register('team-on-map', views.TeamOnMapViewSet, basename='team-on-map') router.register('team-cnp', CachedNoPaginationFactory(views.TeamViewSet), basename='team-cnp') router.register('tool', views.ToolViewSet) router.register('tool-cnp', CachedNoPaginationFactory(views.ToolViewSet), basename='tool-cnp') diff --git a/ifbcat_api/views.py b/ifbcat_api/views.py index d8e74f8..7bd7978 100644 --- a/ifbcat_api/views.py +++ b/ifbcat_api/views.py @@ -785,6 +785,30 @@ def perform_create(self, serializer): serializer.save(user_profile=self.request.user) +# Model ViewSet for teams +class TeamOnMapViewSet(PermissionInClassModelViewSet, viewsets.ReadOnlyModelViewSet): + """Handles creating, reading and updating teams.""" + + serializer_class = serializers.TeamOnMapSerializer + + queryset = models.Team.objects.all() + lookup_field = 'name' + + def get_queryset(self): + """ + get team that are active, and have gps coordinate + :return: + """ + return models.Team.annotate_is_active(super().get_queryset()).filter( + is_active=True, + lat__isnull=False, + lng__isnull=False, + ) + + def paginate_queryset(self, queryset): + return None + + # # Model ViewSet for teams # class BioinformaticsTeamViewSet(TeamViewSet): # """Handles creating, reading and updating bioinformatics teams."""