From 8774ff1f9b92981d2618d55c5b23857a466b46c3 Mon Sep 17 00:00:00 2001
From: Ned Batchelder <ned@edx.org>
Date: Fri, 24 May 2019 15:59:18 -0400
Subject: [PATCH] Use ref_name to disambiguate serializers that drf-yasg would
 otherwise assume are the same.

---
 common/djangoapps/course_modes/api/serializers.py  | 4 ++++
 lms/djangoapps/commerce/api/v1/serializers.py      | 6 ++++++
 lms/djangoapps/mobile_api/users/serializers.py     | 2 ++
 openedx/core/djangoapps/enrollments/serializers.py | 4 ++++
 openedx/core/djangoapps/user_api/serializers.py    | 2 ++
 5 files changed, 18 insertions(+)

diff --git a/common/djangoapps/course_modes/api/serializers.py b/common/djangoapps/course_modes/api/serializers.py
index 2df0493b792..7c287ac54df 100644
--- a/common/djangoapps/course_modes/api/serializers.py
+++ b/common/djangoapps/course_modes/api/serializers.py
@@ -28,6 +28,10 @@ class CourseModeSerializer(serializers.Serializer):
     sku = serializers.CharField(required=False)
     bulk_sku = serializers.CharField(required=False)
 
+    class Meta(object):
+        # For disambiguating within the drf-yasg swagger schema
+        ref_name = 'course_modes.CourseMode'
+
     def create(self, validated_data):
         """
         This method must be implemented for use in our
diff --git a/lms/djangoapps/commerce/api/v1/serializers.py b/lms/djangoapps/commerce/api/v1/serializers.py
index 6c66dfecf36..2eefe854284 100644
--- a/lms/djangoapps/commerce/api/v1/serializers.py
+++ b/lms/djangoapps/commerce/api/v1/serializers.py
@@ -36,6 +36,8 @@ class CourseModeSerializer(serializers.ModelSerializer):
     class Meta(object):
         model = CourseMode
         fields = ('name', 'currency', 'price', 'sku', 'bulk_sku', 'expires')
+        # For disambiguating within the drf-yasg swagger schema
+        ref_name = 'commerce.CourseMode'
 
 
 def validate_course_id(course_id):
@@ -77,6 +79,10 @@ class CourseSerializer(serializers.Serializer):
     verification_deadline = PossiblyUndefinedDateTimeField(format=None, allow_null=True, required=False)
     modes = CourseModeSerializer(many=True)
 
+    class Meta(object):
+        # For disambiguating within the drf-yasg swagger schema
+        ref_name = 'commerce.Course'
+
     def validate(self, attrs):
         """ Ensure the verification deadline occurs AFTER the course mode enrollment deadlines. """
         verification_deadline = attrs.get('verification_deadline', None)
diff --git a/lms/djangoapps/mobile_api/users/serializers.py b/lms/djangoapps/mobile_api/users/serializers.py
index e6814350e0f..da0a7395ed7 100644
--- a/lms/djangoapps/mobile_api/users/serializers.py
+++ b/lms/djangoapps/mobile_api/users/serializers.py
@@ -147,3 +147,5 @@ class UserSerializer(serializers.ModelSerializer):
         model = User
         fields = ('id', 'username', 'email', 'name', 'course_enrollments')
         lookup_field = 'username'
+        # For disambiguating within the drf-yasg swagger schema
+        ref_name = 'mobile_api.User'
diff --git a/openedx/core/djangoapps/enrollments/serializers.py b/openedx/core/djangoapps/enrollments/serializers.py
index 5e946527f9f..2b7a3a6b551 100644
--- a/openedx/core/djangoapps/enrollments/serializers.py
+++ b/openedx/core/djangoapps/enrollments/serializers.py
@@ -45,6 +45,10 @@ class CourseSerializer(serializers.Serializer):  # pylint: disable=abstract-meth
     invite_only = serializers.BooleanField(source="invitation_only")
     course_modes = serializers.SerializerMethodField()
 
+    class Meta(object):
+        # For disambiguating within the drf-yasg swagger schema
+        ref_name = 'enrollment.Course'
+
     def __init__(self, *args, **kwargs):
         self.include_expired = kwargs.pop("include_expired", False)
         super(CourseSerializer, self).__init__(*args, **kwargs)
diff --git a/openedx/core/djangoapps/user_api/serializers.py b/openedx/core/djangoapps/user_api/serializers.py
index ae515de0ae2..76dcdb7fe59 100644
--- a/openedx/core/djangoapps/user_api/serializers.py
+++ b/openedx/core/djangoapps/user_api/serializers.py
@@ -34,6 +34,8 @@ class UserSerializer(serializers.HyperlinkedModelSerializer):
         # This list is the minimal set required by the notification service
         fields = ("id", "url", "email", "name", "username", "preferences")
         read_only_fields = ("id", "email", "username")
+        # For disambiguating within the drf-yasg swagger schema
+        ref_name = 'user_api.User'
 
 
 class UserPreferenceSerializer(serializers.HyperlinkedModelSerializer):
-- 
GitLab