\section{Standard Module \sectcode{nntplib}}
\stmodindex{nntplib}

\renewcommand{\indexsubitem}{(in module nntplib)}

This module defines the class \code{NNTP} which implements the client
side of the NNTP protocol.  It can be used to implement a news reader
or poster, or automated news processors.  For more information on NNTP
(Network News Transfer Protocol), see Internet RFC 977.

Here are two small examples of how it can be used.  To list some
statistics about a newsgroup and print the subjects of the last 10
articles:

\small{
\begin{verbatim}
>>> s = NNTP('news.cwi.nl')
>>> resp, count, first, last, name = s.group('comp.lang.python')
>>> print 'Group', name, 'has', count, 'articles, range', first, 'to', last
Group comp.lang.python has 59 articles, range 3742 to 3803
>>> resp, subs = s.xhdr('subject', first + '-' + last)
>>> for id, sub in subs[-10:]: print id, sub
... 
3792 Re: Removing elements from a list while iterating...
3793 Re: Who likes Info files?
3794 Emacs and doc strings
3795 a few questions about the Mac implementation
3796 Re: executable python scripts
3797 Re: executable python scripts
3798 Re: a few questions about the Mac implementation 
3799 Re: PROPOSAL: A Generic Python Object Interface for Python C Modules
3802 Re: executable python scripts 
3803 Re: POSIX wait and SIGCHLD
>>> s.quit()
'205 news.cwi.nl closing connection.  Goodbye.'
>>> 
\end{verbatim}
}

To post an article from a file (this assumes that the article has
valid headers):

\begin{verbatim}
>>> s = NNTP('news.cwi.nl')
>>> f = open('/tmp/article')
>>> s.post(f)
'240 Article posted successfully.'
>>> s.quit()
'205 news.cwi.nl closing connection.  Goodbye.'
>>> 
\end{verbatim}

The module itself defines the following items:

\begin{funcdesc}{NNTP}{host\optional{\, port}}
Return a new instance of the \code{NNTP} class, representing a
connection to the NNTP server running on host \var{host}, listening at
port \var{port}.  The default \var{port} is 119.
\end{funcdesc}

\begin{excdesc}{error_reply}
Exception raised when an unexpected reply is received from the server.
\end{excdesc}

\begin{excdesc}{error_temp}
Exception raised when an error code in the range 400--499 is received.
\end{excdesc}

\begin{excdesc}{error_perm}
Exception raised when an error code in the range 500--599 is received.
\end{excdesc}

\begin{excdesc}{error_proto}
Exception raised when a reply is received from the server that does
not begin with a digit in the range 1--5.
\end{excdesc}

\subsection{NNTP Objects}

NNTP instances have the following methods.  The \var{response} that is
returned as the first item in the return tuple of almost all methods
is the server's response: a string beginning with a three-digit code.
If the server's response indicates an error, the method raises one of
the above exceptions.

\renewcommand{\indexsubitem}{(NNTP object method)}

\begin{funcdesc}{getwelcome}{}
Return the welcome message sent by the server in reply to the initial
connection.  (This message sometimes contains disclaimers or help
information that may be relevant to the user.)
\end{funcdesc}

\begin{funcdesc}{set_debuglevel}{level}
Set the instance's debugging level.  This controls the amount of
debugging output printed.  The default, 0, produces no debugging
output.  A value of 1 produces a moderate amount of debugging output,
generally a single line per request or response.  A value of 2 or
higher produces the maximum amount of debugging output, logging each
line sent and received on the connection (including message text).
\end{funcdesc}

\begin{funcdesc}{newgroups}{date\, time}
Send a \samp{NEWGROUPS} command.  The \var{date} argument should be a
string of the form \code{"\var{yy}\var{mm}\var{dd}"} indicating the
date, and \var{time} should be a string of the form
\code{"\var{hh}\var{mm}\var{ss}"} indicating the time.  Return a pair
\code{(\var{response}, \var{groups})} where \var{groups} is a list of
group names that are new since the given date and time.
\end{funcdesc}

\begin{funcdesc}{newnews}{group\, date\, time}
Send a \samp{NEWNEWS} command.  Here, \var{group} is a group name or
\code{"*"}, and \var{date} and \var{time} have the same meaning as for
\code{newgroups()}.  Return a pair \code{(\var{response},
\var{articles})} where \var{articles} is a list of article ids.
\end{funcdesc}

\begin{funcdesc}{list}{}
Send a \samp{LIST} command.  Return a pair \code{(\var{response},
\var{list})} where \var{list} is a list of tuples.  Each tuple has the
form \code{(\var{group}, \var{last}, \var{first}, \var{flag})}, where
\var{group} is a group name, \var{last} and \var{first} are the last
and first article numbers (as strings), and \var{flag} is \code{'y'}
if posting is allowed, \code{'n'} if not, and \code{'m'} if the
newsgroup is moderated.  (Note the ordering: \var{last}, \var{first}.)
\end{funcdesc}

\begin{funcdesc}{group}{name}
Send a \samp{GROUP} command, where \var{name} is the group name.
Return a tuple \code{(\var{response}, \var{count}, \var{first},
\var{last}, \var{name})} where \var{count} is the (estimated) number
of articles in the group, \var{first} is the first article number in
the group, \var{last} is the last article number in the group, and
\var{name} is the group name.  The numbers are returned as strings.
\end{funcdesc}

\begin{funcdesc}{help}{}
Send a \samp{HELP} command.  Return a pair \code{(\var{response},
\var{list})} where \var{list} is a list of help strings.
\end{funcdesc}

\begin{funcdesc}{stat}{id}
Send a \samp{STAT} command, where \var{id} is the message id (enclosed
in \samp{<} and \samp{>}) or an article number (as a string).
Return a triple \code{(\var{response}, \var{number}, \var{id})} where
\var{number} is the article number (as a string) and \var{id} is the
article id  (enclosed in \samp{<} and \samp{>}).
\end{funcdesc}

\begin{funcdesc}{next}{}
Send a \samp{NEXT} command.  Return as for \code{stat()}.
\end{funcdesc}

\begin{funcdesc}{last}{}
Send a \samp{LAST} command.  Return as for \code{stat()}.
\end{funcdesc}

\begin{funcdesc}{head}{id}
Send a \samp{HEAD} command, where \var{id} has the same meaning as for
\code{stat()}.  Return a pair \code{(\var{response}, \var{list})}
where \var{list} is a list of the article's headers (an uninterpreted
list of lines, without trailing newlines).
\end{funcdesc}

\begin{funcdesc}{body}{id}
Send a \samp{BODY} command, where \var{id} has the same meaning as for
\code{stat()}.  Return a pair \code{(\var{response}, \var{list})}
where \var{list} is a list of the article's body text (an
uninterpreted list of lines, without trailing newlines).
\end{funcdesc}

\begin{funcdesc}{article}{id}
Send a \samp{ARTICLE} command, where \var{id} has the same meaning as
for \code{stat()}.  Return a pair \code{(\var{response}, \var{list})}
where \var{list} is a list of the article's header and body text (an
uninterpreted list of lines, without trailing newlines).
\end{funcdesc}

\begin{funcdesc}{slave}{}
Send a \samp{SLAVE} command.  Return the server's \var{response}.
\end{funcdesc}

\begin{funcdesc}{xhdr}{header\, string}
Send an \samp{XHDR} command.  This command is not defined in the RFC
but is a common extension.  The \var{header} argument is a header
keyword, e.g. \code{"subject"}.  The \var{string} argument should have
the form \code{"\var{first}-\var{last}"} where \var{first} and
\var{last} are the first and last article numbers to search.  Return a
pair \code{(\var{response}, \var{list})}, where \var{list} is a list of
pairs \code{(\var{id}, \var{text})}, where \var{id} is an article id
(as a string) and \var{text} is the text of the requested header for
that article.
\end{funcdesc}

\begin{funcdesc}{post}{file}
Post an article using the \samp{POST} command.  The \var{file}
argument is an open file object which is read until EOF using its
\code{readline()} method.  It should be a well-formed news article,
including the required headers.  The \code{post()} method
automatically escapes lines beginning with \samp{.}.
\end{funcdesc}

\begin{funcdesc}{ihave}{id\, file}
Send an \samp{IHAVE} command.  If the response is not an error, treat
\var{file} exactly as for the \code{post()} method.
\end{funcdesc}

\begin{funcdesc}{quit}{}
Send a \samp{QUIT} command and close the connection.  Once this method
has been called, no other methods of the NNTP object should be called.
\end{funcdesc}
