o Ƌ|cs@s\dZddlZddlZddlZddgZGdddeZGdddZedkr,e edSdS)z-An object-oriented interface to .netrc files.NnetrcNetrcParseErrorc@s"eZdZdZdddZddZdS)rz5Exception raised on syntax errors in the .netrc file.NcCs"||_||_||_t||dSN)filenamelinenomsg Exception__init__)selfrrrr "/opt/conda/lib/python3.10/netrc.pyr szNetrcParseError.__init__cCsd|j|j|jfS)Nz%s (%s, line %s))rrr)r r r r __str__szNetrcParseError.__str__)NN)__name__ __module__ __qualname____doc__r r r r r r r s  c@s.eZdZd ddZddZddZdd ZdS) rNc Cs|du}|durtjtjdd}i|_i|_z"t|dd}||||WdWdS1s4wYWdStydt|dd}||||WdYdS1s\wYYdSw)N~z.netrczutf-8)encodinglocale) ospathjoin expanduserhostsmacrosopen_parseUnicodeDecodeError)r file default_netrcfpr r r r s& &znetrc.__init__cCst|}|jd7_|jdd|_ |j}|}}|s"dS|ddkr9|j|kr8t|dkr8|jq|dkrB|}n:|dkrId}n3|dkrs|}g|j |<d |_ |j} | re| d krid |_ n |j | | qZqt d |||jd} d} } i|j |< |}|ds|d vr| r| | | f|j |<||nt d||t|f||j|dks|dkr|} n|dkr|} n|dkrAtjdkr<|r?@[\]^_`{|}~#rmachinedefaultmacdefz  z zbad toplevel token %r>r"r$r&r%z&malformed %s entry %s terminated by %sloginuseraccountpasswordposixzuid %sz9~/.netrc file owner (%s) does not match current user (%s)zY~/.netrc access too permissive: access permissions must restrict access to only the ownerzbad follower token %r)shlex wordchars commentersreplacer get_tokenleninstreamreadliner whitespaceappendrr startswith push_tokenreprrnamefstatfilenost_uidgetuidpwdgetpwuidKeyErrorst_modestatS_IRWXGS_IRWXO)r rr rlexerZ saved_linenoZtoplevelttZ entrynameliner(r*r+propr?Zfownerr)r r r r$s                 z netrc._parsecCs,||jvr |j|Sd|jvr|jdSdS)z8Return a (user, account, password) tuple for given host.r%N)r)r hostr r r authenticatorsus    znetrc.authenticatorscCsd}|jD],}|j|}|d|d|dd7}|dr)|d|dd7}|d|d d7}q|jD]}|d |d7}|j|D]}||7}qH|d7}q9|S) z3Dump the class data in the format of a .netrc file.r"zmachine z login rr'r#z account z password zmacdef )rkeysr)r reprJattrsZmacrorHr r r __repr__~s   znetrc.__repr__r)rrrr rrKrPr r r r rs   Q __main__) rrr-rC__all__rrrrprintr r r r s x