diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 53889ac8ea..871c10b53e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ jobs: os: [ubuntu-20.04] python-version: ['3.8'] node-version: [16] - toxenv: [quality, js, django32] + toxenv: [quality, js, django32, django42] steps: - uses: actions/checkout@v2 diff --git a/openassessment/assessment/admin.py b/openassessment/assessment/admin.py index 20a0eae3f0..7db4a92fde 100644 --- a/openassessment/assessment/admin.py +++ b/openassessment/assessment/admin.py @@ -16,6 +16,7 @@ from openassessment.assessment.serializers import RubricSerializer +@admin.register(Rubric) class RubricAdmin(admin.ModelAdmin): """ Django admin model for Rubrics. @@ -55,6 +56,7 @@ class PeerWorkflowItemInline(admin.StackedInline): extra = 0 +@admin.register(PeerWorkflow) class PeerWorkflowAdmin(admin.ModelAdmin): """ Django admin model for PeerWorkflows. @@ -69,6 +71,7 @@ class PeerWorkflowAdmin(admin.ModelAdmin): inlines = (PeerWorkflowItemInline,) +@admin.register(Assessment) class AssessmentAdmin(admin.ModelAdmin): """ Django admin model for Assessments. @@ -88,6 +91,10 @@ class AssessmentAdmin(admin.ModelAdmin): ) exclude = ('rubric', 'submission_uuid') + @admin.display( + description='Rubric', + ordering='rubric__content_hash', + ) def rubric_link(self, assessment_obj): """ Returns the rubric link for this assessment. @@ -98,8 +105,6 @@ def rubric_link(self, assessment_obj): ) return format_html( '{}', url, assessment_obj.rubric.content_hash) - rubric_link.admin_order_field = 'rubric__content_hash' - rubric_link.short_description = 'Rubric' def parts_summary(self, assessment_obj): """ @@ -116,6 +121,7 @@ def parts_summary(self, assessment_obj): ) for part in assessment_obj.parts.all())) +@admin.register(AssessmentFeedback) class AssessmentFeedbackAdmin(admin.ModelAdmin): """ Django admin model for AssessmentFeedbacks. @@ -137,6 +143,7 @@ def assessments_by(self, assessment_feedback): )) +@admin.register(SharedFileUpload) class SharedFileUploadAdmin(admin.ModelAdmin): """ Django admin model for SharedFileUploads. @@ -151,6 +158,7 @@ class SharedFileUploadAdmin(admin.ModelAdmin): ) +@admin.register(StaffWorkflow) class StaffWorkflowAdmin(admin.ModelAdmin): """ Django admin model for StaffWorkflows @@ -158,17 +166,9 @@ class StaffWorkflowAdmin(admin.ModelAdmin): list_display = ('id', 'submission_uuid', 'course_id', 'item_id', 'grading_completed_at') +@admin.register(TeamStaffWorkflow) class TeamStaffWorkflowAdmin(admin.ModelAdmin): """ Django admin model for TeamStaffWorkflows """ list_display = ('id', 'team_submission_uuid', 'course_id', 'item_id', 'grading_completed_at') - - -admin.site.register(Rubric, RubricAdmin) -admin.site.register(PeerWorkflow, PeerWorkflowAdmin) -admin.site.register(Assessment, AssessmentAdmin) -admin.site.register(AssessmentFeedback, AssessmentFeedbackAdmin) -admin.site.register(SharedFileUpload, SharedFileUploadAdmin) -admin.site.register(StaffWorkflow, StaffWorkflowAdmin) -admin.site.register(TeamStaffWorkflow, TeamStaffWorkflowAdmin) diff --git a/openassessment/staffgrader/admin.py b/openassessment/staffgrader/admin.py index 6f0ca77cec..628367d9d2 100644 --- a/openassessment/staffgrader/admin.py +++ b/openassessment/staffgrader/admin.py @@ -6,6 +6,7 @@ from openassessment.staffgrader.models import SubmissionGradingLock +@admin.register(SubmissionGradingLock) class SubmissionGradingLockAdmin(admin.ModelAdmin): """ Django admin model for SubmissionGradingLock. @@ -15,9 +16,8 @@ class SubmissionGradingLockAdmin(admin.ModelAdmin): search_fields = ('submission_uuid',) # This allows us to have the nice boolean check/x icons in the list rather than "True"/"False" + @admin.display( + boolean=True + ) def is_active(self, lock): return lock.is_active - is_active.boolean = True - - -admin.site.register(SubmissionGradingLock, SubmissionGradingLockAdmin) diff --git a/openassessment/workflow/admin.py b/openassessment/workflow/admin.py index 12e8a0ca54..2452d5ccb1 100644 --- a/openassessment/workflow/admin.py +++ b/openassessment/workflow/admin.py @@ -12,6 +12,7 @@ class AssessmentWorkflowStepInline(admin.StackedInline): extra = 0 +@admin.register(AssessmentWorkflow) class AssessmentWorkflowAdmin(admin.ModelAdmin): """Admin for the user's overall workflow through open assessment. @@ -28,6 +29,7 @@ class AssessmentWorkflowAdmin(admin.ModelAdmin): inlines = (AssessmentWorkflowStepInline,) +@admin.register(TeamAssessmentWorkflow) class TeamAssessmentWorkflowAdmin(admin.ModelAdmin): """ Admin for TeamAssessmentWorkflows. @@ -40,7 +42,3 @@ class TeamAssessmentWorkflowAdmin(admin.ModelAdmin): search_fields = ('team_submission_uuid', 'submission_uuid', 'course_id', 'item_id') inlines = (AssessmentWorkflowStepInline,) - - -admin.site.register(AssessmentWorkflow, AssessmentWorkflowAdmin) -admin.site.register(TeamAssessmentWorkflow, TeamAssessmentWorkflowAdmin) diff --git a/tox.ini b/tox.ini index 856772d8d4..b9b05ef6b5 100644 --- a/tox.ini +++ b/tox.ini @@ -1,11 +1,11 @@ [tox] -envlist = py38-django{32,40} +envlist = py38-django{32,42} [testenv] deps = -rrequirements/test.txt django32: Django>=3.2,<4.0 - django40: Django>=4.0,<4.1 + django42: Django>=4.2,<4.3 commands = pytest diff --git a/urls.py b/urls.py index 3a9df4ffd0..053f5dfbb5 100644 --- a/urls.py +++ b/urls.py @@ -1,8 +1,7 @@ import workbench.urls -from django.conf.urls import include from django.contrib import admin -from django.urls import re_path +from django.urls import re_path, include from django.views.i18n import JavaScriptCatalog import openassessment.assessment.urls