summaryrefslogtreecommitdiff
path: root/exam
diff options
context:
space:
mode:
authorPrabhu Ramachandran2011-11-19 00:26:03 +0530
committerPrabhu Ramachandran2011-11-19 00:26:03 +0530
commit7e370f3017572fb202d48a9ca884bfd7d3880d63 (patch)
treeb86ee5cabab34fa3454689722998e510648f919d /exam
parentf2c80147ff9e62d098b37355d211fe9cc04f60ca (diff)
downloadonline_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.py45
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')
+