コード例 #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()
コード例 #2
0
ファイル: serializers.py プロジェクト: cmltaWt0/edx-platform
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)
コード例 #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)
コード例 #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')
コード例 #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']
        }
コード例 #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']
        }
コード例 #7
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')
コード例 #8
0
 def setUp(self):
     super(AbsoluteURLFieldTests, self).setUp()
     self.field = AbsoluteURLField()
     self.field._context = {'request': MockRequest()}  # pylint:disable=protected-access
コード例 #9
0
 def setUp(self):
     super(AbsoluteURLFieldTests, self).setUp()
     self.field = AbsoluteURLField()
     self.field._context = {'request': MockRequest()}  # pylint:disable=protected-access
コード例 #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