summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Sexton <TwistedLadder@gmail.com>2017-09-30 07:10:31 (GMT)
committerINADA Naoki <methane@users.noreply.github.com>2017-09-30 07:10:31 (GMT)
commitb24cd055ecb3eea9a15405a6ca72dafc739e6531 (patch)
treee9f867fac0d88a8e9f5d3caea0d0b067244c35df
parent3d2b407da048b14ba6e5eb6079722a785d210590 (diff)
downloadcpython-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.py12
-rw-r--r--Lib/test/test_netrc.py9
-rw-r--r--Misc/NEWS.d/next/Library/2017-09-29.bpo-30806.lP5GrH.rst1
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.