コード例 #1
0
    def addSubmission(cls, f, s, q):
        primary = BASE_DIR + "sub/"
        name = f.name
        print "Important: " + name[-4:0]
        if name[-4:0] == "java":
            type = "java"
        else:
            type = "cpp"
        
        randomness = randomString(15)
        path = primary + randomness + ".cpp"
        while os.path.exists(path):     
            randomness = randomString(15)
            path = primary + randomness + ".cpp"

        q = Quiz.objects.get(id=q)
        submission = Submission(student=s, time=datetime.now(), status="Submitted", randomness=randomness, 
                                file=path, quiz=q, didPass = False, didFail = False, type=type, name=name, graded=False)
        submission.save()
        
        destination = open(path, 'wb+')
        for chunk in f.chunks():
            destination.write(chunk)
        destination.close()
        
        GraderWatch.queue.put(submission)
        return randomness
        
        
コード例 #2
0
    def addSubmission(cls, f, s, q):
        primary = BASE_DIR + "sub/"
        name = f.name
        print "Important: " + name[-4:0]
        if name[-4:0] == "java":
            type = "java"
        else:
            type = "cpp"

        randomness = randomString(15)
        path = primary + randomness + ".cpp"
        while os.path.exists(path):
            randomness = randomString(15)
            path = primary + randomness + ".cpp"

        q = Quiz.objects.get(id=q)
        submission = Submission(student=s,
                                time=datetime.now(),
                                status="Submitted",
                                randomness=randomness,
                                file=path,
                                quiz=q,
                                didPass=False,
                                didFail=False,
                                type=type,
                                name=name,
                                graded=False)
        submission.save()

        destination = open(path, 'wb+')
        for chunk in f.chunks():
            destination.write(chunk)
        destination.close()

        GraderWatch.queue.put(submission)
        return randomness
コード例 #3
0
ファイル: filegrader.py プロジェクト: achluky/cpp-autograder
    def run(self):
        primary = BASE_DIR + "sub/"
        self.randomness = randomString(15)
        path = primary + self.randomness + ".cpp"
        while(os.path.exists(path)):     
            self.randomness = randomString(15)
            path = primary + self.randomness + ".cpp"

        # Grab the quiz data and set the user's status to 'Submitted'
        q = Quiz.objects.get(id=self.quiz)
        submission = Submission(student=self.student, time=datetime.now(), status="Submitted", randomness=self.randomness, file=path, quiz=q, didPass = False, didFail = False)
        submission.save()
        
        # Write the file to disk
        destination = open(path, 'wb+')
        for chunk in self.file.chunks():
            destination.write(chunk)
        destination.close()
        
        if OS == "UNIX":
            p = Popen(["g++", "-o" + path[0:-3]+"exe", path])
        else:
            p = Popen(["compile.bat", "C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\bin", path, path[0:-3] + "exe"])
        self.watch_process(p, 1, 20)
        
        # Checks to see if it actually compiled successfully
        if os.path.exists(path[0:-3] + "exe"):
            submission.status = "Compiled"
            submission.save()
            
            p = Popen([path[0:-3] + "exe", q.testcases, path[0:-3]+"txt"])
            
            submission.status = "Running"
            submission.save()

            ti = datetime.now().microsecond
            print datetime.now().microsecond
            bo = self.watch_process(p, 0.01, 2000)
            print datetime.now().microsecond
            ti = datetime.now().microsecond - ti
            ti = ti / 10
            
            # Record how long it took to execute the program
            submission.runtime = ti
            
            if not bo:
                submission.status = "Hangs"
                submission.didPass = False
                submission.save()
                return
            
            if(os.path.exists(path[0:-3]+"txt")):
                submission.status = "Executed"
                submission.save()
                
                empty = not check_for_blank_line(path[0:-3]+"txt")

                if not empty:
                    strip(path[0:-3]+"txt")

                    print "Here's the Info"
                    print path[0:-3]+"txt"
                    print q.answer
                    if filecmp.cmp(path[0:-3]+"txt", q.answer, False):
                        submission.status = "PASS"
                        submission.didPass = True
                    else:
                            submission.status = "FAIL"
                            submission.didFail = True
                            submission.didPass = False
                else:
                    submission.status = "Empty Output File"
                    submission.didPass = False
            else:
                submission.status = "No Output File"
                submission.didPass = False
        else:
            # It must not have compiled
            p = Popen([])
            
            submission.status = "Failed to Compile"
            submission.didPass = False
        
        submission.save()
コード例 #4
0
    def run(self):
        primary = BASE_DIR + "sub/"
        self.randomness = randomString(15)
        path = primary + self.randomness + ".cpp"
        while os.path.exists(path):
            self.randomness = randomString(15)
            path = primary + self.randomness + ".cpp"

        # Grab the quiz data and set the user's status to 'Submitted'
        q = Quiz.objects.get(id=self.quiz)
        submission = Submission(
            student=self.student,
            time=datetime.now(),
            status="Submitted",
            randomness=self.randomness,
            file=path,
            quiz=q,
            didPass=False,
            didFail=False,
        )
        submission.save()

        # Write the file to disk
        destination = open(path, "wb+")
        for chunk in self.file.chunks():
            destination.write(chunk)
        destination.close()

        if OS == "UNIX":
            p = Popen(["g++", "-o" + path[0:-3] + "exe", path])
        else:
            p = Popen(
                [
                    "compile.bat",
                    "C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\bin",
                    path,
                    path[0:-3] + "exe",
                ]
            )
        self.watch_process(p, 1, 20)

        # Checks to see if it actually compiled successfully
        if os.path.exists(path[0:-3] + "exe"):
            submission.status = "Compiled"
            submission.save()

            p = Popen([path[0:-3] + "exe", q.testcases, path[0:-3] + "txt"])

            submission.status = "Running"
            submission.save()

            ti = datetime.now().microsecond
            print datetime.now().microsecond
            bo = self.watch_process(p, 0.01, 2000)
            print datetime.now().microsecond
            ti = datetime.now().microsecond - ti
            ti = ti / 10

            # Record how long it took to execute the program
            submission.runtime = ti

            if not bo:
                submission.status = "Hangs"
                submission.didPass = False
                submission.save()
                return

            if os.path.exists(path[0:-3] + "txt"):
                submission.status = "Executed"
                submission.save()

                empty = not check_for_blank_line(path[0:-3] + "txt")

                if not empty:
                    strip(path[0:-3] + "txt")

                    print "Here's the Info"
                    print path[0:-3] + "txt"
                    print q.answer
                    if filecmp.cmp(path[0:-3] + "txt", q.answer, False):
                        submission.status = "PASS"
                        submission.didPass = True
                    else:
                        submission.status = "FAIL"
                        submission.didFail = True
                        submission.didPass = False
                else:
                    submission.status = "Empty Output File"
                    submission.didPass = False
            else:
                submission.status = "No Output File"
                submission.didPass = False
        else:
            # It must not have compiled
            p = Popen([])

            submission.status = "Failed to Compile"
            submission.didPass = False

        submission.save()