\chapter{Undocumented Modules}

Here's a quick listing of modules that are currently undocumented, but
that should be documented.  Feel free to contribute documentation for
them!  (The idea and most contents for this chapter were taken from a
posting by Fredrik Lundh; I have revised some modules' status.)


\section{Fundamental, and pretty straightforward to document}

ni.py -- New import scheme with package support


\section{Frameworks; somewhat harder to document, but
well worth the effort}

Tkinter.py -- Interface to Tcl/Tk for graphical user interfaces;
Fredrik Lundh is working on this one!

BaseHTTPServer.py -- HTTP server base class

CGIHTTPServer.py -- CGI-savvy HTTP Server

SimpleHTTPServer.py -- Simple HTTP Server


\section{Stuff useful to a lot of people, including the CGI crowd}

MimeWriter.py -- Generic MIME writer

mimify.py -- Mimification and unmimification of mail messages

multifile.py -- make each part of a multipart message ``feel'' like

gzip.py -- compression using zlib (compatible with gzip)


\section{Miscellaneous useful utilities}

Some of these are very old and/or not very robust; marked with ``hmm''.

calendar.py -- Calendar printing functions

cmp.py -- Efficiently compare files

cmpcache.py -- Efficiently compare files (uses statcache)

dircache.py -- like os.listdir, but caches results

dircmp.py -- class to build directory diff tools on

linecache.py -- Cache lines from files (used by pdb)

pipes.py -- Conversion pipeline templates (hmm)

popen2.py -- improved popen, can read AND write simultaneously

statcache.py -- Maintain a cache of file stats

colorsys.py -- Conversion between RGB and other color systems

dbhash.py -- (g)dbm-like wrapper for bsdhash.hashopen

mhlib.py -- MH interface

pty.py -- Pseudo terminal utilities

tty.py -- Terminal utilities

cmd.py -- build line-oriented command interpreters (used by pdb)

bdb.py -- A generic Python debugger base class (used by pdb)

ihooks.py -- Import hook support (for ni and rexec)

pprint.py -- support to pretty-print lists, tuples, and dictionaries
recursively


\section{Parsing Python}

(One could argue that these should all be documented together with the
parser module; in fact the parser module section already references
the token and symbol modules.)

token.py -- Tokens (from ``token.h'')

symbol.py -- Symbols (from ``graminit.h'')

keyword.py -- Keywords (from ``graminit.c'')

tokenize.py -- regular expression that recognizes Python tokens

pyclbr.py -- Parse a Python file and retrieve classes and methods


\section{Platform specific modules}

ntpath.py -- equivalent of posixpath on 32-bit Windows

dospath.py -- equivalent of posixpath on MS-DOS

macpath.py -- equivalent of posixpath on Mac


\section{Code objects and files, debugger etc.}

compileall.py -- force "compilation" of all .py files in a directory

py_compile.py -- "compile" a .py file to a .pyc file

codehack.py -- extract a function name from a code object

dis.py -- Disassembler for Python bytecode objects

repr.py -- Redo the `...` (representation) but with limits on most
sizes (used by pdb)

copy_reg.py -- helper to provide extensibility for pickle/cPickle


\section{Multimedia}

audiodev.py -- Plays audio files

sunau.py -- parse Sun and NeXT audio files

sunaudio.py -- interpret sun audio headers

toaiff.py -- Convert "arbitrary" sound files to AIFF files

sndhdr.py -- recognizing sound files

wave.py -- parse WAVE files

whatsound.py -- recognizing sound files


\section{Oddities}

These modules are probably also obsolete, or just not very useful.

Queue.py -- A multi-producer, multi-consumer queue
p
bisect.py -- Bisection algorithms

dump.py -- Print python code that reconstructs a variable

emacs.py -- Execute Emacs code from a Python interpreter

find.py -- find files matching pattern in directory tree

fpformat.py -- General floating point formatting functions -- obsolete

grep.py -- grep

mutex.py -- Mutual exclusion -- for use with module sched

packmail.py -- create a self-unpacking \UNIX{} shell archive

poly.py -- Polynomials

sched.py -- event scheduler class

shutil.py -- utility functions usable in a shell-like program

util.py -- useful functions that don't fit elsewhere

zmod.py -- Compute properties of mathematical "fields"

tzparse.py -- Parse a timezone specification (unfinished)


\section{Obsolete}

newdir.py -- New dir() function (the standard dir() is now just as good)

addpack.py -- standard support for "packages" (use ni instead)

fmt.py -- text formatting abstractions (too slow)

Para.py -- helper for fmt.py

lockfile.py -- wrapper around FCNTL file locking (use
fcntl.lockf/flock intead)

tb.py -- Print tracebacks, with a dump of local variables (use
pdb.pm() or traceback.py instead)


\section{Extension modules}

bsddbmodule.c -- Interface to the Berkeley DB interface (yet another
dbm clone).

cursesmodule.c -- Curses interface.

dbhashmodule.c -- Obsolete; this functionality is now provided by
bsddbmodule.c.

dlmodule.c --  A highly experimental and dangerous device for calling
arbitrary C functions in arbitrary shared libraries.

newmodule.c -- Tommy Burnette's `new' module (creates new empty
objects of certain kinds) -- dangerous.

nismodule.c -- NIS (a.k.a. Sun's Yellow Pages) interface.

timingmodule.c -- Measure time intervals to high resolution (obsolete
-- use time.clock() instead).

resource.c -- Interface to getrusage() and friends.

stdwinmodule.c -- Interface to STDWIN (an old, unsupported
platform-independent GUI package).  Obsolete; use Tkinter for a
platform-independent GUI instead.

The following are SGI specific:

clmodule.c -- Interface to the SGI compression library.

svmodule.c -- Interface to the ``simple video'' board on SGI Indigo
(obsolete hardware).
