grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a XC?h? ã @s:ddlZddlZddlZddlZddlZz ddlZWneyJdZYn0dZddlm Z ddlm Z gd¢Z dZ Gdd „d eƒZGd d „d eƒZGd d „d eƒZGdd„deƒZGdd„deƒZGdd„deƒZdZdZhd£Zgd¢ZdddœZdZe dgd¢¡Ze dgd¢¡Zd d!„Z d"d#„ZdYd$d%„ZdZd&d'„Z d[d(d)„Z!e�rVd*d+„Z"Gd,d-„d-ƒZ#e�r„Gd.d/„d/e#ƒZ$e  %d/¡e&d0k�r6ddl'Z'e'j(d1d2�Z)e)j*d3d4d5d6d7�e)j*d8d9d:d;d7�e)j*de+d?eefd@�e)j*dAdBdCe+dDd@�e)j*dEdFdGddHdI�e) ,¡Z-e-j.Z.e-j�s>e.d>k�r.eZ.e#e-j/e.dJ�Z0ne.d>k�rLeZ.e$e-j/e.dJ�Z0e0 1¡Z2dKe2v�rte0 3¡e0 4e-j4¡\Z5Z6Z7Z8Z9e:dLe9dMe6dNe7dOe8ƒdPdQ„Z;ee7e8¡\Z5Z?e?D]Z\Z@ZAe eAdSƒ BdTdR¡dZCe eAdUƒZDe+eAdƒZEe:dV Fe@e;eCdWƒe;eDdXƒeE¡ƒ�qÒe0 G¡dS)\éNFT)Ú decode_header)Ú_GLOBAL_DEFAULT_TIMEOUT)ÚNNTPÚ NNTPErrorÚNNTPReplyErrorÚNNTPTemporaryErrorÚNNTPPermanentErrorÚNNTPProtocolErrorÚ NNTPDataErrorric@seZdZdd„ZdS)rcGs>tj|g|¢RŽz|d|_Wnty8d|_Yn0dS)NrzNo response given)Ú ExceptionÚ__init__ÚresponseÚ IndexError)ÚselfÚargs©rú,/opt/alt/python39/lib64/python3.9/nntplib.pyr bs  zNNTPError.__init__N)Ú__name__Ú __module__Ú __qualname__r rrrrr`src@s eZdZdS)rN©rrrrrrrrisrc@s eZdZdS)rNrrrrrrmsrc@s eZdZdS)rNrrrrrrqsrc@s eZdZdS)r Nrrrrrr usr c@s eZdZdS)r Nrrrrrr ysr éwi3> Z222Ú215Z225Z221Z220Z231Z224Z230Z100Z101Ú211Z282)ÚsubjectÚfromÚdatez message-idZ referencesú:bytesú:linesrr)ÚbytesÚlinesó Ú GroupInfo)ÚgroupÚlastÚfirstÚflagÚ ArticleInfo)ZnumberÚ message_idr cCsJg}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   rcCs¦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    rAcCsÐ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ú r3z: z?OVER/XOVER response doesn't include names of additional headers) r:r9ÚsplitÚintÚ enumerateÚ startswithr6r r-)r r;Zdata_process_funcZ n_defaultsZoverviewr<ÚfieldsZarticle_numberÚtokensÚiÚtokenÚ field_nameZ is_metadataÚhrrrÚ_parse_overviewËs&   rMcCs¶|dur |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)rDÚdatetime)Údate_strÚtime_strZhoursZminutesZsecondsÚyearZmonthZdayrrrÚ_parse_datetimeès   rXcCsPt|tjƒsd}n d |¡}|j}|r<|d}d ||¡}n d ||¡}||fS)NZ000000z({0.hour:02d}{0.minute:02d}{0.second:02d}rSz{0:02d}{1.month:02d}{1.day:02d}z{0:04d}{1.month:02d}{1.day:02d})r,rTÚformatrW)ZdtZlegacyrVÚyrUrrrÚ_unparse_datetimeþs   r[cCs|durt ¡}|j||d�S)N)Zserver_hostname)ÚsslZ_create_stdlib_contextZ wrap_socket)ÚsockÚcontextZhostnamerrrÚ _encrypt_onsr_c@seZdZdZdZeddddefdd„Zdd„Zd d „Z d d „Z d d„Z dd„Z dd„Z dd„ZeZdd„Zdd„Zdidd„Zdd„Zdjdd„Zd d!„Zdkd"d#„Zdld$d%„Zd&d'„Zd(d)„Zd*d+„Zdd,œd-d.„Zdd,œd/d0„Zdmdd,œd1d2„Zd3d4„Zd5d6„Zd7d8„Z d9d:„Z!dd,œd;d<„Z"d=d>„Z#d?d@„Z$dndAdB„Z%dCdD„Z&dEdF„Z'dodGdH„Z(dpdd,œdIdJ„Z)dqdd,œdKdL„Z*drdd,œdMdN„Z+dOdP„Z,dd,œdQdR„Z-dd,œdSdT„Z.dd,œdUdV„Z/dWdX„Z0dYdZ„Z1d[d\„Z2d]d^„Z3d_d`„Z4dadb„Z5dsdcdd„Z6dedf„Z7e8�rdtdgdh„Z9dS)urzutf-8ÚsurrogateescapeNFcCs~||_||_| |¡|_d|_z2|j d¡|_| |¡|s@|rN| |||¡Wn(|jrh|j ¡|j ¡‚Yn0dS)NÚrwb) ÚhostÚportÚ_create_socketr]ÚfileÚmakefileÚ _base_initÚloginÚclose)rrbrcÚuserÚpasswordÚ readermodeÚusenetrcÚtimeoutrrrr 8s    z NNTP.__init__cCs^d|_| ¡|_d|_| ¡d|_|rNd|jvrN| ¡|jsNd|_| ¡d|_d|_dS)NrFÚREADER) Ú debuggingÚ_getrespÚwelcomeÚ_capsÚgetcapabilitiesÚreadermode_afterauthÚ_setreadermodeÚtls_onÚ authenticated)rrlrrrrg[s  zNNTP._base_initcCs|S©Nr©rrrrÚ __enter__}szNNTP.__enter__c s^‡fdd„}|ƒrZz6z ˆ ¡Wnttfy6Yn0W|ƒrZˆ ¡n|ƒrXˆ ¡0dS)Ncs tˆdƒS)Nre)ÚhasattrrrzrrÚ�ózNNTP.__exit__..)ÚquitÚOSErrorÚEOFErrorÚ_close)rrZ is_connectedrrzrÚ__exit__€s   ÿz NNTP.__exit__cCs<|dur|stdƒ‚t d||j|j¡t |j|jf|¡S)Nz0Non-blocking socket (timeout=0) is not supportedznntplib.connect)Ú ValueErrorÚsysÚauditrbrcÚsocketZcreate_connection)rrnrrrrd‹s zNNTP._create_socketcCs|jrtdt|jƒƒ|jS)Nz *welcome*)rpÚprintÚreprrrrzrrrÚ getwelcome‘szNNTP.getwelcomec Cs„|jdur~d|_d|_z| ¡\}}WnttfyBi|_Yn<0||_d|vrfttt|dƒƒ|_d|vr~d  |d¡|_|jS)Nr4ZVERSIONZIMPLEMENTATIONú ) rsÚ nntp_versionZnntp_implementationÚ capabilitiesrrÚmaxÚmaprDr/)rÚrespÚcapsrrrrtšs  zNNTP.getcapabilitiescCs ||_dSry)rp)rÚlevelrrrÚset_debuglevel°szNNTP.set_debuglevelcCsHt d||¡|t}|jdkr.tdt|ƒƒ|j |¡|j ¡dS)Nznntplib.putliner4z*put*) r…r†Ú_CRLFrprˆr‰reÚwriteÚflush©rr<rrrÚ_putline¹s  z NNTP._putlinecCs2|jrtdt|ƒƒ| |j|j¡}| |¡dS)Nz*cmd*)rprˆr‰ÚencodeÚencodingÚerrorsr˜r—rrrÚ_putcmdÂsz NNTP._putcmdTcCs†|j td¡}t|ƒtkr$tdƒ‚|jdkr+sÿz'NNTP._longcmdstring..r­)rr<rer�ÚlistrrzrÚ_longcmdstring$s   ÿzNNTP._longcmdstringcCs`z|jWStyYn0z| d¡\}}WntyLtdd…}Yn 0t|ƒ}||_|S)NzLIST OVERVIEW.FMT)Z_cachedoverviewfmtÚAttributeErrorr³rr9rA)rr�r r;rrrÚ_getoverviewfmt.s  zNNTP._getoverviewfmtcCsdd„|DƒS)NcSsg|]}t| ¡Ž‘qSr)r"rCr¯rrrr±Ar~z#NNTP._grouplist..r)rr rrrÚ _grouplist?szNNTP._grouplistcCs8i}| d¡\}}|D]}| ¡^}}|||<q||fS)NZ CAPABILITIES)r³rC)rr‘r�r r<r=rHrrrr�Cs   zNNTP.capabilities)recCsbt|tjtjfƒs$td |jj¡ƒ‚t||jdkƒ\}}d ||¡}|  ||¡\}}||  |¡fS)NúAthe date parameter must be a date or datetime object, not '{:40}'rNzNEWGROUPS {0} {1}) r,rTrÚ TypeErrorrYÚ __class__rr[rŒr³r¶)rrrerUrVÚcmdr�r rrrÚ newgroupsQsÿÿ zNNTP.newgroupscCsRt|tjtjfƒs$td |jj¡ƒ‚t||jdkƒ\}}d |||¡}|  ||¡S)Nr·rNzNEWNEWS {0} {1} {2}) r,rTrr¸rYr¹rr[rŒr³)rr#rrerUrVrºrrrÚnewnewsasÿÿz NNTP.newnewscCs4|durd|}nd}| ||¡\}}|| |¡fS)Nz LIST ACTIVE ZLIST)r³r¶)rÚ group_patternreÚcommandr�r rrrr²qs  z NNTP.listc Cs�t d¡}| d|¡\}}| d¡s8| d|¡\}}i}|D]:}| | ¡¡}|r@| dd¡\} } |sr| S| || <q@|rˆ||fSdSdS)Nz^(?P[^ ]+)[ ]+(.*)$zLIST NEWSGROUPS rzXGTITLE r4rNr*)ÚreÚcompiler³rFÚsearchÚstripr#) rr½Z return_allZline_patr�r ÚgroupsZraw_lineÚmatchr=ZdescrrrÚ_getdescriptions€s   zNNTP._getdescriptionscCs | |d¡S)NF©rÅ)rr#rrrÚ description—s zNNTP.descriptioncCs | |d¡S)NTrÆ)rr½rrrÚ descriptions¤szNNTP.descriptionscCsš| d|¡}| d¡s t|ƒ‚| ¡}d}}}t|ƒ}|dkr€|d}|dkr€|d}|dkr€|d}|dkr€|d ¡}|t|ƒt|ƒt|ƒ|fS)NzGROUP rrr4rNr¥rO)r¬rFrrCr:r6rD)rr=r�ÚwordsÚcountr%r$Únrrrr#¨s    z NNTP.groupcCs | d|¡S)NZHELP)r³)rrerrrÚhelpÂsz NNTP.helpcCs8| d¡st|ƒ‚| ¡}t|dƒ}|d}|||fS)NZ22r4rN)rFrrCrD)rr�rÉÚart_numr(rrrÚ _statparseÌs   zNNTP._statparsecCs| |¡}| |¡Sry)r¬rÎ)rr<r�rrrÚ_statcmdÖs z NNTP._statcmdcCs"|r| d |¡¡S| d¡SdS)NzSTAT {0}ZSTAT)rÏrY)rÚ message_specrrrÚstatÛs z NNTP.statcCs | d¡S)NZNEXT©rÏrzrrrÚnextész NNTP.nextcCs | d¡S)NZLASTrÒrzrrrr$ísz NNTP.lastcCs0| ||¡\}}| |¡\}}}|t|||ƒfSry)r®rÎr')rr<rer�r rÍr(rrrÚ_artcmdñsz NNTP._artcmdcCs$|durd |¡}nd}| ||¡S)NzHEAD {0}ZHEAD©rYrÔ©rrÐrerºrrrÚhead÷s z NNTP.headcCs$|durd |¡}nd}| ||¡S)NzBODY {0}ZBODYrÕrÖrrrÚbodys z NNTP.bodycCs$|durd |¡}nd}| ||¡S)Nz ARTICLE {0}ZARTICLErÕrÖrrrÚarticles z NNTP.articlecCs | d¡S)NZSLAVE)r¬rzrrrÚslave!sz NNTP.slavecsDt d¡‰| d ||¡|¡\}}‡fdd„‰|‡fdd„|DƒfS)Nz^([0-9]+) ?(.*) ?z XHDR {0} {1}csˆ |¡}|r| dd¡S|S)Nr4rN)rÄr#)r<Úm)ÚpatrrÚ remove_number2s z NNTP.xhdr..remove_numbercsg|] }ˆ|ƒ‘qSrrr¯)rÝrrr±5r~zNNTP.xhdr..)r¿rÀr³rY)rZhdrr§rer�r r)rÜrÝrÚxhdr's  z NNTP.xhdrcCs.| d ||¡|¡\}}| ¡}|t||ƒfS)Nz XOVER {0}-{1})r³rYrµrM)rÚstartÚendrer�r r;rrrÚxover7s ÿz NNTP.xoverc Csxd|jvrdnd}t|ttfƒr>|\}}|d ||p6d¡7}n|durR|d|}| ||¡\}}| ¡}|t||ƒfS)NZOVERZXOVERz {0}-{1}r*r‹)rsr,Útupler²rYr³rµrM) rrÐrerºrßràr�r r;rrrÚoverEs z NNTP.overcCsb| d¡}| d¡st|ƒ‚| ¡}t|ƒdkr8t|ƒ‚|d}t|ƒdkrTt|ƒ‚|t|dƒfS)NZDATEZ111rNr4é)r¬rFrrCr:r rX)rr�Úelemrrrrr`s    z NNTP.datecCs�| |¡}| d¡st|ƒ‚t|ttfƒr2| ¡}|D]:}| t¡sR|  d¡t}| d¡rdd|}|j   |¡q6|j   d¡|j   ¡|  ¡S)NÚ3r!r¦s. )r¬rFrr,rÚ bytearrayÚ splitlinesÚendswithr”Úrstriprer•r–rq)rr¾Úfr�r<rrrÚ_postqs      z NNTP._postcCs | d|¡S)NZPOST)rì)rÚdatarrrÚpost†sz NNTP.postcCs| d |¡|¡S)Nz IHAVE {0})rìrY)rr(rírrrÚihave�sz NNTP.ihavecCs4z"|jr|j ¡|`W|j ¡n |j ¡0dSry)rerir]rzrrrr‚–s  z NNTP._closecCs&z| d¡}W| ¡n | ¡0|S)NZQUIT)r¬r‚)rr�rrrržs z NNTP.quitcCsô|jrtdƒ‚|s|stdƒ‚z<|rX|sXddl}| ¡}| |j¡}|rX|d}|d}WntylYn0|svdS| d|¡}| d¡r¼|sœt|ƒ‚n | d|¡}| d¡s¼t |ƒ‚d|_ |  ¡|j rðd |j vrð|  ¡d|_ |  ¡dS) NzAlready logged in.z7At least one of `user` and `usenetrc` must be specifiedrrNzauthinfo user Z381zauthinfo pass Z281ro)rxr„ÚnetrcZauthenticatorsrbr€r¬rFrrrsrtrurv)rrjrkrmrðZ credentialsZauthr�rrrrh§s>ÿ      z NNTP.loginc Cs`z| d¡|_WnJty"Yn:tyZ}z"|j d¡rDd|_n‚WYd}~n d}~00dS)Nz mode readerZ480T)r¬rrrrr rFru)rÚerrrrvÐs  zNNTP._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.ÚSTARTTLSZ382raTzTLS failed to start.)rwr„rxr¬rFrerir_r]rbrfrsrtr)rr^r�rrrÚstarttlsÞs    z NNTP.starttls)T)N)N)N)N)N)N)N)N)N)NNT)N):rrrršr›Ú NNTP_PORTrr rgr{rƒrdrŠrtr“Údebugr˜rœr rqr«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ïr‚rrhrvÚ _have_sslrórrrrr(sp þ #"     .         ) rcs8eZdZedddddef‡fdd„ Z‡fdd„Z‡ZS)ÚNNTP_SSLNFc s"||_tƒ |||||||¡dSry)Ú ssl_contextÚsuperr ) rrbrcrjrkrørlrmrn©r¹rrr ùsÿzNNTP_SSL.__init__cs@tƒ |¡}zt||j|jƒ}Wn| ¡‚Yn0|SdSry)rùrdr_rørbri)rrnr]rúrrrds zNNTP_SSL._create_socket)rrrÚ NNTP_SSL_PORTrr rdÚ __classcell__rrrúrr÷÷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)ÚactionrþrÌ)rbrcròZGroupZhaszarticles, rangeÚtocCs$t|ƒ|kr |d|d…d}|S)NrOz...)r:)ÚsZlimrrrÚcut3s rr4rúBs¸       þÿÿ    S    ÿ ÿ  ÿ ÿ ÿ      ÿ