From e263244c70e8c5db0bc89bfee84ce37fe8e40d16 Mon Sep 17 00:00:00 2001 From: Prabhu Ramachandran Date: Sat, 19 Nov 2011 16:08:05 +0530 Subject: Changed load_questions to load_exam Added option to define quizzes in the file we load from. Also fixed bug in import for the xmlrpc_clients.py and changed the verbose name for Quiz objects. --- exam/management/commands/load_exam.py | 52 ++++++++++++++++++++++++++++++ exam/management/commands/load_questions.py | 45 -------------------------- exam/models.py | 3 ++ exam/xmlrpc_clients.py | 2 +- 4 files changed, 56 insertions(+), 46 deletions(-) create mode 100644 exam/management/commands/load_exam.py delete mode 100644 exam/management/commands/load_questions.py (limited to 'exam') diff --git a/exam/management/commands/load_exam.py b/exam/management/commands/load_exam.py new file mode 100644 index 0000000..5b8aa81 --- /dev/null +++ b/exam/management/commands/load_exam.py @@ -0,0 +1,52 @@ +# System library imports. +from os.path import basename + +# Django imports. +from django.core.management.base import BaseCommand + +# Local imports. +from exam.models import Question, Quiz + +def clear_exam(): + """Delete all questions from the database.""" + for question in Question.objects.all(): + question.delete() + + for quiz in Quiz.objects.all(): + quiz.delete() + +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.save() + + if 'quiz' in locals(): + quiz.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_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') + diff --git a/exam/management/commands/load_questions.py b/exam/management/commands/load_questions.py deleted file mode 100644 index 3906056..0000000 --- a/exam/management/commands/load_questions.py +++ /dev/null @@ -1,45 +0,0 @@ -# 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') - diff --git a/exam/models.py b/exam/models.py index ea60f17..8fe803d 100644 --- a/exam/models.py +++ b/exam/models.py @@ -62,6 +62,9 @@ class Quiz(models.Model): # Description of quiz. description = models.CharField(max_length=256) + class Meta: + verbose_name_plural = "Quizzes" + def __unicode__(self): desc = self.description or 'Quiz' return '%s: on %s for %d minutes'%(desc, self.start_date, self.duration) diff --git a/exam/xmlrpc_clients.py b/exam/xmlrpc_clients.py index be2f8b1..5dc51c6 100644 --- a/exam/xmlrpc_clients.py +++ b/exam/xmlrpc_clients.py @@ -1,5 +1,5 @@ from xmlrpclib import ServerProxy -from ..settings import SERVER_PORT +from settings import SERVER_PORT # Connect to the python server. python_server = ServerProxy('http://localhost:%d'%(SERVER_PORT)) -- cgit