[Python-checkins] r86925 - in python/branches/py3k: Lib/netrc.py Lib/test/test_netrc.py Misc/ACKS Misc/NEWS

r.david.murray python-checkins at python.org
Thu Dec 2 03:58:07 CET 2010


Author: r.david.murray
Date: Thu Dec  2 03:58:07 2010
New Revision: 86925

Log:
#10464: fix netrc handling of lines with embedded '#" characters.

Patch by Xuanji Li.


Modified:
   python/branches/py3k/Lib/netrc.py
   python/branches/py3k/Lib/test/test_netrc.py
   python/branches/py3k/Misc/ACKS
   python/branches/py3k/Misc/NEWS

Modified: python/branches/py3k/Lib/netrc.py
==============================================================================
--- python/branches/py3k/Lib/netrc.py	(original)
+++ python/branches/py3k/Lib/netrc.py	Thu Dec  2 03:58:07 2010
@@ -34,11 +34,15 @@
     def _parse(self, file, fp):
         lexer = shlex.shlex(fp)
         lexer.wordchars += r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
+        lexer.commenters = lexer.commenters.replace('#', '')
         while 1:
             # Look for a machine, default, or macdef top-level keyword
             toplevel = tt = lexer.get_token()
             if not tt:
                 break
+            elif tt[0] == '#':
+                fp.readline();
+                continue;
             elif tt == 'machine':
                 entryname = lexer.get_token()
             elif tt == 'default':

Modified: python/branches/py3k/Lib/test/test_netrc.py
==============================================================================
--- python/branches/py3k/Lib/test/test_netrc.py	(original)
+++ python/branches/py3k/Lib/test/test_netrc.py	Thu Dec  2 03:58:07 2010
@@ -3,7 +3,13 @@
 from test import support
 
 TEST_NETRC = """
+
+ #this is a comment
+#this is a comment
+# this is a comment
+
 machine foo login log1 password pass1 account acct1
+machine bar login log1 password pass# account acct1
 
 macdef macro1
 line1
@@ -28,17 +34,21 @@
         fp = open(temp_filename, mode)
         fp.write(TEST_NETRC)
         fp.close()
+        self.nrc = netrc.netrc(temp_filename)
 
     def tearDown(self):
         os.unlink(temp_filename)
 
     def test_case_1(self):
-        nrc = netrc.netrc(temp_filename)
-        self.assertTrue(nrc.macros == {'macro1':['line1\n', 'line2\n'],
-                                           'macro2':['line3\n', 'line4\n']}
-                                           )
-        self.assertTrue(nrc.hosts['foo'] == ('log1', 'acct1', 'pass1'))
-        self.assertTrue(nrc.hosts['default'] == ('log2', None, 'pass2'))
+        self.assertEqual(self.nrc.hosts['foo'], ('log1', 'acct1', 'pass1'))
+        self.assertEqual(self.nrc.hosts['default'], ('log2', None, 'pass2'))
+
+    def test_macros(self):
+        self.assertEqual(self.nrc.macros, {'macro1':['line1\n', 'line2\n'],
+                                           'macro2':['line3\n', 'line4\n']})
+
+    def test_parses_passwords_with_hash_character(self):
+        self.assertEqual(self.nrc.hosts['bar'], ('log1', 'acct1', 'pass#'))
 
 def test_main():
     support.run_unittest(NetrcTestCase)

Modified: python/branches/py3k/Misc/ACKS
==============================================================================
--- python/branches/py3k/Misc/ACKS	(original)
+++ python/branches/py3k/Misc/ACKS	Thu Dec  2 03:58:07 2010
@@ -501,6 +501,7 @@
 Christopher Tur Lesniewski-Laas
 Mark Levinson
 William Lewis
+Xuanji Li
 Robert van Liere
 Ross Light
 Shawn Ligocki

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Thu Dec  2 03:58:07 2010
@@ -46,6 +46,8 @@
 Library
 -------
 
+- Issue #10464: netrc now correctly handles lines with embedded '#' characters.
+
 - Added itertools.accumulate().
 
 - Issue #4113: Added custom ``__repr__`` method to ``functools.partial``.


More information about the Python-checkins mailing list