Example #1
0
class ImageSerializer(serializers.Serializer):  # pylint: disable=abstract-method
    """
    Collection of URLs pointing to images of various sizes.

    The URLs will be absolute URLs with the host set to the host of the current request. If the values to be
    serialized are already absolute URLs, they will be unchanged.
    """
    raw = AbsoluteURLField()
    small = AbsoluteURLField()
    large = AbsoluteURLField()
Example #2
0
class CourseInfoSerializer(serializers.Serializer):  # pylint: disable=abstract-method
    """
    Serializer for Course objects providing minimal data about the course.
    Compare this with CourseDetailSerializer.
    """

    access_expiration = serializers.DictField()
    can_show_upgrade_sock = serializers.BooleanField()
    content_type_gating_enabled = serializers.BooleanField()
    course_goals = CourseGoalsSerializer()
    effort = serializers.CharField()
    end = serializers.DateTimeField()
    enrollment = serializers.DictField()
    enrollment_start = serializers.DateTimeField()
    enrollment_end = serializers.DateTimeField()
    id = serializers.CharField()  # pylint: disable=invalid-name
    license = serializers.CharField()
    media = _CourseApiMediaCollectionSerializer(source='*')
    name = serializers.CharField(source='display_name_with_default_escaped')
    number = serializers.CharField(source='display_number_with_default')
    offer = serializers.DictField()
    org = serializers.CharField(source='display_org_with_default')
    related_programs = CourseProgramSerializer(many=True)
    short_description = serializers.CharField()
    start = serializers.DateTimeField()
    start_display = serializers.CharField()
    start_type = serializers.CharField()
    pacing = serializers.CharField()
    tabs = serializers.ListField()
    user_timezone = serializers.CharField()
    verified_mode = serializers.DictField()
    show_calculator = serializers.BooleanField()
    original_user_is_staff = serializers.BooleanField()
    can_view_legacy_courseware = serializers.BooleanField()
    is_staff = serializers.BooleanField()
    course_access = serializers.DictField()
    notes = serializers.DictField()
    marketing_url = serializers.CharField()
    celebrations = serializers.DictField()
    user_has_passing_grade = serializers.BooleanField()
    course_exit_page_is_active = serializers.BooleanField()
    certificate_data = CertificateDataSerializer()
    verify_identity_url = AbsoluteURLField()
    verification_status = serializers.CharField()
    linkedin_add_to_profile_url = serializers.URLField()
    user_needs_integrity_signature = serializers.BooleanField()
    username = serializers.CharField()

    def __init__(self, *args, **kwargs):
        """
        Initialize the serializer.
        If `requested_fields` is set, then only return that subset of fields.
        """
        super().__init__(*args, **kwargs)
        requested_fields = self.context['requested_fields']
        if requested_fields is not None:
            allowed = set(requested_fields.split(','))
            existing = set(self.fields)
            for field_name in existing - allowed:
                self.fields.pop(field_name)
Example #3
0
    def get_uri_absolute(self, course_overview):
        """
        Convert the media resource's URI to an absolute URI.
        """
        uri = getattr(course_overview, self.uri_attribute)

        if not uri:
            # Return empty string here, to keep the same
            # response type in case uri is empty as well.
            return ""

        cdn_applied_uri = course_overview.apply_cdn_to_url(uri)
        field = AbsoluteURLField()

        # In order to use the AbsoluteURLField to have the same
        # behaviour what ImageSerializer provides, we need to set
        # the request for the field
        field._context = {"request": self.context.get("request")}  # lint-amnesty, pylint: disable=protected-access

        return field.to_representation(cdn_applied_uri)
Example #4
0
class AbsoluteURLFieldTests(TestCase):
    """ Tests for the AbsoluteURLField. """
    def setUp(self):
        super(AbsoluteURLFieldTests, self).setUp()
        self.field = AbsoluteURLField()
        self.field._context = {'request': MockRequest()}  # pylint:disable=protected-access

    def test_to_representation_without_request(self):
        """ Verify an AssertionError is raised if no request is passed as context to the field. """
        self.field._context = {}  # pylint:disable=protected-access
        self.assertRaises(AssertionError, self.field.to_representation,
                          '/image.jpg')

    @ddt.data('http://example.com', 'https://example.org')
    def test_to_representation_with_absolute_url(self, value):
        """ Verify the method returns the passed value, if the value is an absolute URL. """
        self.assertEqual(self.field.to_representation(value), value)

    def test_to_representation(self):
        """ Verify the method returns an absolute URL. """
        self.assertEqual(self.field.to_representation('/image.jpg'),
                         MockRequest.ROOT + '/image.jpg')
Example #5
0
class CourseProgramSerializer(serializers.Serializer):  # lint-amnesty, pylint: disable=abstract-method, missing-class-docstring
    progress = serializers.SerializerMethodField()
    slug = serializers.CharField()
    title = serializers.CharField()
    url = AbsoluteURLField()
    uuid = serializers.UUIDField()

    def get_progress(self, program):
        progress = program['progress']
        return {
            'completed': progress['completed'],
            'in_progress': progress['in_progress'],
            'not_started': progress['not_started']
        }
Example #6
0
class CourseProgramSerializer(serializers.Serializer):
    progress = serializers.SerializerMethodField()
    slug = serializers.CharField()
    title = serializers.CharField()
    url = AbsoluteURLField()
    uuid = serializers.UUIDField()

    def get_progress(self, program):
        progress = program['progress']
        return {
            'completed': progress['completed'],
            'in_progress': progress['in_progress'],
            'not_started': progress['not_started']
        }
class AbsoluteURLFieldTests(TestCase):
    """ Tests for the AbsoluteURLField. """

    def setUp(self):
        super(AbsoluteURLFieldTests, self).setUp()
        self.field = AbsoluteURLField()
        self.field._context = {'request': MockRequest()}  # pylint:disable=protected-access

    def test_to_representation_without_request(self):
        """ Verify an AssertionError is raised if no request is passed as context to the field. """
        self.field._context = {}  # pylint:disable=protected-access
        self.assertRaises(AssertionError, self.field.to_representation, '/image.jpg')

    @ddt.data(
        'http://example.com',
        'https://example.org'
    )
    def test_to_representation_with_absolute_url(self, value):
        """ Verify the method returns the passed value, if the value is an absolute URL. """
        self.assertEqual(self.field.to_representation(value), value)

    def test_to_representation(self):
        """ Verify the method returns an absolute URL. """
        self.assertEqual(self.field.to_representation('/image.jpg'), MockRequest.ROOT + '/image.jpg')
Example #8
0
 def setUp(self):
     super(AbsoluteURLFieldTests, self).setUp()
     self.field = AbsoluteURLField()
     self.field._context = {'request': MockRequest()}  # pylint:disable=protected-access
 def setUp(self):
     super(AbsoluteURLFieldTests, self).setUp()
     self.field = AbsoluteURLField()
     self.field._context = {'request': MockRequest()}  # pylint:disable=protected-access
Example #10
0
 def setUp(self):
     super(AbsoluteURLFieldTests, self).setUp()  # lint-amnesty, pylint: disable=super-with-arguments
     self.field = AbsoluteURLField()
     self.field._context = {'request': MockRequest()}  # pylint:disable=protected-access