a
    ãIþf¾  ã                   @   sX   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rTe	eƒ ƒ 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
   úlib/python3.9/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   sl   |d u }|d u r&t j t j d¡d¡}i | _i | _t|ƒ}|  |||¡ W d   ƒ n1 s^0    Y  d S )Nú~z.netrc)ÚosÚpathÚjoinÚ
expanduserÚhostsÚmacrosÚopenÚ_parse)r	   ÚfileÚdefault_netrcÚfpr
   r
   r   r      s    
znetrc.__init__c                 C   s´  t   |¡}| jd7  _|j dd¡|_|j}| ¡  }}|sDq°n¶|d dkrt|j|kr(t|ƒdkr(|j ¡  q(n†|dkr†| ¡ }nt|dkr”d}nf|dkrè| ¡ }g | j	|< d	|_
|j ¡ }	|	rÊ|	d
krÒd|_
q(| j	|  |	¡ q´q(ntd| ||jƒ‚d}
d  }}i | j|< | ¡ }| d¡s.|dv rr|rR|
||f| j|< | |¡ q(ntd||t|ƒf ||jƒ‚q|dks†|dkr’| ¡ }
q|dkr¨| ¡ }q|dkr˜tjdkrŽ|rŽt | ¡ ¡}|jt ¡ krldd l}z| |j¡d }W n ty   d|j }Y n0 z| t ¡ ¡d }W n  tyT   dt ¡  }Y n0 td||f ||jƒ‚|jtjtjB @ rŽtd||jƒ‚| ¡ }ntd| ||jƒ‚qq(d S )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)ÚshlexZ	wordcharsZ
commentersÚreplacer   Z	get_tokenÚlenZinstreamÚreadliner   Z
whitespaceÚappendr   r   Ú
startswithZ
push_tokenÚreprr   ÚnameÚfstatÚfilenoÚst_uidÚgetuidÚpwdÚgetpwuidÚKeyErrorÚst_modeÚstatÚS_IRWXGÚS_IRWXO)r	   r   r   r   ZlexerZsaved_linenoZtoplevelZttZ	entrynameÚliner$   r&   r'   Zpropr5   Zfownerr%   r
   r
   r   r       sš    




ÿ
ÿ
ÿý

ÿýý
ÿznetrc._parsec                 C   s0   || j v r| j | S d| j v r(| j d S dS dS )z8Return a (user, account, password) tuple for given host.r!   N)r   )r	   Úhostr
   r
   r   Úauthenticatorsq   s
    



znetrc.authenticatorsc                 C   s¬   d}| j  ¡ D ]X}| j | }|d|› d|d › d7 }|d rR|d|d › d7 }|d|d	 › d7 }q| j ¡ D ]4}|d
|› d7 }| j| D ]}||7 }q|d7 }qr|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	   Zrepr=   ÚattrsZmacror<   r
   r
   r   Ú__repr__z   s    


znetrc.__repr__)N)r   r   r   r   r   r>   rB   r
   r
   r
   r   r      s   
	Q	Ú__main__)
r   r   r)   r9   Ú__all__r   r   r   r   Úprintr
   r
   r
   r   Ú<module>   s   t