From 3b9173d33adc2903e1af461214333b0052d7b1e9 Mon Sep 17 00:00:00 2001 From: Steven Loria Date: Sun, 10 Dec 2017 01:09:58 -0500 Subject: [PATCH] bpo-30806: Fix netrc.__repr__() format (GH-2491) netrc file format doesn't support quotes and escapes. See https://linux.die.net/man/5/netrc --- Lib/netrc.py | 12 ++++++------ Lib/test/test_netrc.py | 10 +++++++--- .../next/Library/2017-09-29.bpo-30806.lP5GrH.rst | 1 + 3 files changed, 14 insertions(+), 9 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2017-09-29.bpo-30806.lP5GrH.rst diff --git a/Lib/netrc.py b/Lib/netrc.py index 4b18973d51..16bc347023 100644 --- a/Lib/netrc.py +++ b/Lib/netrc.py @@ -130,15 +130,15 @@ class netrc: rep = "" for host in self.hosts.keys(): attrs = self.hosts[host] - rep = rep + "machine "+ host + "\n\tlogin " + repr(attrs[0]) + "\n" + rep += "machine {host}\n\tlogin {attrs[0]}\n".format(host=host, attrs=attrs) if attrs[1]: - rep = rep + "account " + repr(attrs[1]) - rep = rep + "\tpassword " + repr(attrs[2]) + "\n" + rep += "\taccount {attrs[1]}\n".format(attrs=attrs) + rep += "\tpassword {attrs[2]}\n".format(attrs=attrs) for macro in self.macros.keys(): - rep = rep + "macdef " + macro + "\n" + rep += "macdef {macro}\n".format(macro=macro) for line in self.macros[macro]: - rep = rep + line - rep = rep + "\n" + rep += line + rep += "\n" return rep if __name__ == '__main__': diff --git a/Lib/test/test_netrc.py b/Lib/test/test_netrc.py index 4156c535ef..4d49a55cb6 100644 --- a/Lib/test/test_netrc.py +++ b/Lib/test/test_netrc.py @@ -5,25 +5,29 @@ temp_filename = test_support.TESTFN class NetrcTestCase(unittest.TestCase): - def make_nrc(self, test_data): + def make_nrc(self, test_data, cleanup=True): test_data = textwrap.dedent(test_data) mode = 'w' if sys.platform != 'cygwin': mode += 't' with open(temp_filename, mode) as fp: fp.write(test_data) - self.addCleanup(os.unlink, temp_filename) + if cleanup: + self.addCleanup(os.unlink, temp_filename) return netrc.netrc(temp_filename) def test_default(self): nrc = self.make_nrc("""\ machine host1.domain.com login log1 password pass1 account acct1 default login log2 password pass2 - """) + """, cleanup=False) self.assertEqual(nrc.hosts['host1.domain.com'], ('log1', 'acct1', 'pass1')) self.assertEqual(nrc.hosts['default'], ('log2', None, 'pass2')) + nrc2 = self.make_nrc(nrc.__repr__(), cleanup=True) + self.assertEqual(nrc.hosts, nrc2.hosts) + def test_macros(self): nrc = self.make_nrc("""\ macdef macro1 diff --git a/Misc/NEWS.d/next/Library/2017-09-29.bpo-30806.lP5GrH.rst b/Misc/NEWS.d/next/Library/2017-09-29.bpo-30806.lP5GrH.rst new file mode 100644 index 0000000000..afad1b2fb2 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2017-09-29.bpo-30806.lP5GrH.rst @@ -0,0 +1 @@ +Fix the string representation of a netrc object. -- 2.50.1