\documentclass{howto}

%  This is a template for short or medium-size Python-related documents, 
% mostly notably the series of HOWTOs, but it can be used for any
% document you like.   

% The title should be descriptive enough for people to be able to find
% the relevant document. 
\title{Spammifying Sprockets in Python}

% Increment the release number whenever significant changes are made.
% The author and/or editor can define 'significant' however they like.
\release{0.00}

% At minimum, give your name and an e-mail address.  You can include a
% snail-mail address if you like.
\author{Me, 'cause I wrote it}
\authoraddress{Me, 'cause I'm self-employed.}

\begin{document}
\maketitle

% The abstract should be a paragraph or two long, and describe the
% scope of the document.
\begin{abstract}
\noindent
This document describes how to spammify sprockets.  It is a useful
example of a Python HOWTO document.  It is not dependent on any
particular sprocket implementation, and includes a Python-based
implementation in the \module{sprunkit} module.
\end{abstract}

\tableofcontents

Spammifying sprockets from Python is both fun and entertaining.
Applying the techniques described here, you can also fill your hard
disk quite effectively.

\section{What is Sprocket Spammification?}

You have to ask?  It's the only thing to do to your sprockets!


\section{Why Use Python?}

Python is an excellent language from which to spammify your sprockets
since you can do it on any platform.


\section{Software Requirements}

You need to have the following software installed:

% The {itemize} environment uses a bullet for each \item.  If you want the 
% \item's numbered, use the {enumerate} environment instead.
\begin{itemize}
  \item  Python 1.9.
  \item  Some sprocket definition files.
  \item  At least one sprocket system implementation.
\end{itemize}

Note that the \module{sprunkit} is provided with this package and
implements ActiveSprockets in Python.


% The preceding sections will have been written in a gentler,
% introductory style.  You may also wish to include a reference
% section, documenting all the functions/exceptions/constants.
% The following is a model for such a reference section, for
% an extension module written in C.

\section{Extension Module \module{spamsprock}}
\exmodindex{spamsprock}		% Set the module name for the index
\label{module-spamsprock}       % Create a label for cross-references

A \C{} module is provided to perform spammification operations very
quickly.  It exports a function, an exception, and some constants.

% A function definition
\begin{funcdesc}{spammify}{sprocket\optional{, options}}
Spammify the sprocket given as \var{sprocket}.  Flags my be
bitwise-ORed together and passed as \var{options}.
\end{funcdesc}

% An exception definition
\begin{excdesc}{SpamError}
The exception that is raised when spammification fails, or just takes
too long.
\end{excdesc}

% A definition of two constants
\begin{datadesc}{FROBNICATE}
Value to be used for the \var{options} parameter to
\function{spammify()} to indicate that the \var{sprocket} parameter to 
that function should be frobnicated as well as spammified.
\end{datadesc}

\begin{datadesc}{NO_FROBNICATE}
As with \constant{FROBNICATE}, but indicates that frobnication should
not be performed.  The default is to frobnicate randomly.
\end{datadesc}


% The following section is a model for documenting modules written in
% Python. 

\section{Module \module{sprunkit}}
\modindex{ezspam}
\label{module-sprunkit}

This module provides a high level interface to spammification
operations.  It provides an interesting base class and an exception.

% A class definition
\begin{classdesc}{SprunkSprocket}{\optional{path}}
A Python-only implementation of a persistent sprocket.  The \var{path} 
parameter should refer to a spocket definition file.  If omitted, a
new sprocket is created.
\end{classdesc}

% An exception definition
\begin{excdesc}{PersistenceError}
Exception raised when the \method{save()} method of a
\class{SprunkSprockit} instance fails.
\end{excdesc}


\subsection{\class{SprunkSprocket} Objects}

\class{SprunkSprocket} objects have the following methods:

\begin{funcdesc}{save}{\optional{path}}
Save the sprocket in the file specified by \var{path}.  If \var{path}
is omitted, the \var{path} specified to the constructor is used.  If
neither was specified, raises the \exception{PersistenceError}
exception.
\end{funcdesc}


\begin{funcdesc}{persist}{path}
Set the default file name that the \method{save()} method will use.
\end{funcdesc}


\begin{funcdesc}{insist}{}
Make the sprocket assert itself.  This method cannot fail.
\end{funcdesc}


\appendix

\section{This is an Appendix}

To create an appendix in a Python HOWTO document, use markup like
this:

\begin{verbatim}
\appendix

\section{This is an Appendix}

To create an appendix in a Python HOWTO document, ....


\section{This is another}

Just add another \section{}, but don't say \appendix again.
\end{verbatim}


\end{document}
