diff options
author | Prabhu Ramachandran | 2011-11-19 00:26:03 +0530 |
---|---|---|
committer | Prabhu Ramachandran | 2011-11-19 00:26:03 +0530 |
commit | 7e370f3017572fb202d48a9ca884bfd7d3880d63 (patch) | |
tree | b86ee5cabab34fa3454689722998e510648f919d /exam | |
parent | f2c80147ff9e62d098b37355d211fe9cc04f60ca (diff) | |
download | online_test-7e370f3017572fb202d48a9ca884bfd7d3880d63.tar.gz online_test-7e370f3017572fb202d48a9ca884bfd7d3880d63.tar.bz2 online_test-7e370f3017572fb202d48a9ca884bfd7d3880d63.zip |
Adding load_questions to load from Python code.
This lets us load questions using Python syntax which is rather
convenient.
Diffstat (limited to 'exam')
-rw-r--r-- | exam/management/commands/load_questions.py | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/exam/management/commands/load_questions.py b/exam/management/commands/load_questions.py new file mode 100644 index 0000000..3906056 --- /dev/null +++ b/exam/management/commands/load_questions.py @@ -0,0 +1,45 @@ +# System library imports. +from os.path import basename + +# Django imports. +from django.core.management.base import BaseCommand + +# Local imports. +from exam.models import Question + +def clear_questions(): + """Delete all questions from the database.""" + for question in Question.objects.all(): + question.delete() + +def load_questions(filename): + """Load questions from the given Python file. The Python file should + declare a list of name "questions" which define all the questions in pure + Python. + """ + # 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.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_questions() + + # Load from files. + for fname in args: + self.stdout.write('Importing from {0} ... '.format(basename(fname))) + load_questions(fname) + self.stdout.write('Done\n') + |