U
    g                     @   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
   /usr/lib/python3.8/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 5 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|_|j}|  }}|sDqn|d dkrt|j|kr(t|dkr(|j  q(n|dkr| }nt|dkrd}nf|dkr| }g | j	|< d	|_
|j }	|	r|	d
krd|_
q(| j	| |	 qq(ntd| ||jd}
d  }}i | j|< | }|ds.|dk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rtjdkr|rt| }|jt krpdd l}z||jd }W n  tk
r   d|j }Y nX z|t d }W n" tk
rX   dt  }Y nX td||f ||j|jtjtjB @ rt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 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}| 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=   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