Files
Navin Karkera 9cd1d7c3c8 feat: create DRF endpoint to get course index context (#33943)
* feat: create DRF endpoint to get course index context

* refactor: update serializers location and added some tests

* refactor: move modulestore usage out of views

* fix: move course index call under bulk_operations

* test: add test to track db and mongo queries

---------

Co-authored-by: ruzniaievdm <ruzniaievdm@gmail.com>
2024-01-08 09:36:56 -05:00

73 lines
2.4 KiB
Python

"""
Common API Serializers
"""
from rest_framework import serializers
from openedx.core.lib.api.serializers import CourseKeyField
class CourseCommonSerializer(serializers.Serializer):
"""Serializer for course renders"""
course_key = CourseKeyField()
display_name = serializers.CharField()
lms_link = serializers.CharField()
number = serializers.CharField()
org = serializers.CharField()
rerun_link = serializers.CharField()
run = serializers.CharField()
url = serializers.CharField()
class StrictSerializer(serializers.Serializer):
"""
Serializers that validates strong parameters, i.e. that no extra fields are passed in.
The serializer inheriting from this may throw a ValidationError and can be called in a try/catch
block that will return a 400 response on ValidationError.
"""
def to_internal_value(self, data):
"""
raise validation error if there are any unexpected fields.
"""
# Transform and validate the expected fields
ret = super().to_internal_value(data)
# Get the list of valid fields from the serializer
valid_fields = set(self.fields.keys())
# Check for unexpected fields
extra_fields = set(data.keys()) - valid_fields
if extra_fields:
# Check if these unexpected fields are due to nested serializers
for field_name in list(extra_fields):
if isinstance(self.fields.get(field_name), serializers.BaseSerializer):
extra_fields.remove(field_name)
# If there are still unexpected fields left, raise an error
if extra_fields:
raise serializers.ValidationError(
{field: ["This field is not expected."] for field in extra_fields}
)
return ret
class ProctoringErrorModelSerializer(serializers.Serializer):
"""
Serializer for proctoring error model item.
"""
deprecated = serializers.BooleanField()
display_name = serializers.CharField()
help = serializers.CharField()
hide_on_enabled_publisher = serializers.BooleanField()
value = serializers.CharField()
class ProctoringErrorListSerializer(serializers.Serializer):
"""
Serializer for proctoring error list.
"""
key = serializers.CharField()
message = serializers.CharField()
model = ProctoringErrorModelSerializer()