[Python-checkins] r54820 - sandbox/trunk/pep0/pep0.py sandbox/trunk/pep0/test_pep0.py

brett.cannon python-checkins at python.org
Sat Apr 14 02:33:00 CEST 2007


Author: brett.cannon
Date: Sat Apr 14 02:32:58 2007
New Revision: 54820

Modified:
   sandbox/trunk/pep0/pep0.py
   sandbox/trunk/pep0/test_pep0.py
Log:
Add support for author nicknames.


Modified: sandbox/trunk/pep0/pep0.py
==============================================================================
--- sandbox/trunk/pep0/pep0.py	(original)
+++ sandbox/trunk/pep0/pep0.py	Sat Apr 14 02:32:58 2007
@@ -1,5 +1,6 @@
 """Auto-generate PEP 0 (PEP index).  """
 from __future__ import with_statement
+import authors
 import os
 import re
 
@@ -65,7 +66,7 @@
     angled = r'(?P<author>.+?) <.+?>'
     paren = r'.+? \((?P<author>.+?)\)'
     simple = r'(?P<author>[^,]+)'
-    authors = []
+    author_list = []
     for regex in (angled, paren, simple):
         # Watch out for commas separating multiple names.
         regex += '(,\s+)?'
@@ -76,14 +77,15 @@
             # separated by commas.
             author = match.group('author')
             if not author.partition(' ')[1] and author.endswith('.'):
-                prev_author = authors.pop()
+                prev_author = author_list.pop()
                 author = ', '.join([prev_author, author])
-            authors.append(author)
+            author_list.append(author)
         else:
-            # If authors were found then stop searching.
-            if authors:
+            # If authors were found then stop searching as only expect one
+            # style of author citation.
+            if author_list:
                 break
-    return authors
+    return author_list
 
 def handle_csv(data):
     """Handle the Post-History."""
@@ -94,8 +96,8 @@
             'Post-History': handle_csv,
            }
 
-def last_name(full_name):
-    """Find the last name of a full name.
+def last_name(full_name, nicknames={}):
+    """Find the last name (or nickname) of a full name.
 
     If no last name (e.g, 'Aahz') then return the full name.  If there is a
     leading, lowercase portion to the last name (e.g., 'van' or 'von') then
@@ -103,6 +105,9 @@
     comma, then drop the suffix.
 
     """
+    nickname = nicknames.get(full_name)
+    if nickname:
+        return nickname
     no_suffix = full_name.partition(',')[0]
     name_parts = no_suffix.split()
     part_count = len(name_parts)
@@ -154,9 +159,11 @@
     number = str(pep['PEP']).rjust(4)
     title = pep['Title']
     authors_list = []
-    authors = ', '.join(last_name(author) for author in pep['Author'])
+    author_string = ', '.join(last_name(author, authors.nicknames)
+            for author in pep['Author'])
     output.write(" %s%s %s  %s %s\n" %
-                    (type_abbr, status_abbr, number, title.ljust(44), authors))
+                    (type_abbr, status_abbr, number, title.ljust(44),
+                        author_string))
 
 
 if __name__ == '__main__':

Modified: sandbox/trunk/pep0/test_pep0.py
==============================================================================
--- sandbox/trunk/pep0/test_pep0.py	(original)
+++ sandbox/trunk/pep0/test_pep0.py	Sat Apr 14 02:32:58 2007
@@ -157,6 +157,17 @@
             got = pep0.last_name(full_name)
             self.failUnlessEqual(got, expect)
 
+    def test_author_nickname(self):
+        # Make sure nicknames are returned instead of last names when a
+        # nickname is available.
+        full_name = 'Guido van Rossum'
+        nickname = 'GvR'
+        last_name = 'van Rossum'
+        got = pep0.last_name(full_name, {full_name:nickname})
+        self.failUnlessEqual(got, nickname)
+        got = pep0.last_name(full_name, {'asdf':nickname})
+        self.failUnlessEqual(got, last_name)
+
 
 def test_main():
     test_support.run_unittest(


More information about the Python-checkins mailing list