diff options
-rw-r--r-- | yaksh/file_utils.py | 66 | ||||
-rw-r--r-- | yaksh/models.py | 76 |
2 files changed, 69 insertions, 73 deletions
diff --git a/yaksh/file_utils.py b/yaksh/file_utils.py index 1dc6006..7c31c70 100644 --- a/yaksh/file_utils.py +++ b/yaksh/file_utils.py @@ -3,7 +3,6 @@ import os import zipfile import tempfile import csv -from django.template import Context, Template def copy_files(file_paths): @@ -67,68 +66,3 @@ def is_csv(document): except (csv.Error, UnicodeDecodeError): return False, None return True, dialect - - -def write_static_files_to_zip(zipfile, course_name, current_dir, static_files): - """ Write static files to zip - - Parameters - ---------- - - zipfile : Zipfile object - zip file in which the static files need to be added - - course_name : str - Create a folder with course name - - current_dir: str - Path from which the static files will be taken - - static_files: dict - Dictionary containing static folders as keys and static files as - values - """ - for folder in static_files.keys(): - folder_path = os.sep.join((current_dir, "static", "yaksh", folder)) - for file in static_files[folder]: - file_path = os.sep.join((folder_path, file)) - with open(file_path, "rb") as f: - zipfile.writestr( - os.sep.join((course_name, "static", folder, file)), - f.read() - ) - - -def write_templates_to_zip(zipfile, template_path, data, filename, filepath): - """ Write template files to zip - - Parameters - ---------- - - zipfile : Zipfile object - zip file in which the template files need to be added - - template_path : str - Path from which the template file will be loaded - - data: dict - Dictionary containing context data required for template - - filename: str - Filename with which the template file should be named - - filepath: str - File path in zip where the template will be added - """ - rendered_template = render_template(template_path, data) - zipfile.writestr(os.sep.join((filepath, "{0}.html".format(filename))), - str(rendered_template)) - - -def render_template(template_path, data): - with open(template_path) as f: - template_data = f.read() - template = Template(template_data) - context = Context(data) - render = template.render(context) - return render diff --git a/yaksh/models.py b/yaksh/models.py index 152289f..f8dac8b 100644 --- a/yaksh/models.py +++ b/yaksh/models.py @@ -28,10 +28,8 @@ import zipfile import tempfile from textwrap import dedent from ast import literal_eval -from .file_utils import ( - extract_files, delete_files, write_templates_to_zip, - write_static_files_to_zip -) +from .file_utils import extract_files, delete_files +from django.template import Context, Template from yaksh.code_server import ( submit, get_result as get_result_from_code_server ) @@ -153,6 +151,71 @@ def create_group(group_name, app_label): return group +def write_static_files_to_zip(zipfile, course_name, current_dir, static_files): + """ Write static files to zip + + Parameters + ---------- + + zipfile : Zipfile object + zip file in which the static files need to be added + + course_name : str + Create a folder with course name + + current_dir: str + Path from which the static files will be taken + + static_files: dict + Dictionary containing static folders as keys and static files as + values + """ + for folder in static_files.keys(): + folder_path = os.sep.join((current_dir, "static", "yaksh", folder)) + for file in static_files[folder]: + file_path = os.sep.join((folder_path, file)) + with open(file_path, "rb") as f: + zipfile.writestr( + os.sep.join((course_name, "static", folder, file)), + f.read() + ) + + +def write_templates_to_zip(zipfile, template_path, data, filename, filepath): + """ Write template files to zip + + Parameters + ---------- + + zipfile : Zipfile object + zip file in which the template files need to be added + + template_path : str + Path from which the template file will be loaded + + data: dict + Dictionary containing context data required for template + + filename: str + Filename with which the template file should be named + + filepath: str + File path in zip where the template will be added + """ + rendered_template = render_template(template_path, data) + zipfile.writestr(os.sep.join((filepath, "{0}.html".format(filename))), + str(rendered_template)) + + +def render_template(template_path, data): + with open(template_path) as f: + template_data = f.read() + template = Template(template_data) + context = Context(data) + render = template.render(context) + return render + + ############################################################################### class CourseManager(models.Manager): @@ -1490,8 +1553,8 @@ class QuestionPaper(models.Model): testcases_ids = ",".join([str(tc.id) for tc in testcases] ) if not TestCaseOrder.objects.filter( - answer_paper=ans_paper, question=question - ).exists(): + answer_paper=ans_paper, question=question + ).exists(): TestCaseOrder.objects.create( answer_paper=ans_paper, question=question, order=testcases_ids) @@ -2331,7 +2394,6 @@ class TestCaseOrder(models.Model): # Order of the test case for a question. order = models.TextField() - class Meta: unique_together = ("answer_paper", "question", "order") |