From 7e370f3017572fb202d48a9ca884bfd7d3880d63 Mon Sep 17 00:00:00 2001 From: Prabhu Ramachandran Date: Sat, 19 Nov 2011 00:26:03 +0530 Subject: Adding load_questions to load from Python code. This lets us load questions using Python syntax which is rather convenient. --- exam/management/commands/load_questions.py | 45 ++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 exam/management/commands/load_questions.py (limited to 'exam/management/commands/load_questions.py') 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 = '' + 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') + -- cgit