]> granicus.if.org Git - python/commitdiff
Patch #605370: Add description[s] for RFC 2980 compliance.
authorMartin v. Löwis <martin@v.loewis.de>
Mon, 26 Jul 2004 12:40:50 +0000 (12:40 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Mon, 26 Jul 2004 12:40:50 +0000 (12:40 +0000)
Doc/lib/libnntplib.tex
Lib/nntplib.py
Misc/ACKS
Misc/NEWS

index 8616fb93f7296074f29f7a2e6568fa6cc5317ba1..9b9217b16762ebec37a902f9fde0318e6545a9ea 100644 (file)
@@ -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}}
index 83544b893be9e64e09994d9b10376fc5b25692c8..d0bd5adcfd0126fda78aa2505cac7b76986526d7 100644 (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
index 348949c78f0a5ebc7db23cead5185abf59370de5..071f86ec6b62507a05e88c768b52f98de3bd0798 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -163,6 +163,7 @@ David Ely
 Jeff Epler
 Tom Epperly
 Stoffel Erasmus
+Jürgen A. Erhard
 Michael Ernst
 Ben Escoto
 Andy Eskilsson
index 4b5fae1d1b099cbc0ee0ec7db2fe89915d0c9247..e48309c41e76e4a3279988d09fc7cb6614a94ba5 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.