£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
B
    YI~dO                 @   s  d dl Z d dlZd dlZd dlZd dlZyd dlZW n ek
rL   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rd>d? Z"G d@dA dAZ#G dBd de#Z$erG 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.j/Z/e.jse/dSkrpeZ/e$e.j0e/d_Z1ne/dSkreZ/e%e.j0e/d_Z1e12 Z3d`e3kre14  e15e.j5\Z6Z7Z8Z9Z:e;dae:dbe7dce8dde9 dedf Z<e=e,e9e.j> dg Z8e1?e8e9\Z6Z@xbe@D ]Z\ZAZBe	eBd$ Cdhdgd  ZDe	eBd# ZEe,eBd) ZFe;diGeAe<eDdje<eEdkeF qW e1H  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|  y|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/python37/lib64/python3.7/nntplib.pyr   b   s
    zNNTPError.__init__N)__name__
__module____qualname__r   r   r   r   r   r   `   s   c               @   s   e Zd ZdS )r   N)r   r   r   r   r   r   r   r   i   s   c               @   s   e Zd ZdS )r   N)r   r   r   r   r   r   r   r   m   s   c               @   s   e Zd ZdS )r   N)r   r   r   r   r   r   r   r   q   s   c               @   s   e Zd ZdS )r	   N)r   r   r   r   r   r   r   r	   u   s   c               @   s   e Zd ZdS )r
   N)r   r   r   r   r   r   r   r
   y   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liness   
	GroupInfogrouplastfirstflagArticleInfoZnumber
message_idr   c             C   sN   g }x>t | D ]2\}}t|tr6|||p.d q|| qW 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 }xh| D ]`}|d dkr<|dd   d\}}}d| }n| d\}}}| }t||}|| q
W t}t|t|k rtd|d t| |krt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 }x| D ]}i }|d^}}t|}xt|D ]\}	}
|	t |krPq:||	 }|d}|	|kr|s|d }|
r|
d t |  |krtd|
r|
t |d  nd }
|
|||	 < q:W |||f qW |S )N	r/   z: z?OVER/XOVER response doesn't include names of additional headers)	r6   r5   splitint	enumerate
startswithr2   r
   r)   )r   r7   Zdata_process_funcZ
n_defaultsZoverviewr8   ZfieldsZarticle_numbertokensitokenZ
field_nameZis_metadatahr   r   r   _parse_overview   s&    

rG   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  )r@   datetime)date_strtime_strZhoursZminutesZsecondsyearZmonthZdayr   r   r   _parse_datetime   s    
rR   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}rM   z{0:02d}{1.month:02d}{1.day:02d}z{0:04d}{1.month:02d}{1.day:02d})r(   rN   formatrQ   )ZdtlegacyrP   yrO   r   r   r   _unparse_datetime   s    
rV   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    rZ   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   8  s    
	z_NNTPBase.__init__c             C   s   | S )Nr   )r   r   r   r   	__enter__g  s    z_NNTPBase.__enter__c          	      sR    fdd}| rNz*y    W n ttfk
r8   Y nX W d | rL   X d S )Nc                  s
   t  dS )Nr_   )hasattrr   )r   r   r   <lambda>k      z$_NNTPBase.__exit__.<locals>.<lambda>)quitOSErrorEOFError_close)r   r   Zis_connectedr   )r   r   __exit__j  s    
z_NNTPBase.__exit__c             C   s   | j rtdt| j | jS )Nz	*welcome*)r`   printreprrb   )r   r   r   r   
getwelcomeu  s     z_NNTPBase.getwelcomec          	   C   s   | j d krd| _d | _y|  \}}W n ttfk
rD   i | _ Y n<X || _ d|krhttt|d | _d|krd	|d | _| j S )Nr0   ZVERSIONZIMPLEMENTATION )
rc   nntp_versionZnntp_implementationcapabilitiesr   r   maxmapr@   r+   )r   respcapsr   r   r   rd   ~  s    
z_NNTPBase.getcapabilitiesc             C   s
   || _ d S )N)r`   )r   levelr   r   r   set_debuglevel  s    z_NNTPBase.set_debuglevelc             C   s:   |t  }| jdkr tdt| | j| | j  d S )Nr0   z*put*)_CRLFr`   rt   ru   r_   writeflush)r   r8   r   r   r   _putline  s
    
 z_NNTPBase._putlinec             C   s2   | j rtdt| || j| j}| | d S )Nz*cmd*)r`   rt   ru   encodeencodingerrorsr   )r   r8   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 )Nr0   zline too longz*get*rK   )
r_   readline_MAXLINEr6   r
   r`   rt   ru   rq   r   )r   Z
strip_crlfr8   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*r0   45Z123)
r   r`   rt   ru   r*   r   r   r   r   r	   )r   r|   cr   r   r   ra     s     z_NNTPBase._getrespc             C   s   d }zt |ttfr"t|d }}|  }|d d tkrBt|g }|d k	rdt df}xv| d}||krpP |	dr|dd  }|
| q\W n<d}x6|  }||krP |	dr|dd  }|| qW W d |r|  X ||fS )Nwb      .s   .
Fs   ..r0   )r(   strr   openra   	_LONGRESPr   r   r   rB   r   r)   close)r   r_   Z
openedFiler|   r   Zterminatorsr8   
terminatorr   r   r   _getlongresp  s8    	



z_NNTPBase._getlongrespc             C   s   |  | |  S )N)r   ra   )r   r8   r   r   r   	_shortcmd  s    
z_NNTPBase._shortcmdc             C   s   |  | | |S )N)r   r   )r   r8   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   ).0r8   )r   r   r   
<listcomp>  s   z,_NNTPBase._longcmdstring.<locals>.<listcomp>)r   r   )r   r8   r_   r|   listr   )r   r   _longcmdstring  s    
z_NNTPBase._longcmdstringc             C   sb   y| j S  tk
r   Y nX y| d\}}W n  tk
rN   td d  }Y n
X t|}|| _ |S )NzLIST OVERVIEW.FMT)Z_cachedoverviewfmtAttributeErrorr   r   r5   r=   )r   r|   r   r7   r   r   r   _getoverviewfmt  s    z_NNTPBase._getoverviewfmtc             C   s   dd |D S )Nc             S   s   g | ]}t |  qS r   )r   r?   )r   r8   r   r   r   r   $  s    z(_NNTPBase._grouplist.<locals>.<listcomp>r   )r   r   r   r   r   
_grouplist"  s    z_NNTPBase._grouplistc             C   s<   i }|  d\}}x |D ]}| ^}}|||< qW ||fS )NZCAPABILITIES)r   r?   )r   r}   r|   r   r8   r9   rC   r   r   r   ry   &  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 )NzAthe date parameter must be a date or datetime object, not '{:40}'rH   zNEWGROUPS {0} {1})r(   rN   r   	TypeErrorrS   	__class__r   rV   rx   r   r   )r   r   r_   rO   rP   cmdr|   r   r   r   r   	newgroups4  s    z_NNTPBase.newgroupsc            C   sR   t |tjtjfs$td|jjt|| jdk \}}d|||}| 	||S )NzAthe date parameter must be a date or datetime object, not '{:40}'rH   zNEWNEWS {0} {1} {2})
r(   rN   r   r   rS   r   r   rV   rx   r   )r   r   r   r_   rO   rP   r   r   r   r   newnewsD  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   T  s
    
z_NNTPBase.listc             C   s   t d}| d| \}}|ds8| d| \}}i }x>|D ]6}|| }|rB|dd\}	}
|sp|
S |
||	< qBW |r||fS dS d S )Nz^(?P<group>[^ 	]+)[ 	]+(.*)$zLIST NEWSGROUPS r   zXGTITLE r0   rH   r&   )recompiler   rB   searchstripr   )r   r   Z
return_allline_patr|   r   groupsraw_linematchr9   Zdescr   r   r   _getdescriptionsc  s    


z_NNTPBase._getdescriptionsc             C   s   |  |dS )NF)r   )r   r   r   r   r   descriptionz  s    z_NNTPBase.descriptionc             C   s   |  |dS )NT)r   )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   r0   rH   r   rI   )r   rB   r   r?   r6   r2   r@   )r   r9   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22r0   rH   )rB   r   r?   r@   )r   r|   r   art_numr$   r   r   r   
_statparse  s    
z_NNTPBase._statparsec             C   s   |  |}| |S )N)r   r   )r   r8   r|   r   r   r   _statcmd  s    
z_NNTPBase._statcmdc             C   s"   |r|  d|S |  dS d S )NzSTAT {0}ZSTAT)r   rS   )r   message_specr   r   r   stat  s    	z_NNTPBase.statc             C   s
   |  dS )NZNEXT)r   )r   r   r   r   next  s    z_NNTPBase.nextc             C   s
   |  dS )NZLAST)r   )r   r   r   r   r      s    z_NNTPBase.lastc             C   s0   |  ||\}}| |\}}}|t|||fS )N)r   r   r#   )r   r8   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)rS   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BODY)rS   r   )r   r   r_   r   r   r   r   body  s    z_NNTPBase.bodyc            C   s$   |d k	rd |}nd}| ||S )NzARTICLE {0}ZARTICLE)rS   r   )r   r   r_   r   r   r   r   article  s    z_NNTPBase.articlec             C   s
   |  dS )NZSLAVE)r   )r   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 )Nr0   rH   )r   r   )r8   m)patr   r   remove_number  s    
z%_NNTPBase.xhdr.<locals>.remove_numberc                s   g | ]} |qS r   r   )r   r8   )r   r   r   r     s    z"_NNTPBase.xhdr.<locals>.<listcomp>)r   r   r   rS   )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   rS   r   rG   )r   startendr_   r|   r   r7   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&   rw   )rc   r(   tupler   rS   r   r   rG   )	r   r   r_   r   r   r   r|   r   r7   r   r   r   over(  s    z_NNTPBase.overc      	      C   sj   t dtd td}| d| |\}}g }x0|D ](}|| }|r6||	dd q6W ||fS )NzFThe XGTITLE extension is not actively used, use descriptions() insteadrH   z^([^ 	]+)[ 	]+(.*)$zXGTITLE r0   )
warningswarnDeprecationWarningr   r   r   r   r   r)   r   )	r   r   r_   r   r|   Z	raw_linesr   r   r   r   r   r   xgtitleC  s    

z_NNTPBase.xgtitlec             C   sl   t dtd | d|}|ds0t|y| \}}W n tk
r^   t|d Y n
X ||fS d S )Nz(The XPATH extension is not actively usedrH   z	XPATH {0}Z223)	r   r   r   r   rS   rB   r   r?   
ValueError)r   idr|   Zresp_numpathr   r   r   xpathU  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111rH   r0      )r   rB   r   r?   r6   r
   rR   )r   r|   elemr   r   r   r   r   i  s    

z_NNTPBase.datec             C   s   |  |}|dst|t|ttfr2| }xB|D ]:}|tsT|	dt }|drfd| }| j
| q8W | j
d | j
  |  S )N3s   
r   s   .
)r   rB   r   r(   r   	bytearray
splitlinesendswithr   rstripr_   r   r   ra   )r   r   fr|   r8   r   r   r   _postz  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   rS   )r   r$   r   r   r   r   ihave  s    z_NNTPBase.ihavec             C   s   | j   | ` d S )N)r_   r   )r   r   r   r   rr     s    
z_NNTPBase._closec             C   s   z|  d}W d |   X |S )NZQUIT)r   rr   )r   r|   r   r   r   ro     s    
z_NNTPBase.quitc             C   s   | j rtd|s|stdy<|rX|sXdd l}| }|| j}|rX|d }|d }W n tk
rn   Y nX |sxd S | d| }|dr|st|n | d| }|dst	|d | _
|   | jrd	| j
kr|   d | _
|   d S )
NzAlready logged in.z7At least one of `user` and `usenetrc` must be specifiedr   rH   zauthinfo user Z381zauthinfo pass Z281r]   )rh   r   netrcZauthenticatorsr^   rp   r   rB   r   r   rc   rd   re   rf   )r   userpasswordusenetrcr   ZcredentialsZauthr|   r   r   r   login  s<    


z_NNTPBase.loginc          
   C   s`   y|  d| _W nJ tk
r$   Y n8 tk
rZ } z|jdrHd| _n W d d }~X Y nX d S )Nzmode readerZ480T)r   rb   r   r   r   rB   re   )r   er   r   r   rf     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.)rg   r   rh   r   rB   r_   r   rZ   rX   r^   makefilerc   rd   r   )r   rY   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   rk   rs   rv   rd   r   debugr   r   r   ra   r   r   r   r   r   r   ry   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   ro   r   rf   	_have_sslr   r   r   r   r   r[   (  sj   .	

.






		
)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||f|| _d }y8| jd}t| |||| |sJ|rX| ||| W n$   |rn|	  | j	   Y nX d S )Nr   )
r^   portsocketcreate_connectionrX   r   r[   r   r   r   )	r   r^   r   r   r   ri   r   rj   r_   r   r   r   r     s    

zNNTP.__init__c             C   s    zt |  W d | j  X d S )N)r[   rr   rX   r   )r   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 ||f|| _d }	yJt| j||| _| jd}	tj| |	|||d |sP|r^| ||| W n$   |	rt|	  | j   Y nX d S )Nr   )ri   rj   )	r   r   rX   rZ   r   r[   r   r   r   )
r   r^   r   r   r   Zssl_contextri   r   rj   r_   r   r   r   r   +  s    


zNNTP_SSL.__init__c             C   s    zt |  W d | j  X d S )N)r[   rr   rX   r   )r   r   r   r   rr   A  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 )NrI   z...)r6   )sZlimr   r   r   cutl  s    r   r0   <z{:7} {:20} {:42} ({})   *   )N)N)F)Ir   r   collectionsrN   r   rW   ImportErrorr   Zemail.headerr   r'   r   __all__r   r   r   r   r   r   r	   r
   r   r   r   r5   r3   r   
namedtupler   r#   r=   rG   rR   rV   rZ   r[   r   r   r)   r   argparseArgumentParserparseradd_argumentr@   
parse_argsr   r   Zserverr   rd   r}   r   r   r|   r   r!   r    r9   rt   r   r   Znb_articlesr   Z	overviewsZartnumr   r?   Zauthorr   r   rS   ro   r   r   r   r   <module>B   s   
	


     X-






 