Skip to content

Commit 433e582

Browse files
committed
refactor: refactor Django view to DRF
Refactor enable_certificate_generation to class based EnableCertificateGenerationAPIView
1 parent 3d46524 commit 433e582

File tree

3 files changed

+49
-14
lines changed

3 files changed

+49
-14
lines changed

lms/djangoapps/instructor/views/api.py

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@
101101
from lms.djangoapps.instructor.views.serializer import (
102102
AccessSerializer,
103103
BlockDueDateSerializer,
104+
CertificateGenerationSerializer,
104105
CertificateSerializer,
105106
CertificateStatusesSerializer,
106107
ForumRoleNameSerializer,
@@ -3402,22 +3403,35 @@ def _instructor_dash_url(course_key, section=None):
34023403
return url
34033404

34043405

3405-
@require_course_permission(permissions.ENABLE_CERTIFICATE_GENERATION)
3406-
@require_POST
3407-
def enable_certificate_generation(request, course_id=None):
3408-
"""Enable/disable self-generated certificates for a course.
3406+
class EnableCertificateGenerationAPIView(APIView):
3407+
"""Enable/disable self-generated certificates for a course."""
3408+
permission_classes = (IsAuthenticated, permissions.InstructorPermission)
3409+
permission_name = permissions.ENABLE_CERTIFICATE_GENERATION
3410+
serializer_class = CertificateGenerationSerializer
34093411

3410-
Once self-generated certificates have been enabled, students
3411-
who have passed the course will be able to generate certificates.
3412+
@method_decorator(ensure_csrf_cookie)
3413+
def post(self, request, course_id=None):
3414+
"""
3415+
Once self-generated certificates have been enabled, students
3416+
who have passed the course will be able to generate certificates.
34123417
3413-
Redirects back to the instructor dashboard once the
3414-
setting has been updated.
3418+
Parameters:
3419+
- `certificates-enabled`: The true/false value based on user action.
3420+
- `course_id`: The ID of the course for which the extensions are being queried.
34153421
3416-
"""
3417-
course_key = CourseKey.from_string(course_id)
3418-
is_enabled = (request.POST.get('certificates-enabled', 'false') == 'true')
3419-
certs_api.set_cert_generation_enabled(course_key, is_enabled)
3420-
return redirect(_instructor_dash_url(course_key, section='certificates'))
3422+
Redirects back to the instructor dashboard once the
3423+
setting has been updated.
3424+
"""
3425+
3426+
serializer = self.serializer_class(data=request.data)
3427+
serializer.is_valid(raise_exception=True)
3428+
3429+
course_key = CourseKey.from_string(course_id)
3430+
is_enabled = serializer.validated_data["certificates-enabled"]
3431+
3432+
certs_api.set_cert_generation_enabled(course_key, is_enabled)
3433+
3434+
return redirect(_instructor_dash_url(course_key, section='certificates'))
34213435

34223436

34233437
@method_decorator(cache_control(no_cache=True, no_store=True, must_revalidate=True), name='dispatch')

lms/djangoapps/instructor/views/api_urls.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,11 @@
8383
path('add_users_to_cohorts', api.AddUsersToCohorts.as_view(), name='add_users_to_cohorts'),
8484

8585
# Certificates
86-
path('enable_certificate_generation', api.enable_certificate_generation, name='enable_certificate_generation'),
86+
path(
87+
'enable_certificate_generation',
88+
api.EnableCertificateGenerationAPIView.as_view(),
89+
name='enable_certificate_generation',
90+
),
8791
path('start_certificate_generation', api.StartCertificateGeneration.as_view(), name='start_certificate_generation'),
8892
path('start_certificate_regeneration', api.StartCertificateRegeneration.as_view(),
8993
name='start_certificate_regeneration'),

lms/djangoapps/instructor/views/serializer.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,23 @@ def validate_user(self, value):
478478
return user
479479

480480

481+
class CertificateGenerationSerializer(serializers.Serializer):
482+
"""Serializer for enabling or disabling self-generated certificates for a course."""
483+
certificates_enabled = serializers.BooleanField(
484+
source="certificates-enabled",
485+
required=True,
486+
help_text="Enable or disable self-generated certificates for this course."
487+
)
488+
489+
def to_internal_value(self, data):
490+
"""Convert "true"/"false" strings to boolean before validation"""
491+
492+
if data.get("certificates-enabled") in ["true", "false"]:
493+
data = data.copy()
494+
data["certificates_enabled"] = data["certificates-enabled"] == "true"
495+
return super().to_internal_value(data)
496+
497+
481498
class RescoreEntranceExamSerializer(serializers.Serializer):
482499
"""Serializer for entrance exam rescoring"""
483500
unique_student_identifier = serializers.CharField(required=False, allow_null=True)

0 commit comments

Comments
 (0)