* feat: add course_url to course team management GET API response * fix: update docstring in api views * feat: Implement CMS course URL generation with HTTPS scheme detection
59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
"""
|
|
Serializers for use in the support app.
|
|
"""
|
|
|
|
from datetime import datetime
|
|
|
|
import pytz
|
|
from django.conf import settings
|
|
from rest_framework import serializers
|
|
|
|
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
|
|
|
|
|
|
class CourseTeamManageSerializer(serializers.ModelSerializer):
|
|
"""Serializer for course team management context data"""
|
|
|
|
role = serializers.SerializerMethodField()
|
|
status = serializers.SerializerMethodField()
|
|
course_url = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = CourseOverview
|
|
fields = ("id", "display_name", "role", "status", "course_url")
|
|
|
|
def get_role(self, obj):
|
|
course_role_map = self.context.get("course_role_map", {})
|
|
return course_role_map.get(str(obj.id))
|
|
|
|
def get_status(self, obj):
|
|
"""
|
|
Determine if the course is active or archived based on end date.
|
|
Returns 'active' if course end is null or in the future, 'archived' otherwise.
|
|
"""
|
|
if obj.end is None or obj.end >= datetime.now().replace(tzinfo=pytz.UTC):
|
|
return "active"
|
|
return "archived"
|
|
|
|
def get_course_url(self, obj):
|
|
"""
|
|
Construct the course URL for CMS with proper scheme and host.
|
|
"""
|
|
scheme = "https" if settings.HTTPS == "on" else "http"
|
|
course_url = f"{scheme}://{settings.CMS_BASE}/course/{str(obj.id)}"
|
|
return course_url
|
|
|
|
def to_representation(self, instance):
|
|
data = super().to_representation(instance)
|
|
course_key = instance.id
|
|
return {
|
|
"course_id": str(course_key),
|
|
"course_name": data["display_name"],
|
|
"course_url": data["course_url"],
|
|
"role": data["role"],
|
|
"status": data["status"],
|
|
"org": course_key.org,
|
|
"run": course_key.run,
|
|
"number": course_key.course,
|
|
}
|