예제 #1
0
    def handle(self, *args, **options):
        tt = Timetable.objects.get(slug=options['timetable_slug'])
        method_name = options['method_name'][0]
        GroupSizeHint.objects.filter(method=method_name).delete()

        for a in tt.activities.filter(type='P'):
            enrollment_types = [4, 26]
            for group in a.groups.all().exclude(shortName__contains='PAD'):
                if GroupSizeHint.objects.filter(
                        group=group, method=method_name).count() == 0:
                    GroupSizeHint.size_from_enrollments(
                        group,
                        tt.groupset,
                        enrollment_types=enrollment_types,
                        method=method_name)
            enrollment_types = sorted(
                [e[0] for e in ENROLMENTTYPES if e[0] not in [4, 26]])
            try:
                group = a.groups.get(shortName__contains='PAD')
                if GroupSizeHint.objects.filter(
                        group=group, method=method_name).count() == 0:
                    se = StudentEnrollment.objects.filter(
                        groupset=tt.groupset,
                        subject=a.subject,
                        enrollment_type__in=enrollment_types)
                    GroupSizeHint(
                        method=method_name,
                        size=se.count(),
                        group=group,
                    ).save()
            except:
                print("No PAD group for {}".format(a.name, a.type))
        GroupSizeHint.objects.filter(size=0, method=method_name).delete()
예제 #2
0
    def test_group_size_hint_max(self):
        strategy = 'max'

        methods = ['1', '2', '3']
        expected = 12
        val = GroupSizeHint.strategy(self.g1, methods, strategy)
        self.assertEqual(
            val, expected,
            "Strategy '{}' for {} and methods {} should return {}".format(
                strategy, self.g1, methods, expected))

        val = GroupSizeHint.strategy(self.g1, ['non', 'existing'], strategy)
        self.assertIsNone(val,
                          "If no hints are available None should be returned")

        methods = ['1', '2', '3']
        expected = 0
        val = GroupSizeHint.strategy(self.g2, methods, strategy)
        self.assertEqual(
            val, expected,
            "Strategy '{}' for {} and methods {} should return {}".format(
                strategy,
                self.g2,
                methods,
                expected,
            ))
예제 #3
0
    def test_group_size_hint_first_not_zero(self):
        strategy = 'first-non-zero'

        methods = ['1', '2', '3']
        expected = 10
        val = GroupSizeHint.strategy(self.g1, methods, strategy)
        self.assertEqual(
            val, expected,
            "Strategy '{}' for {} and methods {} should return {}".format(
                strategy, self.g1, methods, expected))

        methods = ['1', '2', '3']
        val = GroupSizeHint.strategy(self.g2, methods, strategy)
        self.assertIsNone(val,
                          "If no hints are available None should be returned")
예제 #4
0
 def test_group_size_hint_incorrect_strategy(self):
     with self.assertRaises(KeyError):
         GroupSizeHint.strategy(self.g1, ["unknown"], 'Weird strategy name')