diff options
author | Hardik Ghaghada | 2013-04-24 00:09:55 +0530 |
---|---|---|
committer | Hardik Ghaghada | 2013-04-24 00:09:55 +0530 |
commit | a89aff61b6bab0859c9f81142aa6be5d0ccc8ba1 (patch) | |
tree | 6ec4f8e01886c5b82bf70d4e3cbdd5a3d1469dfc /testapp | |
parent | 0890351ba31dfe3904ff0f064ce9316405473cd3 (diff) | |
download | online_test-a89aff61b6bab0859c9f81142aa6be5d0ccc8ba1.tar.gz online_test-a89aff61b6bab0859c9f81142aa6be5d0ccc8ba1.tar.bz2 online_test-a89aff61b6bab0859c9f81142aa6be5d0ccc8ba1.zip |
80 Cols per line, corrected indentation in files & implemented DRY
Diffstat (limited to 'testapp')
-rw-r--r-- | testapp/exam/forms.py | 74 | ||||
-rw-r--r-- | testapp/exam/models.py | 3 | ||||
-rw-r--r-- | testapp/exam/urls.py | 16 | ||||
-rw-r--r-- | testapp/exam/views.py | 744 | ||||
-rw-r--r-- | testapp/settings.py | 4 | ||||
-rw-r--r-- | testapp/static/exam/js/edit_question.js | 2 | ||||
-rw-r--r-- | testapp/templates/exam/editquestionpaper.html | 2 | ||||
-rw-r--r-- | testapp/test_server.py | 22 | ||||
-rw-r--r-- | testapp/urls.py | 3 |
9 files changed, 443 insertions, 427 deletions
diff --git a/testapp/exam/forms.py b/testapp/exam/forms.py index 9bcd04f..7bbf601 100644 --- a/testapp/exam/forms.py +++ b/testapp/exam/forms.py @@ -22,18 +22,27 @@ UNAME_CHARS = letters + "._" + digits PWD_CHARS = letters + punctuation + digits class UserRegisterForm(forms.Form): - """A Class to create new form for User's Registration. It has the various fields and functions required to register a new user to the system""" + """A Class to create new form for User's Registration. + It has the various fields and functions required to register + a new user to the system""" - username = forms.CharField(max_length=30, help_text='Letters, digits, period and underscores only.') + username = forms.CharField\ + (max_length=30, help_text='Letters, digits,\ + period and underscores only.') email = forms.EmailField() password = forms.CharField(max_length=30, widget=forms.PasswordInput()) - confirm_password = forms.CharField(max_length=30, widget=forms.PasswordInput()) + confirm_password = forms.CharField\ + (max_length=30, widget=forms.PasswordInput()) first_name = forms.CharField(max_length=30) last_name = forms.CharField(max_length=30) - roll_number = forms.CharField(max_length=30, help_text="Use a dummy if you don't have one.") - institute = forms.CharField(max_length=128, help_text='Institute/Organization') - department = forms.CharField(max_length=64, help_text='Department you work/study at') - position = forms.CharField(max_length=64, help_text='Student/Faculty/Researcher/Industry/etc.') + roll_number = forms.CharField\ + (max_length=30, help_text="Use a dummy if you don't have one.") + institute = forms.CharField\ + (max_length=128, help_text='Institute/Organization') + department = forms.CharField\ + (max_length=64, help_text='Department you work/study at') + position = forms.CharField\ + (max_length=64, help_text='Student/Faculty/Researcher/Industry/etc.') def clean_username(self): u_name = self.cleaned_data["username"] @@ -42,7 +51,7 @@ class UserRegisterForm(forms.Form): "allowed in username" raise forms.ValidationError(msg) try: - User.objects.get(username__exact = u_name) + User.objects.get(username__exact=u_name) raise forms.ValidationError("Username already exists.") except User.DoesNotExist: return u_name @@ -50,8 +59,8 @@ class UserRegisterForm(forms.Form): def clean_password(self): pwd = self.cleaned_data['password'] if pwd.strip(PWD_CHARS): - raise forms.ValidationError("Only letters, digits and punctuation are \ - allowed in password") + raise forms.ValidationError("Only letters, digits and punctuation\ + are allowed in password") return pwd def clean_confirm_password(self): @@ -86,28 +95,32 @@ class UserRegisterForm(forms.Form): class UserLoginForm(forms.Form): """Creates a form which will allow the user to log into the system.""" - username = forms.CharField(max_length = 30) + username = forms.CharField(max_length=30) password = forms.CharField(max_length=30, widget=forms.PasswordInput()) def clean(self): super(UserLoginForm, self).clean() try: - u_name, pwd = self.cleaned_data["username"], self.cleaned_data["password"] - user = authenticate(username = u_name, password = pwd) + u_name, pwd = self.cleaned_data["username"],\ + self.cleaned_data["password"] + user = authenticate(username=u_name, password=pwd) except Exception: - raise forms.ValidationError("Username and/or Password is not entered") + raise forms.ValidationError\ + ("Username and/or Password is not entered") if not user: raise forms.ValidationError("Invalid username/password") return user class QuizForm(forms.Form): - """Creates a form to add or edit a Quiz. It has the related fields and functions required.""" + """Creates a form to add or edit a Quiz. + It has the related fields and functions required.""" start_date = forms.DateField(initial=datetime.date.today) duration = forms.IntegerField() active = forms.BooleanField(required = False) tags = TagField(widget=TagAutocomplete()) - description = forms.CharField(max_length=256, widget=forms.Textarea(attrs={'cols':20,'rows':1})) + description = forms.CharField(max_length=256, widget=forms.Textarea\ + (attrs={'cols':20,'rows':1})) def save(self): start_date = self.cleaned_data["start_date"] @@ -116,24 +129,31 @@ class QuizForm(forms.Form): description = self.cleaned_data["description"] new_quiz = Quiz() - new_quiz.start_date=start_date - new_quiz.duration=duration - new_quiz.active=active - new_quiz.description=description + new_quiz.start_date = start_date + new_quiz.duration = duration + new_quiz.active = active + new_quiz.description = description new_quiz.save() class QuestionForm(forms.Form): - """Creates a form to add or edit a Question. It has the related fields and functions required.""" + """Creates a form to add or edit a Question. + It has the related fields and functions required.""" - summary = forms.CharField(widget = forms.Textarea(attrs={'cols': 40, 'rows': 1})) - description = forms.CharField(widget = forms.Textarea(attrs={'cols': 40, 'rows': 1})) + summary = forms.CharField(widget=forms.Textarea\ + (attrs={'cols': 40, 'rows': 1})) + description = forms.CharField(widget=forms.Textarea\ + (attrs={'cols': 40, 'rows': 1})) points = forms.FloatField() - test = forms.CharField(widget = forms.Textarea(attrs={'cols': 40, 'rows': 1})) - options = forms.CharField(widget = forms.Textarea(attrs={'cols': 40, 'rows': 1}),required=False) - type = forms.CharField(max_length=8, widget=forms.Select(choices=QUESTION_TYPE_CHOICES)) + test = forms.CharField(widget=forms.Textarea\ + (attrs={'cols': 40, 'rows': 1})) + options = forms.CharField(widget=forms.Textarea\ + (attrs={'cols': 40, 'rows': 1}),required=False) + type = forms.CharField(max_length=8, widget=forms.Select\ + (choices=QUESTION_TYPE_CHOICES)) active = forms.BooleanField(required=False) tags = TagField(widget=TagAutocomplete(),required=False) - snippet = forms.CharField(widget = forms.Textarea(attrs={'cols': 40, 'rows': 1}),required=False) + snippet = forms.CharField(widget=forms.Textarea\ + (attrs={'cols': 40, 'rows': 1}),required=False) def save(self): summary = self.cleaned_data["summary"] diff --git a/testapp/exam/models.py b/testapp/exam/models.py index 708c7af..00d32e4 100644 --- a/testapp/exam/models.py +++ b/testapp/exam/models.py @@ -1,7 +1,8 @@ import datetime from django.db import models from django.contrib.auth.models import User -from taggit_autocomplete_modified.managers import TaggableManagerAutocomplete as TaggableManager +from taggit_autocomplete_modified.managers import TaggableManagerAutocomplete\ +as TaggableManager from django.http import HttpResponse ################################################################################ class Profile(models.Model): diff --git a/testapp/exam/urls.py b/testapp/exam/urls.py index ff1545a..b3cfceb 100644 --- a/testapp/exam/urls.py +++ b/testapp/exam/urls.py @@ -30,15 +30,17 @@ urlpatterns = patterns('exam.views', url(r'^manage/showquiz/$','show_all_quiz'), url(r'^manage/monitor/$', 'monitor'), url(r'^manage/showquestionpapers/$','show_all_questionpapers'), - url(r'^manage/showquestionpapers/(?P<questionpaper_id>\d+)/$', 'show_all_questionpapers'), + url(r'^manage/showquestionpapers/(?P<questionpaper_id>\d+)/$',\ + 'show_all_questionpapers'), url(r'^manage/monitor/(?P<quiz_id>\d+)/$', 'monitor'), - url(r'^manage/user_data/(?P<username>[a-zA-Z0-9_.]+)/$', 'user_data'), + url(r'^manage/user_data/(?P<username>[a-zA-Z0-9_.]+)/$','user_data'), url(r'^manage/designquestionpaper/$','design_questionpaper'), - url(r'^manage/designquestionpaper/(?P<questionpaper_id>\d+)/$', 'design_questionpaper'), - url(r'^manage/designquestionpaper/automatic/(?P<questionpaper_id>\d+)/$','automatic_questionpaper'), + url(r'^manage/designquestionpaper/(?P<questionpaper_id>\d+)/$',\ + 'design_questionpaper'), + url(r'^manage/designquestionpaper/automatic/(?P<questionpaper_id>\d+)/$',\ + 'automatic_questionpaper'), url(r'^manage/designquestionpaper/automatic$','automatic_questionpaper'), url(r'^manage/designquestionpaper/manual$','manual_questionpaper'), - url(r'^manage/designquestionpaper/manual/(?P<questionpaper_id>\d+)/$','manual_questionpaper'), - + url(r'^manage/designquestionpaper/manual/(?P<questionpaper_id>\d+)/$',\ + 'manual_questionpaper'), ) - diff --git a/testapp/exam/views.py b/testapp/exam/views.py index a1e8ece..0cfc5ab 100644 --- a/testapp/exam/views.py +++ b/testapp/exam/views.py @@ -4,7 +4,6 @@ import os import stat from os.path import dirname, pardir, abspath, join, exists import datetime - from django.http import HttpResponse from django.contrib.auth import login, logout, authenticate from django.shortcuts import render_to_response, get_object_or_404, redirect @@ -14,56 +13,92 @@ from django.db.models import Sum from taggit.models import Tag from itertools import chain # Local imports. -from exam.models import Quiz, Question, QuestionPaper, Profile, Answer, AnswerPaper, User -from exam.forms import UserRegisterForm, UserLoginForm, QuizForm , QuestionForm +from exam.models import Quiz, Question, QuestionPaper, Profile, Answer +from exam.models import AnswerPaper, User +from exam.forms import UserRegisterForm, UserLoginForm, QuizForm, QuestionForm from exam.xmlrpc_clients import code_server from settings import URL_ROOT # The directory where user data can be saved. OUTPUT_DIR = abspath(join(dirname(__file__), pardir, 'output')) + def my_redirect(url): """An overridden redirect to deal with URL_ROOT-ing. See settings.py -for details.""" + for details.""" return redirect(URL_ROOT + url) + def my_render_to_response(template, context=None, **kwargs): - """Overridden render_to_response. -""" + """Overridden render_to_response.""" + if context is None: context = {'URL_ROOT': URL_ROOT} else: context['URL_ROOT'] = URL_ROOT - return render_to_response(template, context, **kwargs) + return render_to_response(template, context, **kwargs) + def gen_key(no_of_chars): """Generate a random key of the number of characters.""" - allowed_chars = string.digits+string.uppercase + allowed_chars = string.digits + string.uppercase return ''.join([random.choice(allowed_chars) for i in range(no_of_chars)]) - + + def get_user_dir(user): """Return the output directory for the user.""" user_dir = join(OUTPUT_DIR, str(user.username)) if not exists(user_dir): os.mkdir(user_dir) - # Make it rwx by others. - os.chmod(user_dir, stat.S_IROTH | stat.S_IWOTH | stat.S_IXOTH \ - | stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR \ - | stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP) + # Make it rwx by others. + os.chmod(user_dir, stat.S_IROTH | stat.S_IWOTH | stat.S_IXOTH \ + | stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR \ + | stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP) return user_dir - + + def index(request): - """The start page. - """ + """The start page.""" + user = request.user if user.is_authenticated(): - if user.groups.filter(name='moderator').count() > 0: + if user.groups.filter(name='moderator').count() > 0: return my_redirect('/exam/manage/') return my_redirect("/exam/start/") return my_redirect("/exam/login/") +def is_moderator(user): + """Check if the user is having moderator rights""" + if user.groups.filter(name='moderator').count() == 1: + return True + +def fetch_questions(request): + """Fetch questions from database based on the given search conditions & + tags""" + first_tag = request.POST.get('first_tag') + first_condition = request.POST.get('first_condition') + second_tag = request.POST.get('second_tag') + second_condition = request.POST.get('second_condition') + third_tag = request.POST.get('third_tag') + question1 = set(Question.objects.filter(tags__name__in=[first_tag])) + question2 = set(Question.objects.filter(tags__name__in=[second_tag])) + question3 = set(Question.objects.filter(tags__name__in=[third_tag])) + if first_condition == 'and': + set1 = question1.intersection(question2) + if second_condition == 'and': + set2 = set1.intersection(question3) + else: + set2 = set1.union(question3) + else: + set1 = question1.union(question2) + if second_condition == 'and': + set2 = set1.intersection(question3) + else: + set2 = set1.union(question3) + return set2 + def user_register(request): """ Register a new user. Create a user and corresponding profile and store roll_number also.""" @@ -78,90 +113,94 @@ def user_register(request): data = form.cleaned_data u_name, pwd = form.save() - new_user = authenticate(username = u_name, password = pwd) + new_user = authenticate(username=u_name, password=pwd) login(request, new_user) return my_redirect("/exam/start/") - else: return my_render_to_response('exam/register.html', - {'form':form}, - context_instance=RequestContext(request)) + {'form': form}, + context_instance=RequestContext(request)) else: form = UserRegisterForm() return my_render_to_response('exam/register.html', - {'form':form}, - context_instance=RequestContext(request)) + {'form': form}, + context_instance=RequestContext(request)) + def quizlist_user(request): - """Show All Quizzes that is available to logged-in user.""" - user=request.user + """Show All Quizzes that are available to logged-in user.""" + + user = request.user avail_quiz = list(QuestionPaper.objects.filter(quiz__active=True)) user_answerpapers = AnswerPaper.objects.filter(user=user) user_quiz = [] if user_answerpapers.count() == 0: - context = {'quizzes':avail_quiz} - return my_render_to_response("exam/quizzes_user.html",context) + context = {'quizzes': avail_quiz} + return my_render_to_response("exam/quizzes_user.html", context) for paper in user_answerpapers: for quiz in avail_quiz: - if paper.question_paper.id == quiz.id and paper.end_time != paper.start_time: + if paper.question_paper.id == quiz.id and paper.end_time != \ + paper.start_time: avail_quiz.remove(quiz) - context = {'quizzes':avail_quiz,'user':user} - return my_render_to_response("exam/quizzes_user.html",context) + context = {'quizzes': avail_quiz, 'user': user} + return my_render_to_response("exam/quizzes_user.html", context) + def results_user(request): """Show list of Results of Quizzes that is taken by logged-in user.""" + user = request.user papers = AnswerPaper.objects.filter(user=user) quiz_marks = [] for paper in papers: - temp = [] - temp.append(paper.question_paper.quiz.description) - temp.append(paper.get_total_marks()) + temp = paper.question_paper.quiz.description, paper.get_total_marks() quiz_marks.append(temp) - context = {'papers':quiz_marks} - return my_render_to_response("exam/results_user.html",context) + context = {'papers': quiz_marks} + return my_render_to_response("exam/results_user.html", context) + def edit_quiz(request): """Edit the list of quizzes seleted by the user for editing.""" user = request.user - if not user.is_authenticated() or user.groups.filter(name='moderator').count() == 0: + if not user.is_authenticated() or not is_moderator(user): raise Http404('You are not allowed to view this page!') - quizzes = request.POST.getlist('quizzes') + quiz_list = request.POST.getlist('quizzes') start_date = request.POST.getlist('start_date') duration = request.POST.getlist('duration') active = request.POST.getlist('active') description = request.POST.getlist('description') + tags = request.POST.getlist('tags') - j = 0 - for i in quizzes: - quiz = Quiz.objects.get(id=i) + for j, quiz_id in enumerate(quiz_list): + quiz = Quiz.objects.get(id=quiz_id) quiz.start_date = start_date[j] quiz.duration = duration[j] quiz.active = active[j] quiz.description = description[j] quiz.save() - edit_tags=tags[j] + edit_tags = tags[j] quiz.save() for tag in quiz.tags.all(): quiz.tags.remove(tag) tags_split = edit_tags.split(',') - for i in range(0,len(tags_split)-1): + for i in range(0, len(tags_split) - 1): tag = tags_split[i].strip() quiz.tags.add(tag) - j += 1 return my_redirect("/exam/manage/showquiz/") + def edit_question(request): """Edit the list of questions seleted by the user for editing.""" + user = request.user - if not user.is_authenticated() or user.groups.filter(name='moderator').count() == 0: + if not user.is_authenticated() or not is_moderator(user): raise Http404('You are not allowed to view this page!') - questions = request.POST.getlist('questions') + question_list = request.POST.getlist('questions') summary = request.POST.getlist('summary') description = request.POST.getlist('description') points = request.POST.getlist('points') @@ -171,47 +210,47 @@ def edit_question(request): active = request.POST.getlist('active') snippet = request.POST.getlist('snippet') tags = request.POST.getlist('tags') - j = 0 - for id_list in questions: - question = Question.objects.get(id=id_list) + + for j, question_id in enumerate(question_list): + question = Question.objects.get(id=question_id) question.summary = summary[j] question.description = description[j] question.points = points[j] question.test = test[j] question.options = options[j] question.type = type[j] - edit_tags=tags[j] question.active = active[j] question.snippet = snippet[j] question.save() for tag in question.tags.all(): question.tags.remove(tag) + edit_tags = tags[j] tags_split = edit_tags.split(',') - for i in range(0,len(tags_split)-1): + for i in range(0, len(tags_split) - 1): tag = tags_split[i].strip() question.tags.add(tag) - j += 1 return my_redirect("/exam/manage/questions") - -def add_question(request,question_id=None): - """To add a new question in the database. Create a new question and store it.""" + +def add_question(request, question_id=None): + """To add a new question in the database. + Create a new question and store it.""" + user = request.user - if not user.is_authenticated() or user.groups.filter(name='moderator').count() == 0 : + if not user.is_authenticated() or not is_moderator(user): raise Http404('You are not allowed to view this page!') if request.method == "POST": form = QuestionForm(request.POST) if form.is_valid(): data = form.cleaned_data - if question_id == None: + if question_id is None: form.save() question = Question.objects.order_by("-id")[0] tags = form['tags'].data.split(',') - for i in range(0,len(tags)-1): - tag = tags[i].strip() - question.tags.add(tag) + for i in range(0, len(tags) - 1): + tag = tags[i].strip() + question.tags.add(tag) return my_redirect("/exam/manage/questions") - else: d = Question.objects.get(id=question_id) d.summary = form['summary'].data @@ -227,56 +266,58 @@ def add_question(request,question_id=None): for tag in question.tags.all(): question.tags.remove(tag) tags = form['tags'].data.split(',') - for i in range(0,len(tags)-1): - tag = tags[i].strip() - question.tags.add(tag) + for i in range(0, len(tags) - 1): + tag = tags[i].strip() + question.tags.add(tag) return my_redirect("/exam/manage/questions") - else: return my_render_to_response('exam/add_question.html', - {'form':form}, - context_instance=RequestContext(request)) + {'form': form}, + context_instance=RequestContext\ + (request)) else: - if question_id == None: + if question_id is None: form = QuestionForm() return my_render_to_response('exam/add_question.html', - {'form':form}, - context_instance=RequestContext(request)) - else: - - d = Question.objects.get(id=question_id) - form = QuestionForm() - form.initial['summary']= d.summary - form.initial['description'] = d.description - form.initial['points']= d.points - form.initial['test'] = d.test - form.initial['options'] = d.options - form.initial['type'] = d.type - form.initial['active'] = d.active + {'form': form}, + context_instance=RequestContext\ + (request)) + else: + d = Question.objects.get(id=question_id) + form = QuestionForm() + form.initial['summary'] = d.summary + form.initial['description'] = d.description + form.initial['points'] = d.points + form.initial['test'] = d.test + form.initial['options'] = d.options + form.initial['type'] = d.type + form.initial['active'] = d.active form.initial['snippet'] = d.snippet form_tags = d.tags.all() form_tags_split = form_tags.values('name') initial_tags = "" - for tag in form_tags_split: initial_tags = initial_tags + str(tag['name']).strip() + "," if (initial_tags == ","): initial_tags = "" - form.initial['tags']=initial_tags - return my_render_to_response('exam/add_question.html',{'form':form},context_instance=RequestContext(request)) + form.initial['tags'] = initial_tags + return my_render_to_response('exam/add_question.html', + {'form': form}, + context_instance=RequestContext\ + (request)) -def add_quiz(request,quiz_id=None): +def add_quiz(request, quiz_id=None): """To add a new quiz in the database. Create a new question and store it.""" user = request.user - if not user.is_authenticated() or user.groups.filter(name='moderator').count() == 0 : + if not user.is_authenticated() or not is_moderator(user): raise Http404('You are not allowed to view this page!') if request.method == "POST": form = QuizForm(request.POST) if form.is_valid(): data = form.cleaned_data - if quiz_id == None: + if quiz_id is None: form.save() quiz = Quiz.objects.order_by("-id")[0] tags = form['tags'].data.split(',') @@ -290,95 +331,101 @@ def add_quiz(request,quiz_id=None): d.duration = form['duration'].data d.active = form['active'].data d.description = form['description'].data - d.save() + d.save() quiz = Quiz.objects.get(id=quiz_id) for tag in quiz.tags.all(): quiz.tags.remove(tag) tags = form['tags'].data.split(',') - for i in range(0,len(tags)-1): - tag = tags[i].strip() - quiz.tags.add(tag) + for i in range(0, len(tags) - 1): + tag = tags[i].strip() + quiz.tags.add(tag) return my_redirect("/exam/manage/showquiz") - else: return my_render_to_response('exam/add_quiz.html', - {'form':form}, - context_instance=RequestContext(request)) + {'form': form}, + context_instance=RequestContext\ + (request)) else: - if quiz_id == None: + if quiz_id is None: form = QuizForm() return my_render_to_response('exam/add_quiz.html', - {'form':form}, - context_instance=RequestContext(request)) + {'form': form}, + context_instance=RequestContext\ + (request)) else: d = Quiz.objects.get(id=quiz_id) form = QuizForm() - form.initial['start_date']= d.start_date + form.initial['start_date'] = d.start_date form.initial['duration'] = d.duration - form.initial['description']= d.description + form.initial['description'] = d.description form.initial['active'] = d.active form_tags = d.tags.all() form_tags_split = form_tags.values('name') initial_tags = "" - + for tag in form_tags_split: initial_tags = initial_tags + str(tag['name']).strip() + "," if (initial_tags == ","): initial_tags = "" - form.initial['tags']=initial_tags - return my_render_to_response('exam/add_quiz.html',{'form':form},context_instance=RequestContext(request)) + form.initial['tags'] = initial_tags + return my_render_to_response('exam/add_quiz.html', + {'form': form}, + context_instance=RequestContext\ + (request)) -def design_questionpaper(request,questionpaper_id=None): - user=request.user - if not user.is_authenticated() or user.groups.filter(name='moderator').count() == 0 : +def design_questionpaper(request, questionpaper_id=None): + """Adding a new question paper""" + user = request.user + if not user.is_authenticated() or not is_moderator(user): raise Http404('You are not allowed to view this page!') - return my_render_to_response('exam/add_questionpaper.html',{},context_instance=RequestContext(request)) - - -def show_all_questionpapers(request,questionpaper_id=None): - user=request.user - if not user.is_authenticated() or user.groups.filter(name='moderator').count() == 0 : + return my_render_to_response('exam/add_questionpaper.html', {}, + context_instance=RequestContext(request)) + + +def show_all_questionpapers(request, questionpaper_id=None): + """Show list of all the question papers""" + user = request.user + if not user.is_authenticated() or not is_moderator(user): raise Http404('You are not allowed to view this page!') - if request.method=="POST" and request.POST.get('add') == "add": - return my_redirect("/exam/manage/designquestionpaper/" + questionpaper_id) + if request.method == "POST" and request.POST.get('add') == "add": + return my_redirect("/exam/manage/designquestionpaper/" +\ + questionpaper_id) - if request.method=="POST" and request.POST.get('delete') == "delete": + if request.method == "POST" and request.POST.get('delete') == "delete": data = request.POST.getlist('papers') q_paper = QuestionPaper.objects.get(id=questionpaper_id) for i in data: q_paper.questions.remove(Question.objects.get(id=i)) - question_paper= QuestionPaper.objects.all() - context = {'papers': question_paper } + question_paper = QuestionPaper.objects.all() + context = {'papers': question_paper} return my_render_to_response('exam/showquestionpapers.html', context, - context_instance=RequestContext(request)) - if questionpaper_id == None: + context_instance=RequestContext(request)) + if questionpaper_id is None: qu_papers = QuestionPaper.objects.all() - context = {'papers':qu_papers} - return my_render_to_response('exam/showquestionpapers.html',context,context_instance=RequestContext(request)) + context = {'papers': qu_papers} + return my_render_to_response('exam/showquestionpapers.html', context, + context_instance=RequestContext(request)) else: qu_papers = QuestionPaper.objects.get(id=questionpaper_id) quiz = qu_papers.quiz questions = qu_papers.questions.all() - q = [] - for i in questions: - q.append(i) - context = {'papers':{'quiz':quiz,'questions':q}} - return my_render_to_response('exam/editquestionpaper.html',context,context_instance=RequestContext(request)) + context = {'papers': {'quiz': quiz, 'questions': questions}} + return my_render_to_response('exam/editquestionpaper.html', context, + context_instance=RequestContext(request)) -def automatic_questionpaper(request,questionpaper_id=None): - - user=request.user +def automatic_questionpaper(request, questionpaper_id=None): + user = request.user set1 = set() set2 = set() - if not user.is_authenticated() or user.groups.filter(name='moderator').count() == 0 : + if not user.is_authenticated() or not is_moderator(user): raise Http404('You are not allowed to view this page!') - if questionpaper_id == None: - if request.method=="POST": - if request.POST.get('save') == 'save' : + if questionpaper_id is None: + if request.method == "POST": + if request.POST.get('save') == 'save': quiz = Quiz.objects.order_by("-id")[0] quest_paper = QuestionPaper() quest_paper.quiz = quiz @@ -391,100 +438,77 @@ def automatic_questionpaper(request,questionpaper_id=None): return my_redirect('/exam/manage/showquiz') else: no_questions = int(request.POST.get('questions')) - first_tag = request.POST.get('first_tag') - first_condition = request.POST.get('first_condition') - second_tag = request.POST.get('second_tag') - second_condition = request.POST.get('second_condition') - third_tag = request.POST.get('third_tag') - question1 = set(Question.objects.filter(tags__name__in=[first_tag])) - question2 = set(Question.objects.filter(tags__name__in=[second_tag])) - question3 = set(Question.objects.filter(tags__name__in=[third_tag])) - if first_condition == 'and': - set1 = question1.intersection(question2) - if second_condition == 'and': - set2 = set1.intersection(question3) - else: - set2 = set1.union(question3) - else: - set1 = question1.union(question2) - if second_condition == 'and': - set2 = set1.intersection(question3) - else: - set2 = set1.union(question3) + fetch_questions(request) n = len(set2) msg = '' - if (no_questions < n ) : + if (no_questions < n ): i = n - no_questions - for i in range(0,i): + for i in range(0, i): set2.pop() - elif( no_questions > n): - msg = 'The given Criteria does not satisfy the number of Questions...' + elif ( no_questions > n): + msg = 'The given Criteria does not satisfy the number\ + of Questions...' tags = Tag.objects.all() - context = {'data':{'questions':set2,'tags':tags,'msg':msg}} - return my_render_to_response('exam/automatic_questionpaper.html',context,context_instance=RequestContext(request)) + context = {'data': {'questions': set2, 'tags': tags, + 'msg': msg}} + return my_render_to_response\ + ('exam/automatic_questionpaper.html',context, + context_instance=RequestContext(request)) else: tags = Tag.objects.all() - context = {'data':{'tags':tags}} - return my_render_to_response('exam/automatic_questionpaper.html',context,context_instance=RequestContext(request)) + context = {'data': {'tags': tags}} + return my_render_to_response('exam/automatic_questionpaper.html', + context, + context_instance=RequestContext(request)) else: - if request.method=="POST": - if request.POST.get('save') == 'save' : + if request.method == "POST": + if request.POST.get('save') == 'save': quest_paper = QuestionPaper.objects.get(id=questionpaper_id) questions = request.POST.getlist('questions') for i in questions: if i.isdigit(): q = Question.objects.get(id=i) quest_paper.questions.add(q) - return my_redirect('/exam/manage/showquiz') + return my_redirect('/exam/manage/showquestionpapers/' +\ + questionpaper_id) else: no_questions = int(request.POST.get('questions')) - first_tag = request.POST.get('first_tag') - first_condition = request.POST.get('first_condition') - second_tag = request.POST.get('second_tag') - second_condition = request.POST.get('second_condition') - third_tag = request.POST.get('third_tag') - question1 = set(Question.objects.filter(tags__name__in=[first_tag])) - question2 = set(Question.objects.filter(tags__name__in=[second_tag])) - question3 = set(Question.objects.filter(tags__name__in=[third_tag])) - if first_condition == 'and': - set1 = question1.intersection(question2) - if second_condition == 'and': - set2 = set1.intersection(question3) - else: - set2 = set1.union(question3) - else: - set1 = question1.union(question2) - if second_condition == 'and': - set2 = set1.intersection(question3) - else: - set2 = set1.union(question3) + fetch_questions(request) n = len(set2) msg = '' - if (no_questions < n ) : + if (no_questions < n ): i = n - no_questions - for i in range(0,i): + for i in range(0, i): set2.pop() - elif( no_questions > n): - msg = 'The given Criteria does not satisfy the number of Questions...' + elif ( no_questions > n): + msg = 'The given Criteria does not satisfy the number of \ + Questions...' tags = Tag.objects.all() - context = {'data':{'questions':set2,'tags':tags,'msg':msg}} - return my_render_to_response('exam/automatic_questionpaper.html',context,context_instance=RequestContext(request)) + context = {'data': {'questions': set2, 'tags': tags, \ + 'msg': msg}} + return my_render_to_response\ + ('exam/automatic_questionpaper.html', context, + context_instance=RequestContext(request)) else: tags = Tag.objects.all() - context = {'data':{'tags':tags}} - return my_render_to_response('exam/automatic_questionpaper.html',context,context_instance=RequestContext(request)) - -def manual_questionpaper(request,questionpaper_id=None): - user=request.user + context = {'data': {'tags': tags}} + return my_render_to_response('exam/automatic_questionpaper.html', + context, + context_instance=RequestContext\ + (request)) + + +def manual_questionpaper(request, questionpaper_id=None): + user = request.user set1 = set() set2 = set() - if not user.is_authenticated() or user.groups.filter(name='moderator').count() == 0 : + if not user.is_authenticated() or not is_moderator(user): raise Http404('You are not allowed to view this page!') - if questionpaper_id == None: - if request.method=="POST": - if request.POST.get('save') == 'save' : + if questionpaper_id is None: + if request.method == "POST": + if request.POST.get('save') == 'save': questions = request.POST.getlist('questions') quiz = Quiz.objects.order_by("-id")[0] quest_paper = QuestionPaper() @@ -495,98 +519,73 @@ def manual_questionpaper(request,questionpaper_id=None): quest_paper.questions.add(q) return my_redirect('/exam/manage/showquiz') else: - first_tag = request.POST.get('first_tag') - first_condition = request.POST.get('first_condition') - second_tag = request.POST.get('second_tag') - second_condition = request.POST.get('second_condition') - third_tag = request.POST.get('third_tag') - question1 = set(Question.objects.filter(tags__name__in=[first_tag])) - question2 = set(Question.objects.filter(tags__name__in=[second_tag])) - question3 = set(Question.objects.filter(tags__name__in=[third_tag])) - if first_condition == 'and': - set1 = question1.intersection(question2) - if second_condition == 'and': - set2 = set1.intersection(question3) - else: - set2 = set1.union(question3) - else: - set1 = question1.union(question2) - if second_condition == 'and': - set2 = set1.intersection(question3) - else: - set2 = set1.union(question3) + fetch_questions(request) n = len(set2) msg = '' - if (n == 0) : + if (n == 0): msg = 'No matching Question found...' tags = Tag.objects.all() - context = {'data':{'questions':set2,'tags':tags,'msg':msg}} - return my_render_to_response('exam/manual_questionpaper.html',context,context_instance=RequestContext(request)) + context = {'data': {'questions': set2, 'tags': tags,'msg': msg}} + return my_render_to_response('exam/manual_questionpaper.html', + context, + context_instance=RequestContext\ + (request)) else: tags = Tag.objects.all() - context = {'data':{'tags':tags}} - return my_render_to_response('exam/manual_questionpaper.html',context,context_instance=RequestContext(request)) - + context = {'data': {'tags': tags}} + return my_render_to_response('exam/manual_questionpaper.html', + context, + context_instance=RequestContext\ + (request)) else: - if request.method=="POST": - if request.POST.get('save') == 'save' : + if request.method == "POST": + if request.POST.get('save') == 'save': quest_paper = QuestionPaper.objects.get(id=questionpaper_id) questions = request.POST.getlist('questions') - for i in questions: + for i in questions: q = Question.objects.get(id=i) quest_paper.questions.add(q) - return my_redirect('/exam/manage/showquiz') + return my_redirect('/exam/manage/showquestionpapers/'+\ + questionpaper_id) else: - first_tag = request.POST.get('first_tag') - first_condition = request.POST.get('first_condition') - second_tag = request.POST.get('second_tag') - second_condition = request.POST.get('second_condition') - third_tag = request.POST.get('third_tag') - question1 = set(Question.objects.filter(tags__name__in=[first_tag])) - question2 = set(Question.objects.filter(tags__name__in=[second_tag])) - question3 = set(Question.objects.filter(tags__name__in=[third_tag])) - if first_condition == 'and': - set1 = question1.intersection(question2) - if second_condition == 'and': - set2 = set1.intersection(question3) - else: - set2 = set1.union(question3) - else: - set1 = question1.union(question2) - if second_condition == 'and': - set2 = set1.intersection(question3) - else: - set2 = set1.union(question3) + fetch_questions(request) n = len(set2) msg = '' - if (n == 0) : + if (n == 0): msg = 'No matching Question found...' tags = Tag.objects.all() - context = {'data':{'questions':set2,'tags':tags,'msg':msg}} - return my_render_to_response('exam/manual_questionpaper.html',context,context_instance=RequestContext(request)) + context = {'data': {'questions': set2, 'tags': tags,'msg': msg}} + return my_render_to_response('exam/manual_questionpaper.html', + context, + context_instance=RequestContext\ + (request)) + else: tags = Tag.objects.all() - context = {'data':{'tags':tags}} - return my_render_to_response('exam/manual_questionpaper.html',context,context_instance=RequestContext(request)) - - + context = {'data': {'tags': tags}} + return my_render_to_response('exam/manual_questionpaper.html', + context, + context_instance=RequestContext(request)) def prof_manage(request): - """Take credentials of the user with professor/moderator rights/permissions and log in.""" - + """Take credentials of the user with professor/moderator rights/permissions + and log in.""" + user = request.user - if user.is_authenticated() and user.groups.filter(name='moderator').count() > 0: - context = {'user':user} - return my_render_to_response('manage.html',context) + if user.is_authenticated() and\ + user.groups.filter(name='moderator').count() > 0: + context = {'user': user} + return my_render_to_response('manage.html', context) return my_redirect('/exam/login/') + def user_login(request): """Take the credentials of the user and log the user in.""" user = request.user if user.is_authenticated(): - if user.groups.filter(name='moderator').count() > 0 : + if user.groups.filter(name='moderator').count() > 0: return my_redirect('/exam/manage/') return my_redirect("/exam/intro/") @@ -595,37 +594,41 @@ def user_login(request): if form.is_valid(): user = form.cleaned_data login(request, user) - if user.groups.filter(name='moderator').count() > 0 : + if user.groups.filter(name='moderator').count() > 0: return my_redirect('/exam/manage/') return my_redirect('/exam/login/') else: context = {"form": form} return my_render_to_response('exam/login.html', context, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) else: form = UserLoginForm() context = {"form": form} return my_render_to_response('exam/login.html', context, context_instance=RequestContext(request)) -def start(request,questionpaper_id=None): - """Check the user cedentials and if any quiz is available, start the exam.""" + +def start(request, questionpaper_id=None): + """Check the user cedentials and if any quiz is available, + start the exam.""" + user = request.user - if questionpaper_id == None: + if questionpaper_id is None: return my_redirect('/exam/quizzes/') try: # Right now the app is designed so there is only one active quiz # at a particular time. questionpaper = QuestionPaper.objects.get(id=questionpaper_id) except QuestionPaper.DoesNotExist: - msg = 'Quiz not found, please contact your '\ - 'instructor/administrator. Please login again thereafter.' + msg = 'Quiz not found, please contact your ' \ + 'instructor/administrator. Please login again thereafter.' return complete(request, reason=msg) try: - old_paper = AnswerPaper.objects.get(question_paper=questionpaper, user=user) + old_paper = AnswerPaper.objects.get(question_paper=questionpaper, \ + user=user) q = old_paper.current_question() - return show_question(request, q,questionpaper_id) + return show_question(request, q, questionpaper_id) except AnswerPaper.DoesNotExist: ip = request.META['REMOTE_ADDR'] key = gen_key(10) @@ -635,27 +638,23 @@ def start(request,questionpaper_id=None): msg = 'You do not have a profile and cannot take the quiz!' raise Http404(msg) - new_paper = AnswerPaper(user=user, user_ip=ip, - question_paper=questionpaper, profile=profile) + new_paper = AnswerPaper(user=user, user_ip=ip, + question_paper=questionpaper, profile=profile) new_paper.start_time = datetime.datetime.now() new_paper.end_time = datetime.datetime.now() # Make user directory. user_dir = get_user_dir(user) - questions = [ str(_.id) for _ in questionpaper.questions.all() ] + questions = [str(_.id) for _ in questionpaper.questions.all()] random.shuffle(questions) - #questions = questionpaper.questions - #random.shuffle(questions) - new_paper.questions = "|".join(questions) - new_paper.save() - # Show the user the intro page. - context = {'user': user,'paper_id':questionpaper_id} + context = {'user': user, 'paper_id': questionpaper_id} ci = RequestContext(request) - return my_render_to_response('exam/intro.html', context, + return my_render_to_response('exam/intro.html', context, context_instance=ci) + def question(request, q_id, questionpaper_id): """Check the credentials of the user and start the exam.""" @@ -665,7 +664,8 @@ def question(request, q_id, questionpaper_id): q = get_object_or_404(Question, pk=q_id) try: q_paper = QuestionPaper.objects.get(id=questionpaper_id) - paper = AnswerPaper.objects.get(user=request.user, question_paper=q_paper) + paper = AnswerPaper.objects.get(user=request.user,\ + question_paper=q_paper) except AnswerPaper.DoesNotExist: return my_redirect('/exam/start/') if not paper.question_paper.quiz.active: @@ -675,36 +675,39 @@ def question(request, q_id, questionpaper_id): if time_left == 0: return complete(request, reason='Your time is up!') quiz_name = paper.question_paper.quiz.description - context = {'question': q, 'paper': paper, 'user': user, - 'quiz_name': quiz_name, + context = {'question': q, 'paper': paper, 'user': user, + 'quiz_name': quiz_name, 'time_left': time_left} ci = RequestContext(request) - return my_render_to_response('exam/question.html', context, + return my_render_to_response('exam/question.html', context, context_instance=ci) + def show_question(request, q_id, questionpaper_id): """Show a question if possible.""" + if len(q_id) == 0: msg = 'Congratulations! You have successfully completed the quiz.' return complete(request, msg) else: return question(request, q_id, questionpaper_id) + def check(request, q_id, questionpaper_id=None): - """Checks the answers of the user for particular question""" + """Checks the answers of the user for particular question""" user = request.user if not user.is_authenticated(): return my_redirect('/exam/login/') question = get_object_or_404(Question, pk=q_id) q_paper = QuestionPaper.objects.get(id=questionpaper_id) - paper = AnswerPaper.objects.get(user=request.user,question_paper = q_paper) + paper = AnswerPaper.objects.get(user=request.user, question_paper=q_paper) answer = request.POST.get('answer') skip = request.POST.get('skip', None) - + if skip is not None: next_q = paper.skip() - return show_question(request, next_q,questionpaper_id) + return show_question(request, next_q, questionpaper_id) # Add the answer submitted, regardless of it being correct or not. new_answer = Answer(question=question, answer=answer, correct=False) @@ -724,7 +727,7 @@ def check(request, q_id, questionpaper_id=None): new_answer.error = 'Incorrect answer' else: user_dir = get_user_dir(user) - success, err_msg = code_server.run_code(answer, question.test, + success, err_msg = code_server.run_code(answer, question.test, user_dir, question.type) new_answer.error = err_msg if success: @@ -740,37 +743,40 @@ def check(request, q_id, questionpaper_id=None): return complete(request, reason='Your time is up!') if not paper.question_paper.quiz.active: return complete(request, reason='The quiz has been deactivated!') - + context = {'question': question, 'error_message': err_msg, 'paper': paper, 'last_attempt': answer, 'quiz_name': paper.question_paper.quiz.description, 'time_left': time_left} ci = RequestContext(request) - return my_render_to_response('exam/question.html', context, + return my_render_to_response('exam/question.html', context, context_instance=ci) else: next_q = paper.completed_question(question.id) - return show_question(request, next_q,questionpaper_id) - + return show_question(request, next_q, questionpaper_id) + + def quit(request, answerpaper_id=None): """Show the quit page when the user logs out.""" - context = { 'id':answerpaper_id} - return my_render_to_response('exam/quit.html',context,context_instance=RequestContext(request)) + context = {'id': answerpaper_id} + return my_render_to_response('exam/quit.html', context, + context_instance=RequestContext(request)) + -def complete(request,reason = None,answerpaper_id=None): +def complete(request, reason=None, answerpaper_id=None): """Show a page to inform user that the quiz has been compeleted.""" user = request.user - if answerpaper_id == None: + if answerpaper_id is None: logout(request) context = {'message': "You are successfully Logged out."} return my_render_to_response('exam/complete.html', context) no = False message = reason or 'The quiz has been completed. Thank you.' if user.groups.filter(name='moderator').count() > 0: - message = 'You are successfully Logged out. Thanks for spending some time with the application' + message = 'You are successfully Logged out.' if request.method == 'POST' and 'no' in request.POST: no = True if not no: @@ -782,21 +788,22 @@ def complete(request,reason = None,answerpaper_id=None): else: return my_redirect('/exam/') + def monitor(request, quiz_id=None): """Monitor the progress of the papers taken so far.""" user = request.user - if not user.is_authenticated() or user.groups.filter(name='moderator').count() == 0: + if not user.is_authenticated() or not is_moderator(user): raise Http404('You are not allowed to view this page!') if quiz_id is None: q_paper = QuestionPaper.objects.all() - context = {'papers': [], - 'quiz': None, - 'quizzes':q_paper} + context = {'papers': [], + 'quiz': None, + 'quizzes': q_paper} return my_render_to_response('exam/monitor.html', context, - context_instance=RequestContext(request)) - # quiz_id is not None. + context_instance=RequestContext(request)) + # quiz_id is not None. try: quiz = QuestionPaper.objects.get(id=quiz_id) except QuestionPaper.DoesNotExist: @@ -804,11 +811,12 @@ def monitor(request, quiz_id=None): quiz = None else: papers = AnswerPaper.objects.all().annotate( - total=Sum('answers__marks')).order_by('-total') + total=Sum('answers__marks')).order_by('-total') context = {'papers': papers, 'quiz': quiz, 'quizzes': None} return my_render_to_response('exam/monitor.html', context, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) + def get_user_data(username): """For a given username, this returns a dictionary of important data @@ -825,57 +833,61 @@ def get_user_data(username): profile = None data['user'] = user data['profile'] = profile - data['papers'] = papers + data['papers'] = papers return data + def show_all_users(request): """Shows all the users who have taken various exams/quiz.""" user = request.user - if not user.is_authenticated() or user.groups.filter(name='moderator').count() == 0: + if not user.is_authenticated() or not is_moderator(user): raise Http404('You are not allowed to view this page !') user = User.objects.filter(username__contains="") questionpaper = AnswerPaper.objects.all() - context = { 'question': questionpaper } - return my_render_to_response('exam/showusers.html',context,context_instance=RequestContext(request)) + context = {'question': questionpaper} + return my_render_to_response('exam/showusers.html', context, + context_instance=RequestContext(request)) + def show_all_quiz(request): - """Generates a list of all the quizzes that are currently in the database.""" + """Generates a list of all the quizzes that are currently in the + database.""" user = request.user - if not user.is_authenticated() or user.groups.filter(name='moderator').count() == 0: + if not user.is_authenticated() or not is_moderator(user): raise Http404('You are not allowed to view this page !') - if request.method == 'POST' and request.POST.get('delete')=='delete': + if request.method == 'POST' and request.POST.get('delete') == 'delete': data = request.POST.getlist('quiz') - if data == None: + if data is None: quizzes = Quiz.objects.all() - context = {'papers': [], - 'quiz': None, - 'quizzes':quizzes} + context = {'papers': [], + 'quiz': None, + 'quizzes': quizzes} return my_render_to_response('exam/show_quiz.html', context, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) else: - for i in data: + for i in data: quiz = Quiz.objects.get(id=i).delete() quizzes = Quiz.objects.all() - context = {'papers': [], - 'quiz': None, - 'quizzes':quizzes} + context = {'papers': [], + 'quiz': None, + 'quizzes': quizzes} return my_render_to_response('exam/show_quiz.html', context, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) - elif request.method == 'POST' and request.POST.get('edit')=='edit': + elif request.method == 'POST' and request.POST.get('edit') == 'edit': data = request.POST.getlist('quiz') forms = [] - for j in data: + for j in data: d = Quiz.objects.get(id=j) - form = QuizForm() - form.initial['start_date']= d.start_date - form.initial['duration'] = d.duration - form.initial['active']= d.active - form.initial['description'] = d.description + form = QuizForm() + form.initial['start_date'] = d.start_date + form.initial['duration'] = d.duration + form.initial['active'] = d.active + form.initial['description'] = d.description form_tags = d.tags.all() form_tags_split = form_tags.values('name') initial_tags = "" @@ -883,56 +895,57 @@ def show_all_quiz(request): initial_tags = initial_tags + str(tag['name']).strip() + "," if (initial_tags == ","): initial_tags = "" - form.initial['tags']=initial_tags - forms.append(form) - return my_render_to_response('exam/edit_quiz.html',{'forms':forms,'data':data}, - context_instance=RequestContext(request)) - + form.initial['tags'] = initial_tags + forms.append(form) + return my_render_to_response('exam/edit_quiz.html', + {'forms': forms, 'data': data}, + context_instance=RequestContext(request)) + else: quizzes = Quiz.objects.all() - context = {'papers': [], - 'quiz': None, - 'quizzes':quizzes} + context = {'papers': [], + 'quiz': None, + 'quizzes': quizzes} return my_render_to_response('exam/show_quiz.html', context, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) def show_all_questions(request): """Show a list of all the questions currently in the databse.""" user = request.user - if not user.is_authenticated() or user.groups.filter(name='moderator').count() == 0 : + if not user.is_authenticated() or not is_moderator(user): raise Http404("You are not allowed to view this page !") - if request.method == 'POST' and request.POST.get('delete')=='delete': + if request.method == 'POST' and request.POST.get('delete') == 'delete': data = request.POST.getlist('question') - if data == None: + if data is None: questions = Question.objects.all() context = {'papers': [], - 'question': None, - 'questions':questions} + 'question': None, + 'questions': questions} return my_render_to_response('exam/showquestions.html', context, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) else: for i in data: question = Question.objects.get(id=i).delete() questions = Question.objects.all() context = {'papers': [], - 'question': None, - 'questions':questions} + 'question': None, + 'questions': questions} return my_render_to_response('exam/showquestions.html', context, - context_instance=RequestContext(request)) - - elif request.method == 'POST' and request.POST.get('edit')=='edit': + context_instance=RequestContext(request)) + + elif request.method == 'POST' and request.POST.get('edit') == 'edit': data = request.POST.getlist('question') forms = [] for j in data: d = Question.objects.get(id=j) form = QuestionForm() - form.initial['summary']= d.summary + form.initial['summary'] = d.summary form.initial['description'] = d.description - form.initial['points']= d.points + form.initial['points'] = d.points form.initial['test'] = d.test form.initial['options'] = d.options form.initial['type'] = d.type @@ -944,23 +957,26 @@ def show_all_questions(request): initial_tags = initial_tags + str(tag['name']).strip() + "," if (initial_tags == ","): initial_tags = "" - form.initial['tags']=initial_tags + form.initial['tags'] = initial_tags forms.append(form) - return my_render_to_response('exam/edit_question.html',{'forms':forms,'data':data},context_instance=RequestContext(request)) - + return my_render_to_response('exam/edit_question.html', + {'forms': forms, 'data': data}, + context_instance=RequestContext(request)) + else: questions = Question.objects.all() context = {'papers': [], - 'question': None, - 'questions':questions} + 'question': None, + 'questions': questions} return my_render_to_response('exam/showquestions.html', context, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) + def user_data(request, username): """Render user data.""" current_user = request.user - if not current_user.is_authenticated() or current_user.groups.filter(name='moderator').count() == 0: + if not current_user.is_authenticated() or not is_moderator(current_user): raise Http404('You are not allowed to view this page!') data = get_user_data(username) @@ -969,12 +985,13 @@ def user_data(request, username): return my_render_to_response('exam/user_data.html', context, context_instance=RequestContext(request)) + def grade_user(request, username): """Present an interface with which we can easily grade a user's papers and update all their marks and also give comments for each paper. """ current_user = request.user - if not current_user.is_authenticated() or current_user.groups.filter(name='moderator').count() == 0: + if not current_user.is_authenticated() or not is_moderator(current_user): raise Http404('You are not allowed to view this page!') data = get_user_data(username) @@ -982,17 +999,18 @@ def grade_user(request, username): papers = data['papers'] for paper in papers: for question, answers in paper.get_question_answers().iteritems(): - marks = float(request.POST.get('q%d_marks'%question.id)) + marks = float(request.POST.get('q%d_marks' % question.id)) last_ans = answers[-1] last_ans.marks = marks last_ans.save() - paper.comments = request.POST.get('comments_%d'%paper.question_paper.id) + paper.comments = request.POST.get('comments_%d'\ + % paper.question_paper.id) paper.save() context = {'data': data} return my_render_to_response('exam/user_data.html', context, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) else: context = {'data': data} return my_render_to_response('exam/grade_user.html', context, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) diff --git a/testapp/settings.py b/testapp/settings.py index 10d0919..0002476 100644 --- a/testapp/settings.py +++ b/testapp/settings.py @@ -148,11 +148,9 @@ INSTALLED_APPS = ( 'taggit', # Uncomment the next line to enable admin documentation: # 'django.contrib.admindocs', -# 'south', 'exam', 'taggit_autocomplete_modified', - 'debug_toolbar', - #'django_extensions', + 'debug_toolbar', ) # A sample logging configuration. The only tangible logging diff --git a/testapp/static/exam/js/edit_question.js b/testapp/static/exam/js/edit_question.js index 09cd842..69e0d97 100644 --- a/testapp/static/exam/js/edit_question.js +++ b/testapp/static/exam/js/edit_question.js @@ -156,11 +156,9 @@ function autosubmit() } else { - alert("hello") count_mcq = count_mcq + 1; var options = document.getElementById('id_options' + i).value; var total_words = options.split("\n").length ; - alert(total_words) if ( total_words < 4) empty_options = empty_options + 1 ; } diff --git a/testapp/templates/exam/editquestionpaper.html b/testapp/templates/exam/editquestionpaper.html index ee36cc8..819ff06 100644 --- a/testapp/templates/exam/editquestionpaper.html +++ b/testapp/templates/exam/editquestionpaper.html @@ -15,7 +15,7 @@ <input type="checkbox" name="papers" value="{{ i.id }}"> <a href="{{URL_ROOT}}/exam/manage/addquestion/{{ i.id }}">{{ i.summary}}</a><br> {% endfor %} <br> -<button class="btn" type="submit" name=add value=add>Add Question</button> +<button class="btn" type="submit" name='add' value=add>Add Question</button> <button class="btn" type="submit" onClick="return confirm_delete(frm);" name='delete' value='delete'>Delete Selected</button> </form> {% endblock %} diff --git a/testapp/test_server.py b/testapp/test_server.py index e81daf2..0790816 100644 --- a/testapp/test_server.py +++ b/testapp/test_server.py @@ -35,28 +35,6 @@ def test_python(): language="python") check_result(result, 'nameerror') -def test_c(): - """Test if server runs Python code as expected.""" - src = 'while True: pass' - result = code_server.run_code(src, '', '/tmp', language="c") - check_result(result, 'more than ') - - src = 'x = 1' - result = code_server.run_code(src, 'assert x == 1', '/tmp', - language="c") - check_result(result, 'correct answer') - - result = code_server.run_code(src, 'assert x == 0', '/tmp', - language="c") - check_result(result, 'assertionerror') - - src = 'C lang. Code' - result = code_server.run_code(src, 'assert x == 0', '/tmp', - language="c") - check_result(result, 'nameerror') - - - def test_bash(): """Test if server runs Bash code as expected.""" src = """ diff --git a/testapp/urls.py b/testapp/urls.py index 55bb877..c82ecb6 100644 --- a/testapp/urls.py +++ b/testapp/urls.py @@ -24,5 +24,6 @@ urlpatterns = patterns('', ) urlpatterns += patterns('', - url(r'^taggit_autocomplete_modified/', include('taggit_autocomplete_modified.urls')), + url(r'^taggit_autocomplete_modified/', include\ + ('taggit_autocomplete_modified.urls')), ) |