33 from django.contrib.auth.decorators import permission_required |
33 from django.contrib.auth.decorators import permission_required |
34 from models import Problem |
34 from models import Problem |
35 from django.contrib.auth.decorators import login_required |
35 from django.contrib.auth.decorators import login_required |
36 from models import Score |
36 from models import Score |
37 from django.utils.datastructures import MultiValueDictKeyError |
37 from django.utils.datastructures import MultiValueDictKeyError |
|
38 from subprocess import PIPE,Popen,STDOUT |
|
39 |
|
40 |
|
41 class RGBvalues(object): |
|
42 def __init__(self): |
|
43 self.red=None |
|
44 self.green=None |
|
45 self.blue=None |
|
46 self.alpha=None |
|
47 self.all=None |
|
48 self.rgb_dict=None |
|
49 def get_values(self,output): |
|
50 print output |
|
51 k=re.search(r"red:.*",output,re.DOTALL) |
|
52 all_values_string=output[k.start():k.end()] |
|
53 self.rgb_list=re.findall('(?<=: )\d+',all_values_string) |
|
54 self.red=self.rgb_list[0] |
|
55 self.green=self.rgb_list[1] |
|
56 self.blue=self.rgb_list[2] |
|
57 self.alpha=self.rgb_list[3] |
|
58 self.all=self.rgb_list[4] |
|
59 return self.rgb_list |
|
60 |
|
61 |
38 |
62 |
39 |
63 |
40 def respond(request, user,template, params=None): |
64 def respond(request, user,template, params=None): |
41 """Helper to render a response, passing standard stuff to the response. |
65 """Helper to render a response, passing standard stuff to the response. |
42 |
66 |
124 |
148 |
125 code="""from pylab import * |
149 code="""from pylab import * |
126 import pylab |
150 import pylab |
127 %s |
151 %s |
128 figure_conf=pylab.gcf() |
152 figure_conf=pylab.gcf() |
129 figure_conf.set_size_inches(10,10) |
153 figure_conf.set_size_inches(10,7.5) |
130 figure_conf.set_dpi(80) |
154 figure_conf.set_dpi(80) |
131 figure_conf.savefig('%s')"""%(user_code,user_image_name) |
155 figure_conf.savefig('%s',dpi=80)"""%(user_code,user_image_name) |
132 |
156 |
133 |
157 |
134 print code |
158 print code |
135 # create file-like string to capture output |
159 # create file-like string to capture output |
136 codeOut = StringIO.StringIO() |
160 codeOut = StringIO.StringIO() |
150 # restore stdout and stderr |
174 # restore stdout and stderr |
151 sys.stdout = sys.__stdout__ |
175 sys.stdout = sys.__stdout__ |
152 sys.stderr = sys.__stderr__ |
176 sys.stderr = sys.__stderr__ |
153 |
177 |
154 |
178 |
155 new_solution_image='media-root/'+str((solution_image)) |
179 solution_image_name='media-root/'+str((solution_image)) |
156 solution_image_matrix=imread(new_solution_image) |
180 # solution_image_matrix=imread(new_solution_image) |
157 print str(solution_image_matrix) |
181 # # print str(solution_image_matrix) |
158 print user_image_name |
182 # # print user_image_name |
159 user_image_matrix=imread(user_image_name) |
183 # user_image_matrix=imread(user_image_name) |
160 |
|
161 |
|
162 |
|
163 if solution_image_matrix==user_image_matrix: |
|
164 solved=True |
|
165 |
184 |
166 errors=codeErr.getvalue() |
185 errors=codeErr.getvalue() |
167 |
186 |
168 codeOut.close() |
187 codeOut.close() |
169 codeErr.close() |
188 codeErr.close() |
|
189 |
|
190 cmd = 'compare -verbose -metric MAE %s %s null: 2>&1'%(solution_image_name,user_image_name) |
|
191 print cmd |
|
192 p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT) |
|
193 |
|
194 output = p.stdout.read() |
|
195 print output |
|
196 k=RGBvalues() |
|
197 print k.get_values(output) |
|
198 print k.all |
|
199 |
|
200 if k.all<=250: |
|
201 solved=True |
|
202 # if solution_image_matrix==user_image_matrix: |
|
203 # solved=True |
|
204 |
|
205 |
170 |
206 |
171 |
207 |
172 print solved |
208 print solved |
173 return solved,errors,False |
209 return solved,errors,False |
174 |
210 |
193 # capture output and errors |
229 # capture output and errors |
194 sys.stdout = codeOut |
230 sys.stdout = codeOut |
195 |
231 |
196 sys.stderr = codeErr |
232 sys.stderr = codeErr |
197 |
233 |
198 sandbox.execute(code) |
234 try: |
199 |
235 sandbox.execute(code) |
|
236 except : |
|
237 print "ok now we are at something" |
200 # restore stdout and stderr |
238 # restore stdout and stderr |
201 sys.stdout = sys.__stdout__ |
239 sys.stdout = sys.__stdout__ |
202 sys.stderr = sys.__stderr__ |
240 sys.stderr = sys.__stderr__ |
203 |
241 |
204 |
242 |