PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  lYF@sddlZddlZddlZddlZddlZyddlZWnek rfdZYnXdZddlm Z ddlm Z dddd d d d d gZ dZ GdddeZGdddeZGdd d eZGdd d eZGdd d eZGdd d eZdZdZdddddddddd d!d"h Zd#d$d%d&d'd(d)gZd*d(d+d)iZd,Zejd-d.d/d0d1gZejd2d3d4d+gZd5d Z d6d7Zdd8d9Zdd:d;Z dd<d=Z!er.d>d?Z"Gd@dAdAZ#GdBdde#Z$erGdCdDdDe#Z%e j&dDe'dEkrddl(Z(e(j)dFdGZ*e*j+dHdIdJdKdLdMe*j+dNdOdJdPdLdQe*j+dRdSdJdT dUe,dLdVeefe*j+dWdXdJdYdUe,dLdZe*j+d[d\d]d^dJddLd_e*j-Z.e.j/Z/e.j re/dT kreZ/e$d`e.j0dae/Z1n+e/dT kreZ/e%d`e.j0dae/Z1e1j2Z3dbe3kre1j4e1j5e.j5\Z6Z7Z8Z9Z:e;dce:dde7dee8dfe9dgdhZ<e=e,e9e.j>dTZ8e1j?e8e9\Z6Z@xe@D]z\ZAZBe eBd$jCdidTdZDe eBd#ZEe,eBd)ZFe;djjGeAe<eDdke<eEdleFquWe1jHdS)mNFT) decode_header)_GLOBAL_DEFAULT_TIMEOUTNNTP NNTPErrorNNTPReplyErrorNNTPTemporaryErrorNNTPPermanentErrorNNTPProtocolError NNTPDataErrorric@seZdZddZdS)rc GsCtj||y|d|_Wntk r>d|_YnXdS)NrzNo response given) Exception__init__response IndexError)selfargsr&/opt/python35/lib/python3.5/nntplib.pyr bs  zNNTPError.__init__N)__name__ __module__ __qualname__r rrrrr`s c@seZdZdS)rN)rrrrrrrris c@seZdZdS)rN)rrrrrrrrms c@seZdZdS)rN)rrrrrrrrqs c@seZdZdS)r N)rrrrrrrr us c@seZdZdS)r N)rrrrrrrr ys wi3Z100Z101211215Z220Z221Z222Z224Z225Z230Z231Z282subjectfromdatez message-idZ referencesz:bytesz:linesbytesliness GroupInfogrouplastfirstflag ArticleInfoZnumber message_idcCskg}xUt|D]G\}}t|trM|j|j|pCdq|j|qWdj|S)Nascii)_email_decode_header isinstancerappenddecodejoin)Z header_strpartsvencrrrrs cCsg}x|D]}|ddkrR|ddjd\}}}d|}n|jd\}}}|j}tj||}|j|q Wt}t|t|krtd|dt||krtd|S)Nr:z$LIST OVERVIEW.FMT response too shortz*LIST OVERVIEW.FMT redefines default fields) partitionlower_OVERVIEW_FMT_ALTERNATIVESgetr)_DEFAULT_OVERVIEW_FMTlenr )rfmtlinename_suffixdefaultsrrr_parse_overview_fmts "    r=cCs-tt}g}x|D] }i}|jd^}}t|}xt|D]\} } | t|krtqS|| } | jd} | |kr| r| d} | r| dt| j| krtd| r| t| dnd} | ||| d?Z#d@dAZ$ddBdCZ%dd'ddDdEZ&dd'ddFdGZ'dd'ddHdIZ(dJdKZ)d'ddLdMZ*d'ddNdOZ+d'ddPdQZ,d'ddRdSZ-dTdUZ.dVdWZ/dXdYZ0dZd[Z1d\d]Z2d^d_Z3d`daZ4ddddbdcZ5dddeZ6e7rddfdgZ8dS)h _NNTPBasezutf-8surrogateescapeNcCs||_||_d|_|j|_d|_|jd|_|rd|jkr|j|jsd|_|jd|_ d|_ dS)NrFREADER) hostfile debugging_getrespwelcome_capsgetcapabilitiesreadermode_afterauth_setreadermodetls_on authenticated)rrbra readermodetimeoutrrrr 8s          z_NNTPBase.__init__cCs|S)Nr)rrrr __enter__gsz_NNTPBase.__enter__cscfdd}|r_z-yjWnttfk rFYnXWd|r^jXdS)Ncs tdS)Nrb)hasattrr)rrrksz$_NNTPBase.__exit__..)quitOSErrorEOFError_close)rrZ is_connectedr)rr__exit__js   z_NNTPBase.__exit__cCs&|jrtdt|j|jS)Nz *welcome*)rcprintreprre)rrrr getwelcomeus z_NNTPBase.getwelcomec Cs|jdkrd|_d|_y|j\}}Wn!ttfk rZi|_YnTX||_d|krttt|d|_d|krdj |d|_|jS)Nr0VERSIONZIMPLEMENTATION ) rf nntp_versionZnntp_implementation capabilitiesrrmaxmapr@r+)rrespcapsrrrrg~s     z_NNTPBase.getcapabilitiescCs ||_dS)N)rc)rlevelrrrset_debuglevelsz_NNTPBase.set_debuglevelcCsM|t}|jdkr,tdt||jj||jjdS)Nr0z*put*)_CRLFrcrvrwrbwriteflush)rr8rrr_putlines  z_NNTPBase._putlinecCsE|jrtdt||j|j|j}|j|dS)Nz*cmd*)rcrvrwencodeencodingerrorsr)rr8rrr_putcmds z_NNTPBase._putcmdTcCs|jjtd}t|tkr4td|jdkrVtdt||sbt|r|ddt kr|dd}n&|ddt kr|dd}|S) Nr0z line too longz*get*rJrOrOr) rbreadline_MAXLINEr6r rcrvrwrsr)rZ strip_crlfr8rrr_getlines z_NNTPBase._getlinecCs|j}|jr(tdt||j|j|j}|dd}|dkrht||dkrt||dkrt ||S)Nz*resp*r045Z123) rrcrvrwr*rrrrr )rrcrrrrds        z_NNTPBase._getrespc CsDd}z t|ttfr1t|d}}|j}|ddtkr_t|g}|dk rdtdf}x|jd}||krP|j dr|dd}|j |qWnRd}xI|j}||krP|j dr|dd}|j |qWWd|r9|j X||fS)Nwb.s. Fs..r0) r(strropenrd _LONGRESPrrrrBrr)close)rrbZ openedFilerrZ terminatorsr8 terminatorrrr _getlongresps8        z_NNTPBase._getlongrespcCs|j||jS)N)rrd)rr8rrr _shortcmds z_NNTPBase._shortcmdcCs|j||j|S)N)rr)rr8rbrrr_longcmds z_NNTPBase._longcmdcs?j|j|\}}|fdd|DfS)Ncs(g|]}|jjjqSr)r*rr).0r8)rrr s z,_NNTPBase._longcmdstring..)rr)rr8rbrlistr)rr_longcmdstrings z_NNTPBase._longcmdstringcCswy |jSWntk rYnXy|jd\}}Wn"tk r]tdd}Yn Xt|}||_|S)NzLIST OVERVIEW.FMT)Z_cachedoverviewfmtAttributeErrorrrr5r=)rrrr7rrr_getoverviewfmts     z_NNTPBase._getoverviewfmtcCsdd|DS)NcSs"g|]}t|jqSr)rr?)rr8rrrr$s z(_NNTPBase._grouplist..r)rrrrr _grouplist"sz_NNTPBase._grouplistcCsRi}|jd\}}x*|D]"}|j^}}|||[^ ]+)[ ]+(.*)$zLIST NEWSGROUPS rzXGTITLE r0rJr&)recompilerrBsearchstripr) rrZ return_allline_patrrgroupsraw_linematchr9Zdescrrr_getdescriptionscs  z_NNTPBase._getdescriptionscCs|j|dS)NF)r)rrrrr descriptionzs z_NNTPBase.descriptioncCs|j|dS)NT)r)rrrrr descriptionssz_NNTPBase.descriptionscCs|jd|}|jds.t||j}d}}}t|}|dkr|d}|dkr|d}|dkr|d}|dkr|dj}|t|t|t||fS)NzGROUP rrr0rJrrK)rrBrr?r6r2r@)rr9rwordscountr!r nrrrrs           z_NNTPBase.groupcCs|jd|S)NZHELP)r)rrbrrrhelpsz_NNTPBase.helpcCsN|jdst||j}t|d}|d}|||fS)NZ22r0rJ)rBrr?r@)rrrart_numr$rrr _statparses    z_NNTPBase._statparsecCs|j|}|j|S)N)rr)rr8rrrr_statcmdsz_NNTPBase._statcmdcCs-|r|jdj|S|jdSdS)NzSTAT {0}ZSTAT)rrU)r message_specrrrstats z_NNTPBase.statcCs |jdS)NZNEXT)r)rrrrnextsz_NNTPBase.nextcCs |jdS)NZLAST)r)rrrrr sz_NNTPBase.lastcCsF|j||\}}|j|\}}}|t|||fS)N)rrr#)rr8rbrrrr$rrr_artcmdsz_NNTPBase._artcmdcCs4|dk rdj|}nd}|j||S)NzHEAD {0}ZHEAD)rUr)rrrbrrrrheads z_NNTPBase.headcCs4|dk rdj|}nd}|j||S)NzBODY {0}ZBODY)rUr)rrrbrrrrbodys z_NNTPBase.bodycCs4|dk rdj|}nd}|j||S)Nz ARTICLE {0}ZARTICLE)rUr)rrrbrrrrarticles z_NNTPBase.articlecCs |jdS)NZSLAVE)r)rrrrslavesz_NNTPBase.slavecsbtjd|jdj|||\}}fdd|fdd|DfS)Nz^([0-9]+) ?(.*) ?z XHDR {0} {1}cs)j|}|r%|jddS|S)Nr0rJ)rr)r8m)patrr remove_numbersz%_NNTPBase.xhdr..remove_numbercsg|]}|qSrr)rr8)rrrrs z"_NNTPBase.xhdr..)rrrrU)rZhdrrrbrrr)rrrxhdr s $z_NNTPBase.xhdrcCsC|jdj|||\}}|j}|t||fS)Nz XOVER {0}-{1})rrUrrH)rstartendrbrrr7rrrxovers  z_NNTPBase.xoverc Csd|jkrdnd}t|ttfr[|\}}|dj||pQd7}n|dk ru|d|}|j||\}}|j}|t||fS)NZOVERZXOVERz {0}-{1}r&rz)rfr(tuplerrUrrrH) rrrbrrrrrr7rrrover(s   z_NNTPBase.overc Cstjdtdtjd}|jd||\}}g}xB|D]:}|j|j}|rK|j|j ddqKW||fS)NzFThe XGTITLE extension is not actively used, use descriptions() insteadrJz^([^ ]+)[ ]+(.*)$zXGTITLE r0) warningswarnDeprecationWarningrrrrrr)r) rrrbrrZ raw_linesrrrrrrxgtitleCs   z_NNTPBase.xgtitlec Cstjdtd|jdj|}|jdsFt|y|j\}}Wntk r|t|Yn X||fSdS)Nz(The XPATH extension is not actively usedrJz XPATH {0}Z223) rrrrrUrBrr? ValueError)ridrZresp_numpathrrrxpathUs    z_NNTPBase.xpathcCs|jd}|jds*t||j}t|dkrTt||d}t|dkr|t||t|dfS)NZDATEZ111rJr0)rrBrr?r6r rT)rrelemrrrrris     z_NNTPBase.datecCs|j|}|jds*t|t|ttfrK|j}xY|D]Q}|jtsz|j dt}|jdrd|}|j j |qRW|j j d|j j |j S)N3s rs. )rrBrr(r bytearray splitlinesendswithrrstriprbrrrd)rrfrr8rrr_postzs     z_NNTPBase._postcCs|jd|S)NZPOST)r)rdatarrrpostsz_NNTPBase.postcCs|jdj||S)Nz IHAVE {0})rrU)rr$rrrrihavesz_NNTPBase.ihavecCs|jj|`dS)N)rbr)rrrrrts z_NNTPBase._closec Cs%z|jd}Wd|jX|S)NZQUIT)rrt)rrrrrrqs z_NNTPBase.quitc CsT|jrtd| r/| r/tdyU|r| rddl}|j}|j|j}|r|d}|d}Wntk rYnX|sdS|jd|}|jdr|st|n.|jd|}|jdst |d|_ |j |j rPd |j krP|j d|_ |j dS) NzAlready logged in.z7At least one of `user` and `usenetrc` must be specifiedrrJzauthinfo user Z381zauthinfo pass Z281r`)rkrnetrcZauthenticatorsrarrrrBrrrfrgrhri)ruserpasswordusenetrcrZ credentialsZauthrrrrlogins<             z_NNTPBase.logincCsty|jd|_WnWtk r*YnFtk ro}z&|jjdrZd|_nWYdd}~XnXdS)Nz mode readerZ480T)rrerrr rBrh)rerrrris  z_NNTPBase._setreadermodecCs|jrtd|jr*td|jd}|jdr|jjt|j||j |_|jj d|_d|_d|_ |j n t ddS)NzTLS is already enabled.z+TLS cannot be started after authentication.STARTTLSZ382rwbTzTLS failed to start.)rjrrkrrBrbrr]rZramakefilerfrgr)rr[rrrrstarttlss        z_NNTPBase.starttls)9rrrrrrr rnrurxrgrdebugrrrrdrrrrrrr|rrrrrrrrrrrrr rrrrrrrrrrrrrrrtrqrri _have_sslrrrrrr^(sj .      .                 ) r^c@s:eZdZeddddeddZddZdS)rNFc Cs||_||_tj||f||_d}yN|jjd}tj||||||sm|r|j|||Wn(|r|j |jj YnXdS)Nr) raportsocketcreate_connectionrZrr^r rr) rrarrrrlrrmrbrrrr s      z NNTP.__init__c Cs&ztj|Wd|jjXdS)N)r^rtrZr)rrrrrt!sz NNTP._close)rrr NNTP_PORTrr rtrrrrrs  "c @s=eZdZedddddeddZddZdS)NNTP_SSLNFc Cstj||f||_d} ylt|j|||_|jjd} tj|| |d|d||sy|r|j|||Wn(| r| j|jjYnXdS)Nrrlrm) rrrZr]rr^r rr) rrarrrZ ssl_contextrlrrmrbrrrr +s    zNNTP_SSL.__init__c Cs&ztj|Wd|jjXdS)N)r^rtrZr)rrrrrtAszNNTP_SSL._close)rrr NNTP_SSL_PORTrr rtrrrrr)s  r__main__rzJ nntplib built-in demo - display the latest articles in a newsgroupz-gz--groupdefaultzgmane.comp.python.generalrz3group to fetch messages from (default: %(default)s)z-sz--serverznews.gmane.orgz+NNTP server hostname (default: %(default)s)z-pz--portr0typez#NNTP port number (default: %s / %s)z-nz --nb-articles z2number of articles to fetch (default: %(default)s)z-Sz--sslaction store_truezuse NNTP over SSLrarrZGroupZhaszarticles, rangeZtocCs.t||kr*|d|dd}|S)NrKz...)r6)sZlimrrrcutlsrBs                 -             !   )