summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--online_test/settings.py16
-rw-r--r--online_test/urls.py4
-rw-r--r--requirements.txt4
-rw-r--r--setup.py4
-rw-r--r--yaksh/forms.py5
-rw-r--r--yaksh/models.py2
-rw-r--r--yaksh/tests.py2
-rw-r--r--yaksh/urls.py114
-rw-r--r--yaksh/views.py10
9 files changed, 85 insertions, 76 deletions
diff --git a/online_test/settings.py b/online_test/settings.py
index 3993744..adc3dc3 100644
--- a/online_test/settings.py
+++ b/online_test/settings.py
@@ -22,7 +22,6 @@ SECRET_KEY = '0=fsi3g5dw*7ze1cyh441_e^5^$2ay@&z(5(n7mhir0xb267=6'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
-TEMPLATE_DEBUG = True
ALLOWED_HOSTS = []
@@ -69,7 +68,6 @@ DATABASES = {
# Internationalization
# https://docs.djangoproject.com/en/1.6/topics/i18n/
-AUTH_PROFILE_MODULE = 'yaksh.Profile'
LANGUAGE_CODE = 'en-us'
@@ -99,4 +97,16 @@ EMAIL_HOST_USER = 'email_host_user'
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
-TEMPLATE_DIRS = ['yaksh/templates',]
+TEMPLATES = [
+ {
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'APP_DIRS': True,
+ 'DIRS': '[yaksh/templates]',
+ 'OPTIONS': {
+ 'context_processors': [
+ 'django.contrib.auth.context_processors.auth',
+ ],
+ 'debug': True,
+ }
+ },
+]
diff --git a/online_test/urls.py b/online_test/urls.py
index 0415511..9c55574 100644
--- a/online_test/urls.py
+++ b/online_test/urls.py
@@ -3,11 +3,11 @@ from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
-urlpatterns = patterns('',
+urlpatterns = [
# Examples:
# url(r'^$', 'online_test.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^exam/', include('yaksh.urls')),
-)
+]
diff --git a/requirements.txt b/requirements.txt
index d4328cc..f717e09 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,3 +1,3 @@
-django==1.6,
+django==1.9.5,
mysql-python==1.2.5,
-django-taggit==0.12.2, \ No newline at end of file
+django-taggit==0.18.1,
diff --git a/setup.py b/setup.py
index bbb9f5a..18d0d23 100644
--- a/setup.py
+++ b/setup.py
@@ -23,9 +23,9 @@ setup(
description='A django app to conduct online tests.',
long_description=README,
install_requires=[
- 'django==1.6',
+ 'django==1.9.5',
'mysql-python==1.2.5',
- 'django-taggit==0.12.2',
+ 'django-taggit==0.18.1',
],
classifiers=[
'Development Status :: 4 - Beta',
diff --git a/yaksh/forms.py b/yaksh/forms.py
index 6ad388f..84cf1c4 100644
--- a/yaksh/forms.py
+++ b/yaksh/forms.py
@@ -136,12 +136,14 @@ class QuizForm(forms.ModelForm):
super(QuizForm, self).__init__(*args, **kwargs)
self.fields['prerequisite'] = forms.ModelChoiceField(
queryset=Quiz.objects.filter(course__creator=user))
+ self.fields['prerequisite'].required = False
self.fields['course'] = forms.ModelChoiceField(
queryset=Course.objects.filter(creator=user))
class Meta:
model = Quiz
+ fields = '__all__'
class QuestionForm(forms.ModelForm):
@@ -150,6 +152,7 @@ class QuestionForm(forms.ModelForm):
class Meta:
model = Question
+ fields = '__all__'
class RandomQuestionForm(forms.Form):
@@ -176,7 +179,7 @@ class QuestionFilterForm(forms.Form):
(choices=question_types))
-TestCaseFormSet = inlineformset_factory(Question, TestCase,\
+TestCaseFormSet = inlineformset_factory(Question, TestCase, fields='__all__',
can_order=False, can_delete=False, extra=1)
diff --git a/yaksh/models.py b/yaksh/models.py
index 856698f..9b92791 100644
--- a/yaksh/models.py
+++ b/yaksh/models.py
@@ -70,7 +70,7 @@ class Course(models.Model):
students = models.ManyToManyField(User, related_name='students')
requests = models.ManyToManyField(User, related_name='requests')
rejected = models.ManyToManyField(User, related_name='rejected')
- created_on = models.DateTimeField(default=datetime.now())
+ created_on = models.DateTimeField(auto_now_add=True)
def request(self, *users):
self.requests.add(*users)
diff --git a/yaksh/tests.py b/yaksh/tests.py
index d8e108a..d6d1d91 100644
--- a/yaksh/tests.py
+++ b/yaksh/tests.py
@@ -1,4 +1,4 @@
-from django.utils import unittest
+import unittest
from yaksh.models import User, Profile, Question, Quiz, QuestionPaper,\
QuestionSet, AnswerPaper, Answer, TestCase, Course
import json
diff --git a/yaksh/urls.py b/yaksh/urls.py
index 3a75947..b2f894f 100644
--- a/yaksh/urls.py
+++ b/yaksh/urls.py
@@ -1,75 +1,77 @@
from django.conf.urls import patterns, url
+from yaksh import views
+from django.contrib.auth.views import password_reset, password_reset_confirm,\
+ password_reset_done, password_reset_complete
-urlpatterns = patterns('django.contrib.auth.views',
- url(r'^forgotpassword/$', 'password_reset', name="password_reset"),
+urlpatterns = [
+ url(r'^forgotpassword/$', password_reset, name="password_reset"),
url(r'^password_reset/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$',
- 'password_reset_confirm', name='password_reset_confirm'),
- url(r'^password_reset/mail_sent/$', 'password_reset_done',
+ password_reset_confirm, name='password_reset_confirm'),
+ url(r'^password_reset/mail_sent/$', password_reset_done,
name='password_reset_done'),
- url(r'^password_reset/complete/$', 'password_reset_complete',
+ url(r'^password_reset/complete/$', password_reset_complete,
name='password_reset_complete'),
-)
-urlpatterns += patterns('yaksh.views',
- url(r'^$', 'index'),
- url(r'^login/$', 'user_login'),
- url(r'^quizzes/$', 'quizlist_user'),
- url(r'^results/$', 'results_user'),
- url(r'^start/$', 'start'),
- url(r'^start/(?P<questionpaper_id>\d+)/$', 'start'),
- url(r'^start/(?P<attempt_num>\d+)/(?P<questionpaper_id>\d+)/$', 'start'),
- url(r'^quit/(?P<attempt_num>\d+)/(?P<questionpaper_id>\d+)/$', 'quit'),
- url(r'^complete/$', 'complete'),
+]
+urlpatterns += [
+ url(r'^$', views.index),
+ url(r'^login/$', views.user_login),
+ url(r'^quizzes/$', views.quizlist_user),
+ url(r'^results/$', views.results_user),
+ url(r'^start/$', views.start),
+ url(r'^start/(?P<questionpaper_id>\d+)/$', views.start),
+ url(r'^start/(?P<attempt_num>\d+)/(?P<questionpaper_id>\d+)/$', views.start),
+ url(r'^quit/(?P<attempt_num>\d+)/(?P<questionpaper_id>\d+)/$', views.quit),
+ url(r'^complete/$', views.complete),
url(r'^complete/(?P<attempt_num>\d+)/(?P<questionpaper_id>\d+)/$',\
- 'complete'),
- url(r'^register/$', 'user_register'),
- url(r'^(?P<q_id>\d+)/check/$', 'check'),
+ views.complete),
+ url(r'^register/$', views.user_register),
+ url(r'^(?P<q_id>\d+)/check/$', views.check),
url(r'^(?P<q_id>\d+)/check/(?P<attempt_num>\d+)/(?P<questionpaper_id>\d+)/$',\
- 'check'),
+ views.check),
url(r'^(?P<q_id>\d+)/skip/(?P<attempt_num>\d+)/(?P<questionpaper_id>\d+)/$',
- 'skip'),
+ views.skip),
url(r'^(?P<q_id>\d+)/skip/(?P<next_q>\d+)/(?P<attempt_num>\d+)/(?P<questionpaper_id>\d+)/$',
- 'skip'),
- url(r'^enroll_request/(?P<course_id>\d+)/$', 'enroll_request'),
- url(r'^self_enroll/(?P<course_id>\d+)/$', 'self_enroll'),
+ views.skip),
+ url(r'^enroll_request/(?P<course_id>\d+)/$', views.enroll_request),
+ url(r'^self_enroll/(?P<course_id>\d+)/$', views.self_enroll),
- url(r'^manage/$', 'prof_manage'),
- url(r'^manage/addquestion/$', 'add_question'),
- url(r'^manage/addquestion/(?P<question_id>\d+)/$', 'add_question'),
- url(r'^manage/addquiz/$', 'add_quiz'),
- url(r'^manage/addquiz/(?P<quiz_id>\d+)/$', 'add_quiz'),
- url(r'^manage/gradeuser/$', 'show_all_users'),
+ url(r'^manage/$', views.prof_manage),
+ url(r'^manage/addquestion/$', views.add_question),
+ url(r'^manage/addquestion/(?P<question_id>\d+)/$', views.add_question),
+ url(r'^manage/addquiz/$', views.add_quiz),
+ url(r'^manage/addquiz/(?P<quiz_id>\d+)/$', views.add_quiz),
+ url(r'^manage/gradeuser/$', views.show_all_users),
url(r'^manage/gradeuser/(?P<username>.*)/(?P<questionpaper_id>\d+)/$',
- 'grade_user'),
- url(r'^manage/gradeuser/(?P<username>.*)/$', 'grade_user'),
- url(r'^manage/questions/$', 'show_all_questions'),
- url(r'^manage/monitor/$', 'monitor'),
- url(r'^manage/showquestionpapers/$', 'show_all_questionpapers'),
+ views.grade_user),
+ url(r'^manage/gradeuser/(?P<username>.*)/$', views.grade_user),
+ url(r'^manage/questions/$', views.show_all_questions),
+ url(r'^manage/monitor/$', views.monitor),
+ url(r'^manage/showquestionpapers/$', views.show_all_questionpapers),
url(r'^manage/showquestionpapers/(?P<questionpaper_id>\d+)/$',\
- 'show_all_questionpapers'),
- url(r'^manage/monitor/(?P<questionpaper_id>\d+)/$', 'monitor'),
+ views.show_all_questionpapers),
+ url(r'^manage/monitor/(?P<questionpaper_id>\d+)/$', views.monitor),
url(r'^manage/user_data/(?P<username>.*)/(?P<questionpaper_id>\d+)/$',
- 'user_data'),
- url(r'^manage/user_data/(?P<username>.*)/$', 'user_data'),
- url(r'^manage/designquestionpaper/$', 'design_questionpaper'),
+ views.user_data),
+ url(r'^manage/user_data/(?P<username>.*)/$', views.user_data),
+ url(r'^manage/designquestionpaper/$', views.design_questionpaper),
url(r'^manage/designquestionpaper/(?P<questionpaper_id>\d+)/$',\
- 'design_questionpaper'),
+ views.design_questionpaper),
url(r'^manage/statistics/question/(?P<questionpaper_id>\d+)/$',
- 'show_statistics'),
+ views.show_statistics),
url(r'^manage/statistics/question/(?P<questionpaper_id>\d+)/(?P<attempt_number>\d+)/$',
- 'show_statistics'),
+ views.show_statistics),
url(r'^manage/monitor/download_csv/(?P<questionpaper_id>\d+)/$',
- 'download_csv'),
- url(r'manage/courses/$', 'courses'),
- url(r'manage/add_course/$', 'add_course'),
- url(r'manage/course_detail/(?P<course_id>\d+)/$', 'course_detail'),
- url(r'manage/enroll/(?P<course_id>\d+)/(?P<user_id>\d+)/$', 'enroll'),
+ views.download_csv),
+ url(r'manage/courses/$', views.courses),
+ url(r'manage/add_course/$', views.add_course),
+ url(r'manage/course_detail/(?P<course_id>\d+)/$', views.course_detail),
+ url(r'manage/enroll/(?P<course_id>\d+)/(?P<user_id>\d+)/$', views.enroll),
url(r'manage/enroll/rejected/(?P<course_id>\d+)/(?P<user_id>\d+)/$',
- 'enroll', {'was_rejected': True}),
- url(r'manage/reject/(?P<course_id>\d+)/(?P<user_id>\d+)/$', 'reject'),
+ views.enroll, {'was_rejected': True}),
+ url(r'manage/reject/(?P<course_id>\d+)/(?P<user_id>\d+)/$', views.reject),
url(r'manage/enrolled/reject/(?P<course_id>\d+)/(?P<user_id>\d+)/$',
- 'reject', {'was_enrolled': True}),
- url(r'manage/toggle_status/(?P<course_id>\d+)/$', 'toggle_course_status'),
- url(r'^ajax/questionpaper/(?P<query>.+)/$', 'ajax_questionpaper'),
- url(r'^ajax/questions/filter/$', 'ajax_questions_filter'),
-
-)
+ views.reject, {'was_enrolled': True}),
+ url(r'manage/toggle_status/(?P<course_id>\d+)/$', views.toggle_course_status),
+ url(r'^ajax/questionpaper/(?P<query>.+)/$', views.ajax_questionpaper),
+ url(r'^ajax/questions/filter/$', views.ajax_questions_filter),
+]
diff --git a/yaksh/views.py b/yaksh/views.py
index c65fb26..8b0a131 100644
--- a/yaksh/views.py
+++ b/yaksh/views.py
@@ -359,9 +359,7 @@ def start(request, questionpaper_id=None, attempt_num=None):
context_instance=ci)
else:
ip = request.META['REMOTE_ADDR']
- try:
- profile = user.get_profile()
- except Profile.DoesNotExist:
+ if not hasattr(user, 'profile'):
msg = 'You do not have a profile and cannot take the quiz!'
raise Http404(msg)
new_paper = quest_paper.make_answerpaper(user, ip, attempt_num)
@@ -724,11 +722,7 @@ def get_user_data(username, questionpaper_id=None):
'-attempt_number')
data = {}
- try:
- profile = user.get_profile()
- except Profile.DoesNotExist:
- # Admin user may have a paper by accident but no profile.
- profile = None
+ profile = user.profile if hasattr(user, 'profile') else None
data['user'] = user
data['profile'] = profile
data['papers'] = papers