1 """An object-oriented interface to .netrc files."""
3 # Module and documentation by Eric S. Raymond, 21 Dec 1998
8 def __init__(self
, file=None):
10 file = os
.path
.join(os
.environ
['HOME'], ".netrc")
17 lexer
= shlex
.shlex(fp
)
18 lexer
.wordchars
= lexer
.wordchars
+ '.'
20 # Look for a machine, default, or macdef top-level keyword
21 toplevel
= tt
= lexer
.get_token()
22 if tt
== '' or tt
== None:
25 entryname
= lexer
.get_token()
28 elif tt
== 'macdef': # Just skip to end of macdefs
29 entryname
= lexer
.get_token()
30 self
.macros
[entryname
] = []
31 lexer
.whitepace
= ' \t'
33 line
= lexer
.instream
.readline()
34 if not line
or line
== '\012' and tt
== '\012':
35 lexer
.whitepace
= ' \t\r\n'
38 self
.macros
[entryname
].append(line
)
40 raise SyntaxError, "bad toplevel token %s, file %s, line %d" \
41 % (tt
, file, lexer
.lineno
)
43 # We're looking at start of an entry for a named machine or default.
44 if toplevel
== 'machine':
45 login
= account
= password
= None
46 self
.hosts
[entryname
] = {}
48 tt
= lexer
.get_token()
49 if tt
=='' or tt
== 'machine' or tt
== 'default' or tt
== 'macdef':
50 if toplevel
== 'macdef':
52 elif login
and password
:
53 self
.hosts
[entryname
] = (login
, account
, password
)
57 raise SyntaxError, "malformed %s entry %s terminated by %s" % (toplevel
, entryname
, repr(tt
))
58 elif tt
== 'login' or tt
== 'user':
59 login
= lexer
.get_token()
61 account
= lexer
.get_token()
62 elif tt
== 'password':
63 password
= lexer
.get_token()
65 raise SyntaxError, "bad follower token %s, file %s, line %d"%(tt
,file,lexer
.lineno
)
67 def authenticators(self
, host
):
68 """Return a (user, account, password) tuple for given host."""
69 if self
.hosts
.has_key(host
):
70 return self
.hosts
[host
]
71 elif self
.hosts
.has_key('default'):
72 return self
.hosts
['default']
77 """Dump the class data in the format of a .netrc file."""
79 for host
in self
.hosts
.keys():
80 attrs
= self
.hosts
[host
]
81 rep
= rep
+ "machine "+ host
+ "\n\tlogin " + repr(attrs
[0]) + "\n"
83 rep
= rep
+ "account " + repr(attrs
[1])
84 rep
= rep
+ "\tpassword " + repr(attrs
[2]) + "\n"
85 for macro
in self
.macros
.keys():
86 rep
= rep
+ "macdef " + macro
+ "\n"
87 for line
in self
.macros
[macro
]:
92 if __name__
== '__main__':