#!/usr/bin/env python
"""FileList.py
A quick, hacky script to contruct a file list from a set of Python files.
"""
import os, sys
from glob import glob
from types import StringType
class FileList:
"""Builds a file list for a package of Python modules."""
def __init__(self, name='Webware'):
self._name = name
self._files = []
self._verbose = 0
self._filesToIgnore = []
def addFilesToIgnore(self, list):
self._filesToIgnore.extend(list)
def readFiles(self, filename):
filenames = glob(filename)
for name in filenames:
self.readFile(name)
def readFile(self, name):
if name in self._filesToIgnore:
if self._verbose:
print 'Skipping %s...' % name
return
if self._verbose:
print 'Reading %s...' % name
self._files.append(name)
def printList(self, file=sys.stdout):
if type(file) is StringType:
file = open(file, 'w')
close = 1
else:
close = 0
name = self._name
title = 'File List of %s' % name
file.write('%s\n%s\n\n' % (title, '='*len(title)))
files = self._files
files.sort(lambda a, b: cmp(a.lower(), b.lower()))
for filename in files:
file.write(filename + '\n')
file.write('\n')
if close:
file.close()
def printForWeb(self, file=sys.stdout):
if type(file) is StringType:
file = open(file, 'w')
close = 1
else:
close = 0
name = self._name
title = 'File List of %s' % name
other = ('<a href="ClassList.html">alphabetical class list<a>'
' and <a href="ClassHierarchy.html">class hierarchy</a>'
' of %s' % name)
file.write('''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<head>
<title>%s</title>
<style type="text/css">
<!--
body { background: #FFF;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10pt;
padding: 6pt; }
th { background-color: #CCF; text-align: left; }
td { background-color: #EEF; }
.center { text-align: center; }
.center table { margin-left: auto; margin-right: auto; text-align: left; }
-->
</style>
</head>
<body><div class="center">
<h1>%s</h1>
<p>See also the %s.</p>
<table cellpadding="2" cellspacing="2">
''' % (title, title, other))
file.write('<tr><th>Source File</th>'
'<th>Source</th><th>Doc</th><th>Summary</th></tr>\n')
files = self._files
files.sort(lambda a, b: cmp(a.lower(), b.lower()))
for filename in files:
file.write('<tr><td>%s</td></tr>\n' % self.links(filename))
file.write('''</table>
</div></body>
</html>''')
if close:
file.close()
def links(self, filename):
"""In support of printForWeb()"""
name = self._name
links = []
# souce file
if os.path.exists(filename):
links.append('<a href="../../%s">%s</a>' % (filename, filename))
else:
links.append(' ')
filename = os.path.basename(filename)
module = os.path.splitext(filename)[0]
# highlighted source file
if os.path.exists('Docs/Source/Files/%s.html' % module):
links.append('<a href="Files/%s.html">source</a>' % module)
else:
links.append(' ')
# doc file
if os.path.exists('Docs/Source/Docs/%s.%s.html' % (name, module)):
links.append('<a href="Docs/%s.%s.html">doc</a>' % (name, module))
else:
links.append(' ')
# summary file
if os.path.exists('Docs/Source/Summaries/%s.html' % module):
links.append('<a href="Summaries/%s.html">summary</a>' % module)
else:
links.append(' ')
# finish up
return '</td><td class="center">'.join(links)
def main(args):
filelist = FileList()
for filename in args:
filelist.readFiles(filename)
filelist.printList()
if __name__ == '__main__':
main(sys.argv[1:])
|