1
# IVLE - Informatics Virtual Learning Environment
2
# Copyright (C) 2007-2008 The University of Melbourne
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2 of the License, or
7
# (at your option) any later version.
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
# GNU General Public License for more details.
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22
# Contains common utility functions.
28
root_dir = conf.root_dir
31
"""Given a path relative to the IVLE root, makes the path relative to the
32
site root using conf.root_dir. This path can be used in URLs sent to the
34
return os.path.join(root_dir, path)
36
def unmake_path(path):
37
"""Given a path relative to the site root, makes the path relative to the
38
IVLE root by removing conf.root_dir if it appears at the beginning. If it
39
does not appear at the beginning, returns path unchanged. Also normalises
41
path = os.path.normpath(path)
42
root = os.path.normpath(root_dir)
44
if path.startswith(root):
45
# +1 to take out the slash as well
46
return path[len(root)+1:]
51
"""Given a path, returns a tuple consisting of the top-level directory in
52
the path, and the rest of the path. Note that both items in the tuple will
53
NOT begin with a slash, regardless of whether the original path did. Also
56
Always returns a pair of strings, except for one special case, in which
57
the path is completely empty (or just a single slash). In this case the
58
return value will be (None, ''). But still always returns a pair.
66
>>> split_path("home")
68
>>> split_path("home/docs/files")
69
('home', 'docs/files')
70
>>> split_path("//home/docs/files")
71
('', 'home/docs/files')
73
path = os.path.normpath(path)
74
# Ignore the opening slash
75
if path.startswith(os.sep):
76
path = path[len(os.sep):]
77
if path == '' or path == '.':
79
splitpath = path.split(os.sep, 1)
80
if len(splitpath) == 1:
81
return (splitpath[0], '')
83
return tuple(splitpath)