summaryrefslogtreecommitdiff
path: root/website
diff options
context:
space:
mode:
Diffstat (limited to 'website')
-rw-r--r--website/helpers.py96
-rw-r--r--website/models.py69
-rw-r--r--website/urls.py6
-rw-r--r--website/views.py65
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)