From 2f1746b9fb1b4dbed1eb57b0156d2c319e0f9a8e Mon Sep 17 00:00:00 2001 From: Michael Stewart Date: Sun, 27 Oct 2024 22:34:29 -0400 Subject: [PATCH 1/2] trigger pr when this is pr'ed back to og --- teleband/dashboards/urls.py | 1 + 1 file changed, 1 insertion(+) diff --git a/teleband/dashboards/urls.py b/teleband/dashboards/urls.py index 0749882..ab67004 100644 --- a/teleband/dashboards/urls.py +++ b/teleband/dashboards/urls.py @@ -1,6 +1,7 @@ from django.urls import path from teleband.dashboards.views import AssignmentListView, CourseListView, csv_view + app_name = "dashboards" urlpatterns = [ path("", AssignmentListView.as_view(), name="assignment_list"), From f75c2d02cb9cd0f8d4db52f4ae881c81a30aa185 Mon Sep 17 00:00:00 2001 From: Michael Stewart Date: Sun, 27 Oct 2024 22:36:52 -0400 Subject: [PATCH 2/2] get right with formatting --- teleband/dashboards/views.py | 120 ++++++++++++++++++++++------- teleband/musics/api/serializers.py | 11 ++- teleband/musics/models.py | 8 +- 3 files changed, 105 insertions(+), 34 deletions(-) diff --git a/teleband/dashboards/views.py b/teleband/dashboards/views.py index 5823de6..c9d62c9 100644 --- a/teleband/dashboards/views.py +++ b/teleband/dashboards/views.py @@ -53,49 +53,113 @@ def csv_view(request): # is a performance booster which results in a single more complex query but won't require # database queries assignments = Assignment.objects.select_related( - "piece", - "piece_plan", - "enrollment", - "enrollment__user", - "enrollment__course", - "enrollment__instrument", - "enrollment__course__owner", - "instrument", - "activity", - ).all() + "piece", + "piece_plan", + "enrollment", + "enrollment__user", + "enrollment__course", + "enrollment__instrument", + "enrollment__course__owner", + "instrument", + "activity", + ).all() # Create the HttpResponse object with the appropriate CSV header response = HttpResponse( content_type="text/csv", - headers={"Content-Disposition": 'attachment; filename="assignment.csv"'} + headers={"Content-Disposition": 'attachment; filename="assignment.csv"'}, ) writer = csv.writer(response) - writer.writerow(["ID", "Course ID", "Course Name", "Piece ID", "Piece Name", "Piece Plan ID", "Piece Plan Name", - "Student ID", "Student Instrument ID", "Student Instrument Name", "Assignment Activity ID", - "Assignment Activity", "Assignment Instrument ID", "Assignment Instrument Name", "Submissions ID", - "Submissions Content", "Submissions submitted", "Submissions grade", "Submissions Self Grade", - "Submission Attatchnment ID", "Submission Attachment File", "Submission Attachment Submitted"]) + writer.writerow( + [ + "ID", + "Course ID", + "Course Name", + "Piece ID", + "Piece Name", + "Piece Plan ID", + "Piece Plan Name", + "Student ID", + "Student Instrument ID", + "Student Instrument Name", + "Assignment Activity ID", + "Assignment Activity", + "Assignment Instrument ID", + "Assignment Instrument Name", + "Submissions ID", + "Submissions Content", + "Submissions submitted", + "Submissions grade", + "Submissions Self Grade", + "Submission Attatchnment ID", + "Submission Attachment File", + "Submission Attachment Submitted", + ] + ) for assn in assignments: if len(assn.submissions.all()) == 0: - - writer.writerow([assn.id, assn.enrollment.course.id, assn.enrollment.course.name, assn.piece.id, - assn.piece.name, assn.piece_plan.id, assn.piece_plan, assn.enrollment.user.id, - assn.enrollment.instrument.id, assn.enrollment.instrument.name, assn.activity.id, - assn.activity, assn.instrument.id, assn.instrument.name, "N/A", "N/A", "N/A", - "N/A", "N/A", "N/A", "N/A", "N/A"]) + + writer.writerow( + [ + assn.id, + assn.enrollment.course.id, + assn.enrollment.course.name, + assn.piece.id, + assn.piece.name, + assn.piece_plan.id, + assn.piece_plan, + assn.enrollment.user.id, + assn.enrollment.instrument.id, + assn.enrollment.instrument.name, + assn.activity.id, + assn.activity, + assn.instrument.id, + assn.instrument.name, + "N/A", + "N/A", + "N/A", + "N/A", + "N/A", + "N/A", + "N/A", + "N/A", + ] + ) else: for sub in assn.submissions.all(): for att in sub.attachments.all(): - csv_val = [assn.id, assn.enrollment.course.id, assn.enrollment.course.name, assn.piece.id, - assn.piece.name, assn.piece_plan.id, assn.piece_plan, assn.enrollment.user.id, - assn.enrollment.instrument.id, assn.enrollment.instrument.name, assn.activity.id, - assn.activity, assn.instrument.id, assn.instrument.name, sub.id] + csv_val = [ + assn.id, + assn.enrollment.course.id, + assn.enrollment.course.name, + assn.piece.id, + assn.piece.name, + assn.piece_plan.id, + assn.piece_plan, + assn.enrollment.user.id, + assn.enrollment.instrument.id, + assn.enrollment.instrument.name, + assn.activity.id, + assn.activity, + assn.instrument.id, + assn.instrument.name, + sub.id, + ] if assn.activity.category == "Create": csv_val.append("Create, see below") else: csv_val.append(sub.content) - csv_val.extend([sub.submitted, sub.grade, sub.self_grade, att.id, att.file, att.submitted]) - + csv_val.extend( + [ + sub.submitted, + sub.grade, + sub.self_grade, + att.id, + att.file, + att.submitted, + ] + ) + writer.writerow(csv_val) return response diff --git a/teleband/musics/api/serializers.py b/teleband/musics/api/serializers.py index 05c386b..e899fdb 100644 --- a/teleband/musics/api/serializers.py +++ b/teleband/musics/api/serializers.py @@ -1,8 +1,13 @@ from rest_framework import serializers from teleband.musics.models import ( - Piece, Part, PartTransposition, Composer, PartType, - PartInstrumentSample, EnsembleType + Piece, + Part, + PartTransposition, + Composer, + PartType, + PartInstrumentSample, + EnsembleType, ) from teleband.instruments.models import Transposition from teleband.utils.serializers import GenericNameSerializer @@ -49,7 +54,7 @@ class Meta: class PartInstrumentSampleSerializer(serializers.ModelSerializer): class Meta: model = PartInstrumentSample - fields = ['id', 'part', 'instrument', 'sample_audio'] + fields = ["id", "part", "instrument", "sample_audio"] class PartSerializer(serializers.ModelSerializer): diff --git a/teleband/musics/models.py b/teleband/musics/models.py index 8d1a602..7cf24db 100644 --- a/teleband/musics/models.py +++ b/teleband/musics/models.py @@ -96,12 +96,14 @@ def __str__(self): class PartInstrumentSample(models.Model): - part = models.ForeignKey(Part, related_name="instrument_samples", on_delete=models.PROTECT) - instrument = models.ForeignKey('instruments.Instrument', on_delete=models.PROTECT) + part = models.ForeignKey( + Part, related_name="instrument_samples", on_delete=models.PROTECT + ) + instrument = models.ForeignKey("instruments.Instrument", on_delete=models.PROTECT) sample_audio = models.FileField(upload_to="instrument_samples/") class Meta: - unique_together = ['part', 'instrument'] + unique_together = ["part", "instrument"] verbose_name = "Part Instrument Sample" verbose_name_plural = "Part Instrument Samples"