blob: b8d7e5f1de407b798430c8312cc9dc69566abe93 [file] [log] [blame]
Fred Drake295da241998-08-10 19:42:37 +00001\section{\module{nntplib} ---
2 NNTP protocol client.}
Fred Drakeb91e9341998-07-23 17:59:49 +00003\declaremodule{standard}{nntplib}
4
5\modulesynopsis{NNTP protocol client (requires sockets).}
6
Fred Drake6279fcc1998-01-07 13:23:32 +00007\indexii{NNTP}{protocol}
Fred Drake3f6034d1998-07-02 19:33:43 +00008\index{Network News Transfer Protocol}
Guido van Rossum86751151995-02-28 17:14:32 +00009
Guido van Rossum86751151995-02-28 17:14:32 +000010
Fred Drakefc576191998-04-04 07:15:02 +000011This module defines the class \class{NNTP} which implements the client
Guido van Rossumcca8d2b1995-03-22 15:48:46 +000012side of the NNTP protocol. It can be used to implement a news reader
13or poster, or automated news processors. For more information on NNTP
Fred Drakec5891241998-02-09 19:16:20 +000014(Network News Transfer Protocol), see Internet \rfc{977}.
Guido van Rossumcca8d2b1995-03-22 15:48:46 +000015
Guido van Rossum1b91cda1995-03-24 15:56:02 +000016Here are two small examples of how it can be used. To list some
17statistics about a newsgroup and print the subjects of the last 10
18articles:
Guido van Rossumcca8d2b1995-03-22 15:48:46 +000019
Fred Drake19479911998-02-13 06:58:54 +000020\begin{verbatim}
Guido van Rossumcca8d2b1995-03-22 15:48:46 +000021>>> s = NNTP('news.cwi.nl')
22>>> resp, count, first, last, name = s.group('comp.lang.python')
23>>> print 'Group', name, 'has', count, 'articles, range', first, 'to', last
24Group comp.lang.python has 59 articles, range 3742 to 3803
25>>> resp, subs = s.xhdr('subject', first + '-' + last)
26>>> for id, sub in subs[-10:]: print id, sub
27...
283792 Re: Removing elements from a list while iterating...
293793 Re: Who likes Info files?
303794 Emacs and doc strings
313795 a few questions about the Mac implementation
323796 Re: executable python scripts
333797 Re: executable python scripts
343798 Re: a few questions about the Mac implementation
353799 Re: PROPOSAL: A Generic Python Object Interface for Python C Modules
363802 Re: executable python scripts
Fred Drake65b32f71998-02-09 20:27:12 +0000373803 Re: \POSIX{} wait and SIGCHLD
Guido van Rossumcca8d2b1995-03-22 15:48:46 +000038>>> s.quit()
39'205 news.cwi.nl closing connection. Goodbye.'
Fred Drake19479911998-02-13 06:58:54 +000040\end{verbatim}
Guido van Rossumcca8d2b1995-03-22 15:48:46 +000041
42To post an article from a file (this assumes that the article has
43valid headers):
44
Fred Drake19479911998-02-13 06:58:54 +000045\begin{verbatim}
Guido van Rossumcca8d2b1995-03-22 15:48:46 +000046>>> s = NNTP('news.cwi.nl')
47>>> f = open('/tmp/article')
48>>> s.post(f)
49'240 Article posted successfully.'
50>>> s.quit()
51'205 news.cwi.nl closing connection. Goodbye.'
Fred Drake19479911998-02-13 06:58:54 +000052\end{verbatim}
Guido van Rossume47da0a1997-07-17 16:34:52 +000053%
Guido van Rossum1b91cda1995-03-24 15:56:02 +000054The module itself defines the following items:
55
Fred Drakec46973c1998-11-16 17:11:30 +000056\begin{classdesc}{NNTP}{host\optional{, port
57 \optional{, user\optional{, password}}}}
Fred Drakefc576191998-04-04 07:15:02 +000058Return a new instance of the \class{NNTP} class, representing a
Guido van Rossum1b91cda1995-03-24 15:56:02 +000059connection to the NNTP server running on host \var{host}, listening at
Fred Drakec46973c1998-11-16 17:11:30 +000060port \var{port}. The default \var{port} is 119. If the optional
61\var{user} and \var{password} are provided, the \samp{AUTHINFO USER}
62and \samp{AUTHINFO PASS} commands are used to identify and
63authenticate the user to the server.
Fred Drakefc576191998-04-04 07:15:02 +000064\end{classdesc}
Guido van Rossum1b91cda1995-03-24 15:56:02 +000065
66\begin{excdesc}{error_reply}
67Exception raised when an unexpected reply is received from the server.
68\end{excdesc}
69
70\begin{excdesc}{error_temp}
71Exception raised when an error code in the range 400--499 is received.
72\end{excdesc}
73
74\begin{excdesc}{error_perm}
75Exception raised when an error code in the range 500--599 is received.
76\end{excdesc}
77
78\begin{excdesc}{error_proto}
79Exception raised when a reply is received from the server that does
80not begin with a digit in the range 1--5.
81\end{excdesc}
82
Fred Drakefc576191998-04-04 07:15:02 +000083
Guido van Rossum1b91cda1995-03-24 15:56:02 +000084\subsection{NNTP Objects}
Fred Drakefc576191998-04-04 07:15:02 +000085\label{nntp-objects}
Guido van Rossum1b91cda1995-03-24 15:56:02 +000086
87NNTP instances have the following methods. The \var{response} that is
88returned as the first item in the return tuple of almost all methods
89is the server's response: a string beginning with a three-digit code.
90If the server's response indicates an error, the method raises one of
91the above exceptions.
92
Guido van Rossum1b91cda1995-03-24 15:56:02 +000093
Fred Drakefc576191998-04-04 07:15:02 +000094\begin{methoddesc}{getwelcome}{}
Guido van Rossum1b91cda1995-03-24 15:56:02 +000095Return the welcome message sent by the server in reply to the initial
96connection. (This message sometimes contains disclaimers or help
97information that may be relevant to the user.)
Fred Drakefc576191998-04-04 07:15:02 +000098\end{methoddesc}
Guido van Rossum1b91cda1995-03-24 15:56:02 +000099
Fred Drakefc576191998-04-04 07:15:02 +0000100\begin{methoddesc}{set_debuglevel}{level}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000101Set the instance's debugging level. This controls the amount of
Fred Drakefc576191998-04-04 07:15:02 +0000102debugging output printed. The default, \code{0}, produces no debugging
103output. A value of \code{1} produces a moderate amount of debugging
104output, generally a single line per request or response. A value of
105\code{2} or higher produces the maximum amount of debugging output,
106logging each line sent and received on the connection (including
107message text).
108\end{methoddesc}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000109
Fred Drakefc576191998-04-04 07:15:02 +0000110\begin{methoddesc}{newgroups}{date, time}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000111Send a \samp{NEWGROUPS} command. The \var{date} argument should be a
112string of the form \code{"\var{yy}\var{mm}\var{dd}"} indicating the
113date, and \var{time} should be a string of the form
114\code{"\var{hh}\var{mm}\var{ss}"} indicating the time. Return a pair
115\code{(\var{response}, \var{groups})} where \var{groups} is a list of
116group names that are new since the given date and time.
Fred Drakefc576191998-04-04 07:15:02 +0000117\end{methoddesc}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000118
Fred Drakefc576191998-04-04 07:15:02 +0000119\begin{methoddesc}{newnews}{group, date, time}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000120Send a \samp{NEWNEWS} command. Here, \var{group} is a group name or
Fred Drakefc576191998-04-04 07:15:02 +0000121\code{'*'}, and \var{date} and \var{time} have the same meaning as for
122\method{newgroups()}. Return a pair \code{(\var{response},
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000123\var{articles})} where \var{articles} is a list of article ids.
Fred Drakefc576191998-04-04 07:15:02 +0000124\end{methoddesc}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000125
Fred Drakefc576191998-04-04 07:15:02 +0000126\begin{methoddesc}{list}{}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000127Send a \samp{LIST} command. Return a pair \code{(\var{response},
128\var{list})} where \var{list} is a list of tuples. Each tuple has the
129form \code{(\var{group}, \var{last}, \var{first}, \var{flag})}, where
130\var{group} is a group name, \var{last} and \var{first} are the last
131and first article numbers (as strings), and \var{flag} is \code{'y'}
132if posting is allowed, \code{'n'} if not, and \code{'m'} if the
133newsgroup is moderated. (Note the ordering: \var{last}, \var{first}.)
Fred Drakefc576191998-04-04 07:15:02 +0000134\end{methoddesc}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000135
Fred Drakefc576191998-04-04 07:15:02 +0000136\begin{methoddesc}{group}{name}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000137Send a \samp{GROUP} command, where \var{name} is the group name.
Fred Drakefc576191998-04-04 07:15:02 +0000138Return a tuple \code{(}\var{response}\code{,} \var{count}\code{,}
139\var{first}\code{,} \var{last}\code{,} \var{name}\code{)} where
140\var{count} is the (estimated) number of articles in the group,
141\var{first} is the first article number in the group, \var{last} is
142the last article number in the group, and \var{name} is the group
143name. The numbers are returned as strings.
144\end{methoddesc}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000145
Fred Drakefc576191998-04-04 07:15:02 +0000146\begin{methoddesc}{help}{}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000147Send a \samp{HELP} command. Return a pair \code{(\var{response},
148\var{list})} where \var{list} is a list of help strings.
Fred Drakefc576191998-04-04 07:15:02 +0000149\end{methoddesc}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000150
Fred Drakefc576191998-04-04 07:15:02 +0000151\begin{methoddesc}{stat}{id}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000152Send a \samp{STAT} command, where \var{id} is the message id (enclosed
Fred Drakefc576191998-04-04 07:15:02 +0000153in \character{<} and \character{>}) or an article number (as a string).
Fred Drake4b3f0311996-12-13 22:04:31 +0000154Return a triple \code{(\var{response}, \var{number}, \var{id})} where
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000155\var{number} is the article number (as a string) and \var{id} is the
Fred Drakefc576191998-04-04 07:15:02 +0000156article id (enclosed in \character{<} and \character{>}).
157\end{methoddesc}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000158
Fred Drakefc576191998-04-04 07:15:02 +0000159\begin{methoddesc}{next}{}
160Send a \samp{NEXT} command. Return as for \method{stat()}.
161\end{methoddesc}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000162
Fred Drakefc576191998-04-04 07:15:02 +0000163\begin{methoddesc}{last}{}
164Send a \samp{LAST} command. Return as for \method{stat()}.
165\end{methoddesc}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000166
Fred Drakefc576191998-04-04 07:15:02 +0000167\begin{methoddesc}{head}{id}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000168Send a \samp{HEAD} command, where \var{id} has the same meaning as for
Guido van Rossumcd905091998-06-30 14:53:41 +0000169\method{stat()}. Return a tuple
170\code{(\var{response}, \var{number}, \var{id}, \var{list})}
171where the first three are the same as for \method{stat()},
172and \var{list} is a list of the article's headers (an uninterpreted
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000173list of lines, without trailing newlines).
Fred Drakefc576191998-04-04 07:15:02 +0000174\end{methoddesc}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000175
Fred Drakefc576191998-04-04 07:15:02 +0000176\begin{methoddesc}{body}{id}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000177Send a \samp{BODY} command, where \var{id} has the same meaning as for
Guido van Rossumcd905091998-06-30 14:53:41 +0000178\method{stat()}. Return as for \method{head()}.
Fred Drakefc576191998-04-04 07:15:02 +0000179\end{methoddesc}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000180
Fred Drakefc576191998-04-04 07:15:02 +0000181\begin{methoddesc}{article}{id}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000182Send a \samp{ARTICLE} command, where \var{id} has the same meaning as
Guido van Rossumcd905091998-06-30 14:53:41 +0000183for \method{stat()}. Return as for \method{head()}.
Fred Drakefc576191998-04-04 07:15:02 +0000184\end{methoddesc}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000185
Fred Drakefc576191998-04-04 07:15:02 +0000186\begin{methoddesc}{slave}{}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000187Send a \samp{SLAVE} command. Return the server's \var{response}.
Fred Drakefc576191998-04-04 07:15:02 +0000188\end{methoddesc}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000189
Fred Drakefc576191998-04-04 07:15:02 +0000190\begin{methoddesc}{xhdr}{header, string}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000191Send an \samp{XHDR} command. This command is not defined in the RFC
192but is a common extension. The \var{header} argument is a header
Fred Drakefc576191998-04-04 07:15:02 +0000193keyword, e.g. \code{'subject'}. The \var{string} argument should have
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000194the form \code{"\var{first}-\var{last}"} where \var{first} and
195\var{last} are the first and last article numbers to search. Return a
196pair \code{(\var{response}, \var{list})}, where \var{list} is a list of
197pairs \code{(\var{id}, \var{text})}, where \var{id} is an article id
198(as a string) and \var{text} is the text of the requested header for
199that article.
Fred Drakefc576191998-04-04 07:15:02 +0000200\end{methoddesc}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000201
Fred Drakefc576191998-04-04 07:15:02 +0000202\begin{methoddesc}{post}{file}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000203Post an article using the \samp{POST} command. The \var{file}
204argument is an open file object which is read until EOF using its
Fred Drakefc576191998-04-04 07:15:02 +0000205\method{readline()} method. It should be a well-formed news article,
206including the required headers. The \method{post()} method
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000207automatically escapes lines beginning with \samp{.}.
Fred Drakefc576191998-04-04 07:15:02 +0000208\end{methoddesc}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000209
Fred Drakefc576191998-04-04 07:15:02 +0000210\begin{methoddesc}{ihave}{id, file}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000211Send an \samp{IHAVE} command. If the response is not an error, treat
Fred Drakefc576191998-04-04 07:15:02 +0000212\var{file} exactly as for the \method{post()} method.
213\end{methoddesc}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000214
Fred Drakefc576191998-04-04 07:15:02 +0000215\begin{methoddesc}{date}{}
Guido van Rossum94adab51997-06-02 17:27:50 +0000216Return a triple \code{(\var{response}, \var{date}, \var{time})},
217containing the current date and time in a form suitable for the
Fred Drakefc576191998-04-04 07:15:02 +0000218\method{newnews()} and \method{newgroups()} methods.
Guido van Rossum94adab51997-06-02 17:27:50 +0000219This is an optional NNTP extension, and may not be supported by all
220servers.
Fred Drakefc576191998-04-04 07:15:02 +0000221\end{methoddesc}
Guido van Rossum94adab51997-06-02 17:27:50 +0000222
Fred Drakefc576191998-04-04 07:15:02 +0000223\begin{methoddesc}{xgtitle}{name}
224Process an \samp{XGTITLE} command, returning a pair \code{(\var{response},
Fred Drakefac431e1998-02-16 21:57:37 +0000225\var{list})}, where \var{list} is a list of tuples containing
Guido van Rossum94adab51997-06-02 17:27:50 +0000226\code{(\var{name}, \var{title})}.
227% XXX huh? Should that be name, description?
228This is an optional NNTP extension, and may not be supported by all
229servers.
Fred Drakefc576191998-04-04 07:15:02 +0000230\end{methoddesc}
Guido van Rossum94adab51997-06-02 17:27:50 +0000231
Fred Drakefc576191998-04-04 07:15:02 +0000232\begin{methoddesc}{xover}{start, end}
Guido van Rossum94adab51997-06-02 17:27:50 +0000233Return a pair \code{(\var{resp}, \var{list})}. \var{list} is a list
234of tuples, one for each article in the range delimited by the \var{start}
235and \var{end} article numbers. Each tuple is of the form
Fred Drakefac431e1998-02-16 21:57:37 +0000236\code{(}\var{article number}\code{,} \var{subject}\code{,}
237\var{poster}\code{,} \var{date}\code{,} \var{id}\code{,}
238\var{references}\code{,} \var{size}\code{,} \var{lines}\code{)}.
Guido van Rossum94adab51997-06-02 17:27:50 +0000239This is an optional NNTP extension, and may not be supported by all
240servers.
Fred Drakefc576191998-04-04 07:15:02 +0000241\end{methoddesc}
Guido van Rossum94adab51997-06-02 17:27:50 +0000242
Fred Drakefc576191998-04-04 07:15:02 +0000243\begin{methoddesc}{xpath}{id}
Guido van Rossum94adab51997-06-02 17:27:50 +0000244Return a pair \code{(\var{resp}, \var{path})}, where \var{path} is the
245directory path to the article with message ID \var{id}. This is an
246optional NNTP extension, and may not be supported by all servers.
Fred Drakefc576191998-04-04 07:15:02 +0000247\end{methoddesc}
Guido van Rossum94adab51997-06-02 17:27:50 +0000248
Fred Drakefc576191998-04-04 07:15:02 +0000249\begin{methoddesc}{quit}{}
Guido van Rossum1b91cda1995-03-24 15:56:02 +0000250Send a \samp{QUIT} command and close the connection. Once this method
251has been called, no other methods of the NNTP object should be called.
Fred Drakefc576191998-04-04 07:15:02 +0000252\end{methoddesc}