Commit fa251757 by Clinton Blackburn Committed by Clinton Blackburn

Added support for filtering people by slug

LEARNER-2154
parent 8bf70642
......@@ -13,7 +13,7 @@ from rest_framework.exceptions import NotFound, PermissionDenied
from course_discovery.apps.api.utils import cast2int
from course_discovery.apps.course_metadata.choices import ProgramStatus
from course_discovery.apps.course_metadata.models import Course, CourseRun, Organization, Program
from course_discovery.apps.course_metadata.models import Course, CourseRun, Organization, Person, Program
logger = logging.getLogger(__name__)
User = get_user_model()
......@@ -172,3 +172,9 @@ class OrganizationFilter(filters.FilterSet):
class Meta:
model = Organization
fields = ('tags', 'uuids',)
class PersonFilter(filters.FilterSet):
class Meta:
model = Person
fields = ('slug',)
......@@ -125,6 +125,14 @@ class PersonViewSetTests(SerializationMixin, SiteMixin, APITestCase):
self.assertEqual(response.status_code, 200)
self.assertListEqual(response.data['results'], self.serialize_person(Person.objects.all(), many=True))
def test_list_filter_by_slug(self):
""" Verify the endpoint allows people to be filtered by slug. """
person = PersonFactory()
url = '{root}?slug={slug}'.format(root=self.people_list_url, slug=person.slug)
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertListEqual(response.data['results'], self.serialize_person([person], many=True))
def test_create_without_waffle_switch(self):
""" Verify endpoint shows error message if waffle switch is disabled. """
toggle_switch('publish_person_to_marketing_site', False)
......
import logging
import waffle
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import status, viewsets
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from course_discovery.apps.api import serializers
from course_discovery.apps.api import filters, serializers
from course_discovery.apps.api.pagination import PageNumberPagination
from course_discovery.apps.course_metadata.exceptions import MarketingSiteAPIClientException, PersonToMarketingException
......@@ -18,6 +19,8 @@ logger = logging.getLogger(__name__)
class PersonViewSet(viewsets.ModelViewSet):
""" PersonSerializer resource. """
filter_backends = (DjangoFilterBackend,)
filter_class = filters.PersonFilter
lookup_field = 'uuid'
lookup_value_regex = '[0-9a-f-]+'
permission_classes = (IsAuthenticated,)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment