def run_checkers(self, request, queryset): """ Run Checkers (only those also run at submission) for selected solutions""" check_multiple(queryset, False) self.message_user( request, "Checkers (only those also run at submission) for selected solutions were successfully run." )
def run_checkers_all(self, request, queryset): """ Run Checkers (including those not run at submission) for selected solution """ check_multiple(queryset, True) self.message_user( request, "Checkers (including those not run at submission) for selected solutions were successfully run." )
def check_all_final_solutions(self): from checker.basemodels import check_multiple final_solutions = self.solution_set.filter(final=True) count = check_multiple(final_solutions, True) if self.expired(): self.all_checker_finished = True self.save() return final_solutions.count()
def run_checkers(self, request, queryset): """ Run Checkers (only those also run at submission) for selected solutions""" check_multiple(queryset,False) self.message_user(request, "Checkers (only those also run at submission) for selected solutions were successfully run.")
def run_checkers_all(self, request, queryset): """ Run Checkers (including those not run at submission) for selected solution """ check_multiple(queryset,True) self.message_user(request, "Checkers (including those not run at submission) for selected solutions were successfully run.")
def run_all_uploadtime_checkers_on_all(self, request, queryset): from checker.basemodels import check_multiple from accounts.models import User from django.template import Context, loader from django.contrib.sites.requests import RequestSite from django.conf import settings from django.core.mail import send_mail from django.utils.translation import ugettext_lazy as _ myRequestUser = User.objects.filter(id=request.user.id) allstart = timer() task_set = queryset for task in task_set: start = timer() #solutions = Solution.objects.filter(task=task.id).order_by('author', 'number') solution_set = task.solution_set.order_by('author','number') old_final_solution_set = solution_set.filter(final=True) users_with_old_final_solution = list(set(old_final_solution_set.values('author').values_list('author',flat = True))) for solution in old_final_solution_set: solution.final = False solution.accepted = False solution.save() print("rerun checkers ... wait much time ...") #this takes many time !!!! if solution_set.count() > 1 : check_multiple(solution_set,False) # just run upload-time_checkers ... should we ignore Testuploads? elif solution_set.count() == 1 : check_solution(latest_only_failed_solution,False) new_accepted_solution_set = Solution.objects.filter(task=task.id , accepted=True , testupload=False ).order_by('author', 'number') users_with_accepted_solutions = list(set( new_accepted_solution_set.values('author').values_list('author', flat=True) )) for userid in users_with_accepted_solutions : new_final_solution = new_accepted_solution_set.filter(author = userid).latest('number') new_final_solution.final = True new_final_solution.save() new_final_solution_set = new_accepted_solution_set.filter(final=True) users_with_final_solution = list(set(new_final_solution_set.values('author').values_list('author',flat = True))) users_missing_in_new_final_solution = list(set(users_with_old_final_solution) - set(users_with_final_solution)) missing_users_in_new_final_solution_set = task.solution_set.filter(author__in=users_missing_in_new_final_solution).order_by('author','number') for userid in users_missing_in_new_final_solution : user = User.objects.filter(id=userid) latestfailed_user_solution = missing_users_in_new_final_solution_set.filter(author=userid).latest('number') # Send final solution lost email to current RequestUser tutor/trainer/superuser t = loader.get_template('solutions/submission_final_lost_email.html') c = { 'protocol': request.is_secure() and "https" or "http", 'domain': RequestSite(request).domain, 'site_name': settings.SITE_NAME, 'solution': latestfailed_user_solution, 'request_user': myRequestUser, } if request.user.email and latestfailed_user_solution.author.email: send_mail(_("[%s] lost final submission confirmation") % settings.SITE_NAME, t.render(Context(c)), None, [request.user.email, latestfailed_user_solution.author.email]) elif request.user.email and not latestfailed_user_solution.author.email: send_mail(_("[%s] lost final submission confirmation") % settings.SITE_NAME, t.render(Context(c)), None, [request.user.email]) elif not request.user.email and latestfailed_user_solution.author.email: send_mail(_("%s lost final submission confirmation") % settings.SITE_NAME, t.render(Context(c)), None, [latestfailed_user_solution.author.email]) end = timer() self.message_user(request, "Task %s : Checked %d authors lost their finals: LoopTimer: %d seconds elapsed "%(task.title, len(users_missing_in_new_final_solution),(end-start)),"warning") allend = timer() self.message_user(request, "%d Tasks rechecked : LoopTimer: %d seconds elapsed" % (task_set.count(),allend-allstart))