Files
edx-platform/lms/djangoapps/learner_recommendations/serializers.py
Jody Bailey ba1c018a2e feat: Cross Product Recommendations Logic (#32003)
* feat: added get_cross_product_recommendations method

* feat: Cross Product Recommendations Logic

* fix: lint errors

* fix: removed unused utility method get_programs_based_on_course

* fix: lint errors

* fix: views test case removed decorator

* fix: edited serializer to no longer extend from existing

* fix: included mocked data for tests and handled empty discovery responses

* fix: removed settings import

* test: add module docstring

* test: removed log resultitng in failure

* fix: moved recommendations dictionary to settings variable

* fix: cleaned up logic for Cross Product Recommendations view

* refactor: requested changes to view and serializer tests

* fix: fixed list passed into serializer in cross product view

* fix: added query string to course query and removed production course keys

* fix: moved query string argument value to separate variable
2023-04-07 13:17:17 +02:00

98 lines
3.2 KiB
Python

"""
Serializers for learner recommendations APIs.
"""
from rest_framework import serializers
class ActiveCourseRunSerializer(serializers.Serializer):
"""Serializer for active course run for course about page recommendations API"""
key = serializers.CharField()
marketingUrl = serializers.URLField(source="marketing_url")
class CourseOwnersSerializer(serializers.Serializer):
"""Serializer for course owners for course about page recommendations API"""
key = serializers.CharField()
name = serializers.CharField()
logoImageUrl = serializers.URLField(source="logo_image_url")
class CourseImageSerializer(serializers.Serializer):
"""Serializer for course image for course about page recommendations API"""
src = serializers.URLField()
class RecommendedCourseSerializer(serializers.Serializer):
"""Serializer for a recommended course from the recommendation engine"""
key = serializers.CharField()
uuid = serializers.UUIDField()
title = serializers.CharField()
image = CourseImageSerializer()
prospectusPath = serializers.SerializerMethodField()
owners = serializers.ListField(
child=CourseOwnersSerializer(), allow_empty=True
)
activeCourseRun = ActiveCourseRunSerializer(source="active_course_run")
def get_prospectusPath(self, instance):
url_slug = instance.get("url_slug")
return f"course/{url_slug}"
class CrossProductCourseSerializer(serializers.Serializer):
"""Serializer for a cross product recommended course"""
key = serializers.CharField()
uuid = serializers.UUIDField()
title = serializers.CharField()
image = CourseImageSerializer()
prospectusPath = serializers.SerializerMethodField()
owners = serializers.ListField(
child=CourseOwnersSerializer(), allow_empty=True
)
activeCourseRun = ActiveCourseRunSerializer(source="active_course_run")
courseType = serializers.CharField(source="course_type")
def get_prospectusPath(self, instance):
url_slug = instance.get("url_slug")
return f"course/{url_slug}"
class AboutPageRecommendationsSerializer(serializers.Serializer):
"""Recommended courses for course about page"""
courses = serializers.ListField(
child=RecommendedCourseSerializer(), allow_empty=True
)
isControl = serializers.BooleanField(
source="is_control",
default=None
)
class CrossProductRecommendationsSerializer(serializers.Serializer):
"""Cross product recommendation courses for course about page"""
courses = serializers.ListField(
child=CrossProductCourseSerializer(), allow_empty=True
)
class CourseSerializer(serializers.Serializer):
"""Serializer for a recommended course from the recommendation engine"""
courseKey = serializers.CharField(source="course_key")
logoImageUrl = serializers.URLField(source="logo_image_url")
marketingUrl = serializers.URLField(source="marketing_url")
title = serializers.CharField()
class DashboardRecommendationsSerializer(serializers.Serializer):
"""Recommended courses for learner dashboard"""
courses = serializers.ListField(
child=CourseSerializer(), allow_empty=True
)
isControl = serializers.BooleanField(
source="is_control",
default=None
)