B
    \ Çc¾  ã               @   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.7/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   sX   |d k}|d kr&t j t j d¡d¡}i | _i | _t|ƒ}|  |||¡ W d Q R X 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¡|_x–|j}| ¡  }}|sFP nº|d dkrv|j|kr,t|ƒdkr,|j ¡  q,nŠ|dkrˆ| ¡ }nx|dkr–d}nj|dkrî| ¡ }g | j	|< d	|_
x2|j ¡ }	|	rÎ|	d
krÖd|_
P | j	|  |	¡ q¸W q,ntd| ||jƒ‚d}
d  }}i | j|< x¤| ¡ }| d¡s8|dkr||r\|
||f| j|< | |¡ P 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rzdd l}y| |j¡d }W n  tk
r(   d|j }Y nX y| t ¡ ¡d }W n" tk
rb   dt ¡  }Y nX td||f ||jƒ‚|jtjtjB @ rœtd||jƒ‚| ¡ }ntd| ||jƒ‚qW q,W 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 kr| j | S d| j k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}xf| j  ¡ D ]X}| j | }|d|› d|d › d7 }|d rT|d|d › d7 }|d|d	 › d7 }qW xF| j ¡ D ]8}|d
|› d7 }x| j| D ]}||7 }q˜W |d7 }qxW |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=   ZattrsZmacror<   r
   r
   r   Ú__repr__z   s    
znetrc.__repr__)N)r   r   r   r   r   r>   rA   r
   r
   r
   r   r      s   
	Q	Ú__main__)
r   r   r)   r9   Ú__all__r   r   r   r   Úprintr
   r
   r
   r   Ú<module>   s   t