mirror of https://github.com/python/cpython
Patch #605370: Add description[s] for RFC 2980 compliance.
This commit is contained in:
parent
32d0c1b458
commit
cc0f93233a
|
@ -175,6 +175,23 @@ 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.
|
||||
|
||||
\begin{methoddesc}{descriptions}{grouppattern}
|
||||
Send a \samp{LIST NEWSGROUPS} command, where \var{grouppattern} is a wildmat
|
||||
string as specified in RFC2980 (it's essentially the same as DOS or UNIX
|
||||
shell wildcard strings). Return a pair \code{(\var{response},
|
||||
\var{list})}, where \var{list} is a list of tuples containing
|
||||
\code{(\var{name}, \var{title})}.
|
||||
\end{methoddesc}
|
||||
|
||||
\begin{methoddesc}{description}{group}
|
||||
Get a description for a single group \var{group}. If more than one group
|
||||
matches (if 'group' is a real wildmat string), return the first match. If no group
|
||||
matches, return an empty string.
|
||||
|
||||
This elides the response code from the server. If the response code is
|
||||
needed, use \method{descriptions()}.
|
||||
|
||||
\end{methoddesc}
|
||||
|
||||
\begin{methoddesc}{group}{name}
|
||||
|
@ -294,6 +311,9 @@ 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.
|
||||
|
||||
RFC2980 says ``It is suggested that this extension be deprecated''. Use
|
||||
\method{descriptions()} or \method{description()} instead.
|
||||
\end{methoddesc}
|
||||
|
||||
\begin{methoddesc}{xover}{start, end, \optional{file}}
|
||||
|
|
|
@ -297,6 +297,42 @@ class NNTP:
|
|||
list[i] = tuple(list[i].split())
|
||||
return resp, list
|
||||
|
||||
def description(self, group):
|
||||
|
||||
"""Get a description for a single group. If more than one
|
||||
group matches ('group' is a pattern), return the first. If no
|
||||
group matches, return an empty string.
|
||||
|
||||
This elides the response code from the server, since it can
|
||||
only be '215' or '285' (for xgtitle) anyway. If the response
|
||||
code is needed, use the 'descriptions' method.
|
||||
|
||||
NOTE: This neither checks for a wildcard in 'group' nor does
|
||||
it check whether the group actually exists."""
|
||||
|
||||
resp, lines = self.descriptions(group)
|
||||
if len(lines) == 0:
|
||||
return ""
|
||||
else:
|
||||
return lines[0][1]
|
||||
|
||||
def descriptions(self, group_pattern):
|
||||
"""Get descriptions for a range of groups."""
|
||||
line_pat = re.compile("^(?P<group>[^ \t]+)[ \t]+(.*)$")
|
||||
# Try the more std (acc. to RFC2980) LIST NEWSGROUPS first
|
||||
resp, raw_lines = self.longcmd('LIST NEWSGROUPS ' + group_pattern)
|
||||
if resp[:3] != "215":
|
||||
# Now the deprecated XGTITLE. This either raises an error
|
||||
# or succeeds with the same output structure as LIST
|
||||
# NEWSGROUPS.
|
||||
resp, raw_lines = self.longcmd('XGTITLE ' + group_pattern)
|
||||
lines = []
|
||||
for raw_line in raw_lines:
|
||||
match = line_pat.search(raw_line.strip())
|
||||
if match:
|
||||
lines.append(match.group(1, 2))
|
||||
return resp, lines
|
||||
|
||||
def group(self, name):
|
||||
"""Process a GROUP command. Argument:
|
||||
- group: the group name
|
||||
|
|
|
@ -163,6 +163,7 @@ David Ely
|
|||
Jeff Epler
|
||||
Tom Epperly
|
||||
Stoffel Erasmus
|
||||
Jürgen A. Erhard
|
||||
Michael Ernst
|
||||
Ben Escoto
|
||||
Andy Eskilsson
|
||||
|
|
|
@ -44,6 +44,9 @@ Extension modules
|
|||
Library
|
||||
-------
|
||||
|
||||
- nntplib has two new methods: description and descriptions. They
|
||||
use a more RFC-compliant way of getting a newsgroup description.
|
||||
|
||||
- Bug #993394. Fix a possible red herring of KeyError in 'threading' being
|
||||
raised during interpreter shutdown from a registered function with atexit
|
||||
when dummy_threading is being used.
|
||||
|
|
Loading…
Reference in New Issue