diff options
Diffstat (limited to 'yaksh/models.py')
-rw-r--r-- | yaksh/models.py | 76 |
1 files changed, 69 insertions, 7 deletions
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") |