grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026U iÛfý¨ã @s„ddlZddlZddlZddlZddlZddlZz ddlZWnek rTdZYnXdZddl m Z ddlm Z dddd d d d d gZ dZGdd„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+Ze d,d-d.d/d0g¡Ze d1d2d3d4g¡Zd5d „Z d6d7„Zdld8d9„Z dmd:d;„Z!dndd?„Z#Gd@dA„dAƒZ$GdBd„de$ƒZ%e�rÎGdCdD„dDe$ƒZ&e  'dD¡e(dEk�r€ddl)Z)e)j*dFdG�Z+e+j,dHdIdJdKdL�e+j,dMdNdOdPdL�e+j,dQdRdSe-dTeefdU�e+j,dVdWdXe-dYdU�e+j,dZd[d\dd]d^�e+ .¡Z/e/j0Z0e/j�sˆe0dSk�rxeZ0e%e/j1e0d_�Z2ne0dSk�r–eZ0e&e/j1e0d_�Z2e2 3¡Z4d`e4k�r¾e2 5¡e2 6e/j6¡\Z7Z8Z9Z:Z;ee-e:ƒe/j?dgƒZ9e2 @e9e:¡\Z7ZAeAD]Z\ZBZCe eCd$ƒ Ddhdg¡dZEe eCd#ƒZFe-eCd)ƒZGetj|f|žŽz|d|_Wntk r8d|_YnXdS)NrzNo response given)Ú ExceptionÚ__init__ÚresponseÚ IndexError)ÚselfÚargs©rú,/opt/alt/python38/lib64/python3.8/nntplib.pyr cs zNNTPError.__init__N)Ú__name__Ú __module__Ú __qualname__r rrrrrasc@s eZdZdS)rN©rrrrrrrrjsc@s eZdZdS)rNrrrrrrnsc@s eZdZdS)rNrrrrrrrsc@s eZdZdS)r Nrrrrrr vsc@s eZdZdS)r Nrrrrrr zséwi3Z100Z101Ú211Ú215Z220Z221Z222Z224Z225Z230Z231Z282ÚsubjectÚfromÚdatez message-idZ referencesz:bytesz:lines)ÚbytesÚlinesó Ú GroupInfoÚgroupÚlastÚfirstÚflagÚ ArticleInfoZnumberÚ message_idrcCsJg}t|ƒD]2\}}t|tƒr4| | |p,d¡¡q | |¡q d |¡S)NÚasciiÚ)Ú_email_decode_headerÚ isinstancerÚappendÚdecodeÚjoin)Z header_strÚpartsÚvÚencrrrr¨s   cCs¦g}|D]`}|ddkr:|dd… d¡\}}}d|}n| d¡\}}}| ¡}t ||¡}| |¡qt}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}|D]º}i}| d¡^}}t|ƒ}t|ƒD]„\} } | t|ƒkrLq6|| } |  d¡} | |kr®| s®| d} | r–| dt| ƒ… ¡| kr–tdƒ‚| rª| t| ƒd…nd} | ||| <q6| ||f¡q|S)Nú r1z: z?OVER/XOVER response doesn't include names of additional headers) r8r7ÚsplitÚintÚ enumerateÚ startswithr4r r+)rr9Zdata_process_funcZ n_defaultsZoverviewr:ZfieldsZarticle_numberÚtokensÚiÚtokenZ field_nameZ is_metadataÚhrrrÚ_parse_overviewÌs&   rIcCs¶|dkr |dd…}|dd…}t|dd…ƒ}t|dd…ƒ}t|dd…ƒ}t|dd…ƒ}t|dd…ƒ}t|dd…ƒ}|dkr’|d7}n|dkr¢|d 7}t ||||||¡S) NiúÿÿÿéééüÿÿÿéþÿÿÿéFiÐédil)rBÚdatetime)Údate_strÚtime_strZhoursZminutesZsecondsÚyearZmonthZdayrrrÚ_parse_datetimeés   rTcCsPt|tjƒsd}n d |¡}|j}|r<|d}d ||¡}n d ||¡}||fS)NZ000000z({0.hour:02d}{0.minute:02d}{0.second:02d}rOz{0:02d}{1.month:02d}{1.day:02d}z{0:04d}{1.month:02d}{1.day:02d})r*rPÚformatrS)ZdtZlegacyrRÚyrQrrrÚ_unparse_datetimeÿs   rWcCs|dkrt ¡}|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|_| ¡|_d|_| ¡d|_|rZd|jkrZ| ¡|jsZd|_| ¡d|_ d|_ dS)NrFÚREADER) ÚhostÚfileÚ debuggingÚ_getrespÚwelcomeÚ_capsÚgetcapabilitiesÚreadermode_afterauthÚ_setreadermodeÚtls_onÚ authenticated)rr`r_Ú readermodeÚtimeoutrrrr 9s  z_NNTPBase.__init__cCs|S©Nr©rrrrÚ __enter__hsz_NNTPBase.__enter__c sR‡fdd„}|ƒrNz*z ˆ ¡Wnttfk r8YnXW5|ƒrLˆ ¡XdS)Ncs tˆdƒS)Nr`)ÚhasattrrrmrrÚlóz$_NNTPBase.__exit__..)Ú_closeÚquitÚOSErrorÚEOFError)rrZ is_connectedrrmrÚ__exit__ks   z_NNTPBase.__exit__cCs|jrtdt|jƒƒ|jS)Nz *welcome*)raÚprintÚreprrcrmrrrÚ getwelcomevsz_NNTPBase.getwelcomec Cs†|jdkr€d|_d|_z| ¡\}}Wnttfk rDi|_Ynsÿz,_NNTPBase._longcmdstring..rŸ)rr:r`rÚlistrrmrÚ_longcmdstring s   ÿz_NNTPBase._longcmdstringcCsdz|jWStk rYnXz| d¡\}}Wn tk rPtdd…}Yn Xt|ƒ}||_|S)NzLIST OVERVIEW.FMT)Z_cachedoverviewfmtÚAttributeErrorr¥rr7r?)rrrr9rrrÚ_getoverviewfmtsz_NNTPBase._getoverviewfmtcCsdd„|DƒS)NcSsg|]}t| ¡Ž‘qSr)r rAr¡rrrr£&sz(_NNTPBase._grouplist..r)rrrrrÚ _grouplist$sz_NNTPBase._grouplistcCs8i}| d¡\}}|D]}| ¡^}}|||<q||fS)NZ CAPABILITIES)r¥rA)rr€rrr:r;rErrrr|(s   z_NNTPBase.capabilities)r`cCsbt|tjtjfƒs$td |jj¡ƒ‚t||jdkƒ\}}d ||¡}|  ||¡\}}||  |¡fS)NúAthe date parameter must be a date or datetime object, not '{:40}'rJzNEWGROUPS {0} {1}) r*rPrÚ TypeErrorrUÚ __class__rrWr{r¥r¨)rrr`rQrRÚcmdrrrrrÚ newgroups6sÿÿ z_NNTPBase.newgroupscCsRt|tjtjfƒs$td |jj¡ƒ‚t||jdkƒ\}}d |||¡}|  ||¡S)Nr©rJzNEWNEWS {0} {1} {2}) r*rPrrªrUr«rrWr{r¥)rr!rr`rQrRr¬rrrÚnewnewsFsÿÿz_NNTPBase.newnewscCs4|dk rd|}nd}| ||¡\}}|| |¡fS)Nz LIST ACTIVE ZLIST)r¥r¨)rÚ group_patternr`Úcommandrrrrrr¤Vs  z_NNTPBase.listc Cs�t d¡}| d|¡\}}| d¡s8| d|¡\}}i}|D]:}| | ¡¡}|r@| dd¡\} } |sr| S| || <q@|rˆ||fSdSdS)Nz^(?P[^ ]+)[ ]+(.*)$zLIST NEWSGROUPS rúXGTITLE r2rJr()ÚreÚcompiler¥rDÚsearchÚstripr!) rr¯Z return_allÚline_patrrÚgroupsÚraw_lineÚmatchr;ZdescrrrÚ_getdescriptionses   z_NNTPBase._getdescriptionscCs | |d¡S)NF©rº)rr!rrrÚ description|s z_NNTPBase.descriptioncCs | |d¡S)NTr»)rr¯rrrÚ descriptions‰sz_NNTPBase.descriptionscCsš| d|¡}| d¡s t|ƒ‚| ¡}d}}}t|ƒ}|dkr€|d}|dkr€|d}|dkr€|d}|dkr€|d ¡}|t|ƒt|ƒt|ƒ|fS)NzGROUP rrr2rJr–rK)ržrDrrAr8r4rB)rr;rÚwordsÚcountr#r"Únrrrr!�s    z_NNTPBase.groupcCs | d|¡S)NZHELP)r¥)rr`rrrÚhelp§sz_NNTPBase.helpcCs8| d¡st|ƒ‚| ¡}t|dƒ}|d}|||fS)NZ22r2rJ)rDrrArB)rrr¾Úart_numr&rrrÚ _statparse±s   z_NNTPBase._statparsecCs| |¡}| |¡Srl)ržrÃ)rr:rrrrÚ_statcmd»s z_NNTPBase._statcmdcCs"|r| d |¡¡S| d¡SdS)NzSTAT {0}ZSTAT)rÄrU)rÚ message_specrrrÚstatÀs z_NNTPBase.statcCs | d¡S)NZNEXT©rÄrmrrrÚnextÎsz_NNTPBase.nextcCs | d¡S)NZLASTrÇrmrrrr"Òsz_NNTPBase.lastcCs0| ||¡\}}| |¡\}}}|t|||ƒfSrl)r rÃr%)rr:r`rrrÂr&rrrÚ_artcmdÖsz_NNTPBase._artcmdcCs$|dk rd |¡}nd}| ||¡S)NzHEAD {0}ZHEAD©rUrÉ©rrÅr`r¬rrrÚheadÜs z_NNTPBase.headcCs$|dk rd |¡}nd}| ||¡S)NzBODY {0}ZBODYrÊrËrrrÚbodyês z_NNTPBase.bodycCs$|dk rd |¡}nd}| ||¡S)Nz ARTICLE {0}ZARTICLErÊrËrrrÚarticleøs z_NNTPBase.articlecCs | d¡S)NZSLAVE)ržrmrrrÚslavesz_NNTPBase.slavecsDt d¡‰| d ||¡|¡\}}‡fdd„‰|‡fdd„|DƒfS)Nz^([0-9]+) ?(.*) ?z XHDR {0} {1}csˆ |¡}|r| dd¡S|S)Nr2rJ)r¹r!)r:Úm)ÚpatrrÚ remove_numbers z%_NNTPBase.xhdr..remove_numbercsg|] }ˆ|ƒ‘qSrrr¡)rÒrrr£sz"_NNTPBase.xhdr..)r²r³r¥rU)rZhdrr™r`rrr)rÑrÒrÚxhdr s  z_NNTPBase.xhdrcCs.| d ||¡|¡\}}| ¡}|t||ƒfS)Nz XOVER {0}-{1})r¥rUr§rI)rÚstartÚendr`rrr9rrrÚxovers ÿz_NNTPBase.xoverc Csxd|jkrdnd}t|ttfƒr>|\}}|d ||p6d¡7}n|dk rR|d|}| ||¡\}}| ¡}|t||ƒfS)NZOVERZXOVERz {0}-{1}r(rz)rdr*Útupler¤rUr¥r§rI) rrÅr`r¬rÔrÕrrr9rrrÚover*s z_NNTPBase.overc Csft dtd¡t d¡}| d||¡\}}g}|D](}| | ¡¡}|r4| |  dd¡¡q4||fS)NzFThe XGTITLE extension is not actively used, use descriptions() insteadrJz^([^ ]+)[ ]+(.*)$r±r2) ÚwarningsÚwarnÚDeprecationWarningr²r³r¥r´rµr+r!) rr!r`r¶rZ raw_linesrr¸r¹rrrÚxgtitleEsþ z_NNTPBase.xgtitlecCslt dtd¡| d |¡¡}| d¡s0t|ƒ‚z| ¡\}}Wntk r^t|ƒd‚Yn X||fSdS)Nz(The XPATH extension is not actively usedrJz XPATH {0}Z223) rÙrÚrÛržrUrDrrAÚ ValueError)rÚidrZresp_numÚpathrrrÚxpathWsÿ z_NNTPBase.xpathcCsb| d¡}| d¡st|ƒ‚| ¡}t|ƒdkr8t|ƒ‚|d}t|ƒdkrTt|ƒ‚|t|dƒfS)NZDATEZ111rJr2é)ržrDrrAr8r rT)rrÚelemrrrrrks    z_NNTPBase.datecCs�| |¡}| d¡st|ƒ‚t|ttfƒr2| ¡}|D]:}| t¡sR|  d¡t}| d¡rdd|}|j   |¡q6|j   d¡|j   ¡|  ¡S)NÚ3rr—s. )ržrDrr*rÚ bytearrayÚ splitlinesÚendswithr…Úrstripr`r†r‡rb)rr°Úfrr:rrrÚ_post|s      z_NNTPBase._postcCs | d|¡S)NZPOST)ré)rÚdatarrrÚpost‘sz_NNTPBase.postcCs| d |¡|¡S)Nz IHAVE {0})rérU)rr&rêrrrÚihave˜sz_NNTPBase.ihavecCs|j ¡|`dSrl)r`r˜rmrrrrr¡s z_NNTPBase._closecCsz| d¡}W5| ¡X|S)NZQUIT)rrrž)rrrrrrs¥s z_NNTPBase.quitcCsö|jrtdƒ‚|s|stdƒ‚z<|rX|sXddl}| ¡}| |j¡}|rX|d}|d}Wntk rnYnX|sxdS| d|¡}| d¡r¾|sžt|ƒ‚n | d|¡}| d¡s¾t |ƒ‚d|_ |  ¡|j ròd |j krò|  ¡d|_ |  ¡dS) NzAlready logged in.z7At least one of `user` and `usenetrc` must be specifiedrrJzauthinfo user Z381zauthinfo pass Z281r^)rirÝÚnetrcZauthenticatorsr_rtržrDrrrdrerfrg)rÚuserÚpasswordÚusenetrcríZ credentialsZauthrrrrÚlogin®s>ÿ     z_NNTPBase.loginc Cs`z| d¡|_WnJtk r$Yn8tk rZ}z|j d¡rHd|_n‚W5d}~XYnXdS)Nz mode readerZ480T)ržrcrrr rDrf)rÚerrrrg×s z_NNTPBase._setreadermodecCs||jrtdƒ‚|jrtdƒ‚| d¡}| d¡rp|j ¡t|j||j ƒ|_|j  d¡|_d|_d|_ |  ¡nt dƒ‚dS)NzTLS is already enabled.z+TLS cannot be started after authentication.ÚSTARTTLSZ382ÚrwbTzTLS failed to start.)rhrÝriržrDr`r˜r[rYr_Úmakefilerdrer)rrZrrrrÚstarttlsås    z_NNTPBase.starttls)T)N)N)N)N)N)N)N)N)N)NNT)N)9rrrr‹rŒrr rnrvryrer‚Údebugr‰r�r‘rbr�ržr r¥r§r¨r|r­r®r¤rºr¼r½r!rÁrÃrÄrÆrÈr"rÉrÌrÍrÎrÏrÓrÖrØrÜràrrérërìrrrsrñrgÚ _have_sslrörrrrr\)sn ÿ /     .         ) r\c@s*eZdZeddddefdd„Zdd„ZdS)rNFc Cs”||_||_t d|||¡t ||f|¡|_d}z8|j d¡}t  |||||¡|sZ|rh|  |||¡Wn$|r~|  ¡|j  ¡‚YnXdS)Núnntplib.connectrô) r_Úportrƒr„ÚsocketÚcreate_connectionrYrõr\r rñr˜) rr_rúrîrïrjrðrkr`rrrr ÿs$  ÿ z NNTP.__init__cCs zt |¡W5|j ¡XdSrl©rYr˜r\rrrmrrrrr$sz NNTP._close)rrrÚ NNTP_PORTrr rrrrrrrýs þ %c@s,eZdZedddddefdd„Zdd„ZdS)ÚNNTP_SSLNFc Csšt d|||¡t ||f|¡|_d} zJt|j||ƒ|_|j d¡} tj|| |||d�|s`|rn|  |||¡Wn$| r„|   ¡|j  ¡‚YnXdS)Nrùrô)rjrk) rƒr„rûrürYr[rõr\r rñr˜) rr_rúrîrïZ ssl_contextrjrðrkr`rrrr .s"  ÿ zNNTP_SSL.__init__cCs zt |¡W5|j ¡XdSrlrýrmrrrrrEszNNTP_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--serverz news.gmane.ioz+NNTP server hostname (default: %(default)s)z-pz--portrŽz#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)ÚactionrrÁ)r_rúróZGroupZhaszarticles, rangeÚtocCs$t|ƒ|kr |d|d…d}|S)NrKz...)r8)ÚsZlimrrrÚcutps r r2úBsø    ý  ôÿþ ÿÿ    Y.    ÿ ÿ  ÿ ÿ ÿ      ÿ