- CompletionReportView + CSV: enrollment-level completion status, filterable by course_id, org_id, date_from, date_to - ProgressReportView + CSV: page-level dwell-time aggregates, same filters - AttemptReportView + CSV: quiz attempt scores, pass/fail, timestamps; org filter joins through Enrollment.org_id; course filter traverses quiz -> page -> lesson -> module -> course - Streaming CSV responses with _EchoWriter to avoid buffering large exports - pytest test suite covering filters, aggregation accuracy, and CSV format Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
22 lines
712 B
Python
22 lines
712 B
Python
from django.urls import path
|
|
|
|
from .views import (
|
|
AttemptReportCSVView,
|
|
AttemptReportView,
|
|
CompletionReportCSVView,
|
|
CompletionReportView,
|
|
ProgressReportCSVView,
|
|
ProgressReportView,
|
|
)
|
|
|
|
app_name = "reports"
|
|
|
|
urlpatterns = [
|
|
path("completion/", CompletionReportView.as_view(), name="completion"),
|
|
path("completion/csv/", CompletionReportCSVView.as_view(), name="completion-csv"),
|
|
path("progress/", ProgressReportView.as_view(), name="progress"),
|
|
path("progress/csv/", ProgressReportCSVView.as_view(), name="progress-csv"),
|
|
path("attempts/", AttemptReportView.as_view(), name="attempts"),
|
|
path("attempts/csv/", AttemptReportCSVView.as_view(), name="attempts-csv"),
|
|
]
|