testappproj/testapp/views.py
changeset 6 d0f107095b1a
parent 5 548c6261fa00
equal deleted inserted replaced
5:548c6261fa00 6:d0f107095b1a
    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