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

« back to all changes in this revision

Viewing changes to ivle/cgirequest.py

[Uber-commit of holiday work because I lacked a local copy of the branch.]

 ivle.makeuser: Don't use jailconf.py as a header for the in-jail conf.py;
     generate the whole thing using string formatting operators and include
     the template inline.

 ivle.makeuser.make_conf_py: XXX the inclusion of ivle.conf.jail_base in
     the jail. It is simply there to placate ivle.studpath, and needs
     to go before we can entirely remove the in-jail config.

 ivle-buildjail:
   - Add. Converted from setup.buildjail.
   - Build the jail in __base_build__ and rsync it to __base__ when
     done, rather than operating only in ./jail
   - Rename --rebuildjail/-j to --recreate/-r, as the whole script
     is now for jail rebuilding. Also add a warning to the usage string about
     the large volume likely to be downloaded.
   - Check existence before removing trees.
   - Don't copy jailconf.py over conf.py in the jail. Also make
     sure that we remove conf.pyc.

 setup.configure:
   - Stop generating jailconf.py at all.
   - Add a jail_system_build setting, defaulting to __base_build__ next to
     the existing __base__.
   - Don't use an OptionParser before calling the real function, as that
     adds options dynamically.

 setup.install:
   - Add an option (-R) to avoid writing out svn revision info to
     $PREFIX/share/ivle/revision.txt.
   - Remove jail-copying things.
   - Install all services to the host, rather than just usrmgt-server. We do
     this so we can build the jail from the host without the source tree.
   - Shuffle some things, and don't install phpBB3 twice.
   - Add a --root argument, to take an alternate root directory to install
     into (as given to autotools in $DESTDIR).

 setup.build:
   - Allow running as non-root.
   - Take a --no-compile option to not byte-compile Python files.

 setup.util:
   - Include usrmgt-server in the list of services.
   - Add make_install_path(), a wrapper around os.path.join() that ensures
     the second path is relative.
   - Install ivle-buildjail with the other binaries.

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
# This allows CGI scripts to create request objects and then pass them to
26
26
# normal IVLE handlers.
27
27
 
 
28
# NOTE: This object does not support write_html_head_foot (simply because we
 
29
# do not need it in its intended application: fileservice).
 
30
 
28
31
import sys
29
32
import os
30
 
import os.path
31
33
import cgi
32
34
import urllib
33
35
import traceback
138
140
        self.uri = os.environ['SCRIPT_NAME'] + os.environ['PATH_INFO']
139
141
        # Split the given path into the app (top-level dir) and sub-path
140
142
        # (after first stripping away the root directory)
 
143
        path = ivle.util.unmake_path(self.uri)
141
144
        if self.publicmode:
142
145
            self.app = None
143
 
            (_, self.path) = (ivle.util.split_path(self.uri))
 
146
            (_, self.path) = (ivle.util.split_path(path))
144
147
        else:
145
 
            (self.app, self.path) = (ivle.util.split_path(self.uri))
 
148
            (self.app, self.path) = (ivle.util.split_path(path))
146
149
        self.user = None
147
150
        self.hostname = os.environ['SERVER_NAME']
148
151
        self.headers_in = _http_headers_in_from_cgi()
152
155
        self.status = CGIRequest.HTTP_OK
153
156
        self.content_type = None        # Use Apache's default
154
157
        self.location = None
 
158
        self.title = None     # Will be set by dispatch before passing to app
155
159
        self.styles = []
156
160
        self.scripts = []
 
161
        self.write_html_head_foot = False
157
162
        self.got_common_vars = False
158
163
 
159
164
 
192
197
            if k != 'Content-Type' and k != 'Location':
193
198
                print "%s: %s" % (k, v)
194
199
 
 
200
        # XXX write_html_head_foot not supported
 
201
        #if self.write_html_head_foot:
 
202
        #    # Write the HTML header, pass "self" (request object)
 
203
        #    self.func_write_html_head(self)
195
204
        # Print a blank line to signal the start of output
196
205
        print
197
206
 
240
249
        else:
241
250
            return sys.stdin.read(len)
242
251
 
 
252
    def throw_error(self, httpcode, message):
 
253
        """Writes out an HTTP error of the specified code. Exits the process,
 
254
        so any code following this call will not be executed.
 
255
 
 
256
        (This is justified because of the nature of CGI, it is a single-script
 
257
        environment, there is no containing process which needs to catch an
 
258
        exception).
 
259
 
 
260
        httpcode: An HTTP response status code. Pass a constant from the
 
261
        Request class.
 
262
        """
 
263
        raise ivle.util.IVLEError(httpcode, message)
 
264
 
243
265
    def handle_unknown_exception(self, exc_type, exc_value, exc_tb):
 
266
        if exc_type is ivle.util.IVLEError:
 
267
            self.headers_out['X-IVLE-Error-Code'] = exc_value.httpcode
 
268
 
244
269
        self.headers_out['X-IVLE-Error-Type'] = exc_type.__name__
245
270
 
246
271
        try: