Description:
added after_save_hook to ResultCollector
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r122:ed471e6e96ca - - 1 file changed: 15 inserted, 2 deleted

@@ -93,71 +93,76
93 93 end
94 94
95 95 #default options
96 96 options = {
97 97 :mode => 'queue',
98 98 :environment => 'exam',
99 99 :dry_run => false,
100 100 }
101 101
102 102 # Process mode and environment option
103 103 if ARGV.length >= 1
104 104 options[:environment] = ARGV.shift
105 105 if ARGV.length >=1
106 106 options[:mode] = ARGV.shift
107 107 end
108 108 end
109 109
110 110 options[:dry_run] = (ARGV.delete('--dry') != nil)
111 111 if options[:dry_run] and (not ['prob','contest','autonew'].include? options[:mode])
112 112 puts "Dry run currently works only for 'prob' or 'contest' modes."
113 113 exit(0)
114 114 end
115 115
116 116 options[:report] = (ARGV.delete('--report') != nil)
117 - if options[:report] and (not ['prob','contest'].include? options[:mode])
117 + if options[:report] and (not ['prob','contest','autonew'].include? options[:mode])
118 118 puts "Report currently works only for 'prob' or 'contest' modes."
119 119 exit(0)
120 120 end
121 121
122 122 return options
123 123 end
124 124
125 125 class ResultCollector
126 126 def initialize
127 127 @results = {}
128 128 @problems = {}
129 129 @users = {}
130 130 end
131 131
132 + def after_save_hook(user, problem, grading_result)
133 + end
134 +
132 135 def save(user, problem, grading_result)
133 136 if not @problems.has_key? problem.id
134 137 @problems[problem.id] = problem
135 138 end
136 139 if not @users.has_key? user.id
137 140 @users[user.id] = user
138 141 end
139 142 @results[[user.id, problem.id]] = grading_result
143 +
144 + after_save_hook(user, problem, grading_result)
140 145 end
141 146
142 147 def print_report_by_user
143 148 puts "---------------------"
144 149 puts " REPORT"
145 150 puts "---------------------"
146 151
147 152 print "login,email"
148 153 @problems.each_value do |problem|
149 154 print ",#{problem.name}"
150 155 end
151 156 print "\n"
152 157
153 158 @users.each_value do |user|
154 159 print "#{user.login},#{user.email}"
155 160 @problems.each_value do |problem|
156 161 if @results.has_key? [user.id, problem.id]
157 162 print ",#{@results[[user.id,problem.id]][:points]}"
158 163 else
159 164 print ","
160 165 end
161 166 end
162 167 print "\n"
163 168 end
@@ -181,53 +186,61
181 186 end
182 187 end
183 188 end
184 189
185 190 def grader_queue_loop(grader_proc, options)
186 191 log "Grader: queue"
187 192 engine = Grader::Engine.new
188 193 grader_general_loop(engine, grader_proc, options) do |runner|
189 194 runner.grade_oldest_task
190 195 end
191 196 end
192 197
193 198 def grader_test_request_loop(grader_proc, options)
194 199 log "Grader: test_request"
195 200 engine = Grader::Engine.new(:room_maker => Grader::TestRequestRoomMaker.new,
196 201 :reporter => Grader::TestRequestReporter.new)
197 202 grader_general_loop(engine, grader_proc, options) do |runner|
198 203 runner.grade_oldest_test_request
199 204 end
200 205 end
201 206
202 207 def grader_autonew_loop(grader_proc, options)
203 208 log "Grader: autonew"
204 209
210 + if options[:report]
211 + result_collector = ResultCollector.new
212 + else
213 + result_collector = nil
214 + end
215 +
205 216 if options[:dry_run]
206 217 puts "Running in dry mode"
207 218 end
208 219
209 - prob_reporter = Grader::SubmissionReporter.new(:dry_run => options[:dry_run])
220 + prob_reporter = Grader::SubmissionReporter.new(:dry_run => options[:dry_run],
221 + :result_collector => result_collector)
222 +
210 223 engine = Grader::Engine.new(:reporter => prob_reporter)
211 224 runner = Grader::Runner.new(engine, grader_proc)
212 225
213 226 grader_proc.report_active if grader_proc!=nil
214 227
215 228 latest_submitted_at = nil
216 229 graded_submission_ids = {}
217 230
218 231 while true
219 232
220 233 if check_stopfile # created by calling grader stop
221 234 clear_stopfile
222 235 log "stopped (with stop file)"
223 236 break
224 237 end
225 238
226 239 if latest_submitted_at==nil
227 240 submissions = Submission.all
228 241 else
229 242 submissions = Submission.all(:conditions => ["submitted_at >= :latest",
230 243 {:latest => latest_submitted_at}])
231 244 end
232 245
233 246 graded_any = false
You need to be logged in to leave comments. Login now