diff options
author | James Sexton <TwistedLadder@gmail.com> | 2017-09-30 07:10:31 (GMT) |
---|---|---|
committer | INADA Naoki <methane@users.noreply.github.com> | 2017-09-30 07:10:31 (GMT) |
commit | b24cd055ecb3eea9a15405a6ca72dafc739e6531 (patch) | |
tree | e9f867fac0d88a8e9f5d3caea0d0b067244c35df | |
parent | 3d2b407da048b14ba6e5eb6079722a785d210590 (diff) | |
download | cpython-b24cd055ecb3eea9a15405a6ca72dafc739e6531.zip cpython-b24cd055ecb3eea9a15405a6ca72dafc739e6531.tar.gz cpython-b24cd055ecb3eea9a15405a6ca72dafc739e6531.tar.bz2 |
bpo-30806 netrc.__repr__() is broken for writing to file (GH-2491)
netrc file format doesn't support quotes and escapes.
See https://linux.die.net/man/5/netrc
-rw-r--r-- | Lib/netrc.py | 12 | ||||
-rw-r--r-- | Lib/test/test_netrc.py | 9 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2017-09-29.bpo-30806.lP5GrH.rst | 1 |
3 files changed, 13 insertions, 9 deletions
diff --git a/Lib/netrc.py b/Lib/netrc.py index aa8eea3..baf8f1d 100644 --- a/Lib/netrc.py +++ b/Lib/netrc.py @@ -127,15 +127,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 += f"machine {host}\n\tlogin {attrs[0]}\n" if attrs[1]: - rep = rep + "account " + repr(attrs[1]) - rep = rep + "\tpassword " + repr(attrs[2]) + "\n" + rep += f"\taccount {attrs[1]}\n" + rep += f"\tpassword {attrs[2]}\n" for macro in self.macros.keys(): - rep = rep + "macdef " + macro + "\n" + rep += f"macdef {macro}\n" 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 60a3ec9..ca6f27d 100644 --- a/Lib/test/test_netrc.py +++ b/Lib/test/test_netrc.py @@ -1,7 +1,6 @@ -import netrc, os, unittest, sys, textwrap +import netrc, os, unittest, sys, tempfile, textwrap from test import support -temp_filename = support.TESTFN class NetrcTestCase(unittest.TestCase): @@ -10,7 +9,8 @@ class NetrcTestCase(unittest.TestCase): mode = 'w' if sys.platform != 'cygwin': mode += 't' - with open(temp_filename, mode) as fp: + temp_fd, temp_filename = tempfile.mkstemp() + with os.fdopen(temp_fd, mode=mode) as fp: fp.write(test_data) self.addCleanup(os.unlink, temp_filename) return netrc.netrc(temp_filename) @@ -24,6 +24,9 @@ class NetrcTestCase(unittest.TestCase): ('log1', 'acct1', 'pass1')) self.assertEqual(nrc.hosts['default'], ('log2', None, 'pass2')) + nrc2 = self.make_nrc(nrc.__repr__()) + 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 0000000..afad1b2 --- /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. |