116 lines
3.7 KiB
Python
116 lines
3.7 KiB
Python
"""Defines serializers used by the Team API."""
|
|
|
|
from django.contrib.auth.models import User
|
|
from rest_framework import serializers
|
|
from openedx.core.lib.api.serializers import CollapsedReferenceSerializer
|
|
from openedx.core.lib.api.fields import ExpandableField
|
|
from .models import CourseTeam, CourseTeamMembership
|
|
from openedx.core.djangoapps.user_api.serializers import UserSerializer
|
|
|
|
|
|
class UserMembershipSerializer(serializers.ModelSerializer):
|
|
"""Serializes CourseTeamMemberships with only user and date_joined
|
|
|
|
Used for listing team members.
|
|
"""
|
|
user = ExpandableField(
|
|
collapsed_serializer=CollapsedReferenceSerializer(
|
|
model_class=User,
|
|
id_source='username',
|
|
view_name='accounts_api',
|
|
read_only=True,
|
|
),
|
|
expanded_serializer=UserSerializer(),
|
|
)
|
|
|
|
class Meta(object):
|
|
"""Defines meta information for the ModelSerializer."""
|
|
model = CourseTeamMembership
|
|
fields = ("user", "date_joined")
|
|
read_only_fields = ("date_joined",)
|
|
|
|
|
|
class CourseTeamSerializer(serializers.ModelSerializer):
|
|
"""Serializes a CourseTeam with membership information."""
|
|
id = serializers.CharField(source='team_id', read_only=True) # pylint: disable=invalid-name
|
|
membership = UserMembershipSerializer(many=True, read_only=True)
|
|
|
|
class Meta(object):
|
|
"""Defines meta information for the ModelSerializer."""
|
|
model = CourseTeam
|
|
fields = (
|
|
"id",
|
|
"name",
|
|
"is_active",
|
|
"course_id",
|
|
"topic_id",
|
|
"date_created",
|
|
"description",
|
|
"country",
|
|
"language",
|
|
"membership",
|
|
)
|
|
read_only_fields = ("course_id", "date_created")
|
|
|
|
|
|
class CourseTeamCreationSerializer(serializers.ModelSerializer):
|
|
"""Deserializes a CourseTeam for creation."""
|
|
|
|
class Meta(object):
|
|
"""Defines meta information for the ModelSerializer."""
|
|
model = CourseTeam
|
|
fields = (
|
|
"name",
|
|
"course_id",
|
|
"description",
|
|
"topic_id",
|
|
"country",
|
|
"language",
|
|
)
|
|
|
|
def restore_object(self, attrs, instance=None):
|
|
"""Restores a CourseTeam instance from the given attrs."""
|
|
return CourseTeam.create(
|
|
name=attrs.get("name", ''),
|
|
course_id=attrs.get("course_id"),
|
|
description=attrs.get("description", ''),
|
|
topic_id=attrs.get("topic_id", ''),
|
|
country=attrs.get("country", ''),
|
|
language=attrs.get("language", ''),
|
|
)
|
|
|
|
|
|
class MembershipSerializer(serializers.ModelSerializer):
|
|
"""Serializes CourseTeamMemberships with information about both teams and users."""
|
|
user = ExpandableField(
|
|
collapsed_serializer=CollapsedReferenceSerializer(
|
|
model_class=User,
|
|
id_source='username',
|
|
view_name='accounts_api',
|
|
read_only=True,
|
|
),
|
|
expanded_serializer=UserSerializer(read_only=True)
|
|
)
|
|
team = ExpandableField(
|
|
collapsed_serializer=CollapsedReferenceSerializer(
|
|
model_class=CourseTeam,
|
|
id_source='team_id',
|
|
view_name='teams_detail',
|
|
read_only=True,
|
|
),
|
|
expanded_serializer=CourseTeamSerializer(read_only=True)
|
|
)
|
|
|
|
class Meta(object):
|
|
"""Defines meta information for the ModelSerializer."""
|
|
model = CourseTeamMembership
|
|
fields = ("user", "team", "date_joined")
|
|
read_only_fields = ("date_joined",)
|
|
|
|
|
|
class TopicSerializer(serializers.Serializer):
|
|
"""Serializes a topic."""
|
|
description = serializers.CharField()
|
|
name = serializers.CharField()
|
|
id = serializers.CharField() # pylint: disable=invalid-name
|