
    z%i                        	 d dl Z d dlZd dlZd dlZd dlZd dlZ	 d dlZdZd dl	m
Z d dlmZ g dZ ej                  ed       d	Z G d
 de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      ZdZdZh dZg dZdddZdZ ej<                  dg d      Z ej<                  d g d!      Z d" Z
d# Z!dVd$Z"dVd%Z#dWd&Z$erd' Z% G d( d)      Z&er G d* d+e&      Z'ejQ                  d+       ed,k(  rd dl)Z) e)jT                  d-.      Z+e+jY                  d/d0d1d23       e+jY                  d4d5d6d73       e+jY                  d8d9d:e-d;ed<ed=>       e+jY                  d?d@dAe-dB>       e+jY                  dCdDdEddFG       e+j]                         Z/e/j`                  Z0e/j                  se0d:k(  reZ0 e&e/jb                  e0H      Z2ne0d:k(  reZ0 e'e/jb                  e0H      Z2e2jg                         Z4dIe4v re2jk                          e2jm                  e/jl                        \  Z7Z8Z9Z:Z; e<dJe;dKe8dLe9dMe:       dN Z= e> e-e:      e/j~                  z
  dOz         Z9e2j                  e9e:      \  Z7ZAeAD ]a  \  ZBZC e
eCdP         j                  dQdO      d    ZE e
eCdR         ZF e-eCd         ZG e<dSj                  eB e=eEdT       e=eFdU      eG             c e2j                          yy# e$ r dZY w xY w)X    NTF)decode_header)_GLOBAL_DEFAULT_TIMEOUT)NNTP	NNTPErrorNNTPReplyErrorNNTPTemporaryErrorNNTPPermanentErrorNNTPProtocolErrorNNTPDataErrorr   )      )removei   c                       e Zd Z	 d Zy)r   c                 r    t        j                  | g|  	 |d   | _        y # t        $ r
 d| _        Y y w xY w)Nr   zNo response given)	Exception__init__response
IndexError)selfargss     ;/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/nntplib.pyr   zNNTPError.__init__e   s;    4'$'	0 GDM 	0/DM	0s   
# 66N)__name__
__module____qualname__r        r   r   r   c   s
    /0r   r   c                       e Zd Z	 y)r   Nr   r   r   r   r   r   r   r   l   s    "r   r   c                       e Zd Z	 y)r   Nr   r   r   r   r   r   p       r   r   c                       e Zd Z	 y)r	   Nr   r   r   r   r	   r	   t   r    r   r	   c                       e Zd Z	 y)r
   Nr   r   r   r   r
   r
   x   s    ,r   r
   c                       e Zd Z	 y)r   Nr   r   r   r   r   r   |   s     r   r   w   i3  >   100101211215220221222224225230231282)subjectfromdatez
message-id
references:bytes:linesr5   r6   )byteslines   
	GroupInfo)grouplastfirstflagArticleInfo)number
message_idr8   c                     	 g }t        |       D ]K  \  }}t        |t              r%|j                  |j	                  |xs d             ;|j                  |       M dj                  |      S )Nascii )_email_decode_header
isinstancer7   appenddecodejoin)
header_strpartsvencs       r   r   r      sc    @E&z2 3aLL#.12LLO	
 775>r   c                    	 g }| D ]t  }|d   dk(  r|dd  j                  d      \  }}}d|z   }n|j                  d      \  }}}|j                         }t        j                  ||      }|j	                  |       v t
        }t        |      t        |      k  rt        d      |d t        |       |k7  rt        d      |S )Nr   :   z$LIST OVERVIEW.FMT response too shortz*LIST OVERVIEW.FMT redefines default fields)	partitionlower_OVERVIEW_FMT_ALTERNATIVESgetrG   _DEFAULT_OVERVIEW_FMTlenr   )r8   fmtlinename_suffixdefaultss          r   _parse_overview_fmtr]      s    $ C 7c>"12h005OD!V:D #nnS1OD!Vzz|)--dD9

4 %H
3x#h-BCC
>CMh&HIIJr   c                    	 t        t              }g }| D ]  }i }|j                  d      ^}}t        |      }t	        |      D ]|  \  }	}
|	t        |      k\  r||	   }|j                  d      }|	|k\  rE|sC|dz   }|
r*|
d t        |       j                         |k7  rt        d      |
r|
t        |      d  nd }
|
|||	   <   ~ |j                  ||f        |S )N	rO   z: z?OVER/XOVER response doesn't include names of additional headers)	rV   rU   splitint	enumerate
startswithrR   r   rG   )r8   rW   data_process_func
n_defaultsoverviewrX   fieldsarticle_numbertokensitoken
field_nameis_metadatahs                 r   _parse_overviewro      s
   *+JH 2"&**T"2^,!&) 	#HAuCH} QJ$//4KJ{ %U7CF^113q8' )F G G*/c!fgT"F3q6N!	#" 	01+2, Or   c                 "   	 |
| 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z  }n
|dk  r|d	z  }t        j                  ||||||      S )
Ni      F   i  d   il  )ra   datetime)date_strtime_strhoursminutessecondsyearmonthdays           r   _parse_datetimer      s     BC=CR=!E(1Q- G(12,Gx}DB E
hrsm
C by	T5#ugwGGr   c                     	 t        | t        j                        sd}ndj                  |       }| j                  }|r|dz  }dj                  ||       }||fS dj                  ||       }||fS )N000000z({0.hour:02d}{0.minute:02d}{0.second:02d}rv   z{0:02d}{1.month:02d}{1.day:02d}z{0:04d}{1.month:02d}{1.day:02d})rF   rw   formatr}   )dtlegacyry   yrx   s        r   _unparse_datetimer     s     b(++,=DDRH
AG4;;ArB X 5;;ArBXr   c                 V    	 |t        j                         }|j                  | |      S )N)server_hostname)ssl_create_stdlib_contextwrap_socket)sockcontexthostnames      r   _encrypt_onr     s2    	 ?002G""4"BBr   c                      e Zd ZdZdZeddddefdZd Zd Z	d Z
d	 Zd
 Zd Zd ZeZd Zd Zd7dZd Zd8dZd Zd8dZd8dZd Zd Zd ZdddZdddZd8dddZd Zd Zd Z d Z!ddd Z"d! Z#d" Z$d8d#Z%d$ Z&d% Z'd8d&Z(d8ddd'Z)d8ddd(Z*d8ddd)Z+d* Z,ddd+Z-ddd,Z.ddd-Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d9d4Z6d5 Z7e8rd8d6Z9yy):r   zutf-8surrogateescapeNFc                 |   	 || _         || _        | j                  |      | _        d | _        	 | j                  j                  d      | _        | j                  |       |s|r| j                  |||       y y #  | j                  r| j                  j                          | j                  j                           xY w)Nrwb)	hostport_create_socketr   filemakefile
_base_initloginclose)r   r   r   userpassword
readermodeusenetrctimeouts           r   r   zNNTP.__init__;  s    	" 		''0						**51DIOOJ'x

484  	yy		!IIOOs   AA8 8AB;c                    	 d| _         | j                         | _        d | _        | j	                          d| _        |rAd| j                  vr3| j                          | j
                  sd | _        | j	                          d| _        d| _        y )Nr   FREADER)		debugging_getrespwelcome_capsgetcapabilitiesreadermode_afterauth_setreadermodetls_onauthenticated)r   r   s     r   r   zNNTP._base_init^  s    	 }} 
 %*!($**4!,,!
$$&
  #r   c                     | S Nr   r   s    r   	__enter__zNNTP.__enter__  s    r   c                       fd} |       r*	  j                           |       r j                          y y y # t        t        f$ r Y +w xY w#  |       r j                          w w xY w)Nc                      t         d      S )Nr   )hasattrr   s   r   <lambda>zNNTP.__exit__.<locals>.<lambda>  s    wtV4 r   )quitOSErrorEOFError_close)r   r   is_connecteds   `  r   __exit__zNNTP.__exit__  sd    4>"		  >KKM "  X&   >KKM "s!   9 AA 
AA A(c                     ||st        d      t        j                  d| | j                  | j                         t        j                  | j                  | j                  f|      S )Nz0Non-blocking socket (timeout=0) is not supportedznntplib.connect)
ValueErrorsysauditr   r   socketcreate_connection)r   r   s     r   r   zNNTP._create_socket  sQ    wOPP		#T499dii@''DII(>HHr   c                 r    	 | j                   rt        dt        | j                               | j                  S )Nz	*welcome*)r   printreprr   r   s    r   
getwelcomezNNTP.getwelcome  s,    	.
 >>5d4<<.@A||r   c                 p   	 | j                   wd| _        d | _        	 | j                         \  }}|| _         d|v r!t	        t        t        |d               | _        d|v rdj                  |d         | _        | j                   S | j                   S # t        t        f$ r i | _         Y | j                   S w xY w)NrP   VERSIONIMPLEMENTATION )
r   nntp_versionnntp_implementationcapabilitiesmaxmapra   rI   r	   r   )r   respcapss      r   r   zNNTP.getcapabilities  s    	 :: !D'+D$P!..0
d
 "
$ ),CT)_,E(FD%#t+/2xx=M8N/OD,zztzz '(:;  
 zz s   B B54B5c                     	 || _         y r   )r   )r   levels     r   set_debuglevelzNNTP.set_debuglevel  s    	H
 r   c                     	 t        j                  d| |       |t        z   }| j                  dkD  rt	        dt        |             | j                  j                  |       | j                  j                          y )Nznntplib.putlinerP   z*put*)	r   r   _CRLFr   r   r   r   writeflushr   rX   s     r   _putlinezNNTP._putline  sX    	3		#T40e|>>AuWd4j9				r   c                     	 | j                   rt        dt        |             |j                  | j                  | j
                        }| j                  |       y )Nz*cmd*)r   r   r   encodeencodingerrorsr   r   s     r   _putcmdzNNTP._putcmd  s?    	0>>5$t*5{{4==$++6dr   c                 (   	 | j                   j                  t        dz         }t        |      t        kD  rt	        d      | j
                  dkD  rt        dt        |             |st        |r#|dd  t        k(  r|d d }|S |dd  t        v r|d d }|S )NrP   zline too longz*get*rt   )
r   readline_MAXLINErV   r   r   r   r   r   r   )r   
strip_crlfrX   s      r   _getlinezNNTP._getline  s    	# yy!!(A+.t9x00>>A'4:&8^BCyE!CRy  bce#CRyr   c                    	 | j                         }| j                  rt        dt        |             |j	                  | j
                  | j                        }|d d }|dk(  rt        |      |dk(  rt        |      |dvrt        |      |S )Nz*resp*rP   45123)
r   r   r   r   rH   r   r   r   r	   r
   )r   r   cs      r   r   zNNTP._getresp  s    	% }}>>54:6{{4==$++6!H8$T**8$T**E>#D))r   c                    	 d }	 t        |t        t        f      rt        |d      x}}| j	                         }|d d t
        vrt        |      g }|Jdt        z   df}	 | j                  d      }||v rni|j                  d      r|dd  }|j                  |       >d}	 | j                         }||k(  rn(|j                  d      r|dd  }|j                  |       >|r|j                          ||fS # |r|j                          w w xY w)Nwbr      .s   .
rP   Fs   ..)rF   strr7   openr   	_LONGRESPr   r   r   rc   r   rG   r   )r   r   
openedFiler   r8   terminatorsrX   
terminators           r   _getlongrespzNNTP._getlongresp  s.   	 
 	#$e-$(t$44
T==?DBQxy($T**E#e|V4==/D{*u-#ABxJJt$  "
==?Dz)u-#ABxLL&    "U{   " s   CC4 4D	c                 F    	 | j                  |       | j                         S r   )r   r   r   s     r   	_shortcmdzNNTP._shortcmd  s    	,T}}r   c                 H    	 | j                  |       | j                  |      S r   )r   r   )r   rX   r   s      r   _longcmdzNNTP._longcmd!  s$    	0T  &&r   c                     	 | j                  |       | j                  |      \  }}||D cg c](  }|j                  | j                  | j                        * c}fS c c}w r   )r   r   rH   r   r   )r   rX   r   r   lists        r   _longcmdstringzNNTP._longcmdstring'  sd    	 	T&&t,
d"&( kk$--= ( ( 	( (s   -Ac                     	 	 | j                   S # t        $ r Y nw xY w	 | j                  d      \  }}t        |      }n# t        $ r t
        d d  }Y nw xY w|| _         |S )NzLIST OVERVIEW.FMT)_cachedoverviewfmtAttributeErrorr   r]   r	   rU   )r   r   r8   rW   s       r   _getoverviewfmtzNNTP._getoverviewfmt1  sz    	8	*** 			---.ABKD%
 &e,C	 " 	+'*C	+
 #&
s    	? AAc                 T    |D cg c]  }t        |j                           c}S c c}w r   )r:   r`   )r   r8   rX   s      r   
_grouplistzNNTP._grouplistB  s!    5:;T	4::<(;;;s   %c                 t    	 i }| j                  d      \  }}|D ]  }|j                         ^}}|||<    ||fS )NCAPABILITIES)r   r`   )r   r   r   r8   rX   rY   ri   s          r   r   zNNTP.capabilitiesF  sU    	 )).9e 	 D JJLMD6DJ	  Tzr   )r   c                `   	 t        |t        j                  t        j                  f      s.t        dj	                  |j
                  j                              t        || j                  dk        \  }}dj	                  ||      }| j                  ||      \  }}|| j                  |      fS )NAthe date parameter must be a date or datetime object, not '{:40}'rq   zNEWGROUPS {0} {1})rF   rw   r3   	TypeErrorr   	__class__r   r   r   r   r   )r   r3   r   rx   ry   cmdr   r8   s           r   	newgroupszNNTP.newgroupsT  s    	 $ >?$fT^^%<%<=? ? /tT5F5F5JK(!((8<))#t4eT__U+++r   c                6   	 t        |t        j                  t        j                  f      s.t        dj	                  |j
                  j                              t        || j                  dk        \  }}dj	                  |||      }| j                  ||      S )Nr  rq   zNEWNEWS {0} {1} {2})
rF   rw   r3   r  r   r  r   r   r   r   )r   r;   r3   r   rx   ry   r  s          r   newnewszNNTP.newnewsd  s    	 $ >?$fT^^%<%<=? ? /tT5F5F5JK(#**5(HE""3--r   c                h    	 |d|z   }nd}| j                  ||      \  }}|| j                  |      fS )NzLIST ACTIVE LIST)r   r   )r   group_patternr   commandr   r8   s         r   r   z	NNTP.listt  sH    	 $$}4GG))'48eT__U+++r   c                 N   t        j                  d      }| j                  d|z         \  }}|j                  d      s| j                  d|z         \  }}i }|D ]D  }|j	                  |j                               }|s%|j                  dd      \  }	}
|s|
c S |
||	<   F |r||fS y)Nz^(?P<group>[^ 	]+)[ 	]+(.*)$zLIST NEWSGROUPS r(   zXGTITLE rP   rq   rD   )recompiler   rc   searchstripr;   )r   r  
return_allline_patr   r8   groupsraw_linematchrY   descs              r   _getdescriptionszNNTP._getdescriptions  s    ::>?))*<}*LMeu% --j=.HIKD% 	$HOOHNN$45E"[[A.
d!K#t	$ < r   c                 (    	 | j                  |d      S )NFr  )r   r;   s     r   descriptionzNNTP.description  s    		7 $$UE22r   c                 (    	 | j                  |d      S )NTr  )r   r  s     r   descriptionszNNTP.descriptions  s    5$$]D99r   c                 V   	 | j                  d|z         }|j                  d      st        |      |j                         }dx}x}}t	        |      }|dkD  r1|d   }|dkD  r'|d   }|dkD  r|d   }|dkD  r|d   j                         }|t        |      t        |      t        |      |fS )NzGROUP r'   r   rP   rq   r   rr   )r   rc   r   r`   rV   rR   ra   )r   rY   r   wordscountr=   r<   ns           r   r;   z
NNTP.group  s    	 ~~ho.u% &&

   Jq5!HE1uaq5 8D1u$Qx~~/SZUSY<<r   c                (    	 | j                  d|      S )NHELP)r   )r   r   s     r   helpz	NNTP.help  s    	 ""6400r   c                     	 |j                  d      st        |      |j                         }t        |d         }|d   }|||fS )N22rP   rq   )rc   r   r`   ra   )r   r   r   art_numrA   s        r   
_statparsezNNTP._statparse  sL    	*t$ &&

eAh-1X
Wj((r   c                 H    	 | j                  |      }| j                  |      S r   )r   r)  )r   rX   r   s      r   _statcmdzNNTP._statcmd  s"    =~~d#t$$r   c                 j    	 |r | j                  dj                  |            S | j                  d      S )NzSTAT {0}STAT)r+  r   )r   message_specs     r   statz	NNTP.stat  s5    	 ==!2!2<!@AA==((r   c                 &    	 | j                  d      S )NNEXTr+  r   s    r   nextz	NNTP.next      I}}V$$r   c                 &    	 | j                  d      S )NLASTr2  r   s    r   r<   z	NNTP.last  r4  r   c                 v    	 | j                  ||      \  }}| j                  |      \  }}}|t        |||      fS r   )r   r)  r?   )r   rX   r   r   r8   r(  rA   s          r   _artcmdzNNTP._artcmd  sB    @mmD$/e$(OOD$9!gz[*e<<<r   c                T    	 |dj                  |      }nd}| j                  ||      S )NzHEAD {0}HEADr   r8  r   r.  r   r  s       r   headz	NNTP.head  5    	 ###L1CC||C&&r   c                T    	 |dj                  |      }nd}| j                  ||      S )NzBODY {0}BODYr;  r<  s       r   bodyz	NNTP.body  r>  r   c                T    	 |dj                  |      }nd}| j                  ||      S )NzARTICLE {0}ARTICLEr;  r<  s       r   articlezNNTP.article  s5    	 #&&|4CC||C&&r   c                 &    	 | j                  d      S )NSLAVE)r   r   s    r   slavez
NNTP.slave$  s    	 ~~g&&r   c                    	 t        j                  d      | j                  dj                  ||      |      \  }}fd}||D cg c]
  } ||       c}fS c c}w )Nz^([0-9]+) ?(.*)
?zXHDR {0} {1}c                 R    j                  |       }|r|j                  dd      S | S )NrP   rq   )r  r;   )rX   mpats     r   remove_numberz NNTP.xhdr.<locals>.remove_number5  s'    		$A$%1771a=/4/r   )r  r  r   r   )	r   hdrr   r   r   r8   rL  rX   rK  s	           @r   xhdrz	NNTP.xhdr*  sa    	 jj-.)).*?*?S*I4Pe	0 e<dmD)<<<<s   Ac                    	 | j                  dj                  ||      |      \  }}| j                         }|t        ||      fS )NzXOVER {0}-{1})r   r   r   ro   )r   startendr   r   r8   rW   s          r   xoverz
NNTP.xover:  sO    	 ))/*@*@*L*.0e""$_UC000r   c                   	 d| j                   v rdnd}t        |t        t        f      r|\  }}|dj	                  ||xs d      z  }n
||dz   |z   }| j                  ||      \  }}| j                         }|t        ||      fS )NOVERXOVERz {0}-{1}rD   r   )r   rF   tupler   r   r   r   ro   )	r   r.  r   r  rP  rQ  r   r8   rW   s	            r   overz	NNTP.overH  s    	  $**,f'lUDM2%JE3:$$UCI266C%)l*C))#t4e""$_UC000r   c                    	 | j                  d      }|j                  d      st        |      |j                         }t	        |      dk7  rt        |      |d   }t	        |      dk7  rt        |      |t        |d       fS )NDATE111rq   rP      )r   rc   r   r`   rV   r   r   )r   r   elemr3   s       r   r3   z	NNTP.datec  s    	
 ~~f%u% &&zz|t9>%%Awt9?%%_T4000r   c                    | j                  |      }|j                  d      st        |      t        |t        t
        f      r|j                         }|D ]`  }|j                  t              s|j                  d      t        z   }|j                  d      rd|z   }| j                  j                  |       b | j                  j                  d       | j                  j                          | j                         S )N3r9   r   s   .
)r   rc   r   rF   r7   	bytearray
splitlinesendswithr   rstripr   r   r   r   )r   r  fr   rX   s        r   _postz
NNTP._postt  s    ~~g&s# &&a%+,A
  	"D=='{{7+e3t$d{IIOOD!	" 			!		}}r   c                 (    	 | j                  d|      S )NPOST)rd  )r   datas     r   postz	NNTP.post  s    	1 zz&$''r   c                 F    	 | j                  dj                  |      |      S )Nz	IHAVE {0})rd  r   )r   rA   rg  s      r   ihavez
NNTP.ihave  s&    	O zz+,,Z8$??r   c                     	 | j                   r| j                   j                          | ` | j                  j                          y # | j                  j                          w xY wr   )r   r   r   r   s    r   r   zNNTP._close  s>    	yy		!IIIOODIIOOs   (A A!c                 v    	 	 | j                  d      }| j                          |S # | j                          w xY w)NQUIT)r   r   )r   r   s     r   r   z	NNTP.quit  s5    	1	>>&)DKKM KKMs   & 8c                 l   | j                   rt        d      |s|st        d      	 |r=|s;dd l}|j                         }|j                  | j                        }|r
|d   }|d   }|sy | j                  d|z         }|j                  d      r=|st        |      | j                  d|z         }|j                  d      st        |      d | _
        | j                          | j                  r7d	| j                  vr(| j                          d | _
        | j                          y y y # t
        $ r Y w xY w)
NzAlready logged in.z7At least one of `user` and `usenetrc` must be specifiedr   rq   zauthinfo user 381zauthinfo pass 281r   )r   r   netrcauthenticatorsr   r   r   rc   r   r	   r   r   r   r   )r   r   r   r   rq  credentialsauthr   s           r   r   z
NNTP.login  s5   122HIK K
		#kkm"11$))<7D#AwH ~~.56??5!$T**~~&6&ABu-,T22
 $$)C!DJ  "	 *D$%  		s   ?D' '	D32D3c                     	 | j                  d      | _        y # t        $ r Y y t        $ r.}|j                  j                  d      rd| _        n Y d }~y d }~ww xY w)Nzmode reader480T)r   r   r	   r   r   rc   r   )r   es     r   r   zNNTP._setreadermode  sT    
	>>-8DL! 	! 	zz$$U+,0) *	s    	AA$AAc                    	 | j                   rt        d      | j                  rt        d      | j                  d      }|j	                  d      r| j
                  j                          t        | j                  || j                        | _        | j                  j                  d      | _        d| _         d | _        | j                          y t        d      )NzTLS is already enabled.z+TLS cannot be started after authentication.STARTTLS382r   TzTLS failed to start.)r   r   r   r   rc   r   r   r   r   r   r   r   r   r   )r   r   r   s      r   starttlszNNTP.starttls  s    
 {{ !:;;!! !NOO>>*-Du%		!'		7DIIF	 II..u5	" "
$$& 677r   )Tr   )NNT):r   r   r   r   r   	NNTP_PORTr   r   r   r   r   r   r   r   r   debugr   r   r   r   r   r   r   r   r   r   r   r  r	  r   r  r  r  r;   r%  r)  r+  r/  r3  r<   r8  r=  rA  rD  rG  rN  rR  rW  r3   rd  rh  rj  r   r   r   r   	_have_sslr{  r   r   r   r   r   +  sc    HF"+$ 50!F #D	"I, E" ,\'("< '+ ,  ,0 . ,t ,.3:=4   1)%
)%%='d ''d '' '' &* =  )- 1 *. 161"*(@'#R 	8 r   r   c                   8     e Zd Zedddddef fd	Z fdZ xZS )NNTP_SSLNFc	           	      @    	 || _         t        	| 	  |||||||       y r   )ssl_contextsuperr   )
r   r   r   r   r   r  r   r   r   r  s
            r   r   zNNTP_SSL.__init__  s.      +DGT4x%w0r   c                     t         |   |      }	 t        || j                  | j                        }|S #  |j                           xY wr   )r  r   r   r  r   r   )r   r   r   r  s      r   r   zNNTP_SSL._create_socket  sI    7)'2D"4)9)9499E
 	

s	   !5 A)r   r   r   NNTP_SSL_PORTr   r   r   __classcell__)r  s   @r   r  r    s$    &3$#e3		0	 	r   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: z / ))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   ry  Grouphaszarticles, rangetoc                 8    t        |       |kD  r| d |dz
   dz   } | S )Nrr   z...)rV   )slims     r   cutr  6  s&    q6C<(37e#Ar   rP   r2   <r1   z{:7} {:20} {:42} ({})   *   r   )F)Jr  r   collectionsrw   r   warningsr   r~  ImportErroremail.headerr   rE   r   __all___deprecatedr   r   r   r   r   r   r	   r
   r   r|  r  r   rU   rS   r   
namedtupler:   r?   r]   ro   r   r   r   r   r  rG   argparseArgumentParserparseradd_argumentra   
parse_argsr   r   serverr  r   r   r{  r;   r   r!  r=   r<   rY   r   r  r   nb_articlesrR  	overviewsartnumrW  r`   authorr1   r8   r   r   r   r   r   <module>r     s  B 
    
  I > *   Xg . 0	 0	Y 		 		 			 		I 	 		 O 
   	"K"";#EG	 %k$$]%FH
	2:H,4 
CK8 K8\ 4 . NN: z$X$$ 2N OF
i1LR  T
j/J  L
hFOQ^_  a
orQ  S
glE0  2D99D882:Ddkk-2: D$++D1DT	

%&WWTZZ%8"D%d	'4'8%tL
 D	D,,,q01EggeT*OD)! tF|,223:1=Y0DN#%,,c&"os7B'7@ 		 FFHa U  Is   K6 6L L