~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to ivle/webapp/tutorial/service.py

Modified worksheets to properly link attempts to worksheets and
exercises, not just exercises

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
import ivle.util
26
26
import ivle.console
27
27
import ivle.database
28
 
from ivle.database import Exercise, ExerciseAttempt, ExerciseSave
 
28
from ivle.database import Exercise, ExerciseAttempt, ExerciseSave, Worksheet, Offering, Subject, Semester
29
29
import ivle.worksheet
30
30
import ivle.conf
31
31
import ivle.webapp.tutorial.test
50
50
            raise NotFound()
51
51
        self.exercise = exercise
52
52
        
 
53
        self.worksheet = req.store.find(Worksheet,
 
54
            Worksheet.name == worksheet,
 
55
            Worksheet.offering_id == Offering.id,
 
56
            Offering.subject_id == Subject.id,
 
57
            Subject.code == subject,
 
58
            Offering.semester_id == Semester.id,
 
59
            Semester.year == year,
 
60
            Semester.semester == semester).one()
 
61
        
53
62
        self.context = self.user # XXX: Not quite right.
54
63
 
55
64
    @require_permission('edit')
95
104
                                                exercise=exercise,
96
105
                                                date=datetime.datetime.now(),
97
106
                                                complete=test_results['passed'],
98
 
                                                # XXX
 
107
                                                worksheet=self.worksheet,
99
108
                                                text=unicode(data['code']))
100
109
 
101
110
        req.store.add(attempt)
104
113
        # has EVER been completed (may be different from "passed", if it has
105
114
        # been completed before), and the total number of attempts.
106
115
        completed, attempts = ivle.worksheet.get_exercise_status(req.store,
107
 
            req.user, exercise)
 
116
            req.user, exercise, self.worksheet)
108
117
        test_results["completed"] = completed
109
118
        test_results["attempts"] = attempts
110
119
 
126
135
            raise NotFound()
127
136
 
128
137
        exercise = ivle.database.Exercise.get_by_name(req.store, exercise)
 
138
        worksheet = req.store.find(Worksheet,
 
139
            Worksheet.name == self.worksheet,
 
140
            Worksheet.offering_id == Offering.id,
 
141
            Offering.subject_id == Subject.id,
 
142
            Subject.code == self.subject,
 
143
            Offering.semester_id == Semester.id,
 
144
            Semester.year == self.year,
 
145
            Semester.semester == self.semester).one()
 
146
 
129
147
        attempt = ivle.worksheet.get_exercise_attempt(req.store, user,
130
 
            exercise, as_of=date, allow_inactive=HISTORY_ALLOW_INACTIVE)
 
148
            exercise, worksheet, as_of=date, allow_inactive=HISTORY_ALLOW_INACTIVE)
131
149
 
132
150
        if attempt is None:
133
151
            raise NotFound()
155
173
        # (This avoids users submitting code for bogus exercises).
156
174
        exercise = req.store.find(Exercise,
157
175
            Exercise.id == self.exercise).one()
158
 
        ivle.worksheet.save_exercise(req.store, req.user, exercise,
 
176
        worksheet = req.store.find(Worksheet,
 
177
            Worksheet.name == self.worksheet,
 
178
            Worksheet.offering_id == Offering.id,
 
179
            Offering.subject_id == Subject.id,
 
180
            Subject.code == self.subject,
 
181
            Offering.semester_id == Semester.id,
 
182
            Semester.year == self.year,
 
183
            Semester.semester == self.semester).one()
 
184
        ivle.worksheet.save_exercise(req.store, req.user, exercise, worksheet,
159
185
                                     unicode(text), datetime.datetime.now())
160
186
        return {"result": "ok"}