Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 14 additions & 3 deletions config/api_router.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,17 @@

from teleband.users.api.views import UserViewSet
from teleband.courses.api.views import EnrollmentViewSet, CourseViewSet
from teleband.assignments.api.views import AssignmentViewSet, ActivityViewSet, PiecePlanViewSet
from teleband.submissions.api.views import GradeViewSet, SubmissionViewSet, AttachmentViewSet, TeacherSubmissionViewSet
from teleband.assignments.api.views import (
AssignmentViewSet,
ActivityViewSet,
PiecePlanViewSet,
)
from teleband.submissions.api.views import (
GradeViewSet,
SubmissionViewSet,
AttachmentViewSet,
TeacherSubmissionViewSet,
)
from teleband.musics.api.views import PieceViewSet
from teleband.instruments.api.views import InstrumentViewSet

Expand All @@ -28,7 +37,9 @@
courses_router = nested_cls(router, "courses", lookup="course_slug")
courses_router.register("assignments", AssignmentViewSet) # option basename omitted
courses_router.register("activities", ActivityViewSet) # option basename omitted
courses_router.register("submissions", TeacherSubmissionViewSet) # option basename omitted
courses_router.register(
"submissions", TeacherSubmissionViewSet
) # option basename omitted
courses_router.register("grades", GradeViewSet) # option basename omitted
courses_router.register("piece-plans", PiecePlanViewSet)

Expand Down
1 change: 1 addition & 0 deletions config/asgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
https://docs.djangoproject.com/en/dev/howto/deployment/asgi/

"""

import os
import sys
from pathlib import Path
Expand Down
1 change: 1 addition & 0 deletions config/settings/base.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""
Base settings to build other settings files upon.
"""

from pathlib import Path

import environ
Expand Down
7 changes: 6 additions & 1 deletion config/settings/local.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,12 @@
# django-cors-headers - https://github.com/adamchainz/django-cors-headers#setup
# Your stuff...
# CORS_ALLOW_ALL_ORIGINS = True
CORS_ALLOWED_ORIGIN_REGEXES = [r'{}'.format(s) for s in env.list("CORS_ALLOWED_ORIGIN_REGEXES", default=[r"^http://localhost:3000$"])]
CORS_ALLOWED_ORIGIN_REGEXES = [
r"{}".format(s)
for s in env.list(
"CORS_ALLOWED_ORIGIN_REGEXES", default=[r"^http://localhost:3000$"]
)
]
# CORS_ALLOWED_ORIGIN_REGEXES = [
# r"^http://localhost:3000$", # works for local dev
# ]
Expand Down
1 change: 1 addition & 0 deletions config/wsgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
framework.

"""

import os
import sys
from pathlib import Path
Expand Down
41 changes: 27 additions & 14 deletions teleband/assignments/admin.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
from django.contrib import admin
from reversion.admin import VersionAdmin

from .models import ActivityCategory, ActivityType, Activity, \
Assignment, Curriculum, CurriculumEntry, \
PiecePlan, PlannedActivity, AssignmentGroup
from .models import (
ActivityCategory,
ActivityType,
Activity,
Assignment,
Curriculum,
CurriculumEntry,
PiecePlan,
PlannedActivity,
AssignmentGroup,
)


@admin.register(ActivityCategory)
Expand Down Expand Up @@ -47,17 +55,19 @@ class AssignmentAdmin(VersionAdmin):
date_hierarchy = "created_at"
save_as = True


class PiecePlanActivityInline(admin.TabularInline):
model = PlannedActivity
extra = 0
ordering = ("order",)


@admin.register(PiecePlan)
class PiecePlanAdmin(VersionAdmin):
list_display = (
"id",
"id",
"name",
"piece",
"piece",
"type",
)
list_filter = (
Expand All @@ -68,27 +78,28 @@ class PiecePlanAdmin(VersionAdmin):
raw_id_fields = ("activities",)
save_as = True


class AssignmentInline(admin.TabularInline):
model = Assignment
extra = 0
ordering = ("-id",)


@admin.register(AssignmentGroup)
class AssignmentGroupAdmin(VersionAdmin):
list_display = (
"id",
"type",
)
list_filter = (
"id",
"type",
)
list_filter = ("type",)
inlines = (AssignmentInline,)


# @admin.register(PlannedActivity)
# class PlannedActivityAdmin(VersionAdmin):
# list_display = (
# "id",
# "piece_plan",
# "id",
# "piece_plan",
# "activity",
# "order",
# )
Expand All @@ -97,23 +108,25 @@ class AssignmentGroupAdmin(VersionAdmin):
# "activity",
# )


class CurriculumEntryInline(admin.TabularInline):
model = CurriculumEntry
extra = 0
ordering = ("order",)


@admin.register(Curriculum)
class CurriculumAdmin(VersionAdmin):
list_display = (
"id",
"id",
"name",
"course",
"ordered",
"ordered",
)
list_filter = (
"course",
"ordered",
)
inlines = (CurriculumEntryInline,)
raw_id_fields = ("piece_plans",)
save_as = True
save_as = True
76 changes: 60 additions & 16 deletions teleband/assignments/api/serializers.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
from rest_framework import serializers

from teleband.assignments.models import Assignment, Activity, ActivityType, AssignmentGroup, PiecePlan
from teleband.assignments.models import (
Assignment,
Activity,
ActivityType,
AssignmentGroup,
PiecePlan,
)
from teleband.courses.api.serializers import EnrollmentSerializer
from teleband.instruments.api.serializers import InstrumentSerializer
from teleband.submissions.api.serializers import SubmissionSerializer
from teleband.utils.serializers import GenericNameSerializer
from teleband.musics.api.serializers import PartTranspositionSerializer, PartSerializer, PieceSerializer
from teleband.musics.api.serializers import (
PartTranspositionSerializer,
PartSerializer,
PieceSerializer,
)


class ActivityTypeSerializer(serializers.ModelSerializer):
Expand All @@ -32,10 +42,15 @@ class GroupSerializer(serializers.ModelSerializer):
def get_members(self, obj):
assignments = Assignment.objects.filter(group=obj)
assignment_enrollments = [(a, a.enrollment) for a in assignments]
member_list = [{"enrollment_id": ae[1].id,
"enrollment_username": ae[1].user.username,
"activity_type_name": ae[0].activity.activity_type_name,
"assignment_submitted": bool(ae[0].submissions.count())} for ae in assignment_enrollments]
member_list = [
{
"enrollment_id": ae[1].id,
"enrollment_username": ae[1].user.username,
"activity_type_name": ae[0].activity.activity_type_name,
"assignment_submitted": bool(ae[0].submissions.count()),
}
for ae in assignment_enrollments
]
return member_list

class Meta:
Expand All @@ -53,31 +68,45 @@ class AssignmentSerializer(serializers.ModelSerializer):
class Meta:
model = Assignment
# fields = ["activity", "deadline", "instrument", "id", "url"]
fields = ["activity", "deadline", "instrument", "part", "id", "enrollment", "submissions", "group"]
fields = [
"activity",
"deadline",
"instrument",
"part",
"id",
"enrollment",
"submissions",
"group",
]

extra_kwargs = {
"url": {"view_name": "api:assignment-detail", "lookup_field": "id"},
}

# def get_fields(self):
# fields = super().get_fields()
# if not self.instance.group:
# if not self.instance.group:
# del fields['group']
# return fields

# return fields


class AssignmentViewSetSerializer(serializers.ModelSerializer):
activity = serializers.PrimaryKeyRelatedField(queryset=Activity.objects.all())
activity_type_name = serializers.CharField(source="activity.activity_type_name", read_only=True)
activity_type_category = serializers.CharField(source="activity.category", read_only=True)
activity_type_name = serializers.CharField(
source="activity.activity_type_name", read_only=True
)
activity_type_category = serializers.CharField(
source="activity.category", read_only=True
)
activity_body = serializers.CharField(source="activity.body", read_only=True)
part_type = serializers.CharField(source="activity.part_type.name", read_only=True)
piece_name = serializers.SlugField(source="piece.name", read_only=True)
piece_id = serializers.IntegerField(source="piece.id", read_only=True)
piece_slug = serializers.SlugField(source="piece.slug", read_only=True)
instrument = serializers.CharField(source="instrument.name", read_only=True)
transposition = serializers.CharField(source="instrument.transposition.name", read_only=True)
transposition = serializers.CharField(
source="instrument.transposition.name", read_only=True
)
group = GroupSerializer()
# instrument = InstrumentSerializer()
part = PartSerializer()
Expand All @@ -88,8 +117,22 @@ class Meta:
model = Assignment
# fields = ["activity", "deadline", "instrument", "id", "url"]
# fields = ["activity", "deadline", "instrument", "part", "id", "enrollment", "submissions"]
fields = ["id", "activity", "activity_type_name", "activity_type_category", "activity_body", "part_type",
"piece_name", "piece_id", "piece_slug", "instrument", "transposition", "group", "part", "submissions"]
fields = [
"id",
"activity",
"activity_type_name",
"activity_type_category",
"activity_body",
"part_type",
"piece_name",
"piece_id",
"piece_slug",
"instrument",
"transposition",
"group",
"part",
"submissions",
]

extra_kwargs = {
"url": {"view_name": "api:assignment-detail", "lookup_field": "id"},
Expand All @@ -116,6 +159,7 @@ class Meta:
"url": {"view_name": "api:assignment-detail", "lookup_field": "id"},
}


class PiecePlanSerializer(serializers.ModelSerializer):
id = serializers.IntegerField()
type = serializers.CharField()
Expand All @@ -129,4 +173,4 @@ class Meta:

# extra_kwargs = {
# "url": {"view_name": "api:pieceplan-detail", "lookup_field": "id"},
# }
# }
14 changes: 9 additions & 5 deletions teleband/assignments/migrations/0016_alter_activity_part_type.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,18 @@
class Migration(migrations.Migration):

dependencies = [
('musics', '0015_auto_20220206_2027'),
('assignments', '0015_seed_activities'),
("musics", "0015_auto_20220206_2027"),
("assignments", "0015_seed_activities"),
]

operations = [
migrations.AlterField(
model_name='activity',
name='part_type',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='musics.parttype'),
model_name="activity",
name="part_type",
field=models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="musics.parttype",
),
),
]
3 changes: 2 additions & 1 deletion teleband/assignments/migrations/0017_seed_more_activities.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from django.db import migrations


def update_site_forward(apps, schema_editor):
"""Set site domain and name."""
Activity = apps.get_model("assignments", "Activity")
Expand All @@ -28,7 +29,7 @@ def update_site_forward(apps, schema_editor):
class Migration(migrations.Migration):

dependencies = [
('assignments', '0016_alter_activity_part_type'),
("assignments", "0016_alter_activity_part_type"),
]

operations = [migrations.RunPython(update_site_forward, migrations.RunPython.noop)]
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,22 @@ def assign_part_type(apps, schema_editor):
ActivityType = apps.get_model("assignments", "ActivityType")
PartType = apps.get_model("musics", "PartType")
combined_part_type = PartType.objects.get(name="Combined")
record = Activity.objects.get(activity_type=ActivityType.objects.get(name="Creativity"),)
record.part_type=combined_part_type
record = Activity.objects.get(
activity_type=ActivityType.objects.get(name="Creativity"),
)
record.part_type = combined_part_type
record.save()
record = Activity.objects.get(activity_type=ActivityType.objects.get(name="Reflection"),)
record.part_type=combined_part_type
record = Activity.objects.get(
activity_type=ActivityType.objects.get(name="Reflection"),
)
record.part_type = combined_part_type
record.save()


class Migration(migrations.Migration):

dependencies = [
('assignments', '0017_seed_more_activities'),
("assignments", "0017_seed_more_activities"),
]

operations = [migrations.RunPython(assign_part_type, migrations.RunPython.noop)]
Loading