1 """An object-oriented interface to .netrc files."""
7 __all__ = [
"netrc",
"NetrcParseError"]
11 """Exception raised on syntax errors in the .netrc file."""
12 def __init__(self, msg, filename=None, lineno=None):
16 Exception.__init__(self, msg)
25 file = os.path.join(os.environ[
'HOME'],
".netrc")
31 lexer.wordchars = lexer.wordchars +
'.-@'
34 toplevel = tt = lexer.get_token()
38 entryname = lexer.get_token()
42 entryname = lexer.get_token()
43 self.
macros[entryname] = []
44 lexer.whitespace =
' \t'
46 line = lexer.instream.readline()
47 if not line
or line ==
'\012':
48 lexer.whitespace =
' \t\r\n'
54 "bad toplevel token %r" % tt, file, lexer.lineno)
57 login = account = password =
None
58 self.
hosts[entryname] = {}
60 tt = lexer.get_token()
61 if (tt==
'' or tt ==
'machine' or
62 tt ==
'default' or tt ==
'macdef'):
63 if login
and password:
64 self.
hosts[entryname] = (login, account, password)
69 "malformed %s entry %s terminated by %s"
70 % (toplevel, entryname,
repr(tt)),
72 elif tt ==
'login' or tt ==
'user':
73 login = lexer.get_token()
75 account = lexer.get_token()
76 elif tt ==
'password':
77 password = lexer.get_token()
83 """Return a (user, account, password) tuple for given host."""
84 if self.hosts.has_key(host):
85 return self.
hosts[host]
86 elif self.hosts.has_key(
'default'):
87 return self.
hosts[
'default']
92 """Dump the class data in the format of a .netrc file."""
94 for host
in self.hosts.keys():
95 attrs = self.
hosts[host]
96 rep = rep +
"machine "+ host +
"\n\tlogin " +
repr(attrs[0]) +
"\n"
98 rep = rep +
"account " +
repr(attrs[1])
99 rep = rep +
"\tpassword " +
repr(attrs[2]) +
"\n"
100 for macro
in self.macros.keys():
101 rep = rep +
"macdef " + macro +
"\n"
102 for line
in self.
macros[macro]:
107 if __name__ ==
'__main__':