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

« back to all changes in this revision

Viewing changes to ivle/util.py

  • Committer: William Grant
  • Date: 2009-04-28 06:18:14 UTC
  • Revision ID: grantw@unimelb.edu.au-20090428061814-fiqynzwcmtk3dokn
Replace ivle.util.unmake_path with specialisations in Request and CGIRequest.

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
# Contains common utility functions.
23
23
 
24
24
import os
 
25
import datetime
 
26
 
 
27
import ivle.conf
25
28
 
26
29
class IVLEError(Exception):
27
 
    """Legacy general IVLE exception.
28
 
 
29
 
    This is the old "standard" exception class for IVLE errors. It is only
30
 
    used in fileservice, and should not be used in any new code.
 
30
    """
 
31
    This is the "standard" exception class for IVLE errors.
 
32
    It is the ONLY exception which should propagate to the top - it will then
 
33
    be displayed to the user as an HTTP error with the given code.
 
34
 
 
35
    All other exceptions are considered IVLE bugs and should not occur
 
36
    (they will display a traceback).
 
37
 
 
38
    This error should not be raised directly. Call req.throw_error.
31
39
    """
32
40
    def __init__(self, httpcode, message=None):
33
41
        self.httpcode = httpcode
35
43
        self.args = (httpcode, message)
36
44
 
37
45
class IVLEJailError(Exception):
38
 
    """Exception proxying an in-jail error.
39
 
 
 
46
    """
40
47
    This exception indicates an error that occurred inside an IVLE CGI script
41
48
    inside the jail. It should never be raised directly - only by the 
42
49
    interpreter.
59
66
    def __repr__(self):
60
67
        return "<Fake %s %s>"%(self.type, self.name)
61
68
 
 
69
def make_path(path):
 
70
    """Given a path relative to the IVLE root, makes the path relative to the
 
71
    site root using ivle.conf.root_dir. This path can be used in URLs sent to
 
72
    the client."""
 
73
    return os.path.join(ivle.conf.root_dir, path)
 
74
 
62
75
def split_path(path):
63
76
    """Given a path, returns a tuple consisting of the top-level directory in
64
77
    the path, and the rest of the path. Note that both items in the tuple will
95
108
        return tuple(splitpath)
96
109
 
97
110
def incomplete_utf8_sequence(byteseq):
98
 
    """Calculate the completeness of a UTF-8 encoded string.
99
 
 
 
111
    """
 
112
    str -> int
100
113
    Given a UTF-8-encoded byte sequence (str), returns the number of bytes at
101
114
    the end of the string which comprise an incomplete UTF-8 character
102
115
    sequence.
174
187
        return count
175
188
 
176
189
def object_to_dict(attrnames, obj):
177
 
    """Convert an object into a dictionary.
178
 
 
179
 
    This takes a shallow copy of the object.
180
 
 
181
 
    @param attrnames: Set (or iterable) of names of attributes to be copied
182
 
                      into the dictionary. (We don't auto-lookup, because this
183
 
                      function needs to be used on magical objects).
 
190
    """
 
191
    Convert an object into a dictionary. This takes a shallow copy of the
 
192
    object.
 
193
    attrnames: Set (or iterable) of names of attributes to be copied into the
 
194
        dictionary. (We don't auto-lookup, because this function needs to be
 
195
        used on magical objects).
184
196
    """
185
197
    return dict((k, getattr(obj, k))
186
198
        for k in attrnames if not k.startswith('_'))