(self, file, fp, default_netrc)
| 91 | self._parse(file, fp, default_netrc) |
| 92 | |
| 93 | def _parse(self, file, fp, default_netrc): |
| 94 | lexer = _netrclex(fp) |
| 95 | while 1: |
| 96 | # Look for a machine, default, or macdef top-level keyword |
| 97 | saved_lineno = lexer.lineno |
| 98 | tt = lexer.get_token() |
| 99 | if not tt: |
| 100 | break |
| 101 | elif tt[0] == '#': |
| 102 | if lexer.lineno == saved_lineno and len(tt) == 1: |
| 103 | lexer.instream.readline() |
| 104 | continue |
| 105 | elif tt == 'machine': |
| 106 | entryname = lexer.get_token() |
| 107 | elif tt == 'default': |
| 108 | entryname = 'default' |
| 109 | elif tt == 'macdef': |
| 110 | entryname = lexer.get_token() |
| 111 | self.macros[entryname] = [] |
| 112 | while 1: |
| 113 | line = lexer.instream.readline() |
| 114 | if not line: |
| 115 | raise NetrcParseError( |
| 116 | "Macro definition missing null line terminator.", |
| 117 | file, lexer.lineno) |
| 118 | if line == '\n': |
| 119 | # a macro definition finished with consecutive new-line |
| 120 | # characters. The first \n is encountered by the |
| 121 | # readline() method and this is the second \n. |
| 122 | break |
| 123 | self.macros[entryname].append(line) |
| 124 | continue |
| 125 | else: |
| 126 | raise NetrcParseError( |
| 127 | "bad toplevel token %r" % tt, file, lexer.lineno) |
| 128 | |
| 129 | if not entryname: |
| 130 | raise NetrcParseError("missing %r name" % tt, file, lexer.lineno) |
| 131 | |
| 132 | # We're looking at start of an entry for a named machine or default. |
| 133 | login = account = password = '' |
| 134 | self.hosts[entryname] = {} |
| 135 | while 1: |
| 136 | prev_lineno = lexer.lineno |
| 137 | tt = lexer.get_token() |
| 138 | if tt.startswith('#'): |
| 139 | if lexer.lineno == prev_lineno: |
| 140 | lexer.instream.readline() |
| 141 | continue |
| 142 | if tt in {'', 'machine', 'default', 'macdef'}: |
| 143 | self.hosts[entryname] = (login, account, password) |
| 144 | lexer.push_token(tt) |
| 145 | break |
| 146 | elif tt == 'login' or tt == 'user': |
| 147 | login = lexer.get_token() |
| 148 | elif tt == 'account': |
| 149 | account = lexer.get_token() |
| 150 | elif tt == 'password': |
no test coverage detected