Commit 8bd93373 authored by NARRA SURAJ's avatar NARRA SURAJ

ranking done

parent 6d27c864
...@@ -30,10 +30,18 @@ VISIBILITY_CHOICES= ('1980', '1981', '1982') ...@@ -30,10 +30,18 @@ VISIBILITY_CHOICES= ('1980', '1981', '1982')
class TestForm(forms.ModelForm): class TestForm(forms.ModelForm):
# start_time = forms.DateTimeField(input_formats=['%Y-%m-%dT%H:%M'])
# expected_time_for_completion = forms.DurationField(input_formats=['%HH:%M'])
class Meta: class Meta:
model = Test model = Test
widgets = { widgets = {
'expected_time_for_completion': forms.TimeInput(attrs={'type':'time'}), # 'expected_time_for_completion': forms.TimeInput(attrs={'type':'time'}),
'start_time': forms.DateInput(attrs={'type':'datetime-local'}), # 'start_time': forms.DateInput(attrs={'type':'datetime-local'}),
} }
exclude = ['test_ID', 'ownership'] exclude = ['test_ID', 'ownership']
\ No newline at end of file # def clean_start_time(self):
# dt = self.cleaned_data['start_time']
# print dt
# return dt['start_time'][0].replace('T', ' ') #remove the 'T' in HTML returned string
\ No newline at end of file
This diff is collapsed.
from background_task import background
from django.contrib.auth.models import User
from . import models
from django.db.models import F
#https://django-background-tasks.readthedocs.io/en/latest/#creating-and-registering-tasks
@background(schedule=60)
def testRanks(test_ID):
#get all Takes objects with this test_ID
print "testRanks called ! \n\n\n\n\n\n"
takesObjects = models.Takes.objects.filter(test_ID=test_ID).order_by(F('total_marks').desc())
num = len(takesObjects)
i=0
oldMarks = -10000
for t in takesObjects:
if t.total_marks != oldMarks:
i = i+1
oldMarks = t.total_marks
t.rank = i
print t.student_id
print t.rank
try:
print "saving"
t.save()
except:
print "some error"
# try:
# takesObjects.update()
# except:
# print "some error"
@background(schedule=60)
def testTask():
print "test task"
\ No newline at end of file
...@@ -21,7 +21,7 @@ My Tests ...@@ -21,7 +21,7 @@ My Tests
<p>{{t.test_name}}</p> <p>{{t.test_name}}</p>
</div> </div>
<div style="float:right"> <div style="float:right">
<form method="POST" action="arfa/loadStudentTest"> <form method="POST" action="loadStudentTest">
{% csrf_token %} {% csrf_token %}
<input name="testID" value="{{t.test_ID}}" type="hidden"> <input name="testID" value="{{t.test_ID}}" type="hidden">
<button >Load Test</button> <button >Load Test</button>
......
...@@ -26,6 +26,6 @@ urlpatterns=[ ...@@ -26,6 +26,6 @@ urlpatterns=[
url(r'^register',views.register), url(r'^register',views.register),
url(r'^reg',views.reg), url(r'^reg',views.reg),
url(r'^studentTestHome', views.studentTestHome), url(r'^studentTestHome', views.studentTestHome),
url(r'^loadStudentTest', views.loadStudentTest) url(r'^loadStudentTest', views.loadStudentTest),
] ]
...@@ -14,6 +14,8 @@ from .models import Evaluation ...@@ -14,6 +14,8 @@ from .models import Evaluation
from . import utilities from . import utilities
from .utilities import evaluate from .utilities import evaluate
from . import forms from . import forms
from . import tasks
from django.http import QueryDict
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.http import HttpResponse from django.http import HttpResponse
...@@ -241,6 +243,10 @@ def studentTestHome(request): ...@@ -241,6 +243,10 @@ def studentTestHome(request):
data['practiceTests'] = [] data['practiceTests'] = []
for t in practiceTests: for t in practiceTests:
# debug
# print t.test_ID
# print datetime.datetime.now() - t.start_time - t.expected_time_for_completion
# debug
data['practiceTests'].append({'test_ID':t.test_ID, 'test_name':t.test_name, data['practiceTests'].append({'test_ID':t.test_ID, 'test_name':t.test_name,
'marks':t.max_marks, 'start_time':t.start_time}) 'marks':t.max_marks, 'start_time':t.start_time})
print data print data
...@@ -363,7 +369,7 @@ def view_personal_question(request): ...@@ -363,7 +369,7 @@ def view_personal_question(request):
if(request.session.get('role',None)!="faculty"): if(request.session.get('role',None)!="faculty"):
return render(request,'ARFA_app/not_a_faculty.html',request.session.get('args',None)) return render(request,'ARFA_app/not_a_faculty.html',request.session.get('args',None))
args={'username':request.session['username']} args={'username':request.session['username'], 'is_session':True}
cursor = connection.cursor() cursor = connection.cursor()
cursor.execute(''' SELECT s.subject,q."q_ID" as q_ID,q.question_text,q.topic,q.subtopic,q.source, cursor.execute(''' SELECT s.subject,q."q_ID" as q_ID,q.question_text,q.topic,q.subtopic,q.source,
q.difficulty_set,q.image_link,q.visibility,q.ownership,o."option_Value" as option_details, q.difficulty_set,q.image_link,q.visibility,q.ownership,o."option_Value" as option_details,
...@@ -419,6 +425,75 @@ def view_all_question(request): ...@@ -419,6 +425,75 @@ def view_all_question(request):
return render(request,'ARFA_app/view_all_question.html',args) return render(request,'ARFA_app/view_all_question.html',args)
# def create_Test(request):
# if(request.session.get('session',None)!=True):
# return render(request,'ARFA_app/login.html')
# if(request.session.get('role',None)!="faculty"):
# return render(request,'ARFA_app/not_a_faculty.html')
# res = utilities.get_all_questions(request)
# test = None
# form = forms.TestForm()
# args={'username':request.session['username'],'questions':res, 'TestForm':TestForm,
# 'is_session':True}
# if request.method == "GET":
# return render(request,'ARFA_app/create_Test.html',args)
# if request.method == "POST":
# form = TestForm(request.POST)
# data = dict(request.POST.copy()) #copy to make QueryDict mutable. HttpResponse is immutable
# data.pop('csrfmiddlewaretoken')
# if not data: #only csrf token was sent, display create test page
# return render(request,'ARFA_app/create_Test.html',args)
# print vars(form)
# #TODO: validation - starttime < now
# if form.is_valid():
# test = form.save()
# creator = models.Created_BY(test_ID=test,faculty=models.Faculty.objects.filter(username=request.session['username']).get())
# creator.save()
# else:
# if form.errors:
# for field in form:
# print field.errors
# return HttpResponse("Test Form Invalid")
# for attr in dir(Test):
# # print attr
# try:
# data.pop(attr)
# except KeyError as e:
# pass
# containsObj = models.Contains(test_ID=test)
# # print data
# for q in data.keys():
# if len(data[q]) != 3:
# continue
# try:
# int(q)
# containsObj.q_ID_id = q
# #data[q] is an array ['True', 'pos_marks', 'neg_marks']
# containsObj.marks_pos = data[q][1]
# containsObj.marks_neg = data[q][2]
# containsObj.pk = None
# containsObj.save()
# print "success"
# print containsObj
# except ValueError as e:
# data.pop(q)
# print e
# continue
# #schedule ranking function when test is finished
# tasks.testRanks(test.test_ID, test.start_time+test.expected_time_for_completion)
# return render(request,'ARFA_app/view_personal_Test.html',args)
def create_Test(request): def create_Test(request):
if(request.session.get('session',None)!=True): if(request.session.get('session',None)!=True):
return render(request,'ARFA_app/login.html') return render(request,'ARFA_app/login.html')
...@@ -434,12 +509,33 @@ def create_Test(request): ...@@ -434,12 +509,33 @@ def create_Test(request):
if request.method == "GET": if request.method == "GET":
return render(request,'ARFA_app/create_Test.html',args) return render(request,'ARFA_app/create_Test.html',args)
if request.method == "POST": if request.method == "POST":
form = TestForm(request.POST) # form = TestForm(request.POST)
data = dict(request.POST.copy()) #copy to make QueryDict mutable. HttpResponse is immutable data = dict(request.POST.copy()) #copy to make QueryDict mutable. HttpResponse is immutable
data.pop('csrfmiddlewaretoken') data.pop('csrfmiddlewaretoken')
if not data: #only csrf token was sent, display create test page if not data: #only csrf token was sent, display create test page
return render(request,'ARFA_app/create_Test.html',args) return render(request,'ARFA_app/create_Test.html',args)
print vars(form) print data
# """dirty workaround"""
# #the data in request.POST must be modified to be valid in the form
# data['start_time'] = data['start_time'][0].replace('T', ' ') #remove the 'T' in HTML returned string
# data['expected_time_for_completion'] = data['expected_time_for_completion'][0]+":00"
# #add seconds to duration string
# data['max_marks'] = int(data['max_marks'][0]) #convert max_marks from string to int
# #if these are not in these exact formats everything may break.
# #see form cleanup for a potentially better solution
# qdict = QueryDict("", mutable=True)
# qdict.update(data)
form = forms.TestForm(request.POST)
# form2 = forms.TestForm(request.POST)
# print "form2:"
# print vars(form2)
# print "\n\n\n"
print "start time"
print form
print vars(form)
if form.is_valid(): if form.is_valid():
test = form.save() test = form.save()
...@@ -482,12 +578,23 @@ def create_Test(request): ...@@ -482,12 +578,23 @@ def create_Test(request):
print e print e
continue continue
return render(request,'ARFA_app/view_personal_Test.html',args) #schedule ranking function when test is finished
print type(test.start_time)
print type(test.expected_time_for_completion)
tasks.testRanks(test.test_ID, schedule=(test.start_time+test.expected_time_for_completion))
print test.start_time+test.expected_time_for_completion
print "testRanks being called\n\n\n\n"
return view_personal_Test(request)
def view_all_Test(request): def view_all_Test(request):
args={'username':request.session['username']} if(request.session.get('session',None)!=True):
return render(request,'ARFA_app/view_all_Test.html',args) return render(request,'ARFA_app/login.html')
if(request.session.get('role',None)!="faculty"):
return render(request,'ARFA_app/not_a_faculty.html',request.session.get('args',None))
if request.method == 'POST':
args={'username':request.session['username'], 'is_session':True}
return render(request,'ARFA_app/view_all_Test.html',args)
...@@ -548,7 +655,7 @@ def view_personal_Test(request): ...@@ -548,7 +655,7 @@ def view_personal_Test(request):
res = [] res = []
for val in rows: for val in rows:
res.append(dict(zip(columns,val))) res.append(dict(zip(columns,val)))
args={'username':request.session['username'],'tests':res} args={'username':request.session['username'],'tests':res, 'is_session':True}
return render(request,'ARFA_app/view_personal_Test.html',args) return render(request,'ARFA_app/view_personal_Test.html',args)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment