Ejemplo n.º 1
0
 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."
     )
Ejemplo n.º 2
0
 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."
     )
Ejemplo n.º 3
0
    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()
Ejemplo n.º 4
0
	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()
Ejemplo n.º 5
0
	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.")
Ejemplo n.º 6
0
	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.")
Ejemplo n.º 7
0
	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))