grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/20263 Õì2aF¨ã@s€ddlZddlZddlZddlZddlZy ddlZWnek rLdZYnXdZddlm 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*œZd+Zejd,d-d.d/d0gƒZejd1d2d3d4gƒZd5d „Z d6d7„Zdkd8d9„Zdld:d;„Z dmdd?„Z"Gd@dA„dAƒZ#GdBd„de#ƒZ$e�rÆGdCdD„dDe#ƒZ%e j&dDƒe'dEk�r|ddl(Z(e(j)dFdG�Z*e*j+dHdIdJdKdL�e*j+dMdNdOdPdL�e*j+dQdRdne,dTeefdU�e*j+dVdWdXe,dYdU�e*j+dZd[d\dd]d^�e*j-ƒZ.e.j/Z/e.j�s€e/dok�rpeZ/e$e.j0e/d_�Z1ne/dpk�rŽeZ/e%e.j0e/d_�Z1e1j2ƒZ3d`e3k�r¶e1j4ƒe1j5e.j5ƒ\Z6Z7Z8Z9Z:e;dae:dbe7dce8dde9ƒdedf„ZdSƒZ8e1j?e8e9ƒ\Z6Z@xbe@D]Z\ZAZBe eBd$ƒjCdgdSƒdZDe eBd#ƒZEe,eBd)ƒZFe;dhjGeAetj|f|žŽy|d|_Wntk r8d|_YnXdS)NrzNo response given)Ú ExceptionÚ__init__ÚresponseÚ IndexError)ÚselfÚargs©rú,/opt/alt/python36/lib64/python3.6/nntplib.pyr bs zNNTPError.__init__N)Ú__name__Ú __module__Ú __qualname__r rrrrr`sc@s eZdZdS)rN)rrrrrrrrisc@s eZdZdS)rN)rrrrrrrrmsc@s eZdZdS)rN)rrrrrrrrqsc@s eZdZdS)r N)rrrrrrrr usc@s eZdZdS)r N)rrrrrrrr yséwi3Z100Z101Ú211Ú215Z220Z221Z222Z224Z225Z230Z231Z282ÚsubjectÚfromÚdatez message-idZ referencesz:bytesz:lines)ÚbytesÚliness Ú GroupInfoÚgroupÚlastÚfirstÚflagÚ ArticleInfoZnumberÚ message_idrcCsNg}x>t|ƒD]2\}}t|tƒr6|j|j|p.dƒƒq|j|ƒqWdj|ƒS)NÚasciiÚ)Ú_email_decode_headerÚ isinstancerÚappendÚdecodeÚjoin)Z header_strÚpartsÚvÚencrrrr§s  cCsªg}xh|D]`}|ddkr<|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|ƒkrPq:|| } | jdƒ} | |kr´| r´| d} | rœ| dt| ƒ…jƒ| krœtdƒ‚| r°| t| ƒd…nd} | ||| <q:W|j||fƒqW|S)Nú r/z: z?OVER/XOVER response doesn't include names of additional headers) r6r5ÚsplitÚintÚ enumerateÚ startswithr2r r))rr7Zdata_process_funcZ n_defaultsZoverviewr8ZfieldsZarticle_numberÚtokensÚiÚtokenZ field_nameZ is_metadataÚhrrrÚ_parse_overviewËs&   rGcCs¶|dkr |dd…}|dd …}t|dd…ƒ}t|dd…ƒ}t|dd…ƒ}t|dd …ƒ}t|d d …ƒ}t|d d…ƒ}|dkr’|d7}n|dkr¢|d7}tj||||||ƒS)NééééFiÐédiliúÿÿÿiúÿÿÿéüÿÿÿrMéþÿÿÿrN)r@Údatetime)Údate_strÚtime_strZhoursZminutesZsecondsÚyearZmonthZdayrrrÚ_parse_datetimeès   rScCsPt|tjƒsd}n dj|ƒ}|j}|r<|d}dj||ƒ}n dj||ƒ}||fS)NZ000000z({0.hour:02d}{0.minute:02d}{0.second:02d}rLz{0:02d}{1.month:02d}{1.day:02d}z{0:04d}{1.month:02d}{1.day:02d})r(rOÚformatrR)ZdtÚlegacyrQÚyrPrrrÚ_unparse_datetimeþs   rWcCs|dkrtjƒ}|j||d�S)N)Zserver_hostname)ÚsslZ_create_stdlib_contextZ wrap_socket)ÚsockÚcontextZhostnamerrrÚ _encrypt_onsr[c@seZdZdZdZdefdd„Zdd„Zdd „Zd d „Z d d „Z dd„Z e Z dd„Z dd„Zdhdd„Zdd„Zdidd„Zdd„Zdjdd„Zdkdd „Zd!d"„Zd#d$„Zd%d&„Zdd'œd(d)„Zdd'œd*d+„Zdldd'œd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zdd'œd6d7„Zd8d9„Z d:d;„Z!dmdd?„Z#d@dA„Z$dndBdC„Z%dodd'œdDdE„Z&dpdd'œdFdG„Z'dqdd'œdHdI„Z(dJdK„Z)dd'œdLdM„Z*dd'œdNdO„Z+dd'œdPdQ„Z,dd'œdRdS„Z-dTdU„Z.dVdW„Z/dXdY„Z0dZd[„Z1d\d]„Z2d^d_„Z3d`da„Z4drdbdc„Z5ddde„Z6e7�rdsdfdg„Z8dS)tÚ _NNTPBasezutf-8ÚsurrogateescapeNcCsj||_||_d|_|jƒ|_d|_|jƒd|_|rZd|jkrZ|jƒ|jsZd|_|jƒd|_ d|_ dS)NrFÚREADER) ÚhostÚfileÚ debuggingÚ_getrespÚwelcomeÚ_capsÚgetcapabilitiesÚreadermode_afterauthÚ_setreadermodeÚtls_onÚ authenticated)rr`r_Ú readermodeÚtimeoutrrrr 8s  z_NNTPBase.__init__cCs|S)Nr)rrrrÚ __enter__gsz_NNTPBase.__enter__csR‡fdd„}|ƒrNz*y ˆjƒWnttfk r8YnXWd|ƒrLˆjƒXdS)Ncs tˆdƒS)Nr`)Úhasattrr)rrrÚksz$_NNTPBase.__exit__..)ÚquitÚOSErrorÚEOFErrorÚ_close)rrZ is_connectedr)rrÚ__exit__js   z_NNTPBase.__exit__cCs|jrtdt|jƒƒ|jS)Nz *welcome*)raÚprintÚreprrc)rrrrÚ getwelcomeusz_NNTPBase.getwelcomec Cs†|jdkr€d|_d|_y|jƒ\}}Wnttfk rDi|_Ynsz,_NNTPBase._longcmdstring..)rˆr˜)rr8r`r}Úlistr)rrÚ_longcmdstrings  z_NNTPBase._longcmdstringcCsby|jStk rYnXy|jdƒ\}}Wn tk rNtdd…}Yn Xt|ƒ}||_|S)NzLIST OVERVIEW.FMT)Z_cachedoverviewfmtÚAttributeErrorržrr5r=)rr}rr7rrrÚ_getoverviewfmtsz_NNTPBase._getoverviewfmtcCsdd„|DƒS)NcSsg|]}t|jƒŽ‘qSr)rr?)r›r8rrrrœ$sz(_NNTPBase._grouplist..r)rrrrrÚ _grouplist"sz_NNTPBase._grouplistcCs<i}|jdƒ\}}x |D]}|jƒ^}}|||<qW||fS)NZ CAPABILITIES)ržr?)rr~r}rr8r9rCrrrrz&s    z_NNTPBase.capabilities)r`cCsbt|tjtjfƒs$tdj|jjƒƒ‚t||jdkƒ\}}dj||ƒ}|j ||ƒ\}}||j |ƒfS)NzAthe date parameter must be a date or datetime object, not '{:40}'rIzNEWGROUPS {0} {1}) r(rOrÚ TypeErrorrTÚ __class__rrWryržr¡)rrr`rPrQÚcmdr}rrrrÚ newgroups4s  z_NNTPBase.newgroupscCsRt|tjtjfƒs$tdj|jjƒƒ‚t||jdkƒ\}}dj|||ƒ}|j ||ƒS)NzAthe date parameter must be a date or datetime object, not '{:40}'rIzNEWNEWS {0} {1} {2}) r(rOrr¢rTr£rrWryrž)rrrr`rPrQr¤rrrÚnewnewsDs z_NNTPBase.newnewscCs4|dk rd|}nd}|j||ƒ\}}||j|ƒfS)Nz LIST ACTIVE ZLIST)ržr¡)rÚ group_patternr`Úcommandr}rrrrr�Ts  z_NNTPBase.listc Cs�tjdƒ}|jd|ƒ\}}|jdƒs8|jd|ƒ\}}i}x>|D]6}|j|jƒƒ}|rB|jddƒ\} } |sp| S| || <qBW|rˆ||fSdSdS)Nz^(?P[^ ]+)[ ]+(.*)$zLIST NEWSGROUPS rzXGTITLE r0rIr&)ÚreÚcompileržrBÚsearchÚstripr) rr§Z return_allÚline_patr}rÚ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 rrr0rIr‘rJ)r™rBrr?r6r2r@)rr9r}ÚwordsÚcountr!r Únrrrr‹s    z_NNTPBase.groupcCs |jd|ƒS)NZHELP)rž)rr`rrrÚhelp¥sz_NNTPBase.helpcCs8|jdƒst|ƒ‚|jƒ}t|dƒ}|d}|||fS)NZ22r0rI)rBrr?r@)rr}r´Úart_numr$rrrÚ _statparse¯s   z_NNTPBase._statparsecCs|j|ƒ}|j|ƒS)N)r™r¹)rr8r}rrrÚ_statcmd¹s z_NNTPBase._statcmdcCs"|r|jdj|ƒƒS|jdƒSdS)NzSTAT {0}ZSTAT)rºrT)rÚ message_specrrrÚstat¾s z_NNTPBase.statcCs |jdƒS)NZNEXT)rº)rrrrÚnextÌsz_NNTPBase.nextcCs |jdƒS)NZLAST)rº)rrrrr Ðsz_NNTPBase.lastcCs0|j||ƒ\}}|j|ƒ\}}}|t|||ƒfS)N)ršr¹r#)rr8r`r}rr¸r$rrrÚ_artcmdÔsz_NNTPBase._artcmdcCs$|dk rdj|ƒ}nd}|j||ƒS)NzHEAD {0}ZHEAD)rTr¾)rr»r`r¤rrrÚheadÚs z_NNTPBase.headcCs$|dk rdj|ƒ}nd}|j||ƒS)NzBODY {0}ZBODY)rTr¾)rr»r`r¤rrrÚbodyès z_NNTPBase.bodycCs$|dk rdj|ƒ}nd}|j||ƒS)Nz ARTICLE {0}ZARTICLE)rTr¾)rr»r`r¤rrrÚarticleös z_NNTPBase.articlecCs |jdƒS)NZSLAVE)r™)rrrrÚslavesz_NNTPBase.slavecsDtjdƒ‰|jdj||ƒ|ƒ\}}‡fdd„‰|‡fdd„|DƒfS)Nz^([0-9]+) ?(.*) ?z XHDR {0} {1}csˆj|ƒ}|r|jddƒS|S)Nr0rI)r°r)r8Úm)ÚpatrrÚ remove_numbers z%_NNTPBase.xhdr..remove_numbercsg|] }ˆ|ƒ‘qSrr)r›r8)rÅrrrœsz"_NNTPBase.xhdr..)r©rªržrT)rZhdrr“r`r}rr)rÄrÅrÚxhdr s  z_NNTPBase.xhdrcCs.|jdj||ƒ|ƒ\}}|jƒ}|t||ƒfS)Nz XOVER {0}-{1})ržrTr rG)rÚstartÚendr`r}rr7rrrÚxovers  z_NNTPBase.xoverc Csxd|jkrdnd}t|ttfƒr>|\}}|dj||p6dƒ7}n|dk rR|d|}|j||ƒ\}}|jƒ}|t||ƒfS)NZOVERZXOVERz {0}-{1}r&rx)rdr(Útupler�rTržr rG) rr»r`r¤rÇrÈr}rr7rrrÚover(s z_NNTPBase.overc Csjtjdtdƒtjdƒ}|jd||ƒ\}}g}x0|D](}|j|jƒƒ}|r6|j|j ddƒƒq6W||fS)NzFThe XGTITLE extension is not actively used, use descriptions() insteadrIz^([^ ]+)[ ]+(.*)$zXGTITLE r0) ÚwarningsÚwarnÚDeprecationWarningr©rªržr«r¬r)r) rrr`r­r}Z raw_linesrr¯r°rrrÚxgtitleCs  z_NNTPBase.xgtitlec Csjtjdtdƒ|jdj|ƒƒ}|jdƒs0t|ƒ‚y|jƒ\}}Wntk r\t|ƒ‚Yn X||fSdS)Nz(The XPATH extension is not actively usedrIz XPATH {0}Z223) rÌrÍrÎr™rTrBrr?Ú ValueError)rÚidr}Zresp_numÚpathrrrÚxpathUs z_NNTPBase.xpathcCsb|jdƒ}|jdƒst|ƒ‚|jƒ}t|ƒdkr8t|ƒ‚|d}t|ƒdkrTt|ƒ‚|t|dƒfS)NZDATEZ111rIr0é)r™rBrr?r6r rS)rr}Úelemrrrrris    z_NNTPBase.datecCs”|j|ƒ}|jdƒst|ƒ‚t|ttfƒr2|jƒ}xB|D]:}|jtƒsT|j dƒt}|jdƒrfd|}|j j |ƒq8W|j j dƒ|j j ƒ|j ƒS)NÚ3s r’s. )r™rBrr(rÚ bytearrayÚ splitlinesÚendswithr�Úrstripr`r‚rƒrb)rr¨Úfr}r8rrrÚ_postzs       z_NNTPBase._postcCs |jd|ƒS)NZPOST)rÜ)rÚdatarrrÚpost�sz_NNTPBase.postcCs|jdj|ƒ|ƒS)Nz IHAVE {0})rÜrT)rr$rÝrrrÚihave–sz_NNTPBase.ihavecCs|jjƒ|`dS)N)r`r–)rrrrrrŸs z_NNTPBase._closec Csz|jdƒ}Wd|jƒX|S)NZQUIT)r™rr)rr}rrrro£s z_NNTPBase.quitc Csü|jrtdƒ‚| r"| r"tdƒ‚y>|r^| r^ddl}|jƒ}|j|jƒ}|r^|d}|d}Wntk rtYnX|s~dS|jd|ƒ}|jdƒrÄ|s¤t|ƒ‚n |jd|ƒ}|jdƒsÄt |ƒ‚d|_ |j ƒ|j rød |j krø|j ƒd|_ |j ƒdS) NzAlready logged in.z7At least one of `user` and `usenetrc` must be specifiedrrIzauthinfo user Z381zauthinfo pass Z281r^)rirÐÚnetrcZauthenticatorsr_rpr™rBrrrdrerfrg)rÚuserÚpasswordÚusenetrcràZ credentialsZauthr}rrrÚlogin¬s<       z_NNTPBase.logincCs`y|jdƒ|_WnJtk r$Yn8tk rZ}z|jjdƒrHd|_n‚WYdd}~XnXdS)Nz mode readerZ480T)r™rcrrr rBrf)rÚerrrrgÕs z_NNTPBase._setreadermodecCs||jrtdƒ‚|jrtdƒ‚|jdƒ}|jdƒrp|jjƒt|j||j ƒ|_|jj dƒ|_d|_d|_ |j ƒnt dƒ‚dS)NzTLS is already enabled.z+TLS cannot be started after authentication.ÚSTARTTLSZ382ÚrwbTzTLS failed to start.)rhrÐrir™rBr`r–r[rYr_Úmakefilerdrer)rrZr}rrrÚstarttlsãs    z_NNTPBase.starttls)T)N)N)N)N)N)N)N)N)N)NNT)N)9rrrr†r‡rr rlrsrvrer€Údebugr„rˆrŒrbr˜r™ršržr r¡rzr¥r¦r�r±r²r³rr·r¹rºr¼r½r r¾r¿rÀrÁrÂrÆrÉrËrÏrÓrrÜrÞrßrrrorärgÚ _have_sslrérrrrr\(sj .    .         ) r\c@s*eZdZeddddefdd„Zdd„ZdS)rNFc Cs„||_||_tj||f|ƒ|_d}y8|jjdƒ}tj|||||ƒ|sJ|rX|j|||ƒWn$|rn|j ƒ|jj ƒ‚YnXdS)Nrç) r_ÚportÚsocketÚcreate_connectionrYrèr\r rär–) rr_rìrárârjrãrkr`rrrr ýs   z NNTP.__init__c Cs ztj|ƒWd|jjƒXdS)N)r\rrrYr–)rrrrrr!sz NNTP._close)rrrÚ NNTP_PORTrr rrrrrrrûs "c@s,eZdZedddddefdd„Zdd„ZdS)ÚNNTP_SSLNFc CsŠtj||f|ƒ|_d} yJt|j||ƒ|_|jjdƒ} tj|| |||d�|sP|r^|j|||ƒWn$| rt| jƒ|jjƒ‚YnXdS)Nrç)rjrk) rírîrYr[rèr\r rär–) rr_rìrárâZ ssl_contextrjrãrkr`rrrr +s    zNNTP_SSL.__init__c Cs ztj|ƒWd|jjƒXdS)N)r\rrrYr–)rrrrrrAszNNTP_SSL._close)rrrÚ NNTP_SSL_PORTrr rrrrrrrð)s  rðÚ__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--serverznews.gmane.orgz+NNTP server hostname (default: %(default)s)z-pz--portr0z#NNTP port number (default: %s / %s))róÚtyper·z-nz --nb-articlesé z2number of articles to fetch (default: %(default)s)z-Sz--sslÚ store_truezuse NNTP over SSL)Úactionrór·)r_rìræZGroupZhaszarticles, rangeZtocCs$t|ƒ|kr |d|d…d}|S)NrJz...)r6)ÚsZlimrrrÚcutls rùúBsÆ          X-