o
    p̦is                     @   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|< || nt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qq)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