diff options
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | bootstrap.py | 77 | ||||
-rw-r--r-- | buildout.cfg | 20 | ||||
-rwxr-xr-x | manage.py | 10 | ||||
-rw-r--r-- | online_test/__init__.py | 0 | ||||
-rw-r--r-- | online_test/settings.py | 96 | ||||
-rw-r--r-- | online_test/urls.py | 15 | ||||
-rw-r--r-- | online_test/wsgi.py | 14 | ||||
-rw-r--r-- | production.cfg | 20 | ||||
-rw-r--r-- | testapp/README.rst | 48 | ||||
-rwxr-xr-x | testapp/exam/code_server.py | 2 | ||||
-rw-r--r-- | testapp/exam/evaluators/__init__.py | 0 | ||||
-rw-r--r-- | testapp/exam/evaluators/bash_code_evaluator.py (renamed from testapp/exam/bash_code_evaluator.py) | 0 | ||||
-rw-r--r-- | testapp/exam/evaluators/code_evaluator.py (renamed from testapp/exam/code_evaluator.py) | 0 | ||||
-rw-r--r-- | testapp/exam/evaluators/cpp_code_evaluator.py (renamed from testapp/exam/cpp_code_evaluator.py) | 0 | ||||
-rw-r--r-- | testapp/exam/evaluators/java_code_evaluator.py (renamed from testapp/exam/java_code_evaluator.py) | 0 | ||||
-rw-r--r-- | testapp/exam/evaluators/language_registry.py (renamed from testapp/exam/language_registry.py) | 0 | ||||
-rw-r--r-- | testapp/exam/evaluators/python_code_evaluator.py (renamed from testapp/exam/python_code_evaluator.py) | 0 | ||||
-rw-r--r-- | testapp/exam/evaluators/scilab_code_evaluator.py (renamed from testapp/exam/scilab_code_evaluator.py) | 0 | ||||
-rw-r--r-- | testapp/exam/settings.py | 15 | ||||
-rwxr-xr-x | testapp/manage.py | 14 | ||||
-rw-r--r-- | testapp/production.py | 11 | ||||
-rw-r--r-- | testapp/settings.py | 193 |
23 files changed, 145 insertions, 392 deletions
@@ -40,4 +40,4 @@ apache/* *.db migrations wsgi.log - +*.sqlite3 diff --git a/bootstrap.py b/bootstrap.py deleted file mode 100644 index 7728587..0000000 --- a/bootstrap.py +++ /dev/null @@ -1,77 +0,0 @@ -############################################################################## -# -# Copyright (c) 2006 Zope Corporation and Contributors. -# All Rights Reserved. -# -# This software is subject to the provisions of the Zope Public License, -# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. -# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -# FOR A PARTICULAR PURPOSE. -# -############################################################################## -"""Bootstrap a buildout-based project - -Simply run this script in a directory containing a buildout.cfg. -The script accepts buildout command-line options, so you can -use the -c option to specify an alternate configuration file. - -$Id$ -""" - -import os, shutil, sys, tempfile, urllib2 - -tmpeggs = tempfile.mkdtemp() - -is_jython = sys.platform.startswith('java') - -try: - import pkg_resources -except ImportError: - ez = {} - exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py' - ).read() in ez - ez['use_setuptools'](to_dir=tmpeggs, download_delay=0) - - import pkg_resources - -if sys.platform == 'win32': - def quote(c): - if ' ' in c: - return '"%s"' % c # work around spawn lamosity on windows - else: - return c -else: - def quote (c): - return c - -cmd = 'from setuptools.command.easy_install import main; main()' -ws = pkg_resources.working_set - -if is_jython: - import subprocess - - assert subprocess.Popen([sys.executable] + ['-c', quote(cmd), '-mqNxd', - quote(tmpeggs), 'zc.buildout'], - env=dict(os.environ, - PYTHONPATH= - ws.find(pkg_resources.Requirement.parse('setuptools')).location - ), - ).wait() == 0 - -else: - assert os.spawnle( - os.P_WAIT, sys.executable, quote (sys.executable), - '-c', quote (cmd), '-mqNxd', quote (tmpeggs), 'zc.buildout', - dict(os.environ, - PYTHONPATH= - ws.find(pkg_resources.Requirement.parse('setuptools')).location - ), - ) == 0 - -ws.add_entry(tmpeggs) -ws.require('zc.buildout') -import zc.buildout.buildout -zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap']) -shutil.rmtree(tmpeggs) diff --git a/buildout.cfg b/buildout.cfg deleted file mode 100644 index 9ffc6d8..0000000 --- a/buildout.cfg +++ /dev/null @@ -1,20 +0,0 @@ -[buildout] -parts = - django -eggs = - South - django-taggit - django-taggit-autocomplete-modified - django-debug-toolbar - -[django] -recipe = djangorecipe -project = testapp -settings = settings -wsgi = true -wsgilog=wsgi.log -eggs = - ${buildout:eggs} -extra-paths = - testapp - diff --git a/manage.py b/manage.py new file mode 100755 index 0000000..1addc41 --- /dev/null +++ b/manage.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "online_test.settings") + + from django.core.management import execute_from_command_line + + execute_from_command_line(sys.argv) diff --git a/online_test/__init__.py b/online_test/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/online_test/__init__.py diff --git a/online_test/settings.py b/online_test/settings.py new file mode 100644 index 0000000..9168b08 --- /dev/null +++ b/online_test/settings.py @@ -0,0 +1,96 @@ +""" +Django settings for online_test project. + +For more information on this file, see +https://docs.djangoproject.com/en/1.6/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.6/ref/settings/ +""" + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +import os +BASE_DIR = os.path.dirname(os.path.dirname(__file__)) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '0=fsi3g5dw*7ze1cyh441_e^5^$2ay@&z(5(n7mhir0xb267=6' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +TEMPLATE_DEBUG = True + +ALLOWED_HOSTS = [] + +URL_ROOT = '' + +# Application definition + +INSTALLED_APPS = ( + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'testapp.exam', + 'taggit', + 'taggit_autocomplete_modified', +) + +MIDDLEWARE_CLASSES = ( + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +) + +ROOT_URLCONF = 'online_test.urls' + +WSGI_APPLICATION = 'online_test.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.6/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + }, + 'spoken_tutorial' : { + 'ENGINE' : 'django.db.backends.mysql', + 'NAME' : 'YOUR DATABASE', + 'USER' : 'YOUR USERNAME', + 'PASSWORD': 'YOUR PASSWORD', + 'HOST' :'', + 'PORT' :'', + } +} + +# Internationalization +# https://docs.djangoproject.com/en/1.6/topics/i18n/ + +AUTH_PROFILE_MODULE = 'exam.Profile' + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = False + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.6/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/online_test/urls.py b/online_test/urls.py new file mode 100644 index 0000000..871b357 --- /dev/null +++ b/online_test/urls.py @@ -0,0 +1,15 @@ +from django.conf.urls import patterns, include, url + +from django.contrib import admin +admin.autodiscover() + +urlpatterns = patterns('', + # Examples: + # url(r'^$', 'online_test.views.home', name='home'), + # url(r'^blog/', include('blog.urls')), + + url(r'^admin/', include(admin.site.urls)), + url(r'^exam/', include('testapp.exam.urls')), + url(r'^taggit_autocomplete_modified/', include\ + ('taggit_autocomplete_modified.urls')) +) diff --git a/online_test/wsgi.py b/online_test/wsgi.py new file mode 100644 index 0000000..2dd7ae3 --- /dev/null +++ b/online_test/wsgi.py @@ -0,0 +1,14 @@ +""" +WSGI config for online_test project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/ +""" + +import os +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "online_test.settings") + +from django.core.wsgi import get_wsgi_application +application = get_wsgi_application() diff --git a/production.cfg b/production.cfg deleted file mode 100644 index c5ec49e..0000000 --- a/production.cfg +++ /dev/null @@ -1,20 +0,0 @@ -[buildout] -parts = - django -eggs = - South - psycopg2 - django-taggit - django-taggit-autocomplete-modified - django-debug-toolbar - -[django] -recipe = djangorecipe -project = testapp -settings = production -wsgi = true -wsgilog=wsgi.log -eggs = - ${buildout:eggs} -extra-paths = - testapp diff --git a/testapp/README.rst b/testapp/README.rst deleted file mode 100644 index e6f8380..0000000 --- a/testapp/README.rst +++ /dev/null @@ -1,48 +0,0 @@ -=============== -Online Exam -=============== - -Online test application lets user(student) take an online programming test. -A special user called moderator can add questions, create question paper, -conduct online test and monitor the test. - - -Quick start ------------- - -1. In your terminal run the following command:: - $ easy_install git+https://github.com/FOSSEE/online_test.git#egg=django_exam-0.1 - -2. Add "testapp.exam", "taggit" and "taggit_autocomplete_modified" apps - to your INSTALLED_APPS setting as follows:: - - INSTALLED_APPS =( - 'testapp.exam', - 'taggit', - 'taggit_autocomplete_modified', - ) - -3. In project settings, add AUTH_PROFILE_MODULE = 'testapp.exam.Profile' - You can change the testapp.exam.Profile to your desired app user profile. - -4. Include the "testapp.exam" and taggit_autocomplete_modified URL configuration - in your project urls.py as follows:: - - url(r'^exam/', include('testapp.exam.urls')), - url(r'^taggit_autocomplete_modified/', include\ - ('taggit_autocomplete_modified.urls')) - - -5. Run 'python manage.py syncdb' to create models for the new installed apps. - -6. Run 'python manage.py runserver' to start the development server - and visit http://localhost:8000/exam/ - -7. Run code_server command as superuser as follows:: - - $ sudo code_server - - Note: If you are using virtual python environment, then activate the environment - using sudo. Then simply run the code_server command as follows:: - - $ code_server diff --git a/testapp/exam/code_server.py b/testapp/exam/code_server.py index 1411ded..7c675cb 100755 --- a/testapp/exam/code_server.py +++ b/testapp/exam/code_server.py @@ -31,7 +31,7 @@ import re import json # Local imports. from settings import SERVER_PORTS, SERVER_POOL_PORT -from language_registry import get_registry, set_registry +from evaluators.language_registry import get_registry, set_registry MY_DIR = abspath(dirname(__file__)) diff --git a/testapp/exam/evaluators/__init__.py b/testapp/exam/evaluators/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/testapp/exam/evaluators/__init__.py diff --git a/testapp/exam/bash_code_evaluator.py b/testapp/exam/evaluators/bash_code_evaluator.py index a468fd7..a468fd7 100644 --- a/testapp/exam/bash_code_evaluator.py +++ b/testapp/exam/evaluators/bash_code_evaluator.py diff --git a/testapp/exam/code_evaluator.py b/testapp/exam/evaluators/code_evaluator.py index 381b2e8..381b2e8 100644 --- a/testapp/exam/code_evaluator.py +++ b/testapp/exam/evaluators/code_evaluator.py diff --git a/testapp/exam/cpp_code_evaluator.py b/testapp/exam/evaluators/cpp_code_evaluator.py index 7242884..7242884 100644 --- a/testapp/exam/cpp_code_evaluator.py +++ b/testapp/exam/evaluators/cpp_code_evaluator.py diff --git a/testapp/exam/java_code_evaluator.py b/testapp/exam/evaluators/java_code_evaluator.py index 4367259..4367259 100644 --- a/testapp/exam/java_code_evaluator.py +++ b/testapp/exam/evaluators/java_code_evaluator.py diff --git a/testapp/exam/language_registry.py b/testapp/exam/evaluators/language_registry.py index 76a23d7..76a23d7 100644 --- a/testapp/exam/language_registry.py +++ b/testapp/exam/evaluators/language_registry.py diff --git a/testapp/exam/python_code_evaluator.py b/testapp/exam/evaluators/python_code_evaluator.py index 0c473cf..0c473cf 100644 --- a/testapp/exam/python_code_evaluator.py +++ b/testapp/exam/evaluators/python_code_evaluator.py diff --git a/testapp/exam/scilab_code_evaluator.py b/testapp/exam/evaluators/scilab_code_evaluator.py index 392cd45..392cd45 100644 --- a/testapp/exam/scilab_code_evaluator.py +++ b/testapp/exam/evaluators/scilab_code_evaluator.py diff --git a/testapp/exam/settings.py b/testapp/exam/settings.py index 93f90a9..5d3fb15 100644 --- a/testapp/exam/settings.py +++ b/testapp/exam/settings.py @@ -19,10 +19,11 @@ SERVER_TIMEOUT = 2 # host.org/foo/exam set URL_ROOT='/foo' URL_ROOT = '' -code_evaluators = {"python": "python_code_evaluator.PythonCodeEvaluator", - "c": "c_cpp_code_evaluator.CCPPCodeEvaluator", - "cpp": "c_cpp_code_evaluator.CCPPCodeEvaluator", - "java": "java_evaluator.JavaCodeEvaluator", - "bash": "bash_evaluator.BashCodeEvaluator", - "scilab": "scilab_evaluator.ScilabCodeEvaluator", - } +code_evaluators = { + "python": "evaluators.python_code_evaluator.PythonCodeEvaluator", + "c": "evaluators.c_cpp_code_evaluator.CCPPCodeEvaluator", + "cpp": "evaluators.c_cpp_code_evaluator.CCPPCodeEvaluator", + "java": "evaluators.java_evaluator.JavaCodeEvaluator", + "bash": "evaluators.bash_evaluator.BashCodeEvaluator", + "scilab": "evaluators.scilab_evaluator.ScilabCodeEvaluator", + } diff --git a/testapp/manage.py b/testapp/manage.py deleted file mode 100755 index 3e4eedc..0000000 --- a/testapp/manage.py +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python -from django.core.management import execute_manager -import imp -try: - imp.find_module('settings') # Assumed to be in the same directory. -except ImportError: - import sys - sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__) - sys.exit(1) - -import settings - -if __name__ == "__main__": - execute_manager(settings) diff --git a/testapp/production.py b/testapp/production.py deleted file mode 100644 index 8a1da98..0000000 --- a/testapp/production.py +++ /dev/null @@ -1,11 +0,0 @@ -from testapp.settings import * - -DEBUG = False -TEMPLATE_DEBUG = DEBUG -from testapp.local import * - -DATABASE_ENGINE = 'django.db.backends.mysql' -DATABASE_NAME = 'online_test' -DATABASE_USER = 'online_test_user' -# Imports DATABASE_PASSWORD from testapp/local.py that is not part of git repo -from testapp.local import DATABASE_PASSWORD diff --git a/testapp/settings.py b/testapp/settings.py deleted file mode 100644 index 88d4a5a..0000000 --- a/testapp/settings.py +++ /dev/null @@ -1,193 +0,0 @@ -# Django settings for tester project. - -from os.path import dirname, join, basename, abspath - -DEBUG = True -TEMPLATE_DEBUG = DEBUG - -# The root of the URL, for example you might be in the situation where you -# are not hosted as host.org/exam/ but as host.org/foo/exam/ for whatever -# reason set this to the root you have to serve at. In the above example -# host.org/foo/exam set URL_ROOT='/foo' -URL_ROOT = '' - -# Authentication using other database table. -# Comment the line below if you want the authentication to be done -# using django user table. -#AUTHENTICATION_BACKENDS = ('myauthentication.backend.MyBackend',) - -# Router for database -#DATABASE_ROUTERS = ['myauthentication.router.MyDatabaseRouter',] - -ADMINS = ( - # ('Your Name', 'your_email@example.com'), -) - -MANAGERS = ADMINS - -CURDIR = abspath(dirname(__file__)) -DB_FILE = join(CURDIR, 'exam.db') - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. - 'NAME': DB_FILE, # Or path to database file if using sqlite3. - 'USER': '', # Not used with sqlite3. - 'PASSWORD': '', # Not used with sqlite3. - 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. - 'PORT': '', # Set to empty string for default. Not used with sqlite3. - }, - 'spoken_tutorial' : { - 'ENGINE' : 'django.db.backends.mysql', - 'NAME' : 'YOUR DATABASE', - 'USER' : 'YOUR USERNAME', - 'PASSWORD': 'YOUR PASSWORD', - 'HOST' :'', - 'PORT' :'', - } -} - -# Local time zone for this installation. Choices can be found here: -# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name -# although not all choices may be available on all operating systems. -# On Unix systems, a value of None will cause Django to use the same -# timezone as the operating system. -# If running in a Windows environment this must be set to the same as your -# system time zone. -TIME_ZONE = 'Asia/Kolkata' - -# Language code for this installation. All choices can be found here: -# http://www.i18nguy.com/unicode/language-identifiers.html -LANGUAGE_CODE = 'en-us' - -SITE_ID = 1 - -# If you set this to False, Django will make some optimizations so as not -# to load the internationalization machinery. -USE_I18N = True - -# If you set this to False, Django will not format dates, numbers and -# calendars according to the current locale -USE_L10N = True - -# Absolute filesystem path to the directory that will hold user-uploaded files. -# Example: "/home/media/media.lawrence.com/media/" -MEDIA_ROOT = '' - -# URL that handles the media served from MEDIA_ROOT. Make sure to use a -# trailing slash. -# Examples: "http://media.lawrence.com/media/", "http://example.com/media/" -MEDIA_URL = '' - -# Absolute path to the directory static files should be collected to. -# Don't put anything in this directory yourself; store your static files -# in apps' "static/" subdirectories and in STATICFILES_DIRS. -# Example: "/home/media/media.lawrence.com/static/" -STATIC_ROOT = '/tmp/static/' - -# URL prefix for static files. -# Example: "http://media.lawrence.com/static/" -STATIC_URL = '/static/' - -# URL prefix for admin static files -- CSS, JavaScript and images. -# Make sure to use a trailing slash. -# Examples: "http://foo.com/static/admin/", "/static/admin/". -ADMIN_MEDIA_PREFIX = '/static/admin/' - -# Additional locations of static files -STATICFILES_DIRS = ( - # Put strings here, like "/home/html/static" or "C:/www/django/static". - # Always use forward slashes, even on Windows. - # Don't forget to use absolute paths, not relative paths. -) - -# List of finder classes that know how to find static files in -# various locations. -STATICFILES_FINDERS = ( - 'django.contrib.staticfiles.finders.FileSystemFinder', - 'django.contrib.staticfiles.finders.AppDirectoriesFinder', - #'django.contrib.staticfiles.finders.DefaultStorageFinder', -) - -# Make this unique, and don't share it with anybody. -SECRET_KEY = '9h*01@*#3ok+lbj5k=ym^eb)e=rf-g70&n0^nb_q6mtk!r(qr)' - -# List of callables that know how to import templates from various sources. -TEMPLATE_LOADERS = ( - 'django.template.loaders.filesystem.Loader', - 'django.template.loaders.app_directories.Loader', - #'django.template.loaders.eggs.Loader', -) - -MIDDLEWARE_CLASSES = ( - 'django.middleware.common.CommonMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'debug_toolbar.middleware.DebugToolbarMiddleware', - -) - -ROOT_URLCONF = '%s.urls' % (basename(CURDIR)) - -TEMPLATE_DIRS = ( - # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". - # Always use forward slashes, even on Windows. - # Don't forget to use absolute paths, not relative paths. -) - -INSTALLED_APPS = ( - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.sites', - 'django.contrib.messages', - 'django.contrib.staticfiles', - # Uncomment the next line to enable the admin: - 'django.contrib.admin', - 'taggit', - # Uncomment the next line to enable admin documentation: - # 'django.contrib.admindocs', - 'exam', - 'taggit_autocomplete_modified', - 'debug_toolbar', -) - -# A sample logging configuration. The only tangible logging -# performed by this configuration is to send an email to -# the site admins on every HTTP 500 error. -# See http://docs.djangoproject.com/en/dev/topics/logging for -# more details on how to customize your logging configuration. -LOGGING = { - 'version': 1, - 'disable_existing_loggers': False, - 'formatters': { - 'verbose': { - 'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s' - }, - 'simple': { - 'format': '%(levelname)s %(message)s' - }, - }, - 'handlers': { - 'console': { - 'level': 'DEBUG', - 'class': 'logging.StreamHandler', - 'formatter': 'simple' - }, - 'mail_admins': { - 'level': 'ERROR', - 'class': 'django.utils.log.AdminEmailHandler' - } - }, - 'loggers': { - 'django.request': { - 'handlers': ['mail_admins', 'console'], - 'level': 'ERROR', - 'propagate': True, - }, - } -} - -AUTH_PROFILE_MODULE = 'exam.Profile' |