Skip to content

Commit b24cd05

Browse files
Bezier89methane
authored andcommitted
bpo-30806 netrc.__repr__() is broken for writing to file (pythonGH-2491)
netrc file format doesn't support quotes and escapes. See https://linux.die.net/man/5/netrc
1 parent 3d2b407 commit b24cd05

File tree

3 files changed

+13
-9
lines changed

3 files changed

+13
-9
lines changed

Lib/netrc.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -127,15 +127,15 @@ def __repr__(self):
127127
rep = ""
128128
for host in self.hosts.keys():
129129
attrs = self.hosts[host]
130-
rep = rep + "machine "+ host + "\n\tlogin " + repr(attrs[0]) + "\n"
130+
rep += f"machine {host}\n\tlogin {attrs[0]}\n"
131131
if attrs[1]:
132-
rep = rep + "account " + repr(attrs[1])
133-
rep = rep + "\tpassword " + repr(attrs[2]) + "\n"
132+
rep += f"\taccount {attrs[1]}\n"
133+
rep += f"\tpassword {attrs[2]}\n"
134134
for macro in self.macros.keys():
135-
rep = rep + "macdef " + macro + "\n"
135+
rep += f"macdef {macro}\n"
136136
for line in self.macros[macro]:
137-
rep = rep + line
138-
rep = rep + "\n"
137+
rep += line
138+
rep += "\n"
139139
return rep
140140

141141
if __name__ == '__main__':

Lib/test/test_netrc.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
import netrc, os, unittest, sys, textwrap
1+
import netrc, os, unittest, sys, tempfile, textwrap
22
from test import support
33

4-
temp_filename = support.TESTFN
54

65
class NetrcTestCase(unittest.TestCase):
76

@@ -10,7 +9,8 @@ def make_nrc(self, test_data):
109
mode = 'w'
1110
if sys.platform != 'cygwin':
1211
mode += 't'
13-
with open(temp_filename, mode) as fp:
12+
temp_fd, temp_filename = tempfile.mkstemp()
13+
with os.fdopen(temp_fd, mode=mode) as fp:
1414
fp.write(test_data)
1515
self.addCleanup(os.unlink, temp_filename)
1616
return netrc.netrc(temp_filename)
@@ -24,6 +24,9 @@ def test_default(self):
2424
('log1', 'acct1', 'pass1'))
2525
self.assertEqual(nrc.hosts['default'], ('log2', None, 'pass2'))
2626

27+
nrc2 = self.make_nrc(nrc.__repr__())
28+
self.assertEqual(nrc.hosts, nrc2.hosts)
29+
2730
def test_macros(self):
2831
nrc = self.make_nrc("""\
2932
macdef macro1
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix the string representation of a netrc object.

0 commit comments

Comments
 (0)