Exemplo n.º 1
0
 def post(self, request, id=None):
     period = self.CONTENT['period']
     self._permissioncheck(period)
     with transaction.commit_on_success():
         status = Status(
             period = period,
             status = self.CONTENT['status'],
             message = self.CONTENT['message'],
             user = self.request.user,
             plugin = self.CONTENT['plugin']
         )
         status.full_clean()
         status.save()
         if status.status != 'notready':
             passing_relatedstudentids = set(self.CONTENT['passing_relatedstudentids'])
             notready_relatedstudentids = set(self.CONTENT['notready_relatedstudentids'])
             for relatedstudent in period.relatedstudent_set.all():
                 if relatedstudent.id in notready_relatedstudentids:
                     qualifies = None
                 else:
                     qualifies = relatedstudent.id in passing_relatedstudentids
                 qualifies = QualifiesForFinalExam(
                     relatedstudent = relatedstudent,
                     status = status,
                     qualifies = qualifies
                 )
                 try:
                     qualifies.full_clean()
                 except ValidationError as e:
                     raise ErrorResponse(statuscodes.HTTP_400_BAD_REQUEST,
                         {'details': ' '.join(e.messages)})
                 qualifies.save()
             if status.plugin and qualifiesforexam_plugins.has_post_statussave(status):
                 self._invoke_post_statussave(status)
     return Response(201, '')
Exemplo n.º 2
0
    def _test_getinstance_as(self, username):
        relatedStudent1 = self._create_relatedstudent('student1', 'Student One')
        relatedStudent2 = self._create_relatedstudent('student2', 'Student Two')
        status = Status(
            period = self.testhelper.sub_p1,
            status = 'ready',
            message = 'Test',
            user = getattr(self.testhelper, username),
            plugin = 'devilry_qualifiesforexam.test.noop-plugin'
        )
        status.save()
        status.students.create(relatedstudent=relatedStudent1, qualifies=True)
        status.students.create(relatedstudent=relatedStudent2, qualifies=False)

        content, response = self._getinstanceas(username, self.testhelper.sub_p1.id)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(set(content.keys()),
            set(['id', 'perioddata', 'statuses', u'is_active', u'short_name', u'long_name', u'subject']))
        self.assertEqual(content['id'], self.testhelper.sub_p1.id)
        statuses = content['statuses']
        self.assertEqual(len(statuses), 1)
        self.assertEqual(set(statuses[0].keys()),
            set([u'id', u'status', u'plugin', u'statustext',
                 u'period', u'passing_relatedstudentids_map',
                 u'user', u'message', u'createtime', u'pluginsettings_summary',
                 u'plugin_description', u'plugin_title']))
        self.assertEqual(statuses[0]['period'], self.testhelper.sub_p1.id)
        self.assertEqual(statuses[0]['status'], 'ready')
        self.assertEqual(statuses[0]['message'], 'Test')
        self.assertEqual(statuses[0]['plugin'], 'devilry_qualifiesforexam.test.noop-plugin')
        self.assertEqual(statuses[0]['pluginsettings_summary'], 'noop summary')
        self.assertIn(str(relatedStudent1.id), statuses[0]['passing_relatedstudentids_map'])
Exemplo n.º 3
0
 def post(self, request, id=None):
     period = self.CONTENT["period"]
     self._permissioncheck(period)
     with transaction.commit_on_success():
         status = Status(
             period=period,
             status=self.CONTENT["status"],
             message=self.CONTENT["message"],
             user=self.request.user,
             plugin=self.CONTENT["plugin"],
         )
         status.full_clean()
         status.save()
         if status.status != "notready":
             passing_relatedstudentids = set(self.CONTENT["passing_relatedstudentids"])
             notready_relatedstudentids = set(self.CONTENT["notready_relatedstudentids"])
             for relatedstudent in period.relatedstudent_set.all():
                 if relatedstudent.id in notready_relatedstudentids:
                     qualifies = None
                 else:
                     qualifies = relatedstudent.id in passing_relatedstudentids
                 qualifies = QualifiesForFinalExam(relatedstudent=relatedstudent, status=status, qualifies=qualifies)
                 try:
                     qualifies.full_clean()
                 except ValidationError as e:
                     raise ErrorResponse(statuscodes.HTTP_400_BAD_REQUEST, {"details": " ".join(e.messages)})
                 qualifies.save()
             if status.plugin:
                 self._invoke_post_statussave(status)
     return Response(201, "")
Exemplo n.º 4
0
 def _createlistteststatus(self, period, status='ready',
                           plugin='devilry_qualifiesforexam.test.noop-plugin'):
     status = Status(
         period = period,
         status = status,
         message = 'Test',
         user = self.testhelper.periodadmin,
         plugin = plugin
     )
     status.full_clean()
     status.save()
     return status
    def _serialize_period(self, period, userobj, devilry_qualifiesforexam_enabled):
        qualifies = None

        if devilry_qualifiesforexam_enabled:
            try:
                status = Status.get_current_status(period)
            except Status.DoesNotExist:
                pass
            else:
                if status.status == Status.READY:
                    try:
                        qualification_status = status.students.get(relatedstudent__user=userobj)
                        qualifies = qualification_status.qualifies
                    except QualifiesForFinalExam.DoesNotExist:
                        pass

        return {
            'id': period.id,
            'short_name': period.short_name,
            'long_name': period.long_name,
            'start_time': format_datetime(period.start_time),
            'end_time': format_datetime(period.end_time),
            'is_active': period.is_active(),
            'is_relatedstudent': period.relatedstudent_set.filter(user=userobj).exists(),
            'qualified_forexams': qualifies,
            'assignments': MappedList()
        }
Exemplo n.º 6
0
 def test_save_settings(self):
     status = Status(period=self.period, status='ready', message='',
         user=self.testhelper.periodadmin,
         plugin='devilry_qualifiesforexam_points'
     )
     status.save()
     self.assertEqual(PointsPluginSetting.objects.count(), 0)
     post_statussave(status, {
         'assignmentids': [self.testhelper.sub_p1_a1.id, self.testhelper.sub_p1_a2.id],
         'minimum_points': 3
     })
     self.assertEqual(PointsPluginSetting.objects.count(), 1)
     settings = status.devilry_qualifiesforexam_points_pointspluginsetting
     self.assertEqual(settings.minimum_points, 3)
     self.assertEqual(settings.pointspluginselectedassignment_set.count(), 2)
     ids = set([selected.assignment.id for selected in settings.pointspluginselectedassignment_set.all()])
     self.assertEqual(ids, set([self.testhelper.sub_p1_a1.id, self.testhelper.sub_p1_a2.id]))
Exemplo n.º 7
0
    def test_verify(self):
        status = Status(
            period=self.period,
            status="ready",
            message="",
            user=self.testhelper.periodadmin,
            plugin="devilry_qualifiesforexam_approved.subset",
        )
        status.save()
        relatedStudent1 = self.create_relatedstudent("student1")
        status.students.create(relatedstudent=relatedStudent1, qualifies=True)

        self.create_feedbacks(
            (self.testhelper.sub_p1_a1_gstudent1, {"grade": "F", "points": 0, "is_passing_grade": False})
        )

        with self.assertRaises(PluginResultsFailedVerification):
            post_statussave_subset(status, {"assignmentids_that_must_be_passed": [self.testhelper.sub_p1_a1.id]})
Exemplo n.º 8
0
 def test_save_settings(self):
     status = Status(
         period=self.period,
         status="ready",
         message="",
         user=self.testhelper.periodadmin,
         plugin="devilry_qualifiesforexam_approved.subset",
     )
     status.save()
     self.assertEqual(SubsetPluginSetting.objects.count(), 0)
     post_statussave_subset(
         status, {"assignmentids_that_must_be_passed": [self.testhelper.sub_p1_a1.id, self.testhelper.sub_p1_a2.id]}
     )
     self.assertEqual(SubsetPluginSetting.objects.count(), 1)
     settings = status.devilry_qualifiesforexam_approved_subsetpluginsetting
     self.assertEqual(settings.selectedassignment_set.count(), 2)
     ids = set([selected.assignment.id for selected in settings.selectedassignment_set.all()])
     self.assertEqual(ids, set([self.testhelper.sub_p1_a1.id, self.testhelper.sub_p1_a2.id]))
Exemplo n.º 9
0
    def test_verify(self):
        status = Status(period=self.period, status='ready', message='',
            user=self.testhelper.periodadmin,
            plugin='devilry_qualifiesforexam_points'
        )
        status.save()
        relatedStudent1 = self.create_relatedstudent('student1')
        status.students.create(relatedstudent=relatedStudent1, qualifies=True)

        self.create_feedbacks(
            (self.testhelper.sub_p1_a1_gstudent1, {'grade': 'F', 'points': 2, 'is_passing_grade': False})
        )

        with self.assertRaises(PluginResultsFailedVerification):
            post_statussave(status, {
                'assignmentids': [self.testhelper.sub_p1_a1.id],
                'minimum_points': 3
            })
        post_statussave(status, {
            'assignmentids': [self.testhelper.sub_p1_a1.id],
            'minimum_points': 2
        })
Exemplo n.º 10
0
 def get_initial(self):
     """
     Returns the initial data to use for forms on this view.
     """
     try:
         current_status = Status.get_current_status(self.period)
     except Status.DoesNotExist:
         return {}
     else:
         try:
             settings = current_status.devilry_qualifiesforexam_approved_subsetpluginsetting
         except SubsetPluginSetting.DoesNotExist:
             return {}
         else:
             ids = [selected.assignment.id for selected in settings.selectedassignment_set.all()]
             return {'assignments': ids}
Exemplo n.º 11
0
 def get_initial(self):
     """
     Returns the initial data to use for forms on this view.
     """
     try:
         current_status = Status.get_current_status(self.period)
     except Status.DoesNotExist:
         pass
     else:
         try:
             settings = current_status.devilry_qualifiesforexam_points_pointspluginsetting
         except PointsPluginSetting.DoesNotExist:
             pass
         else:
             ids = [selected.assignment.id for selected in settings.pointspluginselectedassignment_set.all()]
             return {"assignments": ids}
     ids = [assignment.id for assignment in self.period.assignments.all()]
     return {"assignments": ids}
Exemplo n.º 12
0
 def _serialize_period(self, period):
     out = {
             'id': period.id,
             'short_name': period.short_name,
             'long_name': period.long_name,
             'assignments': OrderedDict(),
             'is_relatedstudent': period.relatedstudent_set.filter(user=self.user).exists()
     }
     if self.devilry_qualifiesforexam_enabled:
         out['qualifiesforexams'] = None
         try:
             status = Status.get_current_status(period)
         except Status.DoesNotExist:
             pass
         else:
             if status.status == Status.READY:
                 try:
                     qualifies = status.students.get(relatedstudent__user=self.user)
                     out['qualifiesforexams'] = qualifies.qualifies
                 except QualifiesForFinalExam.DoesNotExist:
                     pass
     return out