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

« back to all changes in this revision

Viewing changes to setup/listmake.py

  • Committer: Matt Giuca
  • Date: 2009-12-01 04:27:58 UTC
  • mfrom: (1164.2.46 sphinx-docs)
  • Revision ID: matt.giuca@gmail.com-20091201042758-wuxd9bdec00c283i
Merged sphinx-docs branch. This adds Sphinx documentation for the entire IVLE system (for system administrators and developers), and removes all of our random old document files (all either irrelevant, or moved into the Sphinx docs nicely). Currently incomplete, but ready to merge.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# IVLE - Informatics Virtual Learning Environment
2
 
# Copyright (C) 2007-2008 The University of Melbourne
3
 
#
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.
8
 
#
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.
13
 
#
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
17
 
 
18
 
# Module: setup/listmake
19
 
# Author: Matt Giuca, Refactored by David Coles
20
 
# Date:   03/07/2008
21
 
 
22
 
# setup/listmake.py
23
 
# (for developer use only)
24
 
# Recurses through the source tree and builds a list of all files which should
25
 
# be copied upon installation. This should be run by the developer before
26
 
# cutting a distribution, and the listfile it generates should be included in
27
 
# the distribution, avoiding the administrator having to run it.
28
 
 
29
 
import optparse
30
 
import os
31
 
import mimetypes
32
 
import sys
33
 
from setuputil import filter_mutate
34
 
 
35
 
# Mime types which will automatically be placed in the list by listmake.
36
 
# Note that listmake is not intended to be run by the final user (the system
37
 
# administrator who installs this), so the developers can customize the list
38
 
# as necessary, and include it in the distribution.
39
 
listmake_mimetypes = ['text/x-python', 'text/html',
40
 
    'application/x-javascript', 'application/javascript',
41
 
    'text/css', 'image/png', 'image/gif', 'application/xml']
42
 
 
43
 
def listmake(args):
44
 
    usage = """usage: %prog listmake [options]
45
 
(For developer use only)
46
 
Recurses through the source tree and builds a list of all files which should
47
 
be copied upon installation. This should be run by the developer before
48
 
cutting a distribution, and the listfile it generates should be included in
49
 
the distribution, avoiding the administrator having to run it."""
50
 
 
51
 
    # Parse arguments
52
 
    parser = optparse.OptionParser(usage)
53
 
    (options, args) = parser.parse_args(args)
54
 
 
55
 
    # Call the real function
56
 
    __listmake()
57
 
 
58
 
def __listmake():
59
 
    # We build two separate lists, by walking www and console
60
 
    list_www = build_list_py_files('www')
61
 
    list_lib = build_list_py_files('lib')
62
 
    list_subjects = build_list_py_files('subjects', no_top_level=True)
63
 
    list_exercises = build_list_py_files('exercises', no_top_level=True)
64
 
    list_scripts = [
65
 
        "scripts/python-console",
66
 
        "scripts/fileservice",
67
 
        "scripts/serveservice",
68
 
        "scripts/interpretservice",
69
 
        "scripts/usrmgt-server",
70
 
        "scripts/diffservice",
71
 
        "scripts/svnlogservice",
72
 
    ]
73
 
    # Make sure that the files generated by conf are in the list
74
 
    # (since listmake is typically run before conf)
75
 
    if "lib/conf/conf.py" not in list_lib:
76
 
        list_lib.append("lib/conf/conf.py")
77
 
    # Write these out to a file
78
 
    cwd = os.getcwd()
79
 
    # the files that will be created/overwritten
80
 
    listfile = os.path.join(cwd, "install_list.py")
81
 
 
82
 
    try:
83
 
        file = open(listfile, "w")
84
 
 
85
 
        file.write("""# IVLE Configuration File
86
 
# install_list.py
87
 
# Provides lists of all files to be installed by `setup.py install' from
88
 
# certain directories.
89
 
# Note that any files with the given filename plus 'c' or 'o' (that is,
90
 
# compiled .pyc or .pyo files) will be copied as well.
91
 
 
92
 
# List of all installable files in www directory.
93
 
list_www = """)
94
 
        writelist_pretty(file, list_www)
95
 
        file.write("""
96
 
# List of all installable files in lib directory.
97
 
list_lib = """)
98
 
        writelist_pretty(file, list_lib)
99
 
        file.write("""
100
 
# List of all installable files in scripts directory.
101
 
list_scripts = """)
102
 
        writelist_pretty(file, list_scripts)
103
 
        file.write("""
104
 
# List of all installable files in subjects directory.
105
 
# This is to install sample subjects and material.
106
 
list_subjects = """)
107
 
        writelist_pretty(file, list_subjects)
108
 
        file.write("""
109
 
# List of all installable files in exercises directory.
110
 
# This is to install sample exercise material.
111
 
list_exercises = """)
112
 
        writelist_pretty(file, list_exercises)
113
 
 
114
 
        file.close()
115
 
    except IOError, (errno, strerror):
116
 
        print "IO error(%s): %s" % (errno, strerror)
117
 
        sys.exit(1)
118
 
 
119
 
    print "Successfully wrote install_list.py"
120
 
 
121
 
    print
122
 
    print ("You may modify the set of installable files before cutting the "
123
 
            "distribution:")
124
 
    print listfile
125
 
    print
126
 
 
127
 
    return 0
128
 
 
129
 
def build_list_py_files(dir, no_top_level=False):
130
 
    """Builds a list of all py files found in a directory and its
131
 
    subdirectories. Returns this as a list of strings.
132
 
    no_top_level=True means the file paths will not include the top-level
133
 
    directory.
134
 
    """
135
 
    pylist = []
136
 
    for (dirpath, dirnames, filenames) in os.walk(dir):
137
 
        # Exclude directories beginning with a '.' (such as '.svn')
138
 
        filter_mutate(lambda x: x[0] != '.', dirnames)
139
 
        # All *.py files are added to the list
140
 
        pylist += [os.path.join(dirpath, item) for item in filenames
141
 
            if mimetypes.guess_type(item)[0] in listmake_mimetypes]
142
 
    if no_top_level:
143
 
        for i in range(0, len(pylist)):
144
 
            _, pylist[i] = pylist[i].split(os.sep, 1)
145
 
    return pylist
146
 
 
147
 
def writelist_pretty(file, list):
148
 
    """Writes a list one element per line, to a file."""
149
 
    if list == []:
150
 
        file.write("[]\n")
151
 
    else:
152
 
        file.write('[\n')
153
 
        for elem in list:
154
 
            file.write('    %s,\n' % repr(elem))
155
 
        file.write(']\n')
156