This directory contains various demonstrations of what you can do with
Python.  They were all written by me except where explicitly stated
otherwise -- in general, demos contributed by others ends up in the
../Contrib directory, unless I think they're of utmost general
importance (like Matt Conway's Tk demos).

A fair number of utilities that are useful when while developing
Python code can be found in the ../Tools directory -- some of these
can also be considered good examples of how to write Python code.

Finally, in order to save disk space and net bandwidth, not all
subdirectories listed here are distributed.  They are listed just
in case I change my mind about them.


classes		Some examples of how to use classes.

comparisons	A set of responses to a really old language-comparison
		challenge.

curses		A set of curses demos.

embed		An example of embedding Python in another application
		(see also pysvr).

imputil		Demonstration subclasses of imputil.Importer.

md5test		Test program for the optional md5 module.

metaclasses	The code from the 1.5 metaclasses paper on the web.

parser		Example using the parser module.

pdist		Old, unfinished code messing with CVS, RCS and remote
		files.

pysvr		An example of embedding Python in a threaded
		application.

rpc		A set of classes for building clients and servers for
		Sun RPC.

scripts		Some useful Python scripts that I put in my bin
		directory.  No optional built-in modules needed.

sockets		Examples for the new built-in module 'socket'.

threads		Demos that use the 'thread' module.  (Currently these
		only run on SGIs, but this may change in the future.)

tix		Demos using the Tix widget set addition to Tkinter.

tkinter		Demos using the Tk interface (including Matt Conway's
		excellent set of demos).

xml		Some XML demos.

xmlrpc		XML-RPC server framework (but see the standard library
		module SimpleXMLRPCServer.py for a replacement).

zlib		Some demos for the zlib module (see also the standard
		library module gzip.py).
