f  ddlZddlZddlZddlZddlZddlZ ddlZdZn #e$rdZYnwxYwddl m Z ddlm Z gdZ ejedd ZGd d eZGd d eZGddeZGddeZGddeZGddeZdZdZhdZgdZdddZdZejdgdZejd gd!Z d"Z d#Z!dVd$Z"dVd%Z#dWd&Z$erd'Z%Gd(d)Z&er#Gd*d+e&Z'e (d+ed,kr,ddl)Z)e)j*d-.Z+e+,d/d0d1d23e+,d4d5d6d73e+,d8d9d:e-d;ede+,d?d@dAe-dB>e+,dCdDdEddFGe+.Z/e/j0Z0e/jse0d:kreZ0e&e/j1e0HZ2ne0d:kreZ0e'e/j1e0HZ2e23Z4dIe4vre25e26e/j6\Z7Z8Z9Z:Z;ee-e:e/j?z dOzZ9e2@e9e:\Z7ZAeAD]\ZBZCe eCdPDdQdOdZEe eCdRZFe-eCdZGe 100101211215220221222224225230231282)subjectfromdatez message-id references:bytes:linesr5r6)byteslines GroupInfo)grouplastfirstflag ArticleInfo)number message_idr8c g}t|D]Z\}}t|tr+|||pdE||[d|S)Nascii)_email_decode_header isinstancer7appenddecodejoin) header_strpartsvencs rrrs@ E&z223 a    LL#.11 2 2 2 2 LLOOOO 775>>rc g}|D]}|ddkr'|ddd\}}}d|z}n|d\}}}|}t||}||t }t |t |krtd|dt ||krtd|S)Nr:z$LIST OVERVIEW.FMT response too shortz*LIST OVERVIEW.FMT redefines default fields) partitionlower_OVERVIEW_FMT_ALTERNATIVESgetrG_DEFAULT_OVERVIEW_FMTlenr )r8fmtlinename_suffixdefaultss r_parse_overview_fmtr]s$ C   7c>>"122h0055OD!V:DD#nnS11OD!Vzz||)--dD99 4$H 3xx#h--BCCC >CMM>h&&HIII Jrc* tt}g}|D]}i}|d^}}t|}t |D]\} } | t|kr|| } | d} | |kr`| s^| dz} | r<| dt| | krtd| r| t| dnd} | ||| <|||f|S)N rOz: z?OVER/XOVER response doesn't include names of additional headers) rVrUsplitint enumerate startswithrRr rG)r8rWdata_process_func n_defaultsoverviewrXfieldsarticle_numbertokensitoken field_name is_metadatahs r_parse_overviewrosG*++JH22"&**T"2"2^,,!&)) # #HAuCHH}}QJ$//44KJ{%GU7CFF7^1133q88')FGGG*/9c!ffggT"F3q6NN01111 Orc ||dd}|dd}t|dd}t|dd}t|dd}t|dd}t|dd}t|dd}|dkr|dz }n |dkr|d z }tj||||||S) NiFidil)radatetime)date_strtime_strhoursminutessecondsyearmonthdays r_parse_datetimersBCC=CRC= !  E(1Q3-  G(122,G x}  D B E hrssm  C byy       T5#ugw G GGrc t|tjsd}nd|}|j}|r|dz}d||}nd||}||fS)N000000z({0.hour:02d}{0.minute:02d}{0.second:02d}rvz{0:02d}{1.month:02d}{1.day:02d}z{0:04d}{1.month:02d}{1.day:02d})rFrwformatr})dtlegacyryyrxs r_unparse_datetimers  b(+ , ,I=DDRHH A C G4;;ArBB4;;ArBB X rc\ |tj}|||S)N)server_hostname)ssl_create_stdlib_context wrap_socket)sockcontexthostnames r _encrypt_onrs5  ?022G""4"BBBrceZdZdZdZeddddefdZdZdZ dZ d Z d Z d Z d ZeZd ZdZd8dZdZd9dZdZd9dZd9dZdZdZdZdddZdddZd9dddZdZdZdZ d Z!ddd!Z"d"Z#d#Z$d9d$Z%d%Z&d&Z'd9d'Z(d9ddd(Z)d9ddd)Z*d9ddd*Z+d+Z,ddd,Z-ddd-Z.ddd.Z/d/Z0d0Z1d1Z2d2Z3d3Z4d4Z5d:d5Z6d6Z7e8rd9d7Z9dSdS);rzutf-8surrogateescapeNFc ||_||_|||_d|_ |jd|_|||s|r||||dSdS#|jr|j|jxYw)Nrwb) hostport_create_socketrfilemakefile _base_initloginclose)rrruserpassword readermodeusenetrctimeouts rrz NNTP.__init__;s "  ''00    **511DI OOJ ' ' ' 5x 5 4844444 5 5 y " !!! IOO    s ABzNNTP.__exit__..swtV44r)quitOSErrorEOFError_close)rr is_connecteds` r__exit__z NNTP.__exit__s4444 <>> " " X&     <>>"KKMMMMM""<<>>"KKMMMM"  " "s!'A ;A ;A !Bc||stdtjd||j|jt j|j|jf|S)Nz0Non-blocking socket (timeout=0) is not supportedznntplib.connect) ValueErrorsysauditrrsocketcreate_connection)rrs rrzNNTP._create_socketsS  w OPP P #T49di@@@'DI(>HHHrcd |jr"tdt|j|jS)Nz *welcome*)rprintreprrrs r getwelcomezNNTP.getwelcomes2 . >A5d4<.@.@AAA|rcb |jd|_d|_ |\}}||_d|vr-t t t |d|_d|vr d|d|_n#ttf$r i|_YnwxYw|jS)NrPVERSIONIMPLEMENTATION ) r nntp_versionnntp_implementation capabilitiesmaxmaprarIr r)rrespcapss rrzNNTP.getcapabilitiess  :  !D '+D $ P!..00 d " $$),CT)_,E,E(F(FD%#t++/2xx=M8N/O/OD,'(:;     zsB B'&B'c ||_dSr)r)rlevels rset_debuglevelzNNTP.set_debuglevels H rc tjd|||tz}|jdkrt dt ||j||jdS)Nznntplib.putlinerPz*put*) rr_CRLFrrrrwriteflushrrXs r_putlinez NNTP._putliness 3 #T4000e| >A  uWd4jj999  rc |jrtdt|||j|j}||dS)Nz*cmd*)rrrencodeencodingerrorsrrs r_putcmdz NNTP._putcmdsS 0 >55$t**555{{4=$+66 drTcr |jtdz}t|tkrt d|jdkrt dt||st|r9|ddtkr |dd}n|ddtvr |dd}|S)NrPz line too longz*get*rt) rreadline_MAXLINErVr rrrrr)r strip_crlfrXs r_getlinez NNTP._getlines #y!!(A+.. t99x  00 0 >A   '4:: & & &#8^  !BCCyE!!CRCybcce##CRCy rcF |}|jrtdt|||j|j}|dd}|dkrt||dkrt||dvrt||S)Nz*resp*rP45123) rrrrrHrrrr r )rrcs rrz NNTP._getresps %}} >654::666{{4=$+66 !H 88$T** * 88$T** * E>>#D)) ) rc d} t|ttfrt|dx}}|}|ddt vrt |g}|]dtzdf} |d}||vrn5| dr |dd}| |OnSd} |}||krn5| dr |dd}| |P|r| n#|r| wwxYw||fS)Nwbr .s. rPFs..) rFstrr7openr _LONGRESPrrrrcrrGr)rr openedFilerr8 terminatorsrX terminators r _getlongrespzNNTP._getlongresps   #$e -- 5$(t$4$44 T==??DBQBxy(($T***E#e|V4 %==//D{**u--(#ABBxJJt$$$ % " '==??Dz))u--(#ABBxLL&&& ' #  """ #  """" #U{s DD22E cV |||Sr)rrrs r _shortcmdzNNTP._shortcmds' , T}}rcX ||||Srrr)rrXrs r_longcmdz NNTP._longcmd!s- 0 T  &&&rc ||\}}|fd|DfS)NcPg|]"}|jj#Sr)rHrr).0rXrs r z'NNTP._longcmdstring...s;(((kk$-==(((rr)rrXrrlists` r_longcmdstringzNNTP._longcmdstring'sf  T&&t,, d(((("&(((( (rc |jS#t$rYnwxYw |d\}}t|}n#t$rt dd}YnwxYw||_|S)NzLIST OVERVIEW.FMT)_cachedoverviewfmtAttributeErrorrr]r rU)rrr8rWs r_getoverviewfmtzNNTP._getoverviewfmt1s 8 * *    D  ---.ABBKD% &e,,CC " + + +'*CCC + #& s AAAcd|DS)NcDg|]}t|Sr)r:r`)rrXs rrz#NNTP._grouplist..Ds%;;;T 4::<<(;;;rr)rr8s r _grouplistzNNTP._grouplistBs;;U;;;;rc i}|d\}}|D]}|^}}|||<||fS)N CAPABILITIES)rr`)rrrr8rXrYris rrzNNTP.capabilitiesFsZ )).99 e  D JJLLMD6DJJTzr)rcl t|tjtjfs,td|jjt||jdk\}}d||}| ||\}}|| |fS)NAthe date parameter must be a date or datetime object, not '{:40}'rqzNEWGROUPS {0} {1}) rFrwr3 TypeErrorr __class__rrrrr)rr3rrxrycmdrr8s r newgroupszNNTP.newgroupsTs $ >?? ?$fT^%<==?? ?/tT5F5JKK(!((8<<))#t44 eT__U++++rc: t|tjtjfs,td|jjt||jdk\}}d|||}| ||S)NrrqzNEWNEWS {0} {1} {2}) rFrwr3r rr rrrr)rr;r3rrxryr s rnewnewsz NNTP.newnewsds $ >?? ?$fT^%<==?? ?/tT5F5JKK(#**5(HEE""3---rcx |d|z}nd}|||\}}|||fS)Nz LIST ACTIVE LIST)rr)r group_patternrcommandrr8s rrz NNTP.listtsP   $$}4GGG))'488 eT__U++++rcxtjd}|d|z\}}|ds|d|z\}}i}|D]O}||}|r$|dd\} } |s| cS| || <P|r||fSdS)Nz^(?P[^ ]+)[ ]+(.*)$zLIST NEWSGROUPS r(zXGTITLE rPrqrD)recompilerrcsearchstripr;) rr return_allline_patrr8groupsraw_linematchrYdescs r_getdescriptionszNNTP._getdescriptionss:>??))*<}*LMM eu%% J--j=.HIIKD% $ $HOOHNN$4$455E $"[[A.. d! KKK#t  < 2rc0 ||dS)NFr)rr;s r descriptionzNNTP.descriptions 7$$UE222rc0 ||dS)NTr )rrs r descriptionszNNTP.descriptionss5$$]D999rc |d|z}|dst||}dx}x}}t |}|dkrD|d}|dkr6|d}|dkr(|d}|dkr|d}|t |t |t ||fS)NzGROUP r'rrPrqr rr)rrcrr`rVrRra)rrYrwordscountr=r<ns rr;z NNTP.groups ~~ho..u%% ' && &     JJ q55!HE1uuaq55 8D1uu$Qx~~//SZZUSYY<.remove_number5s- $A$%/1771a===4 /rc&g|] }|Srr)rrXrQs rrzNNTP.xhdr..8s#<<>%% %Aw t99??%% %_T40000rcB||}|dst|t|tt fr|}|D]m}|ts| dtz}|drd|z}|j |n|j d|j | S)N3r9rs. )rrcrrFr7 bytearray splitlinesendswithrrstriprrrr)rrfrrXs r_postz NNTP._postts~~g&&s## ' && & a%+ , ,  A  " "D=='' 4{{7++e3t$$ #d{ IOOD ! ! ! ! !!! }}rc0 |d|S)NPOST)rj)rdatas rpostz NNTP.posts 1zz&$'''rcV |d||S)Nz IHAVE {0})rjr)rrArms rihavez NNTP.ihaves, O zz+,,Z88$???rc |jr|j|`|jdS#|jwxYwr)rrrrs rrz NNTP._closesX y  !!!I IOO     DIOO    s "?Ac |d}|n#|wxYw|S)NQUIT)rr)rrs rrz NNTP.quitsC 1 >>&))D KKMMMMDKKMMMM s -Ac|jrtd|s|std |rF|sDddl}|}||j}|r|d}|d}n#t $rYnwxYw|sdS|d|z}|drM|st||d|z}|dst|d|_ | |j r:d |j vr3| d|_ | dSdSdS) NzAlready logged in.z7At least one of `user` and `usenetrc` must be specifiedrrqzauthinfo user 381zauthinfo pass 281r)rrnetrcauthenticatorsrrrrcrr rrrr)rrrrrw credentialsauthrs rrz NNTP.logins   3122 2 KH KIKK K  ' ' #kkmm "11$)<<'7D#AwH    D   F~~.566 ??5 ! ! 3 3$T***~~&6&ABBu--3,T222    $ #)C)C    ! ! !DJ  " " " " "  # #)C)CsAA44 BBc |d|_dS#t$rYdSt$r.}|jdrd|_nYd}~dSd}~wwxYw)Nz mode reader480T)rrr rrrcr)res rrzNNTP._setreadermodes >>-88DLLL!    DD!   z$$U++ ,0))*))))) s A" A"#AA"c |jrtd|jrtd|d}|dr||jt|j||j |_|j d|_d|_d|_ | dStd)NzTLS is already enabled.z+TLS cannot be started after authentication.STARTTLS382rTzTLS failed to start.)rrrrrcrrrrrrrrr)rrrs rstarttlsz NNTP.starttlss  { < !:;;;! P !NOOO>>*--Du%% 8 !!!' 7DIFF  I..u55 " " $$&&&&& 6777r)Tr)NNT):rrrrr NNTP_PORTrrrrrrrrrdebugrrrrrrrrrrrr rrrr!r#r;r*r.r0r4r8r<r=rBrFrIrLrTrXr]r3rjrnrprrrr _have_sslrrrrrr+sH F"+$ 50!!!!F # # #D " " "III , E" ,,,,\ '''' (((("<<<   '+,,,,, ,0..... ,t , , , , ,. 3 3 3:::===4 11111)))%%% ) ) ) )%%%%%%==== 'd ' ' ' ' ' 'd ' ' ' ' ' ' ' ' ' ' '''' &*===== )- 1 1 1 1 1*.111116111"*(((@@@'#'#'#'#R   8 8 8 8 8 8 888rrc8eZdZedddddeffd ZfdZxZS)NNTP_SSLNFc f ||_t|||||||dSr) ssl_contextsuperr) rrrrrrrrrr s rrzNNTP_SSL.__init__sG  +D  GG  T4x%w 0 0 0 0 0rct|} t||j|j}|S#|xYwr)rrrrrr)rrrr s rrzNNTP_SSL._create_socketsU77))'22D "4)949EE    s AA)rrr NNTP_SSL_PORTrrr __classcell__)r s@rrrsh&3$#e3 0 0 0 0 0 0         rr__main__zJ nntplib built-in demo - display the latest articles in a newsgroup)r!z-gz--groupzgmane.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--portrzNNTP port number (default: z / ))rtyper*z-nz --nb-articles z2number of articles to fetch (default: %(default)s)z-Sz--ssl store_truezuse NNTP over SSL)actionrr*)rrrGrouphaszarticles, rangetocLt||kr|d|dz dz}|S)Nrrz...)rV)slims rcutr6s, q66C<<(37( e#ArrPr2rs`B  JJJIIIII ?>>>>>******    Xg.... 00000 000     Y                                I         OOO    "K ";#E#E#E G G %k$]%F%F%FHH   2:HHHH,4 C C C CK 8K 8K 8K 8K 8K 8K 8K 8\ 4. NN: zOOO $X $2NOOOF i1LRTTT j/JLLL hFOiiQ^Q^Q^_aaa orQSSS glE0222     D 9D 82 2::D Ddk - - - 2:: D H$+D 1 1 1    DT %&WWTZ%8%8"D%d E'4'8%tLLL CD D,,q0 1 1EggeT**OD)! tF|,,223::1=-Y00DN## %,,cc&"ooss7B'7'7@@    FFHHHHHas ",,