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

« back to all changes in this revision

Viewing changes to ivle/console.py

  • Committer: William Grant
  • Date: 2009-04-29 04:58:42 UTC
  • Revision ID: grantw@unimelb.edu.au-20090429045842-upijb1ybcbz1zg6u
Kill --nosvnrevno from setup.install - we don't use Subversion now.

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
 
33
33
import cjson
34
34
 
 
35
import ivle.conf
35
36
from ivle import chat
36
37
 
 
38
# Outside Jail
 
39
trampoline_path = os.path.join(ivle.conf.lib_path, "trampoline")
 
40
# Inside Jail
 
41
python_path = "/usr/bin/python"
 
42
console_dir = os.path.join(ivle.conf.share_path, 'services')
 
43
console_path = os.path.join(console_dir, 'python-console')
 
44
 
37
45
class ConsoleError(Exception):
38
46
    """ The console failed in some way. This is bad. """
39
 
    pass
 
47
    def __init__(self, value):
 
48
        self.value = value
 
49
    def __str__(self):
 
50
        return repr(self.value)
40
51
 
41
52
class ConsoleException(Exception):
42
53
    """ The code being exectuted on the console returned an exception. 
43
54
    """
44
 
    pass
 
55
    def __init__(self, value):
 
56
        self.value = value
 
57
    def __str__(self):
 
58
        return repr(self.value)
45
59
 
46
60
class TruncateStringIO(StringIO.StringIO):
47
61
    """ A class that wraps around StringIO and truncates the buffer when the 
108
122
class Console(object):
109
123
    """ Provides a nice python interface to the console
110
124
    """
111
 
    def __init__(self, config, uid, jail_path, working_dir):
 
125
    def __init__(self, uid, jail_path, working_dir):
112
126
        """Starts up a console service for user uid, inside chroot jail 
113
127
        jail_path with work directory of working_dir
114
128
        """
115
129
        super(Console, self).__init__()
116
130
 
117
 
        self.config = config
118
131
        self.uid = uid
119
132
        self.jail_path = jail_path
120
133
        self.working_dir = working_dir
155
168
        while tries < 5:
156
169
            self.port = int(random.uniform(3000, 8000))
157
170
 
158
 
            trampoline_path = os.path.join(self.config['paths']['lib'],
159
 
                                           "trampoline")
160
 
 
161
171
            # Start the console server (port, magic)
162
172
            # trampoline usage: tramp uid jail_dir working_dir script_path args
163
173
            # console usage:    python-console port magic
164
174
            res = os.spawnv(os.P_WAIT, trampoline_path, [
165
175
                trampoline_path,
166
176
                str(self.uid),
167
 
                self.config['paths']['jails']['mounts'],
168
 
                self.config['paths']['jails']['src'],
169
 
                self.config['paths']['jails']['template'],
 
177
                ivle.conf.jail_base,
 
178
                ivle.conf.jail_src_base,
 
179
                ivle.conf.jail_system,
170
180
                self.jail_path,
171
 
                os.path.join(self.config['paths']['share'], 'services'),
172
 
                "/usr/bin/python",
173
 
                os.path.join(self.config['paths']['share'],
174
 
                             'services/python-console'),
 
181
                console_dir,
 
182
                python_path,
 
183
                console_path,
175
184
                str(self.port),
176
185
                str(self.magic),
177
186
                self.working_dir
207
216
            # Couldn't decode the JSON
208
217
            raise ConsoleError(
209
218
                "Could not understand the python console response")
210
 
        except chat.ProtocolError, e:
211
 
            raise ConsoleError(*e.args)
212
219
 
213
220
        return response
214
221
 
293
300
              
294
301
        # Unpickle any exceptions
295
302
        if 'exception' in execute:
296
 
            execute['exception'] = cPickle.loads(execute['exception'])
297
 
        return execute
 
303
            return cPickle.loads(execute['exception'])
 
304
        else:
 
305
            return execute
298
306
 
299
307
 
300
308
    def set_vars(self, variables):