~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to www/apps/tutorialservice/__init__.py

  • Committer: dcoles
  • Date: 2008-08-19 06:44:05 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:1029
Tutorial Service: Ported the tutorial service to the console so that all 
student code should now be run inside the jail. This means that the code will 
also be contrained by trampoline's ulimits and will no longer need to run as 
the webserver (with all the badness that entails).

* TestFramework has been modifed to make eqvivalent calls to the console.
* Tutorial service now starts up a console for each attempt.
* Modifications to python-console script and console module to allow new calls 
needed.
* Added a FakeObject class to util to use to represent things that can not be 
pickled. (Ideally should be in the console module, but the console module can't 
be imported into the jail at the moment - relies on a full lib/conf/conf.py).  
Might be possible to make these fake objects able to call the console too?

Show diffs side-by-side

added added

removed removed

Lines of Context:
46
46
 
47
47
import cjson
48
48
 
49
 
from common import (db, util)
 
49
from common import (db, util, console)
50
50
import test
51
51
import conf
52
52
 
134
134
        req.throw_error(req.HTTP_NOT_FOUND,
135
135
            "The exercise was not found.")
136
136
 
 
137
    # Start a console to run the tests on
 
138
    jail_path = os.path.join(conf.jail_base, req.user.login)
 
139
    working_dir = os.path.join("/home", req.user.login)
 
140
    cons = console.Console(req.user.unixid, jail_path, working_dir)
 
141
 
137
142
    # Parse the file into a exercise object using the test suite
138
 
    exercise_obj = test.parse_exercise_file(exercisefile)
 
143
    exercise_obj = test.parse_exercise_file(exercisefile, cons)
139
144
    exercisefile.close()
 
145
 
140
146
    # Run the test cases. Get the result back as a JSONable object.
141
147
    # Return it.
142
148
    test_results = exercise_obj.run_tests(code)
143
149
 
 
150
    # Close the console
 
151
    cons.close()
 
152
 
144
153
    conn = db.DB()
145
154
    try:
146
155
        conn.insert_problem_attempt(