grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026o ®û|j? ã @s< ddlZddlZddlZddlZddlZzddlZWn ey&dZYnwdZddlm 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%„ZdYd&d'„Z dZd(d)„Z!er«d*d+„Z"Gd,d-„d-ƒZ#erÁGd.d/„d/e#ƒZ$e  %d/¡e&d0k�rœddl'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�se.d>k�reZ.e#e-j/e.dJ�Z0ne.d>k�r%eZ.e$e-j/e.dJ�Z0e0 1¡Z2dKe2v�r9e0 3¡e0 4e-j4¡\Z5Z6Z7Z8Z9e:dLe9dMe6dNe7dOe8ƒdPdQ„Z;ee7e8¡\Z5Z?e?D]-\Z@ZAe eAdSƒ BdTdR¡dZCe eAdUƒZDe+eAdƒZEe:dV Fe@e;eCdWƒe;eDdXƒeE¡ƒ�qhe0 G¡dSdS)[éNFT)Ú decode_header)Ú_GLOBAL_DEFAULT_TIMEOUT)ÚNNTPÚ NNTPErrorÚNNTPReplyErrorÚNNTPTemporaryErrorÚNNTPPermanentErrorÚNNTPProtocolErrorÚ NNTPDataErrorric@seZdZ dd„ZdS)rcGs>tj|g|¢RŽz|d|_WdStyd|_YdSw)NrzNo response given)Ú ExceptionÚ__init__ÚresponseÚ IndexError)ÚselfÚargs©rú./opt/alt/python310/lib64/python3.10/nntplib.pyr bs   ÿzNNTPError.__init__N)Ú__name__Ú __module__Ú __qualname__r rrrrr`s rc@óeZdZ dS)rN©rrrrrrrriórc@r)rNrrrrrrmrrc@r)rNrrrrrrqrrc@r)r Nrrrrrr urr c@r)r Nrrrrrr yrr éwi3> Z231Z220Z225Ú211Ú215Z222Z101Z224Z282Z100Z221Z230)ÚsubjectÚfromÚdatez message-idZ referencesú:bytesú:linesrr )ÚbytesÚlinesó Ú GroupInfo)ÚgroupÚlastÚfirstÚflagÚ ArticleInfo)ZnumberÚ message_idr"cCsL g}t|ƒD]\}}t|tƒr| | |pd¡¡q| |¡qd |¡S)NÚasciiÚ)Ú_email_decode_headerÚ isinstancer!ÚappendÚdecodeÚjoin)Z header_strÚpartsÚvÚencrrrr§s   rcCs¨ g}|D]0}|ddkr|dd… d¡\}}}d|}n| d¡\}}}| ¡}t ||¡}| |¡qt}t|ƒt|ƒkrDtdƒ‚|dt|ƒ…|krRtdƒ‚|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     rCcCsÒ ttƒ}g}|D]]}i}| d¡^}}t|ƒ}t|ƒD]B\} } | t|ƒkr'q|| } |  d¡} | |krX| sX| d} | rL| dt| ƒ… ¡| krLtdƒ‚| rV| t| ƒd…nd} | ||| <q| ||f¡q |S)Nú r5z: z?OVER/XOVER response doesn't include names of additional headers) r<r;ÚsplitÚintÚ enumerateÚ startswithr8r r/)r"r=Zdata_process_funcZ n_defaultsZoverviewr>ZfieldsZarticle_numberÚtokensÚiÚtokenZ field_nameZ is_metadataÚhrrrÚ_parse_overviewËs(   rMcCs¸ |dur|dd…}|dd…}t|dd…ƒ}t|dd…ƒ}t|dd…ƒ}t|dd…ƒ}t|dd…ƒ}t|dd…ƒ}|dkrJ|d7}n|dkrR|d 7}t ||||||¡S) NiúÿÿÿéééüÿÿÿéþÿÿÿéFiÐédil)rFÚdatetime)Údate_strÚtime_strZhoursZminutesZsecondsÚyearZmonthZdayrrrÚ_parse_datetimeès   rXcCsX t|tjƒs d}nd |¡}|j}|r"|d}d ||¡}||fSd ||¡}||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 |dur t ¡}|j||d�S)N)Zserver_hostname)ÚsslZ_create_stdlib_contextZ wrap_socket)ÚsockÚcontextZhostnamerrrÚ _encrypt_onsr_c@s eZdZdZdZeddddefdd„Zdd„Zd d „Z d d „Z d d„Z dd„Z dd„Z dd„ZeZdd„Zdd„Zdidd„Zdd„Zdjdd„Zd d!„Zdjd"d#„Zdjd$d%„Zd&d'„Zd(d)„Zd*d+„Zdd,œd-d.„Zdd,œd/d0„Zdjdd,œd1d2„Zd3d4„Zd5d6„Zd7d8„Z d9d:„Z!dd,œd;d<„Z"d=d>„Z#d?d@„Z$djdAdB„Z%dCdD„Z&dEdF„Z'djdGdH„Z(djdd,œdIdJ„Z)djdd,œdKdL„Z*djdd,œdMdN„Z+dOdP„Z,dd,œdQdR„Z-dd,œdSdT„Z.dd,œdUdV„Z/dWdX„Z0dYdZ„Z1d[d\„Z2d]d^„Z3d_d`„Z4dadb„Z5dkdcdd„Z6dedf„Z7e8�rdjdgdh„Z9dSdS)lrzutf-8ÚsurrogateescapeNFcCs~ ||_||_| |¡|_d|_z|j d¡|_| |¡|s!|r+| |||¡WdSWdS|jr9|j ¡|j ¡‚)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|_|r(d|jvr(| ¡|js(d|_| ¡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 sf‡fdd„}|ƒr1zzˆ ¡Wn ttfyYnwW|ƒr&ˆ ¡dSdS|ƒr0ˆ ¡wwdS)Ncs tˆdƒS)Nre)ÚhasattrrrzrrÚ�s zNNTP.__exit__..)ÚquitÚOSErrorÚEOFErrorÚ_close)rrZ is_connectedrrzrÚ__exit__€s  ÿ€  ÿ ÿúz NNTP.__exit__cCs<|dur |s tdƒ‚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 |jr tdt|jƒƒ|jS)Nz *welcome*)rpÚprintÚreprrrrzrrrÚ getwelcome‘szNNTP.getwelcomec CsŠ |jdurBd|_d|_z| ¡\}}Wnttfy$i|_Y|jSw||_d|vr6ttt|dƒƒ|_d|vrBd  |d¡|_|jS)Nr6ZVERSIONZIMPLEMENTATIONú ) rsÚ nntp_versionZnntp_implementationÚ capabilitiesrrÚmaxÚmaprFr1)rÚrespÚcapsrrrrtšs   õzNNTP.getcapabilitiescCs ||_dSry)rp)rÚlevelrrrÚset_debuglevel°s zNNTP.set_debuglevelcCsJ t d||¡|t}|jdkrtdt|ƒƒ|j |¡|j ¡dS)Nznntplib.putliner6z*put*) r„r…Ú_CRLFrpr‡rˆreÚwriteÚflush©rr>rrrÚ_putline¹s  z NNTP._putlinecCs4 |jr tdt|ƒƒ| |j|j¡}| |¡dS)Nz*cmd*)rpr‡rˆÚencodeÚencodingÚerrorsr—r–rrrÚ_putcmdÂsz NNTP._putcmdTcCsŠ |j td¡}t|ƒtkrtdƒ‚|jdkrtdt|ƒƒ|s#t‚|rC|dd…t kr5|dd…}|S|dd…t vrC|dd…}|S)Nr6z line too longz*get*rQéÿÿÿÿ) reÚreadlineÚ_MAXLINEr<r rpr‡rˆr€r“)rZ strip_crlfr>rrrÚ_getlineÉs   þ z NNTP._getlinecCsn | ¡}|jrtdt|ƒƒ| |j|j¡}|dd…}|dkr%t|ƒ‚|dkr-t|ƒ‚|dvr5t |ƒ‚|S)Nz*resp*r6Ú4Ú5Z123) rŸrpr‡rˆr0r™ršrrr )rr�ÚcrrrrqÚs z NNTP._getrespcCsö d}zot|ttfƒrt|dƒ}}| ¡}|dd…tvr"t|ƒ‚g}|durKdtdf} | d¡}||vr9n|  d¡rD|dd…}|  |¡q/nd} | ¡}||krWn|  d¡rb|dd…}|  |¡qNW|ro|  ¡||fS|rz|  ¡ww)NÚwbéó.s. r6Fs..) r.Ústrr!ÚopenrqÚ _LONGRESPrr“rŸrHr”r/ri)rreZ openedFiler�r"Z terminatorsr>Ú terminatorrrrÚ _getlongrespêsH     ú   ú€ ý ÿzNNTP._getlongrespcCs | |¡| ¡Sry)r›rqr–rrrÚ _shortcmds zNNTP._shortcmdcCs | |¡| |¡Sry©r›rª)rr>rerrrÚ_longcmds  z NNTP._longcmdcs0 ˆ |¡ˆ |¡\}}|‡fdd„|DƒfS)Ncsg|] }| ˆjˆj¡‘qSr)r0r™rš©Ú.0r>rzrrÚ +sÿz'NNTP._longcmdstring..r¬)rr>rer�ÚlistrrzrÚ_longcmdstring$s   ÿzNNTP._longcmdstringcCsb z|jWStyYnwz | d¡\}}Wnty'tdd…}Ynwt|ƒ}||_|S)NzLIST OVERVIEW.FMT)Z_cachedoverviewfmtÚAttributeErrorr²rr;rC)rr�r"r=rrrÚ_getoverviewfmt.s ÿ þzNNTP._getoverviewfmtcCsdd„|DƒS)NcSsg|]}t| ¡Ž‘qSr)r$rEr®rrrr°Asz#NNTP._grouplist..r)rr"rrrÚ _grouplist?szNNTP._grouplistcCs: i}| d¡\}}|D] }| ¡^}}|||<q ||fS)NZ CAPABILITIES)r²rE)rr�r�r"r>r?rIrrrrŒCs  zNNTP.capabilities)recCsd t|tjtjfƒstd |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.newgroupscCsT t|tjtjfƒstd |jj¡ƒ‚t||jdkƒ\}}d |||¡}|  ||¡S)Nr¶rNzNEWNEWS {0} {1} {2}) r.rTrr·rYr¸rr[r‹r²)rr%rrerUrVr¹rrrÚnewnewsas þ z NNTP.newnewscCs6 |dur d|}nd}| ||¡\}}|| |¡fS)Nz LIST ACTIVE ZLIST)r²rµ)rÚ group_patternreÚcommandr�r"rrrr±qs  z NNTP.listc CsŒt d¡}| d|¡\}}| d¡s| d|¡\}}i}|D]}| | ¡¡}|r=| dd¡\} } |s9| S| || <q |rD||fSdS)Nz^(?P[^ ]+)[ ]+(.*)$zLIST NEWSGROUPS rzXGTITLE r6rNr,)ÚreÚcompiler²rHÚsearchÚstripr%) rr¼Z return_allZline_patr�r"ÚgroupsZraw_lineÚmatchr?ZdescrrrÚ_getdescriptions€s  €zNNTP._getdescriptionscCó | |d¡S)NF©rÄ)rr%rrrÚ description—s zNNTP.descriptioncCrÅ)NTrÆ)rr¼rrrÚ descriptions¤s zNNTP.descriptionscCsœ | d|¡}| d¡st|ƒ‚| ¡}d}}}t|ƒ}|dkrA|d}|dkrA|d}|dkrA|d}|dkrA|d ¡}|t|ƒt|ƒt|ƒ|fS)NzGROUP rrr6rNr¤rO)r«rHrrEr<r8rF)rr?r�ÚwordsÚcountr'r&Únrrrr%¨s    z NNTP.groupcCó | d|¡S)NZHELP)r²)rrerrrÚhelpÂs z NNTP.helpcCs: | d¡s t|ƒ‚| ¡}t|dƒ}|d}|||fS)NZ22r6rN)rHrrErF)rr�rÉÚart_numr*rrrÚ _statparseÌs   zNNTP._statparsecCs | |¡}| |¡Sry)r«rÏ)rr>r�rrrÚ_statcmdÖs  z NNTP._statcmdcCs |r | d |¡¡S| d¡S)NzSTAT {0}ZSTAT)rÐrY)rÚ message_specrrrÚstatÛs z NNTP.statcCó | d¡S)NZNEXT©rÐrzrrrÚnextéó z NNTP.nextcCrÓ)NZLASTrÔrzrrrr&írÖz NNTP.lastcCs2 | ||¡\}}| |¡\}}}|t|||ƒfSry)r­rÏr))rr>rer�r"rÎr*rrrÚ_artcmdñsz NNTP._artcmdcCó& |dur d |¡}nd}| ||¡S)NzHEAD {0}ZHEAD©rYrשrrÑrer¹rrrÚhead÷ó   z NNTP.headcCrØ)NzBODY {0}ZBODYrÙrÚrrrÚbodyrÜz NNTP.bodycCrØ)Nz ARTICLE {0}ZARTICLErÙrÚrrrÚarticlerÜz NNTP.articlecCrÓ)NZSLAVE)r«rzrrrÚslave!s z NNTP.slavecsF t d¡‰| d ||¡|¡\}}‡fdd„‰|‡fdd„|DƒfS)Nz^([0-9]+) ?(.*) ?z XHDR {0} {1}csˆ |¡}|r | dd¡S|S)Nr6rN)rÃr%)r>Úm)ÚpatrrÚ remove_number2s z NNTP.xhdr..remove_numbercsg|]}ˆ|ƒ‘qSrrr®)rârrr°5szNNTP.xhdr..)r¾r¿r²rY)rZhdrr¦rer�r"r)rárârÚxhdr's   z NNTP.xhdrcCs0 | d ||¡|¡\}}| ¡}|t||ƒfS)Nz XOVER {0}-{1})r²rYr´rM)rÚstartÚendrer�r"r=rrrÚxover7s ÿz NNTP.xoverc Csz d|jvrdnd}t|ttfƒr |\}}|d ||pd¡7}n |dur*|d|}| ||¡\}}| ¡}|t||ƒfS)NZOVERZXOVERz {0}-{1}r,rŠ)rsr.Útupler±rYr²r´rM) rrÑrer¹rärår�r"r=rrrÚoverEs z NNTP.overcCsd | d¡}| d¡st|ƒ‚| ¡}t|ƒdkrt|ƒ‚|d}t|ƒdkr+t|ƒ‚|t|dƒfS)NZDATEZ111rNr6é)r«rHrrEr<r rX)rr�Úelemrrrrr`s    z NNTP.datecCs�| |¡}| d¡st|ƒ‚t|ttfƒr| ¡}|D]}| t¡s)|  d¡t}| d¡r2d|}|j   |¡q|j   d¡|j   ¡|  ¡S)NÚ3r#r¥s. )r«rHrr.r!Ú bytearrayÚ splitlinesÚendswithr“Úrstriprer”r•rq)rr½Úfr�r>rrrÚ_postqs      z NNTP._postcCrÌ)NZPOST)rñ)rÚdatarrrÚpost†s z NNTP.postcCs | d |¡|¡S)Nz IHAVE {0})rñrY)rr*ròrrrÚihave�sz NNTP.ihavecCsBz|jr|j ¡|`W|j ¡dSW|j ¡dS|j ¡wry)rerir]rzrrrr�–s üz NNTP._closecCs& z | d¡}W| ¡|S| ¡w)NZQUIT)r«r�)rr�rrrr~žs   ÿz NNTP.quitcCsú|jrtdƒ‚|s|stdƒ‚z|r,|s,ddl}| ¡}| |j¡}|r,|d}|d}Wn ty6Ynw|s;dS| d|¡}| d¡r]|sMt|ƒ‚| d|¡}| d¡s]t |ƒ‚d|_ |  ¡|j ryd |j vr{|  ¡d|_ |  ¡dSdSdS) NzAlready logged in.z7At least one of `user` and `usenetrc` must be specifiedrrNzauthinfo user Z381zauthinfo pass Z281ro)rxrƒÚnetrcZauthenticatorsrbrr«rHrrrsrtrurv)rrjrkrmrõZ credentialsZauthr�rrrrh§sDÿ € ÿ   üz NNTP.loginc Csbz | d¡|_WdStyYdSty0}z|j d¡r$d|_n‚WYd}~dSd}~ww)Nz mode readerZ480T)r«rrrrr rHru)rÚerrrrvÐs  þ€ýzNNTP._setreadermodecCs| |jrtdƒ‚|jrtdƒ‚| d¡}| d¡r:|j ¡t|j||j ƒ|_|j  d¡|_d|_d|_ |  ¡dSt dƒ‚)NzTLS is already enabled.z+TLS cannot be started after authentication.ÚSTARTTLSZ382raTzTLS failed to start.)rwrƒrxr«rHrerir_r]rbrfrsrtr)rr^r�rrrÚstarttlsÞs    z NNTP.starttls)Try)NNT):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�r~rhrvÚ _have_sslrørrrrr(st  þ#"    .         ) ÿrcs8eZdZedddddef‡fdd„ Z‡fdd„Z‡ZS)ÚNNTP_SSLNFc s$ ||_tƒ |||||||¡dSry)Ú ssl_contextÚsuperr ) rrbrcrjrkrýrlrmrn©r¸rrr ùs ÿzNNTP_SSL.__init__cs4tƒ |¡}z t||j|jƒ}W|S| ¡‚ry)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)ÚactionrrÍ)rbrcr÷ZGroupZhaszarticles, rangeÚtocCs$t|ƒ|kr|d|d…d}|S)NrOz...)r<)ÚsZlimrrrÚcut3s r r6rúsÀA  ÿ    þÿÿ   S    ÿ ÿ  ÿ ÿ ÿ       ÿ Ð