\section{\module{nntplib} ---
         NNTP protocol client}

\declaremodule{standard}{nntplib}
\modulesynopsis{NNTP protocol client (requires sockets).}

\indexii{NNTP}{protocol}
\index{Network News Transfer Protocol}

This module defines the class \class{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:

\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{classdesc}{NNTP}{host\optional{, port
                        \optional{, user\optional{, password
			\optional{, readermode}}}}}
Return a new instance of the \class{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.  If the optional
\var{user} and \var{password} are provided, 
or if suitable credentials are present in \file{~/.netrc},
the \samp{AUTHINFO USER} and \samp{AUTHINFO PASS} commands are used to
identify and authenticate the user to the server.  If the optional
flag \var{readermode} is true, then a \samp{mode reader} command is
sent before authentication is performed.  Reader mode is sometimes
necessary if you are connecting to an NNTP server on the local machine
and intend to call reader-specific commands, such as \samp{group}.  If
you get unexpected \code{NNTPPermanentError}s, you might need to set
\var{readermode}.  \var{readermode} defaults to \code{None}.
\end{classdesc}

\begin{classdesc}{NNTPError}{}
Derived from the standard exception \code{Exception}, this is the base
class for all exceptions raised by the \code{nntplib} module.
\end{classdesc}

\begin{classdesc}{NNTPReplyError}{}
Exception raised when an unexpected reply is received from the
server.  For backwards compatibility, the exception \code{error_reply}
is equivalent to this class.
\end{classdesc}

\begin{classdesc}{NNTPTemporaryError}{}
Exception raised when an error code in the range 400--499 is
received.  For backwards compatibility, the exception
\code{error_temp} is equivalent to this class.
\end{classdesc}

\begin{classdesc}{NNTPPermanentError}{}
Exception raised when an error code in the range 500--599 is
received.  For backwards compatibility, the exception
\code{error_perm} is equivalent to this class.
\end{classdesc}

\begin{classdesc}{NNTPProtocolError}{}
Exception raised when a reply is received from the server that does
not begin with a digit in the range 1--5.  For backwards
compatibility, the exception \code{error_proto} is equivalent to this
class.
\end{classdesc}

\begin{classdesc}{NNTPDataError}{}
Exception raised when there is some error in the response data.  For
backwards compatibility, the exception \code{error_data} is
equivalent to this class.
\end{classdesc}


\subsection{NNTP Objects \label{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.


\begin{methoddesc}{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{methoddesc}

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

\begin{methoddesc}{newgroups}{date, time, \optional{file}}
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.
If the \var{file} parameter is supplied, then the output of the 
\samp{NEWGROUPS} command is stored in a file.  If \var{file} is a string, 
then the method will open a file object with that name, write to it 
then close it.  If \var{file} is a file object, then it will start
calling \method{write()} on it to store the lines of the command output.
If \var{file} is supplied, then the returned \var{list} is an empty list.
\end{methoddesc}

\begin{methoddesc}{newnews}{group, date, time, \optional{file}}
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
\method{newgroups()}.  Return a pair \code{(\var{response},
\var{articles})} where \var{articles} is a list of article ids.
If the \var{file} parameter is supplied, then the output of the 
\samp{NEWNEWS} command is stored in a file.  If \var{file} is a string, 
then the method will open a file object with that name, write to it 
then close it.  If \var{file} is a file object, then it will start
calling \method{write()} on it to store the lines of the command output.
If \var{file} is supplied, then the returned \var{list} is an empty list.
\end{methoddesc}

\begin{methoddesc}{list}{\optional{file}}
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}.)
If the \var{file} parameter is supplied, then the output of the 
\samp{LIST} command is stored in a file.  If \var{file} is a string, 
then the method will open a file object with that name, write to it 
then close it.  If \var{file} is a file object, then it will start
calling \method{write()} on it to store the lines of the command output.
If \var{file} is supplied, then the returned \var{list} is an empty list.
\end{methoddesc}

\begin{methoddesc}{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{methoddesc}

\begin{methoddesc}{help}{\optional{file}}
Send a \samp{HELP} command.  Return a pair \code{(\var{response},
\var{list})} where \var{list} is a list of help strings.
If the \var{file} parameter is supplied, then the output of the 
\samp{HELP} command is stored in a file.  If \var{file} is a string, 
then the method will open a file object with that name, write to it 
then close it.  If \var{file} is a file object, then it will start
calling \method{write()} on it to store the lines of the command output.
If \var{file} is supplied, then the returned \var{list} is an empty list.
\end{methoddesc}

\begin{methoddesc}{stat}{id}
Send a \samp{STAT} command, where \var{id} is the message id (enclosed
in \character{<} and \character{>}) 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 \character{<} and \character{>}).
\end{methoddesc}

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

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

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

\begin{methoddesc}{body}{id,\optional{file}}
Send a \samp{BODY} command, where \var{id} has the same meaning as for
\method{stat()}.  If the \var{file} parameter is supplied, then
the body is stored in a file.  If \var{file} is a string, then
the method will open a file object with that name, write to it then close it.
If \var{file} is a file object, then it will start calling
\method{write()} on it to store the lines of the body.
Return as for \method{head()}.  If \var{file} is supplied, then
the returned \var{list} is an empty list.
\end{methoddesc}

\begin{methoddesc}{article}{id}
Send an \samp{ARTICLE} command, where \var{id} has the same meaning as
for \method{stat()}.  Return as for \method{head()}.
\end{methoddesc}

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

\begin{methoddesc}{xhdr}{header, string, \optional{file}}
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.
If the \var{file} parameter is supplied, then the output of the 
\samp{XHDR} command is stored in a file.  If \var{file} is a string, 
then the method will open a file object with that name, write to it 
then close it.  If \var{file} is a file object, then it will start
calling \method{write()} on it to store the lines of the command output.
If \var{file} is supplied, then the returned \var{list} is an empty list.
\end{methoddesc}

\begin{methoddesc}{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
\method{readline()} method.  It should be a well-formed news article,
including the required headers.  The \method{post()} method
automatically escapes lines beginning with \samp{.}.
\end{methoddesc}

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

\begin{methoddesc}{date}{}
Return a triple \code{(\var{response}, \var{date}, \var{time})},
containing the current date and time in a form suitable for the
\method{newnews()} and \method{newgroups()} methods.
This is an optional NNTP extension, and may not be supported by all
servers.
\end{methoddesc}

\begin{methoddesc}{xgtitle}{name, \optional{file}}
Process an \samp{XGTITLE} command, returning a pair \code{(\var{response},
\var{list})}, where \var{list} is a list of tuples containing
\code{(\var{name}, \var{title})}.
% XXX huh?  Should that be name, description?
If the \var{file} parameter is supplied, then the output of the 
\samp{XGTITLE} command is stored in a file.  If \var{file} is a string, 
then the method will open a file object with that name, write to it 
then close it.  If \var{file} is a file object, then it will start
calling \method{write()} on it to store the lines of the command output.
If \var{file} is supplied, then the returned \var{list} is an empty list.
This is an optional NNTP extension, and may not be supported by all
servers.
\end{methoddesc}

\begin{methoddesc}{xover}{start, end, \optional{file}}
Return a pair \code{(\var{resp}, \var{list})}.  \var{list} is a list
of tuples, one for each article in the range delimited by the \var{start}
and \var{end} article numbers.  Each tuple is of the form
\code{(\var{article number}, \var{subject}, \var{poster}, \var{date},
\var{id}, \var{references}, \var{size}, \var{lines})}.
If the \var{file} parameter is supplied, then the output of the 
\samp{XOVER} command is stored in a file.  If \var{file} is a string, 
then the method will open a file object with that name, write to it 
then close it.  If \var{file} is a file object, then it will start
calling \method{write()} on it to store the lines of the command output.
If \var{file} is supplied, then the returned \var{list} is an empty list.
This is an optional NNTP extension, and may not be supported by all
servers.
\end{methoddesc}

\begin{methoddesc}{xpath}{id}
Return a pair \code{(\var{resp}, \var{path})}, where \var{path} is the
directory path to the article with message ID \var{id}.  This is an
optional NNTP extension, and may not be supported by all servers.
\end{methoddesc}

\begin{methoddesc}{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{methoddesc}
