diff options
author | ankitjavalkar | 2015-09-14 12:28:41 +0530 |
---|---|---|
committer | ankitjavalkar | 2015-09-15 11:33:59 +0530 |
commit | 7a60f782995eed0352f3172f445bb35ae8ee6aa9 (patch) | |
tree | 91d6d12b0a494dd9777fd1120e92db5763bf009a /yaksh/management/commands/load_exam.py | |
parent | 32cde26f9807a29eb1fae0833e353212d43d7802 (diff) | |
download | online_test-7a60f782995eed0352f3172f445bb35ae8ee6aa9.tar.gz online_test-7a60f782995eed0352f3172f445bb35ae8ee6aa9.tar.bz2 online_test-7a60f782995eed0352f3172f445bb35ae8ee6aa9.zip |
Remove testapp dir, remove reference to testapp in paths, files
Diffstat (limited to 'yaksh/management/commands/load_exam.py')
-rw-r--r-- | yaksh/management/commands/load_exam.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/yaksh/management/commands/load_exam.py b/yaksh/management/commands/load_exam.py new file mode 100644 index 0000000..b354fbd --- /dev/null +++ b/yaksh/management/commands/load_exam.py @@ -0,0 +1,57 @@ +# System library imports. +from os.path import basename + +# Django imports. +from django.core.management.base import BaseCommand + +# Local imports. +from yaksh.models import Question, Quiz + +def clear_exam(): + """Deactivate all questions from the database.""" + for question in Question.objects.all(): + question.active = False + question.save() + + # Deactivate old quizzes. + for quiz in Quiz.objects.all(): + quiz.active = False + quiz.save() + +def load_exam(filename): + """Load questions and quiz from the given Python file. The Python file + should declare a list of name "questions" which define all the questions + in pure Python. It can optionally load a Quiz from an optional 'quiz' + object. + """ + # Simply exec the given file and we are done. + exec(open(filename).read()) + + if 'questions' not in locals(): + msg = 'No variable named "questions" with the Questions in file.' + raise NameError(msg) + + for question in questions: + question[0].save() + for tag in question[1]: + question[0].tags.add(tag) + + if 'quiz' in locals(): + quiz.save() + +class Command(BaseCommand): + args = '<q_file1.py q_file2.py>' + help = '''loads the questions from given Python files which declare the + questions in a list called "questions".''' + + def handle(self, *args, **options): + """Handle the command.""" + # Delete existing stuff. + clear_exam() + + # Load from files. + for fname in args: + self.stdout.write('Importing from {0} ... '.format(basename(fname))) + load_exam(fname) + self.stdout.write('Done\n') + |