\section{\module{pyclbr} ---
         Python class browser support}

\declaremodule{standard}{pyclbr}
\modulesynopsis{Supports information extraction for a Python class
                browser.}
\sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org}


The \module{pyclbr} can be used to determine some limited information
about the classes, methods and top-level functions
defined in a module.  The information
provided is sufficient to implement a traditional three-pane class
browser.  The information is extracted from the source code rather
than by importing the module, so this module is safe to use with
untrusted source code.  This restriction makes it impossible to use
this module with modules not implemented in Python, including many
standard and optional extension modules.


\begin{funcdesc}{readmodule}{module\optional{, path}}
  % The 'inpackage' parameter appears to be for internal use only....
  Read a module and return a dictionary mapping class names to class
  descriptor objects.  The parameter \var{module} should be the name
  of a module as a string; it may be the name of a module within a
  package.  The \var{path} parameter should be a sequence, and is used
  to augment the value of \code{sys.path}, which is used to locate
  module source code.
\end{funcdesc}

\begin{funcdesc}{readmodule_ex}{module\optional{, path}}
  % The 'inpackage' parameter appears to be for internal use only....
  Like \function{readmodule()}, but the returned dictionary, in addition
  to mapping class names to class descriptor objects, also maps
  top-level function names to function descriptor objects.  Moreover, if
  the module being read is a package, the key \code{'__path__'} in the
  returned dictionary has as its value a list which contains the package
  search path.
\end{funcdesc}


\subsection{Class Descriptor Objects \label{pyclbr-class-objects}}

The class descriptor objects used as values in the dictionary returned
by \function{readmodule()} and \function{readmodule_ex()}
provide the following data members:


\begin{memberdesc}[class descriptor]{module}
  The name of the module defining the class described by the class
  descriptor.
\end{memberdesc}

\begin{memberdesc}[class descriptor]{name}
  The name of the class.
\end{memberdesc}

\begin{memberdesc}[class descriptor]{super}
  A list of class descriptors which describe the immediate base
  classes of the class being described.  Classes which are named as
  superclasses but which are not discoverable by
  \function{readmodule()} are listed as a string with the class name
  instead of class descriptors.
\end{memberdesc}

\begin{memberdesc}[class descriptor]{methods}
  A dictionary mapping method names to line numbers.
\end{memberdesc}

\begin{memberdesc}[class descriptor]{file}
  Name of the file containing the \code{class} statement defining the class.
\end{memberdesc}

\begin{memberdesc}[class descriptor]{lineno}
  The line number of the \code{class} statement within the file named by
  \member{file}.
\end{memberdesc}

\subsection{Function Descriptor Objects \label{pyclbr-function-objects}}

The function descriptor objects used as values in the dictionary returned
by \function{readmodule_ex()} provide the following data members:


\begin{memberdesc}[function descriptor]{module}
  The name of the module defining the function described by the function
  descriptor.
\end{memberdesc}

\begin{memberdesc}[function descriptor]{name}
  The name of the function.
\end{memberdesc}

\begin{memberdesc}[function descriptor]{file}
  Name of the file containing the \code{def} statement defining the function.
\end{memberdesc}

\begin{memberdesc}[function descriptor]{lineno}
  The line number of the \code{def} statement within the file named by
  \member{file}.
\end{memberdesc}

