diff options
Diffstat (limited to 'website')
-rw-r--r-- | website/helpers.py | 96 | ||||
-rw-r--r-- | website/models.py | 69 | ||||
-rw-r--r-- | website/urls.py | 6 | ||||
-rw-r--r-- | website/views.py | 65 |
4 files changed, 234 insertions, 2 deletions
diff --git a/website/helpers.py b/website/helpers.py new file mode 100644 index 0000000..651a886 --- /dev/null +++ b/website/helpers.py @@ -0,0 +1,96 @@ +import os +import re +import time +import subprocess + +from soc.settings import PROJECT_DIR + +def scilab_run(code, token): + plot_exists = False + #Finding the plot and appending xs2jpg function + p = re.compile(r'.*plot.*\(.*,.*,*\).*\n') + if p.search(code): + plot_exists = True + code = code + '\n' + temp = code + code = '' + start, end, count = 0, 0, 0 + current_time = time.time() + plot_path = [] + for (count, match) in enumerate(p.finditer(temp)): + print "count==================",count + plot_path.append( + PROJECT_DIR + '/static/tmp/{0}.jpg'.format(int(current_time) + count) + ) + end = match.end() + code += temp[start:end] + code += 'xs2jpg(gcf(), "{0}");\n'.format(plot_path[-1]) + start = end + code += temp[end:] + + # Create a file for the current request + canvas_off = """ + function turnCanvasOff() + m = getscilabmode(); + if (m=="STD"|m=="NW") then + previousDisp = disp; + prot = funcprot(); + funcprot(0); + deff("disp(str)", ""); + usecanvas(%f); + disp = previousDisp; + funcprot(prot); + end + endfunction + turnCanvasOff(); + clear turnCanvasOff; + """ + + file_path = PROJECT_DIR + '/static/tmp/' + token + '.sci' + + f = open(file_path, "w") + f.write("mode(-1);\nlines(0);\nmode(-1);\ntry\nmode(2);\n") + f.write('lines(0)\n') + f.write(canvas_off) + f.write(code) + f.write('\nexit') + f.write("\nmode(-1);\nexit();\ncatch\nmode(-1);\ndisp(lasterror());\nexit();") + f.close() + + if plot_exists: + cmd = 'export DISPLAY=:99 && ' + cmd += 'xvfb-run -a cat {0}'.format(file_path) + ' | scilab-adv-cli -nw -nb' + print "############################" + print cmd + else: + cmd = 'cat {0}'.format(file_path) + ' | scilab-adv-cli -nw' + + output = subprocess.Popen( + cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True + ).communicate()[0] + #os.remove(file_path) + output = trim(output) + return output + +def trim(output): + atoms_banner = """ + Start Image Processing Tool 2 + Load macros + Load help + + SIVP - Scilab Image and Video Processing Toolbox + Load macros + Load gateways + Load help + Load demos + + + + Start identification + + Load macros + + Load help + """ + output = output.replace(atoms_banner, '') + return output diff --git a/website/models.py b/website/models.py index 71a8362..76d07b7 100644 --- a/website/models.py +++ b/website/models.py @@ -1,3 +1,70 @@ from django.db import models -# Create your models here. + +""" +Models from Scilab Database created using inspectdb +Use it with the "scilab" database eg:using("scilab") +These models are used only for django orm reference. +""" +class TextbookCompanionPreference(models.Model): + id = models.IntegerField(unique=True, primary_key=True) + proposal_id = models.IntegerField() + pref_number = models.IntegerField() + book = models.CharField(max_length=100L) + author = models.CharField(max_length=100L) + isbn = models.CharField(max_length=25L) + publisher = models.CharField(max_length=50L) + edition = models.CharField(max_length=2L) + year = models.IntegerField() + category = models.IntegerField() + approval_status = models.IntegerField() + cloud_pref_err_status = models.IntegerField() + class Meta: + db_table = 'textbook_companion_preference' + +class TextbookCompanionProposal(models.Model): + id = models.IntegerField(unique=True, primary_key=True) + uid = models.IntegerField() + approver_uid = models.IntegerField() + full_name = models.CharField(max_length=50L) + mobile = models.CharField(max_length=15L) + gender = models.CharField(max_length=10L) + how_project = models.CharField(max_length=50L) + course = models.CharField(max_length=50L) + branch = models.CharField(max_length=50L) + university = models.CharField(max_length=100L) + faculty = models.CharField(max_length=100L) + reviewer = models.CharField(max_length=100L) + completion_date = models.IntegerField() + creation_date = models.IntegerField() + approval_date = models.IntegerField() + proposal_status = models.IntegerField() + message = models.TextField() + scilab_version = models.CharField(max_length=20L) + operating_system = models.CharField(max_length=20L) + teacher_email = models.CharField(max_length=20L) + class Meta: + db_table = 'textbook_companion_proposal' + +class TextbookCompanionChapter(models.Model): + id = models.IntegerField(primary_key=True) + preference_id = models.IntegerField() + number = models.IntegerField() + name = models.CharField(max_length=255L) + cloud_chapter_err_status = models.CharField(max_length=255L) + class Meta: + db_table = 'textbook_companion_chapter' + +class TextbookCompanionExample(models.Model): + id = models.IntegerField(primary_key=True) + chapter_id = models.IntegerField() + approver_uid = models.IntegerField() + number = models.CharField(max_length=10L) + caption = models.CharField(max_length=255L) + approval_date = models.IntegerField() + approval_status = models.IntegerField() + timestamp = models.IntegerField() + cloud_err_status = models.IntegerField() + class Meta: + db_table = 'textbook_companion_example' + diff --git a/website/urls.py b/website/urls.py index f9140f8..8f6b630 100644 --- a/website/urls.py +++ b/website/urls.py @@ -2,4 +2,10 @@ from django.conf.urls import patterns, include, url urlpatterns = patterns('', url(r'^$', 'website.views.index', name='index'), + + # Ajax urls + url(r'^ajax-books/$', 'website.views.ajax_books', name='ajax_books'), + url(r'^ajax-chapters/$', 'website.views.ajax_chapters', name='ajax_chapters'), + url(r'^ajax-examples/$', 'website.views.ajax_examples', name='ajax_examples'), + url(r'^ajax-execute/$', 'website.views.ajax_execute', name='ajax_execute'), ) diff --git a/website/views.py b/website/views.py index bede851..a26ae91 100644 --- a/website/views.py +++ b/website/views.py @@ -1,5 +1,68 @@ from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render +from django.core.context_processors import csrf +from django.views.decorators.csrf import csrf_exempt, csrf_protect +from django.db.models import Q + +from website.helpers import scilab_run +from website.models import TextbookCompanionPreference,\ + TextbookCompanionProposal, TextbookCompanionChapter,\ + TextbookCompanionExample def index(request): - return render(request, 'website/templates/index.html') + context = {} + context.update(csrf(request)) + return render(request, 'website/templates/index.html', context) + +@csrf_exempt +def ajax_books(request): + context = {} + if request.method == 'POST': + category_id = request.POST['category_id'] + if category_id: + ids = TextbookCompanionProposal.objects.using('scilab')\ + .filter(proposal_status=3).values('id') + + books = TextbookCompanionPreference.objects.using('scilab')\ + .filter(category=category_id).filter(approval_status=1)\ + .filter(proposal_id__in=ids).order_by('book') + + context = { + 'books': books + } + return render(request, 'website/templates/ajax-books.html', context) + +@csrf_exempt +def ajax_chapters(request): + context = {} + if request.method == "POST": + book_id = request.POST['book_id'] + if book_id: + chapters = TextbookCompanionChapter.objects.using('scilab')\ + .filter(preference_id=book_id).order_by('number') + + context = { + 'chapters': chapters + } + return render(request, 'website/templates/ajax-chapters.html', context) + +@csrf_exempt +def ajax_examples(request): + context = {} + if request.method == "POST": + chapter_id = request.POST['chapter_id'] + if chapter_id: + examples = TextbookCompanionExample.objects.using('scilab')\ + .filter(chapter_id=chapter_id).order_by('number') + + context = { + 'examples': examples + } + return render(request, 'website/templates/ajax-examples.html', context) + +def ajax_execute(request): + if request.method == "POST": + code = request.POST['code'] + token = request.POST['csrfmiddlewaretoken'] + result = scilab_run(code, token) + return HttpResponse(result) |