[Python-checkins] r86177 - in python/branches/py3k: Doc/library/nntplib.rst Lib/nntplib.py Lib/test/test_nntplib.py Misc/NEWS

antoine.pitrou python-checkins at python.org
Thu Nov 4 22:36:15 CET 2010


Author: antoine.pitrou
Date: Thu Nov  4 22:36:15 2010
New Revision: 86177

Log:
Issue #10283: Add a `group_pattern` argument to NNTP.list().



Modified:
   python/branches/py3k/Doc/library/nntplib.rst
   python/branches/py3k/Lib/nntplib.py
   python/branches/py3k/Lib/test/test_nntplib.py
   python/branches/py3k/Misc/NEWS

Modified: python/branches/py3k/Doc/library/nntplib.rst
==============================================================================
--- python/branches/py3k/Doc/library/nntplib.rst	(original)
+++ python/branches/py3k/Doc/library/nntplib.rst	Thu Nov  4 22:36:15 2010
@@ -182,13 +182,15 @@
    This command is frequently disabled by NNTP server administrators.
 
 
-.. method:: NNTP.list(*, file=None)
+.. method:: NNTP.list(group_pattern=None, *, file=None)
 
-   Send a ``LIST`` command.  Return a pair ``(response, list)`` where *list* is a
-   list of tuples representing all the groups available from this NNTP server.
-   Each tuple has the form ``(group, last, first, flag)``, where
-   *group* is a group name, *last* and *first* are the last and first article
-   numbers, and *flag* usually takes one of these values:
+   Send a ``LIST`` or ``LIST ACTIVE`` command.  Return a pair
+   ``(response, list)`` where *list* is a list of tuples representing all
+   the groups available from this NNTP server, optionally matching the
+   pattern string *group_pattern*.  Each tuple has the form
+   ``(group, last, first, flag)``, where *group* is a group name, *last*
+   and *first* are the last and first article numbers, and *flag* usually
+   takes one of these values:
 
    * ``y``: Local postings and articles from peers are allowed.
    * ``m``: The group is moderated and all postings must be approved.
@@ -200,8 +202,12 @@
    If *flag* has another value, then the status of the newsgroup should be
    considered unknown.
 
-   This command will often return very large results.  It is best to cache the
-   results offline unless you really need to refresh them.
+   This command can return very large results, especially if *group_pattern*
+   is not specified.  It is best to cache the results offline unless you
+   really need to refresh them.
+
+   .. versionchanged:: 3.2
+      *group_pattern* was added.
 
 
 .. method:: NNTP.descriptions(grouppattern)

Modified: python/branches/py3k/Lib/nntplib.py
==============================================================================
--- python/branches/py3k/Lib/nntplib.py	(original)
+++ python/branches/py3k/Lib/nntplib.py	Thu Nov  4 22:36:15 2010
@@ -571,14 +571,19 @@
         cmd = 'NEWNEWS {0} {1} {2}'.format(group, date_str, time_str)
         return self._longcmdstring(cmd, file)
 
-    def list(self, *, file=None):
-        """Process a LIST command. Argument:
+    def list(self, group_pattern=None, *, file=None):
+        """Process a LIST or LIST ACTIVE command. Arguments:
+        - group_pattern: a pattern indicating which groups to query
         - file: Filename string or file object to store the result in
         Returns:
         - resp: server response if successful
         - list: list of (group, last, first, flag) (strings)
         """
-        resp, lines = self._longcmdstring('LIST', file)
+        if group_pattern is not None:
+            command = 'LIST ACTIVE ' + group_pattern
+        else:
+            command = 'LIST'
+        resp, lines = self._longcmdstring(command, file)
         return resp, self._grouplist(lines)
 
     def _getdescriptions(self, group_pattern, return_all):

Modified: python/branches/py3k/Lib/test/test_nntplib.py
==============================================================================
--- python/branches/py3k/Lib/test/test_nntplib.py	(original)
+++ python/branches/py3k/Lib/test/test_nntplib.py	Thu Nov  4 22:36:15 2010
@@ -22,16 +22,22 @@
         self.assertEqual(str, type(welcome))
 
     def test_help(self):
-        resp, list = self.server.help()
+        resp, lines = self.server.help()
         self.assertTrue(resp.startswith("100 "), resp)
-        for line in list:
+        for line in lines:
             self.assertEqual(str, type(line))
 
     def test_list(self):
-        resp, list = self.server.list()
-        if len(list) > 0:
-            self.assertEqual(GroupInfo, type(list[0]))
-            self.assertEqual(str, type(list[0].group))
+        resp, groups = self.server.list()
+        if len(groups) > 0:
+            self.assertEqual(GroupInfo, type(groups[0]))
+            self.assertEqual(str, type(groups[0].group))
+
+    def test_list_active(self):
+        resp, groups = self.server.list(self.GROUP_PAT)
+        if len(groups) > 0:
+            self.assertEqual(GroupInfo, type(groups[0]))
+            self.assertEqual(str, type(groups[0].group))
 
     def test_unknown_command(self):
         with self.assertRaises(nntplib.NNTPPermanentError) as cm:
@@ -383,6 +389,17 @@
                 free.it.comp.lang.python.learner 0000000000 0000000001 y
                 tw.bbs.comp.lang.python 0000000304 0000000304 y
                 .""")
+        elif action == "ACTIVE":
+            if param == "*distutils*":
+                self.push_lit("""\
+                    215 Newsgroups in form "group high low flags"
+                    gmane.comp.python.distutils.devel 0000014104 0000000001 m
+                    gmane.comp.python.distutils.cvs 0000000000 0000000001 m
+                    .""")
+            else:
+                self.push_lit("""\
+                    215 Newsgroups in form "group high low flags"
+                    .""")
         elif action == "OVERVIEW.FMT":
             self.push_lit("""\
                 215 Order of fields in overview database.
@@ -608,6 +625,12 @@
         self.assertEqual(g,
             GroupInfo("comp.lang.python.announce", "0000001153",
                       "0000000993", "m"))
+        resp, groups = self.server.list("*distutils*")
+        self.assertEqual(len(groups), 2)
+        g = groups[0]
+        self.assertEqual(g,
+            GroupInfo("gmane.comp.python.distutils.devel", "0000014104",
+                      "0000000001", "m"))
 
     def test_stat(self):
         resp, art_num, message_id = self.server.stat(3000234)

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Thu Nov  4 22:36:15 2010
@@ -65,6 +65,8 @@
 Library
 -------
 
+- Issue #10283: Add a ``group_pattern`` argument to NNTP.list().
+
 - Issue #10155: Add IISCGIHandler to wsgiref.handlers to support IIS
   CGI environment better, and to correct unicode environment values
   for WSGI 1.0.1.


More information about the Python-checkins mailing list