o
    ˜»áfs  ã                   @   s\   d Z ddlZddlZddlZddgZG dd„ deƒZG dd„ dƒZedkr,e	eƒ ƒ dS dS )z-An object-oriented interface to .netrc files.é    NÚnetrcÚNetrcParseErrorc                   @   s"   e Zd ZdZddd„Zdd„ ZdS )r   z5Exception raised on syntax errors in the .netrc file.Nc                 C   s"   || _ || _|| _t | |¡ d S ©N)ÚfilenameÚlinenoÚmsgÚ	ExceptionÚ__init__)Úselfr   r   r   © r   ú/usr/lib/python3.10/netrc.pyr	      s   zNetrcParseError.__init__c                 C   s   d| j | j| jf S )Nz%s (%s, line %s))r   r   r   )r
   r   r   r   Ú__str__   s   zNetrcParseError.__str__)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r   r   r   r   r   r   
   s    
c                   @   s.   e Zd Zd
dd„Zdd„ Zdd„ Zdd	„ ZdS )r   Nc                 C   sÊ   |d u }|d u rt j t j d¡d¡}i | _i | _z"t|dd}|  |||¡ W d   ƒ W d S 1 s4w   Y  W d S  tyd   t|dd}|  |||¡ W d   ƒ Y d S 1 s\w   Y  Y d S w )Nú~z.netrczutf-8)ÚencodingÚlocale)	ÚosÚpathÚjoinÚ
expanduserÚhostsÚmacrosÚopenÚ_parseÚUnicodeDecodeError)r
   ÚfileÚdefault_netrcÚfpr   r   r   r	      s   &ÿ&ÿÿznetrc.__init__c                 C   s˜  t   |¡}| jd7  _|j dd¡|_	 |j}| ¡  }}|s"d S |d dkr9|j|kr8t|ƒdkr8|j ¡  q|dkrB| ¡ }n:|dkrId}n3|dkrs| ¡ }g | j	|< d	|_
	 |j ¡ }	|	re|	d
krid|_
n	| j	|  |	¡ qZqtd| ||jƒ‚d}
d  }}i | j|< 	 | ¡ }| d¡s•|dv r³|r¥|
||f| j|< | |¡ n¦td||t|ƒf ||jƒ‚|dks»|dkrÀ| ¡ }
nŠ|dkrÉ| ¡ }n|dkrAtjdkr<|r<t | ¡ ¡}|jt ¡ kr+dd l}z
| |j¡d }W n ty   d|j }Y nw z| t ¡ ¡d }W n ty   dt ¡  }Y nw td||f ||jƒ‚|jtjtjB @ r<td||jƒ‚| ¡ }n	td| ||jƒ‚qˆq)Nz !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ú#Ú é   r   ÚmachineÚdefaultÚmacdefz 	Ú
z 	
zbad toplevel token %r>   r"   r&   r%   r$   z&malformed %s entry %s terminated by %sÚloginÚuserÚaccountÚpasswordÚposixzuid %sz9~/.netrc file owner (%s) does not match current user (%s)zY~/.netrc access too permissive: access permissions must restrict access to only the ownerzbad follower token %r)ÚshlexÚ	wordcharsÚ
commentersÚreplacer   Ú	get_tokenÚlenÚinstreamÚreadliner   Ú
whitespaceÚappendr   r   Ú
startswithÚ
push_tokenÚreprr   ÚnameÚfstatÚfilenoÚst_uidÚgetuidÚpwdÚgetpwuidÚKeyErrorÚst_modeÚstatÚS_IRWXGÚS_IRWXO)r
   r   r    r   ÚlexerÚsaved_linenoÚtoplevelÚttÚ	entrynameÚliner(   r*   r+   Úpropr?   Úfownerr)   r   r   r   r   $   s¨   




ûÿ


ÿý


ÿÿÿýý
ÿ×ßznetrc._parsec                 C   s,   || j v r
| j | S d| j v r| j d S dS )z8Return a (user, account, password) tuple for given host.r%   N)r   )r
   Úhostr   r   r   Úauthenticatorsu   s
   



znetrc.authenticatorsc                 C   s¬   d}| j  ¡ D ],}| j | }|d|› d|d › d7 }|d r)|d|d › d7 }|d|d	 › d7 }q| j ¡ D ]}|d
|› d7 }| j| D ]}||7 }qH|d7 }q9|S )z3Dump the class data in the format of a .netrc file.r"   zmachine z
	login r   r'   r#   z		account z
	password é   zmacdef )r   Úkeysr   )r
   ÚreprN   ÚattrsÚmacrorK   r   r   r   Ú__repr__~   s   


znetrc.__repr__r   )r   r   r   r	   r   rO   rU   r   r   r   r   r      s
    
Q	Ú__main__)
r   r   r-   rC   Ú__all__r   r   r   r   Úprintr   r   r   r   Ú<module>   s    xÿ