grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026 й¼]F¨ã@sddlZddlZddlZddlZddlZyddlZWnek rfdZYnXdZddlm Z ddlm Z dddd d d d d gZ dZ Gdd„deƒZGdd„deƒZGdd „d eƒZGdd „d eƒZGdd „d eƒZGdd „d eƒZdZdZdddddddddd d!d"h Zd#d$d%d&d'd(d)gZd*d(d+d)iZd,Zejd-d.d/d0d1gƒZejd2d3d4d+gƒZd5d „Z d6d7„Zdd8d9„Zdd:d;„Z dd<d=„Z!er.d>d?„Z"Gd@dA„dAƒZ#GdBd„de#ƒZ$er€GdCdD„dDe#ƒZ%e j&dDƒe'dEkrýddl(Z(e(j)dFdGƒZ*e*j+dHdIdJdKdLdMƒe*j+dNdOdJdPdLdQƒe*j+dRdSdJdT dUe,dLdVeefƒe*j+dWdXdJdYdUe,dLdZƒe*j+d[d\d]d^dJddLd_ƒe*j-ƒZ.e.j/Z/e.j r e/dT kr…eZ/e$d`e.j0dae/ƒZ1n+e/dT kr³eZ/e%d`e.j0dae/ƒZ1e1j2ƒZ3dbe3kríe1j4ƒe1j5e.j5ƒ\Z6Z7Z8Z9Z:e;dce:dde7dee8dfe9ƒdgdh„Z<e=e,e9ƒe.j>dTƒZ8e1j?e8e9ƒ\Z6Z@x‚e@D]z\ZAZBe eBd$ƒjCdidTƒdZDe eBd#ƒZEe,eBd)ƒZFe;djjGeAe<eDdkƒe<eEdlƒeFƒƒquWe1jHƒdS)méNFT)Ú decode_header)Ú_GLOBAL_DEFAULT_TIMEOUTÚNNTPÚ NNTPErrorÚNNTPReplyErrorÚNNTPTemporaryErrorÚNNTPPermanentErrorÚNNTPProtocolErrorÚ NNTPDataErrorric@seZdZdd„ZdS)rc GsCtj||Œy|d|_Wntk r>d|_YnXdS)NrzNo response given)Ú ExceptionÚ__init__ÚresponseÚ IndexError)ÚselfÚargs©rú,/opt/alt/python35/lib64/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 éwi3Z100Z101Ú211Ú215Z220Z221Z222Z224Z225Z230Z231Z282ÚsubjectÚfromÚdatez message-idZ referencesz:bytesz:linesÚbytesÚliness Ú GroupInfoÚgroupÚlastÚfirstÚflagÚ ArticleInfoZnumberÚ message_idcCskg}xUt|ƒD]G\}}t|tƒrM|j|j|pCdƒƒq|j|ƒqWdj|ƒS)NÚasciiÚ)Ú_email_decode_headerÚ isinstancerÚappendÚdecodeÚjoin)Z header_strÚpartsÚvÚencrrrr§s cCsïg}x�|D]ˆ}|ddkrR|dd…jdƒ\}}}d|}n|jdƒ\}}}|jƒ}tj||ƒ}|j|ƒq Wt}t|ƒt|ƒkrÃtdƒ‚|dt|ƒ…|krëtdƒ‚|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ÚdefaultsrrrÚ_parse_overview_fmt²s "    r=cCs-ttƒ}g}x|D] }i}|jdƒ^}}t|ƒ}xÉt|ƒD]»\} } | t|ƒkrtqS|| } | jdƒ} | |kr| r| d} | rÞ| dt| ƒ…jƒ| krÞtdƒ‚| rú| t| ƒd…nd} | ||| d?„Z#d@dA„Z$ddBdC„Z%dd'ddDdE„Z&dd'ddFdG„Z'dd'ddHdI„Z(dJdK„Z)d'ddLdM„Z*d'ddNdO„Z+d'ddPdQ„Z,d'ddRdS„Z-dTdU„Z.dVdW„Z/dXdY„Z0dZd[„Z1d\d]„Z2d^d_„Z3d`da„Z4ddddbdc„Z5ddde„Z6e7râddfdg„Z8dS)hÚ _NNTPBasezutf-8ÚsurrogateescapeNcCs—||_||_d|_|jƒ|_d|_|jƒd|_|r�d|jkr�|jƒ|js�d|_|jƒd|_ d|_ dS)NrFÚREADER) ÚhostÚfileÚ debuggingÚ_getrespÚwelcomeÚ_capsÚgetcapabilitiesÚreadermode_afterauthÚ_setreadermodeÚtls_onÚ authenticated)rrbraÚ readermodeÚtimeoutrrrr 8s          z_NNTPBase.__init__cCs|S)Nr)rrrrÚ __enter__gsz_NNTPBase.__enter__csc‡fdd†}|ƒr_z-yˆjƒWnttfk rFYnXWd|ƒr^ˆjƒXdS)Ncs tˆdƒS)Nrb)Úhasattrr)rrrÚksz$_NNTPBase.__exit__..)ÚquitÚOSErrorÚEOFErrorÚ_close)rrZ is_connectedr)rrÚ__exit__js   z_NNTPBase.__exit__cCs&|jrtdt|jƒƒ|jS)Nz *welcome*)rcÚprintÚreprre)rrrrÚ getwelcomeus z_NNTPBase.getwelcomec Csµ|jdkr®d|_d|_y|jƒ\}}Wn!ttfk rZi|_YnTX||_d|krŒttt|dƒƒ|_d|kr®dj |dƒ|_|jS)Nr0ÚVERSIONZIMPLEMENTATIONú ) rfÚ nntp_versionZnntp_implementationÚ capabilitiesrrÚmaxÚmapr@r+)rÚrespÚcapsrrrrg~s     z_NNTPBase.getcapabilitiescCs ||_dS)N)rc)rÚlevelrrrÚset_debuglevel”sz_NNTPBase.set_debuglevelcCsM|t}|jdkr,tdt|ƒƒ|jj|ƒ|jjƒdS)Nr0z*put*)Ú_CRLFrcrvrwrbÚwriteÚflush)rr8rrrÚ_putline�s  z_NNTPBase._putlinecCsE|jrtdt|ƒƒ|j|j|jƒ}|j|ƒdS)Nz*cmd*)rcrvrwÚencodeÚencodingÚerrorsr†)rr8rrrÚ_putcmd¥s z_NNTPBase._putcmdTcCs»|jjtdƒ}t|ƒtkr4tdƒ‚|jdkrVtdt|ƒƒ|sbt‚|r·|dd…t kr‘|dd…}n&|dd…t kr·|dd…}|S) Nr0z line too longz*get*rJrOrOéÿÿÿÿr‹) rbÚreadlineÚ_MAXLINEr6r rcrvrwrsrƒ)rZ strip_crlfr8rrrÚ_getline¬s z_NNTPBase._getlinecCsœ|jƒ}|jr(tdt|ƒƒ|j|j|jƒ}|dd…}|dkrht|ƒ‚|dkr€t|ƒ‚|dkr˜t |ƒ‚|S)Nz*resp*r0Ú4Ú5Z123) rŽrcrvrwr*rˆr‰rrr )rrÚcrrrrd½s        z_NNTPBase._getrespc CsDd}z t|ttfƒr1t|dƒ}}|jƒ}|dd…tkr_t|ƒ‚g}|dk rÓdtdf}x¡|jdƒ}||kr P|j dƒr¿|dd…}|j |ƒq„WnRd}xI|jƒ}||krõP|j dƒr|dd…}|j |ƒqÜWWd|r9|j ƒX||fS)NÚwbéó.s. Fs..r0) r(ÚstrrÚopenrdÚ _LONGRESPrrƒrŽrBr„r)Úclose)rrbZ openedFilerrZ terminatorsr8Ú terminatorrrrÚ _getlongrespÍs8        z_NNTPBase._getlongrespcCs|j|ƒ|jƒS)N)rŠrd)rr8rrrÚ _shortcmdûs z_NNTPBase._shortcmdcCs|j|ƒ|j|ƒS)N)rŠrš)rr8rbrrrÚ_longcmds z_NNTPBase._longcmdcs?ˆj|ƒˆj|ƒ\}}|‡fdd†|DƒfS)Ncs(g|]}|jˆjˆjƒ‘qSr)r*rˆr‰)Ú.0r8)rrrú s z,_NNTPBase._longcmdstring..)rŠrš)rr8rbrÚlistr)rrÚ_longcmdstrings z_NNTPBase._longcmdstringcCswy |jSWntk rYnXy|jdƒ\}}Wn"tk r]tdd…}Yn Xt|ƒ}||_|S)NzLIST OVERVIEW.FMT)Z_cachedoverviewfmtÚAttributeErrorr rr5r=)rrrr7rrrÚ_getoverviewfmts     z_NNTPBase._getoverviewfmtcCsdd„|DƒS)NcSs"g|]}t|jƒŒ‘qSr)rr?)r�r8rrrrž$s z(_NNTPBase._grouplist..r)rrrrrÚ _grouplist"sz_NNTPBase._grouplistcCsRi}|jdƒ\}}x*|D]"}|jƒ^}}|||[^ ]+)[ ]+(.*)$zLIST NEWSGROUPS rzXGTITLE r0rJr&)ÚreÚcompiler rBÚsearchÚstripr) rrªZ return_allÚline_patrrÚgroupsÚraw_lineÚmatchr9ZdescrrrÚ_getdescriptionscs  z_NNTPBase._getdescriptionscCs|j|dƒS)NF)r´)rrrrrÚ descriptionzs z_NNTPBase.descriptioncCs|j|dƒS)NT)r´)rrªrrrÚ descriptions‡sz_NNTPBase.descriptionscCs×|jd|ƒ}|jdƒs.t|ƒ‚|jƒ}d}}}t|ƒ}|dkr²|d}|dkr²|d}|dkr²|d}|dkr²|djƒ}|t|ƒt|ƒt|ƒ|fS)NzGROUP rrr0rJr“rK)r›rBrr?r6r2r@)rr9rÚwordsÚcountr!r Únrrrr‹s           z_NNTPBase.groupcCs|jd|ƒS)NZHELP)r )rrbrrrÚhelp¥sz_NNTPBase.helpcCsN|jdƒst|ƒ‚|jƒ}t|dƒ}|d}|||fS)NZ22r0rJ)rBrr?r@)rrr·Úart_numr$rrrÚ _statparse¯s    z_NNTPBase._statparsecCs|j|ƒ}|j|ƒS)N)r›r¼)rr8rrrrÚ_statcmd¹sz_NNTPBase._statcmdcCs-|r|jdj|ƒƒS|jdƒSdS)NzSTAT {0}ZSTAT)r½rU)rÚ message_specrrrÚstat¾s z_NNTPBase.statcCs |jdƒS)NZNEXT)r½)rrrrÚnextÌsz_NNTPBase.nextcCs |jdƒS)NZLAST)r½)rrrrr Ðsz_NNTPBase.lastcCsF|j||ƒ\}}|j|ƒ\}}}|t|||ƒfS)N)rœr¼r#)rr8rbrrr»r$rrrÚ_artcmdÔsz_NNTPBase._artcmdcCs4|dk rdj|ƒ}nd}|j||ƒS)NzHEAD {0}ZHEAD)rUrÁ)rr¾rbr¦rrrÚheadÚs z_NNTPBase.headcCs4|dk rdj|ƒ}nd}|j||ƒS)NzBODY {0}ZBODY)rUrÁ)rr¾rbr¦rrrÚbodyès z_NNTPBase.bodycCs4|dk rdj|ƒ}nd}|j||ƒS)Nz ARTICLE {0}ZARTICLE)rUrÁ)rr¾rbr¦rrrÚarticleös z_NNTPBase.articlecCs |jdƒS)NZSLAVE)r›)rrrrÚslavesz_NNTPBase.slavecsbtjdƒ‰|jdj||ƒ|ƒ\}}‡fdd†‰|‡fdd†|DƒfS)Nz^([0-9]+) ?(.*) ?z XHDR {0} {1}cs)ˆj|ƒ}|r%|jddƒS|S)Nr0rJ)r³r)r8Úm)ÚpatrrÚ remove_numbersz%_NNTPBase.xhdr..remove_numbercsg|]}ˆ|ƒ‘qSrr)r�r8)rÈrrržs z"_NNTPBase.xhdr..)r¬r­r rU)rZhdrr•rbrrr)rÇrÈrÚxhdr s $z_NNTPBase.xhdrcCsC|jdj||ƒ|ƒ\}}|jƒ}|t||ƒfS)Nz XOVER {0}-{1})r rUr¢rH)rÚstartÚendrbrrr7rrrÚxovers  z_NNTPBase.xoverc Cs¬d|jkrdnd}t|ttfƒr[|\}}|dj||pQdƒ7}n|dk ru|d|}|j||ƒ\}}|jƒ}|t||ƒfS)NZOVERZXOVERz {0}-{1}r&rz)rfr(ÚtuplerŸrUr r¢rH) rr¾rbr¦rÊrËrrr7rrrÚover(s   z_NNTPBase.overc Cs“tjdtdƒtjdƒ}|jd||ƒ\}}g}xB|D]:}|j|jƒƒ}|rK|j|j ddƒƒqKW||fS)NzFThe XGTITLE extension is not actively used, use descriptions() insteadrJz^([^ ]+)[ ]+(.*)$zXGTITLE r0) ÚwarningsÚwarnÚDeprecationWarningr¬r­r r®r¯r)r) rrrbr°rZ raw_linesrr²r³rrrÚxgtitleCs   z_NNTPBase.xgtitlec Cs‹tjdtdƒ|jdj|ƒƒ}|jdƒsFt|ƒ‚y|jƒ\}}Wntk r|t|ƒ‚Yn X||fSdS)Nz(The XPATH extension is not actively usedrJz XPATH {0}Z223) rÏrÐrÑr›rUrBrr?Ú ValueError)rÚidrZresp_numÚpathrrrÚxpathUs    z_NNTPBase.xpathcCs�|jdƒ}|jdƒs*t|ƒ‚|jƒ}t|ƒdkrTt|ƒ‚|d}t|ƒdkr|t|ƒ‚|t|dƒfS)NZDATEZ111rJr0é)r›rBrr?r6r rT)rrÚelemrrrrris     z_NNTPBase.datecCsÎ|j|ƒ}|jdƒs*t|ƒ‚t|ttfƒrK|jƒ}xY|D]Q}|jtƒsz|j dƒt}|jdƒr“d|}|j j |ƒqRW|j j dƒ|j j ƒ|j ƒS)NÚ3s r”s. )r›rBrr(rÚ bytearrayÚ splitlinesÚendswithrƒÚrstriprbr„r…rd)rr«Úfrr8rrrÚ_postzs     z_NNTPBase._postcCs|jd|ƒS)NZPOST)rß)rÚdatarrrÚpost�sz_NNTPBase.postcCs|jdj|ƒ|ƒS)Nz IHAVE {0})rßrU)rr$ràrrrÚihave–sz_NNTPBase.ihavecCs|jjƒ|`dS)N)rbr˜)rrrrrtŸs z_NNTPBase._closec Cs%z|jdƒ}Wd|jƒX|S)NZQUIT)r›rt)rrrrrrq£s z_NNTPBase.quitc CsT|jrtdƒ‚| r/| r/tdƒ‚yU|rƒ| rƒddl}|jƒ}|j|jƒ}|rƒ|d}|d}Wntk r˜YnX|s£dS|jd|ƒ}|jdƒr|sÚt|ƒ‚n.|jd|ƒ}|jdƒst |ƒ‚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`)rkrÓÚnetrcZauthenticatorsrarrr›rBrrrfrgrhri)rÚuserÚpasswordÚusenetrcrãZ credentialsZauthrrrrÚlogin¬s<             z_NNTPBase.logincCsty|jdƒ|_WnWtk r*YnFtk ro}z&|jjdƒrZd|_n‚WYdd}~XnXdS)Nz mode readerZ480T)r›rerrr rBrh)rÚerrrriÕs  z_NNTPBase._setreadermodecCs´|jrtdƒ‚|jr*tdƒ‚|jdƒ}|jdƒr¤|jjƒt|j||j ƒ|_|jj dƒ|_d|_d|_ |j ƒn t dƒ‚dS)NzTLS is already enabled.z+TLS cannot be started after authentication.ÚSTARTTLSZ382ÚrwbTzTLS failed to start.)rjrÓrkr›rBrbr˜r]rZraÚmakefilerfrgr)rr[rrrrÚstarttlsãs        z_NNTPBase.starttls)9rrrrˆr‰rr rnrurxrgr‚Údebugr†rŠrŽrdršr›rœr r¢r£r|r§r¨rŸr´rµr¶rrºr¼r½r¿rÀr rÁrÂrÃrÄrÅrÉrÌrÎrÒrÖrrßrárârtrqrçriÚ _have_sslrìrrrrr^(sj .      .                 ) r^c@s:eZdZeddddedd„Zdd„ZdS)rNFc Cs°||_||_tj||f|ƒ|_d}yN|jjdƒ}tj|||||ƒ|sm|r€|j|||ƒWn(|r—|j ƒ|jj ƒ‚YnXdS)Nrê) raÚportÚsocketÚcreate_connectionrZrër^r rçr˜) rrarïrärårlrærmrbrrrr ýs      z NNTP.__init__c Cs&ztj|ƒWd|jjƒXdS)N)r^rtrZr˜)rrrrrt!sz NNTP._close)rrrÚ NNTP_PORTrr rtrrrrrûs  "c @s=eZdZedddddedd„Zdd„ZdS)ÚNNTP_SSLNFc Cs¼tj||f|ƒ|_d} ylt|j||ƒ|_|jjdƒ} tj|| |d|d|ƒ|sy|rŒ|j|||ƒWn(| r£| jƒ|jjƒ‚YnXdS)Nrêrlrm) rðrñrZr]rër^r rçr˜) rrarïräråZ ssl_contextrlrærmrbrrrr +s    zNNTP_SSL.__init__c Cs&ztj|ƒWd|jjƒXdS)N)r^rtrZr˜)rrrrrtAszNNTP_SSL._close)rrrÚ NNTP_SSL_PORTrr rtrrrrró)s  róÚ__main__rµzJ nntplib built-in demo - display the latest articles in a newsgroupz-gz--groupÚdefaultzgmane.comp.python.generalrºz3group to fetch messages from (default: %(default)s)z-sz--serverznews.gmane.orgz+NNTP server hostname (default: %(default)s)z-pz--portr0Útypez#NNTP port number (default: %s / %s)z-nz --nb-articlesé z2number of articles to fetch (default: %(default)s)z-Sz--sslÚactionÚ store_truezuse NNTP over SSLrarïréZGroupZhaszarticles, rangeZtocCs.t|ƒ|kr*|d|d…d}|S)NrKz...)r6)ÚsZlimrrrÚcutlsrüúBsÀ                 ÿÿÕ-             !   )