
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,aý¨  ã                   @   s„  d dl Z d dlZd dlZd dlZd dlZd dlZzd dlZW n ek
rT   dZY nX dZd dl	m
Z d dlmZ dddd	d
dddgZdZG dd„ deƒZG dd„ deƒZG dd	„ d	eƒZG dd
„ d
eƒZG dd„ deƒZG dd„ deƒZdZdZdddddddddd d!d"hZd#d$d%d&d'd(d)gZd(d)d*œZd+Ze d,d-d.d/d0g¡Ze d1d2d3d4g¡Zd5d„ Z
d6d7„ Zdld8d9„Z dmd:d;„Z!dnd<d=„Z"e�r�d>d?„ Z#G d@dA„ dAƒZ$G dBd„ de$ƒZ%e�rÎG dCdD„ dDe$ƒZ&e 'dD¡ e(dEk�r€d dl)Z)e)j*dFdG�Z+e+j,dHdIdJdKdL� e+j,dMdNdOdPdL� e+j,dQdRdSe-dTeef dU� e+j,dVdWdXe-dYdU� e+j,dZd[d\dd]d^� e+ .¡ Z/e/j0Z0e/j�sˆe0dSk�rxeZ0e%e/j1e0d_�Z2ne0dSk�r–eZ0e&e/j1e0d_�Z2e2 3¡ Z4d`e4k�r¾e2 5¡  e2 6e/j6¡\Z7Z8Z9Z:Z;e<dae;dbe8dce9dde:ƒ dedf„ Z=e>e-e:ƒe/j? dg ƒZ9e2 @e9e:¡\Z7ZAeAD ]Z\ZBZCe
eCd$ ƒ Ddhdg¡d  ZEe
eCd# ƒZFe-eCd) ƒZGe<di HeBe=eEdjƒe=eFdkƒeG¡ƒ �qe2 I¡  dS )oé    NFT)Údecode_header)Ú_GLOBAL_DEFAULT_TIMEOUTÚNNTPÚ	NNTPErrorÚNNTPReplyErrorÚNNTPTemporaryErrorÚNNTPPermanentErrorÚNNTPProtocolErrorÚNNTPDataErrorr   i   c                   @   s   e Zd Zdd„ ZdS )r   c                 G   s>   t j| f|žŽ  z|d | _W n tk
r8   d| _Y nX d S )Nr   zNo response given)Ú	ExceptionÚ__init__ÚresponseÚ
IndexError)ÚselfÚargs© r   ú,/opt/alt/python38/lib64/python3.8/nntplib.pyr   c   s
    zNNTPError.__init__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   a   s   c                   @   s   e Zd ZdS )r   N©r   r   r   r   r   r   r   r   j   s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r   n   s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r   r   s   c                   @   s   e Zd ZdS )r	   Nr   r   r   r   r   r	   v   s   c                   @   s   e Zd ZdS )r
   Nr   r   r   r   r   r
   z   s   éw   i3  Z100Z101Ú211Ú215Z220Z221Z222Z224Z225Z230Z231Z282ÚsubjectÚfromÚdatez
message-idZ
referencesz:bytesz:lines)ÚbytesÚlinesó   
Ú	GroupInfoÚgroupÚlastÚfirstÚflagÚArticleInfoZnumberÚ
message_idr   c                 C   sJ   g }t | ƒD ]2\}}t|tƒr4| | |p,d¡¡ q| |¡ qd |¡S )NÚasciiÚ )Ú_email_decode_headerÚ
isinstancer   ÚappendÚdecodeÚjoin)Z
header_strÚpartsÚvÚencr   r   r   r   ¨   s    
c                 C   s¦   g }| D ]`}|d dkr:|dd …   d¡\}}}d| }n|  d¡\}}}| ¡ }t ||¡}| |¡ qt}t|ƒt|ƒk r†tdƒ‚|d t|ƒ… |kr¢tdƒ‚|S )Nr   ú:é   z$LIST OVERVIEW.FMT response too shortz*LIST OVERVIEW.FMT redefines default fields)Ú	partitionÚlowerÚ_OVERVIEW_FMT_ALTERNATIVESÚgetr+   Ú_DEFAULT_OVERVIEW_FMTÚlenr
   )r   ÚfmtÚlineÚnameÚ_ÚsuffixÚdefaultsr   r   r   Ú_parse_overview_fmt³   s    
r?   c                 C   sÐ   t tƒ}g }| D ]º}i }| d¡^}}t|ƒ}t|ƒD ]„\}	}
|	t |ƒkrLq6||	 }| d¡}|	|kr®|s®|d }|
r–|
d t |ƒ…  ¡ |kr–tdƒ‚|
rª|
t |ƒd … nd }
|
|||	 < q6| ||f¡ q|S )Nú	r1   z: z?OVER/XOVER response doesn't include names of additional headers)	r8   r7   ÚsplitÚintÚ	enumerateÚ
startswithr4   r
   r+   )r   r9   Zdata_process_funcZ
n_defaultsZoverviewr:   ZfieldsZarticle_numberÚtokensÚiÚtokenZ
field_nameZis_metadataÚhr   r   r   Ú_parse_overviewÌ   s&    
rI   c                 C   s¶   |d kr | dd … }| d d… } t |d d… ƒ}t |dd… ƒ}t |dd … ƒ}t | d d… ƒ}t | dd… ƒ}t | dd … ƒ}|dk r’|d7 }n|dk r¢|d	7 }t ||||||¡S )
Niúÿÿÿé   é   éüÿÿÿéþÿÿÿéF   iÐ  éd   il  )rB   Údatetime)Údate_strÚtime_strZhoursZminutesZsecondsÚyearZmonthZdayr   r   r   Ú_parse_datetimeé   s    
rT   c                 C   sP   t | tjƒsd}n
d | ¡}| j}|r<|d }d || ¡}nd || ¡}||fS )NZ000000z({0.hour:02d}{0.minute:02d}{0.second:02d}rO   z{0:02d}{1.month:02d}{1.day:02d}z{0:04d}{1.month:02d}{1.day:02d})r*   rP   ÚformatrS   )ZdtZlegacyrR   ÚyrQ   r   r   r   Ú_unparse_datetimeÿ   s    
rW   c                 C   s   |d krt  ¡ }|j| |d�S )N)Zserver_hostname)ÚsslZ_create_stdlib_contextZwrap_socket)ÚsockÚcontextZhostnamer   r   r   Ú_encrypt_on  s    r[   c                   @   s  e Zd ZdZdZdefdd„Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ ZeZdd„ Zdd„ Zdhdd„Zdd„ Zdidd„Zdd„ Zdjdd„Zdkdd „Zd!d"„ Zd#d$„ Zd%d&„ Zdd'œd(d)„Zdd'œd*d+„Zdldd'œd,d-„Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zdd'œd6d7„Zd8d9„ Z d:d;„ Z!dmd<d=„Z"d>d?„ Z#d@dA„ Z$dndBdC„Z%dodd'œdDdE„Z&dpdd'œdFdG„Z'dqdd'œdHdI„Z(dJdK„ Z)dd'œdLdM„Z*dd'œdNdO„Z+dd'œdPdQ„Z,dd'œdRdS„Z-dTdU„ Z.dVdW„ Z/dXdY„ Z0dZd[„ Z1d\d]„ Z2d^d_„ Z3d`da„ Z4drdbdc„Z5ddde„ Z6e7�rdsdfdg„Z8dS )tÚ	_NNTPBasezutf-8ÚsurrogateescapeNc                 C   sj   || _ || _d| _|  ¡ | _d | _|  ¡  d| _|rZd| jkrZ|  ¡  | jsZd | _|  ¡  d| _	d| _
d S )Nr   FÚREADER)ÚhostÚfileÚ	debuggingÚ_getrespÚwelcomeÚ_capsÚgetcapabilitiesÚreadermode_afterauthÚ_setreadermodeÚtls_onÚauthenticated)r   r`   r_   Ú
readermodeÚtimeoutr   r   r   r   9  s    
	z_NNTPBase.__init__c                 C   s   | S ©Nr   ©r   r   r   r   Ú	__enter__h  s    z_NNTPBase.__enter__c              	      sR   ‡ fdd„}|ƒ rNz*zˆ  ¡  W n ttfk
r8   Y nX W 5 |ƒ rLˆ   ¡  X d S )Nc                      s
   t ˆ dƒS )Nr`   )Úhasattrr   rm   r   r   Ú<lambda>l  ó    z$_NNTPBase.__exit__.<locals>.<lambda>)Ú_closeÚquitÚOSErrorÚEOFError)r   r   Zis_connectedr   rm   r   Ú__exit__k  s    
z_NNTPBase.__exit__c                 C   s   | j rtdt| jƒƒ | jS )Nz	*welcome*)ra   ÚprintÚreprrc   rm   r   r   r   Ú
getwelcomev  s     z_NNTPBase.getwelcomec              	   C   s†   | j d kr€d| _d | _z|  ¡ \}}W n ttfk
rD   i | _ Y n<X || _ d|krhttt|d ƒƒ| _d|kr€d 	|d ¡| _| j S )Nr2   ZVERSIONZIMPLEMENTATIONú )
rd   Únntp_versionZnntp_implementationÚcapabilitiesr   r   ÚmaxÚmaprB   r-   )r   ÚrespÚcapsr   r   r   re     s    
z_NNTPBase.getcapabilitiesc                 C   s
   || _ d S rl   )ra   )r   Úlevelr   r   r   Úset_debuglevel•  s    z_NNTPBase.set_debuglevelc                 C   sH   t  d| |¡ |t }| jdkr.tdt|ƒƒ | j |¡ | j ¡  d S )Nznntplib.putliner2   z*put*)	ÚsysÚauditÚ_CRLFra   rw   rx   r`   ÚwriteÚflush©r   r:   r   r   r   Ú_putlinež  s    
 z_NNTPBase._putlinec                 C   s2   | j rtdt|ƒƒ | | j| j¡}|  |¡ d S )Nz*cmd*)ra   rw   rx   ÚencodeÚencodingÚerrorsr‰   rˆ   r   r   r   Ú_putcmd§  s     z_NNTPBase._putcmdTc                 C   s†   | j  td ¡}t|ƒtkr$tdƒ‚| jdkr<tdt|ƒƒ |sDt‚|r‚|dd … t	krf|d d… }n|dd … t	kr‚|d d… }|S )Nr2   zline too longz*get*rM   éÿÿÿÿ)
r`   ÚreadlineÚ_MAXLINEr8   r
   ra   rw   rx   ru   r…   )r   Z
strip_crlfr:   r   r   r   Ú_getline®  s    
 z_NNTPBase._getlinec                 C   sl   |   ¡ }| jrtdt|ƒƒ | | j| j¡}|d d… }|dkrHt|ƒ‚|dkrXt|ƒ‚|dkrht	|ƒ‚|S )Nz*resp*r2   Ú4Ú5Z123)
r‘   ra   rw   rx   r,   r‹   rŒ   r   r   r	   )r   r   Úcr   r   r   rb   ¿  s     z_NNTPBase._getrespc                 C   sä   d }zÈt|ttfƒr"t|dƒ }}|  ¡ }|d d… tkrBt|ƒ‚g }|d k	r’dt df}|  	d¡}||krnqÊ| 
d¡r„|dd … }| |¡ qZn8d}|  	¡ }||kr¨qÊ| 
d¡r¾|dd … }| |¡ q–W 5 |rÚ|  ¡  X ||fS )NÚwbé   ó   .s   .
Fs   ..r2   )Úcloser*   Ústrr   Úopenrb   Ú	_LONGRESPr   r…   r‘   rD   r†   r+   )r   r`   Z
openedFiler   r   Zterminatorsr:   Ú
terminatorr   r   r   Ú_getlongrespÏ  s4    	



z_NNTPBase._getlongrespc                 C   s   |   |¡ |  ¡ S rl   )r�   rb   rˆ   r   r   r   Ú	_shortcmdý  s    
z_NNTPBase._shortcmdc                 C   s   |   |¡ |  |¡S rl   ©r�   r�   )r   r:   r`   r   r   r   Ú_longcmd  s    
z_NNTPBase._longcmdc                    s.   ˆ   |¡ ˆ  |¡\}}|‡ fdd„|D ƒfS )Nc                    s   g | ]}|  ˆ jˆ j¡‘qS r   )r,   r‹   rŒ   ©Ú.0r:   rm   r   r   Ú
<listcomp>  s   ÿz,_NNTPBase._longcmdstring.<locals>.<listcomp>rŸ   )r   r:   r`   r   Úlistr   rm   r   Ú_longcmdstring	  s
    
ÿz_NNTPBase._longcmdstringc                 C   sd   z| j W S  tk
r   Y nX z|  d¡\}}W n  tk
rP   td d … }Y n
X t|ƒ}|| _ |S )NzLIST OVERVIEW.FMT)Z_cachedoverviewfmtÚAttributeErrorr¥   r   r7   r?   )r   r   r   r9   r   r   r   Ú_getoverviewfmt  s    z_NNTPBase._getoverviewfmtc                 C   s   dd„ |D ƒS )Nc                 S   s   g | ]}t | ¡ Ž ‘qS r   )r    rA   r¡   r   r   r   r£   &  s     z(_NNTPBase._grouplist.<locals>.<listcomp>r   )r   r   r   r   r   Ú
_grouplist$  s    z_NNTPBase._grouplistc                 C   s8   i }|   d¡\}}|D ]}| ¡ ^}}|||< q||fS )NZCAPABILITIES)r¥   rA   )r   r€   r   r   r:   r;   rE   r   r   r   r|   (  s    
z_NNTPBase.capabilities)r`   c                C   sb   t |tjtjfƒs$td |jj¡ƒ‚t|| jdk ƒ\}}d ||¡}|  	||¡\}}||  
|¡fS )NúAthe date parameter must be a date or datetime object, not '{:40}'rJ   zNEWGROUPS {0} {1})r*   rP   r   Ú	TypeErrorrU   Ú	__class__r   rW   r{   r¥   r¨   )r   r   r`   rQ   rR   Úcmdr   r   r   r   r   Ú	newgroups6  s    ÿÿz_NNTPBase.newgroupsc                C   sR   t |tjtjfƒs$td |jj¡ƒ‚t|| jdk ƒ\}}d |||¡}|  	||¡S )Nr©   rJ   zNEWNEWS {0} {1} {2})
r*   rP   r   rª   rU   r«   r   rW   r{   r¥   )r   r!   r   r`   rQ   rR   r¬   r   r   r   ÚnewnewsF  s    ÿÿz_NNTPBase.newnewsc                C   s4   |d k	rd| }nd}|   ||¡\}}||  |¡fS )NzLIST ACTIVE ZLIST)r¥   r¨   )r   Úgroup_patternr`   Úcommandr   r   r   r   r   r¤   V  s
    
z_NNTPBase.listc                 C   s�   t  d¡}|  d| ¡\}}| d¡s8|  d| ¡\}}i }|D ]:}| | ¡ ¡}|r@| dd¡\}	}
|sr|
  S |
||	< q@|rˆ||fS dS d S )Nz^(?P<group>[^ 	]+)[ 	]+(.*)$zLIST NEWSGROUPS r   úXGTITLE r2   rJ   r(   )ÚreÚcompiler¥   rD   ÚsearchÚstripr!   )r   r¯   Z
return_allÚline_patr   r   ÚgroupsÚraw_lineÚmatchr;   Zdescr   r   r   Ú_getdescriptionse  s    


z_NNTPBase._getdescriptionsc                 C   s   |   |d¡S )NF©rº   )r   r!   r   r   r   Údescription|  s    z_NNTPBase.descriptionc                 C   s   |   |d¡S )NTr»   )r   r¯   r   r   r   Údescriptions‰  s    z_NNTPBase.descriptionsc                 C   sš   |   d| ¡}| d¡s t|ƒ‚| ¡ }d } }}t|ƒ}|dkr€|d }|dkr€|d }|dkr€|d }|dkr€|d  ¡ }|t|ƒt|ƒt|ƒ|fS )NzGROUP r   r   r2   rJ   r–   rK   )rž   rD   r   rA   r8   r4   rB   )r   r;   r   ÚwordsÚcountr#   r"   Únr   r   r   r!   �  s    

z_NNTPBase.groupc                C   s   |   d|¡S )NZHELP)r¥   )r   r`   r   r   r   Úhelp§  s    z_NNTPBase.helpc                 C   s8   |  d¡st|ƒ‚| ¡ }t|d ƒ}|d }|||fS )NZ22r2   rJ   )rD   r   rA   rB   )r   r   r¾   Úart_numr&   r   r   r   Ú
_statparse±  s    
z_NNTPBase._statparsec                 C   s   |   |¡}|  |¡S rl   )rž   rÃ   )r   r:   r   r   r   r   Ú_statcmd»  s    
z_NNTPBase._statcmdc                 C   s"   |r|   d |¡¡S |   d¡S d S )NzSTAT {0}ZSTAT)rÄ   rU   )r   Úmessage_specr   r   r   ÚstatÀ  s    	z_NNTPBase.statc                 C   s
   |   d¡S )NZNEXT©rÄ   rm   r   r   r   ÚnextÎ  s    z_NNTPBase.nextc                 C   s
   |   d¡S )NZLASTrÇ   rm   r   r   r   r"   Ò  s    z_NNTPBase.lastc                 C   s0   |   ||¡\}}|  |¡\}}}|t|||ƒfS rl   )r    rÃ   r%   )r   r:   r`   r   r   rÂ   r&   r   r   r   Ú_artcmdÖ  s    z_NNTPBase._artcmdc                C   s$   |d k	rd  |¡}nd}|  ||¡S )NzHEAD {0}ZHEAD©rU   rÉ   ©r   rÅ   r`   r¬   r   r   r   ÚheadÜ  s    z_NNTPBase.headc                C   s$   |d k	rd  |¡}nd}|  ||¡S )NzBODY {0}ZBODYrÊ   rË   r   r   r   Úbodyê  s    z_NNTPBase.bodyc                C   s$   |d k	rd  |¡}nd}|  ||¡S )NzARTICLE {0}ZARTICLErÊ   rË   r   r   r   Úarticleø  s    z_NNTPBase.articlec                 C   s
   |   d¡S )NZSLAVE)rž   rm   r   r   r   Úslave  s    z_NNTPBase.slavec                   sD   t  d¡‰ |  d ||¡|¡\}}‡ fdd„‰|‡fdd„|D ƒfS )Nz^([0-9]+) ?(.*)
?zXHDR {0} {1}c                    s   ˆ   | ¡}|r| dd¡S | S )Nr2   rJ   )r¹   r!   )r:   Úm)Úpatr   r   Úremove_number  s    
z%_NNTPBase.xhdr.<locals>.remove_numberc                    s   g | ]}ˆ |ƒ‘qS r   r   r¡   )rÒ   r   r   r£     s     z"_NNTPBase.xhdr.<locals>.<listcomp>)r²   r³   r¥   rU   )r   Zhdrr™   r`   r   r   r   )rÑ   rÒ   r   Úxhdr  s    	
z_NNTPBase.xhdrc                C   s.   |   d ||¡|¡\}}|  ¡ }|t||ƒfS )NzXOVER {0}-{1})r¥   rU   r§   rI   )r   ÚstartÚendr`   r   r   r9   r   r   r   Úxover  s
    	ÿz_NNTPBase.xoverc          	      C   sx   d| j krdnd}t|ttfƒr>|\}}|d ||p6d¡7 }n|d k	rR|d | }|  ||¡\}}|  ¡ }|t||ƒfS )NZOVERZXOVERz {0}-{1}r(   rz   )rd   r*   Útupler¤   rU   r¥   r§   rI   )	r   rÅ   r`   r¬   rÔ   rÕ   r   r   r9   r   r   r   Úover*  s    z_NNTPBase.overc          	      C   sf   t  dtd¡ t d¡}|  d| |¡\}}g }|D ](}| | ¡ ¡}|r4| | 	dd¡¡ q4||fS )NzFThe XGTITLE extension is not actively used, use descriptions() insteadrJ   z^([^ 	]+)[ 	]+(.*)$r±   r2   )
ÚwarningsÚwarnÚDeprecationWarningr²   r³   r¥   r´   rµ   r+   r!   )	r   r!   r`   r¶   r   Z	raw_linesr   r¸   r¹   r   r   r   ÚxgtitleE  s     þ
z_NNTPBase.xgtitlec                 C   sl   t  dtd¡ |  d |¡¡}| d¡s0t|ƒ‚z| ¡ \}}W n tk
r^   t|ƒd ‚Y n
X ||fS d S )Nz(The XPATH extension is not actively usedrJ   z	XPATH {0}Z223)	rÙ   rÚ   rÛ   rž   rU   rD   r   rA   Ú
ValueError)r   Úidr   Zresp_numÚpathr   r   r   ÚxpathW  s     ÿ
z_NNTPBase.xpathc                 C   sb   |   d¡}| d¡st|ƒ‚| ¡ }t|ƒdkr8t|ƒ‚|d }t|ƒdkrTt|ƒ‚|t|d ƒfS )NZDATEZ111rJ   r2   é   )rž   rD   r   rA   r8   r
   rT   )r   r   Úelemr   r   r   r   r   k  s    

z_NNTPBase.datec                 C   s�   |   |¡}| d¡st|ƒ‚t|ttfƒr2| ¡ }|D ]:}| t¡sR| 	d¡t }| d¡rdd| }| j
 |¡ q6| j
 d¡ | j
 ¡  |  ¡ S )NÚ3r   r—   s   .
)rž   rD   r   r*   r   Ú	bytearrayÚ
splitlinesÚendswithr…   Úrstripr`   r†   r‡   rb   )r   r°   Úfr   r:   r   r   r   Ú_post|  s    




z_NNTPBase._postc                 C   s   |   d|¡S )NZPOST)ré   )r   Údatar   r   r   Úpost‘  s    z_NNTPBase.postc                 C   s   |   d |¡|¡S )Nz	IHAVE {0})ré   rU   )r   r&   rê   r   r   r   Úihave˜  s    z_NNTPBase.ihavec                 C   s   | j  ¡  | ` d S rl   )r`   r˜   rm   r   r   r   rr   ¡  s    
z_NNTPBase._closec                 C   s   z|  d¡}W 5 |   ¡  X |S )NZQUIT)rr   rž   )r   r   r   r   r   rs   ¥  s    
z_NNTPBase.quitc                 C   sö   | j rtdƒ‚|s|stdƒ‚z<|rX|sXdd l}| ¡ }| | j¡}|rX|d }|d }W n tk
rn   Y nX |sxd S |  d| ¡}| d¡r¾|sžt|ƒ‚n |  d| ¡}| d¡s¾t	|ƒ‚d | _
|  ¡  | jròd	| j
krò|  ¡  d | _
|  ¡  d S )
NzAlready logged in.z7At least one of `user` and `usenetrc` must be specifiedr   rJ   zauthinfo user Z381zauthinfo pass Z281r^   )ri   rÝ   ÚnetrcZauthenticatorsr_   rt   rž   rD   r   r   rd   re   rf   rg   )r   ÚuserÚpasswordÚusenetrcrí   ZcredentialsZauthr   r   r   r   Úlogin®  s>    ÿ


z_NNTPBase.loginc              
   C   s`   z|   d¡| _W nJ tk
r$   Y n8 tk
rZ } z|j d¡rHd| _n‚ W 5 d }~X Y nX d S )Nzmode readerZ480T)rž   rc   r   r   r   rD   rf   )r   Úer   r   r   rg   ×  s    z_NNTPBase._setreadermodec                 C   s|   | j rtdƒ‚| jrtdƒ‚|  d¡}| d¡rp| j ¡  t| j|| j	ƒ| _| j 
d¡| _d| _ d | _|  ¡  ntdƒ‚d S )NzTLS is already enabled.z+TLS cannot be started after authentication.ÚSTARTTLSZ382ÚrwbTzTLS failed to start.)rh   rÝ   ri   rž   rD   r`   r˜   r[   rY   r_   Úmakefilerd   re   r   )r   rZ   r   r   r   r   Ústarttlså  s    



z_NNTPBase.starttls)T)N)N)N)N)N)N)N)N)N)NNT)N)9r   r   r   r‹   rŒ   r   r   rn   rv   ry   re   r‚   Údebugr‰   r�   r‘   rb   r�   rž   r    r¥   r§   r¨   r|   r­   r®   r¤   rº   r¼   r½   r!   rÁ   rÃ   rÄ   rÆ   rÈ   r"   rÉ   rÌ   rÍ   rÎ   rÏ   rÓ   rÖ   rØ   rÜ   rà   r   ré   rë   rì   rr   rs   rñ   rg   Ú	_have_sslrö   r   r   r   r   r\   )  sn    ÿ
/		

.






		
)r\   c                   @   s*   e Zd Zeddddefdd„Zdd„ ZdS )r   NFc           	      C   s”   || _ || _t d| ||¡ t ||f|¡| _d }z8| j d¡}t 	| ||||¡ |sZ|rh|  
|||¡ W n$   |r~| ¡  | j ¡  ‚ Y nX d S )Núnntplib.connectrô   )r_   Úportrƒ   r„   ÚsocketÚcreate_connectionrY   rõ   r\   r   rñ   r˜   )	r   r_   rú   rî   rï   rj   rð   rk   r`   r   r   r   r   ÿ  s$    
 ÿ
zNNTP.__init__c                 C   s    zt | ¡ W 5 | j  ¡  X d S rl   ©rY   r˜   r\   rr   rm   r   r   r   rr   $  s    zNNTP._close)r   r   r   Ú	NNTP_PORTr   r   rr   r   r   r   r   r   ý  s    þ
%c                   @   s,   e Zd Zedddddefdd„Zdd„ ZdS )ÚNNTP_SSLNFc	           
      C   sš   t  d| ||¡ t ||f|¡| _d }	zJt| j||ƒ| _| j d¡}	tj| |	|||d� |s`|rn|  	|||¡ W n$   |	r„|	 
¡  | j 
¡  ‚ Y nX d S )Nrù   rô   )rj   rk   )rƒ   r„   rû   rü   rY   r[   rõ   r\   r   rñ   r˜   )
r   r_   rú   rî   rï   Zssl_contextrj   rð   rk   r`   r   r   r   r   .  s"    
 ÿ
zNNTP_SSL.__init__c                 C   s    zt | ¡ W 5 | j  ¡  X d S rl   rý   rm   r   r   r   rr   E  s    zNNTP_SSL._close)r   r   r   ÚNNTP_SSL_PORTr   r   rr   r   r   r   r   rÿ   ,  s      ý
rÿ   Ú__main__zJ        nntplib built-in demo - display the latest articles in a newsgroup)r¼   z-gz--groupzgmane.comp.python.generalz3group to fetch messages from (default: %(default)s))ÚdefaultrÁ   z-sz--serverznews.gmane.ioz+NNTP server hostname (default: %(default)s)z-pz--portrŽ   z#NNTP port number (default: %s / %s))r  ÚtyperÁ   z-nz--nb-articlesé
   z2number of articles to fetch (default: %(default)s)z-Sz--sslÚ
store_truezuse NNTP over SSL)Úactionr  rÁ   )r_   rú   ró   ZGroupZhaszarticles, rangeÚtoc                 C   s$   t | ƒ|kr | d |d … d } | S )NrK   z...)r8   )ÚsZlimr   r   r   Úcutp  s    r	  r2   ú<z{:7} {:20} {:42} ({})é   é*   )N)N)F)Jr²   rû   ÚcollectionsrP   rÙ   rƒ   rX   ÚImportErrorrø   Zemail.headerr   r)   r   Ú__all__r�   r   r   r   r   r   r	   r
   rþ   r   r›   r7   r5   r…   Ú
namedtupler    r%   r?   rI   rT   rW   r[   r\   r   rÿ   r+   r   ÚargparseÚArgumentParserÚparserÚadd_argumentrB   Ú
parse_argsr   rú   Zserverr  re   r€   rö   r!   r   r¿   r#   r"   r;   rw   r	  r™   Znb_articlesrÖ   Z	overviewsZartnumrØ   rA   Zauthorr   r   rU   rs   r   r   r   r   Ú<module>B   sø   
    ý
	ô      ÿþ
ÿÿ


     Y.


ÿ
ÿ
ÿÿÿ


   ÿ
