ÿØÿà JFIF    ÿÛ „ !.%+&8&+/1555$;@;4?.451 4,$,44444444444414444444444444444444444444444444444444ÿÀ  á á" ÿÄ     ÿÄ ?    !1AQaq"2‘¡±ÁðBRbrÑá#‚’¢²3S CñÿÄ   ÿÄ !    !1QAa‘2ÿÚ   ? 5˜Z¯V¦cø)›t/? z¨±>Õ5€¶‹Á¤·¼z¼Ü¬+ñ®v¤¨_ˆR­BFn©—˜ý®ç̝P8gýt·ÉSTŦˆìät?þé¼íìN/Þa)ì–í6ô… Ï¿øÃj´¿KÇü]ÿ ªô¹-eKànëÕHTx}ýSÜ›ÿ ”7Ø×&µ<¦  ¥ÑO¶[Ù¯ä¨ÞÃÿ PZ-¬;#õ|•oaÿ ©CìÞz3˜öː/¤­ñTûIØ}š^ mÓ%ªxˆ¥ÉŸu=Z+ISe¿45™¼u;ú&WØ÷€æßQ™®{|íx*TC“#ZŠìZ§²‹ 6pv…³¿¡äª*áZÐ%ÒOáˆo"x«OHk w±æ+¬V(kMúŸ5Vö«$ ÁrÏbàb57/luR ¸ÑÛj Òµì`Мq­û žICÀÊ•©4€Âcà¨Ï€O´<èÐ:›ù(Ë^L8þ‘ÍÌ#¸Ð_Ì©ÙK(Öz 4¬û+¸;ü’V’84‘¬ÃŽ:[â‡ÔÌáõp¢~§ªlæ£ö{®G>J¼"°‡7¯ÆÉèßû ‹É‹§ÁòÃýâßî ^ƾÙõ‹×óH#«LP½ïX=xÑÍ$|W?•~• îëÔ©ª‹ {ÝT…Kÿ ”hûâá)J*ö˜–ÔU;iÇ€/ ÆþjóZ\ýwØ=Ìm ºèËL9 ýèÆð/¨’¥öo=nË.%Îì ŽÕ¯È|{Oj²ƒE6e/ßdÄõ²Ìâ1O®ò×TsəԸhOMýíMˆ¿¼H˜l²,7Â¥#MF/Úf°Ö½± ¸–dr‹NýÊ íjqx{œÉ ä-È ¦ øÄër¨q°ð †nцýÑÄÆ’mä…n<0È™;ÁÝá¯ÁZƒ7FÀmì­ É&9ˆîéi¶ùN§Y• ÃZãAâ?•‡©‰ , ó¾IŸŠc1 4â&y­&pŠ­6;M À 0¹qç»p.á …ŸÅáK@%6·y6ƒ‰3?”úºŽ‰éX5ªPT §µ!=Mž«Ú½‹ÅgÂSâÉaþÓoö–¯ÁÔìR>5éÿ üs¶ÆUcÌ kÇR ]ÿ ù¬¼«VŽ;Â|‡~¢¦”ÏŰæ {L™Õ°Óv¹ò¸írޡעCÃ!íVÕ {¶»sŒNPg/ "uÕbkm²“$ďå¿é¹§°½æz¯6 †s¿!s–wÚÝ“™Œ °.ûj>·+™Òa…©Œ&rÝÎtÛë긪Ît’LAVp%c Úý[ÄzJ¾ÇàXXç@˜ó<êL]·T˜¾¥1Ó©V‡g´æ½¦Ý@¹óø!_@´ÞâSÁ —S3™•& ]@JHÚý©ZŽ €×æÔr»Áf!‡yÞ4Mv*èÓã_{‘åóUuљØ«Oïé*®EvÑ Œ÷‡U \"㪒ÍK+À 4“M¡ï:0¥5í!'<@î´”>Ç»&Z–ïCCV˜Ì5Šo&îhè.žû |ÓK©h$s6KìŒëã)¹hI¦GïOåóI;ììü#É$Š0…Ææ¥TØ.5­¾gn´ “ÂÖ\:hœ89G)J@„}œ:’Ò{/Š"¦_Æ×7Æ3VÇŠÊa]ÚŒÙ€Ä–=®uÁßâACZƒ§§£ Qnâ:«,×{tyø¬iÛcœÜÄ€H½ÄÍCk´÷šß .W'b¤Íåh]÷€=,Žv×cÚEÚHXJX¶îo¨FÒtèöŸ>ªª6[J®Fµ£sGÁeqõfe\íjÒÐïÄÐGˆe1Ø‹.Ø”‘Ëuø Y­ˆÜ ŽG|zùªüMpDnQWÄ”%JŠ™)â*p@Örš«ÕT2Ð%ˆG#ª„ ·¤!°ŸOTÂT¸aÚ%4&h™LµšØüÐ.F¿²ÐÞ_Ç‚¾ÅÃaÜ÷09Æ q€öy˜v‡85õN÷]¬äѼóS{°_MެúÔ#°Ç¸0åÞè2ëôPcvÆw9®ií1Ä8F™˜à‰´+‰Ik1òÝ7“Ñ×ÒsÝ\x‚h`ÞÑ`ó"|µEcý£n˜h`}GÞ !±ù²Ápü²ß6 0ïi󜵩SÈÇ7˜-ÕURO˜¦´f$ªž-Í6(œ}<„ éc øs]ŽŽ„*—¾ ìdŽ„)méª\¿êÎIg¾ØÞ~I#C/¼¼´EÁÈŽi8“©õådô·>euä ƒ'Ê×लR1ÉJE1ÐAát`t;ÇР%Ý<‡¥„ÍÆ`×Oyó)õiI€ñQaŸ4Ûù\áàaÃÔ¹HÃu¹*k€¦<„e S‡&õÏ B!ŽhüÞ`yj}mªf×\¿ Ç~æ­9‡û\՞Ǖg²1Žû5V7 !àöšm° c`ܬøÇìµÒ'P"?…´Ö,"§^•õލsÔ)6˜sæéÍR¼ ò|Sl”‹7 nPW Gòú÷½§O¯‡„l¡kSÞŒr½PÊ@æ¢pŽ-mÿ #Ÿ˜Àº¶Áä¦;ïÔæ$1££`“Õ>„—·ž)ßð³ñ#Ï Ô$¶œ‰ÊE‹À;÷º ¯«P:Ñ”8–IÊtpÞ3ª“>ê“þës4ò2OÏÕ­±zô†Õ§‰.÷ä¸;¿˜“'œ›žª}«Œ{ª±Ì 9ÔóÞÕ‡0 $íWV3Üì¬ —@kÝ4@¿r¼±½¬™›?øØæ´'Áé®CË3-g$˜ö‡×auÚi´Žp/êÛ æF›Ú2v‹ã¿¿,nB1̨ƃqÞa5͝@&Æû“él÷ \C²½UÍc ¯k×¢U ÖéQå™—-r wô ÞÏ<Ò=&=ÿ Ôê Òêˈt,i—;LîÜ á¸*ÚÃ1$êL•LÍ <É)ýÐà’ ;F™{ƒ™˜€&'}‚ãÄK`¡ÞT@I;®žZóè‚s’7®°›+§O­Åq©é»²9<Ô J ¼9O’HL»Ùïì¸rk¼Ž_ý‘TŸu[²ßÚŒ·ü÷B%¯E ŸÔX5êO´ Ç•€’I0 ÉJX` ñ¹õ%;µŸD‘«´€àwÒ™U ûئžÖö\×®×´8 ½‡ºÐÆÓ§?Àkmœ=;d5*@-ì0F Rªýš[Ü6âö̃ڸr*KA9· u*µæ£?U¸Âêí†8@¦X4 e-ò„0s{ HâUpU?¼mñRa°®a%Ð'tÉ×’\¾ÊÉ]t›h>·(Ë@R¼¡Ãt h}’O÷au<+nT…Ö…MӐ??Óe95 q>í/;&JSû °¯ÊéÞ øƒ*Ã2½Ài&:nôUl=¾¿5eˆ3”ñc|Ú2V”>„»&eE;«ÚäC p¢Û úy 9š[ŒÌx¼擼A&DåÒ¯ˆ¤ÀÌ;"˜ ÏQä¸åhÊ}Ûq«Û0WžÒ|»€ø®öCm5•\ÇÀ§Pe3£]0ÃàLDÉ‰1øªxjgwT‚÷¿LΨK‹›ùs—xˆÜ±µ kæ¸f‰‰ÜGk/LÛØ6d9ò¶ùA{ƒA3š/¬D¬khÓk‰`˜"㯒r¿±Óã jx‡°e}<Ñø\3y:'À•/h½Í€Ç4~g ?Û(¼]v‘ªlKÎâ~?O‚W%{Ì:“'©úNq¾›úo(X’¥¯ˆ nFê{Ç€ü?º'ë ø‹ì Þ09ŒÌç9Æ —ËC`j@ÓÄ(+a‹un¸#ÂꟋ{K`‘ÑÍÍ'à´»/Û,KW;Þ4²þð ï Nm|~fGÏ(…³Ã)«1ö­Õ ¥‡¨©ƒÃ™ü-s=à=U66Ï«Ýc蓦W¹íž®›nÔ%êÇìŒ<#Ü×84ån®Ð ÒåOC` ñânÑs‡¢ç 1õ%Îhì½Ã½® e:ݼUZo™`  ÅZŸŒÊ«ê1ÏÄo$q¹Þ€©ˆhÐÉä¯ñ[!…Ú˜àJ:x2$Íß&PåT£6ç— ‡Í*4Ýšçjÿ ‰É nófÐ ó(L5C•åÆ\rMÒ@ò }y-W}™üýVù—ú¢=Ù”c®‘< M ž ´Phr ¦©TD ‘ù.$´÷O‡‘V2Æò.=IUŒ=ž‡â¬i™aþÓåÙ?òUø'ØÖ•.~* šTŒ!•-×áºTâ®ä#õü'´ eýlYÅÓeÕKÂrT"CÚ@u!Óxƒ{š3€}1¿(r}%«nËamjÑ%ÑNEò v ˜à  σöK³,*º.àzù¨™Ó ÚçâU¦*¿ 9{%Ö¹ njûdaXöb) kÛÆ±ûÓ\°M7ˆÂ=û›ç¿Ã‚­V»Cg–8ÙêE- j)k$º`Ã-ùEýeBÆÇ]c¡°ñty&Òd0nõ'¡W+ƒ*|–øµFa\GQªEAÔp5\Ǽ·¼Ç8·õ -â§Ú[ ‡ uZeÖ 3}×d'+¹:ð+K†Û®s!Ï$úe€<Û”x)1»a­¡LC]¸µík…ÚàA»AYº{†ªS[¦5HÒ7ù --,ísòDØ€èk ÞÀîÜ ò@â( ËNˆë›4ô½•/¦o‡€Û7 ê•ÆêòðÜy'Án½µ á˜ݦ ndeo…[ì¶Ê,¥R³Ä=À±—–ß;£™´ñSâ*g§”ïaið‘Jå~™ÓÞ ß³Õ¢»8x埒²52>AÊb&-÷\7´éÄù€T˜,w;3{ï˜k…à¹ÄqÀ«œ{€\ ˆ¾[´¨јr &Úé„Ívˆ±8†¿]|¬ņ4I×pÞS1ÈÖz‰#Ìv‡G!YNògñ:màTz¢Ý1ô©^O=~ë|5Bã™ç•¼µõ•bÆ@úÕS¬ÈŒ#¬zünrŸ û” Z²•èðV"ÁHÚý©wÝ €7¼Ìu1hÑa3Éä û f$o¿É ™Ú›ÝçnpÒ3äÌ3†Í§,Äï]$‰/pê †«À¼¸e9­Æê_C]žƒ·ý·frÁN«, E=›Çq -‰öŒ:aÏ¿±í&£Í:-} 84‘ÿ eƒQÑeëSsuiA ³g㟥ú£?ÿ ʼn*”“÷aühe:ÊWa@ÒÞk±eØ] F Ô—r.åä˜ @ö¥ªZoÐýYL·¥S²G/‡ñ <~*ZÆ´è>JlòàÛÆ½ÿ 窘ìGN¢:I®KšJp/`íIÁÀõ#Ä-€ö­šµŒoF4|ÆQØÆ@Ì|£Ô…¢À{9˜è½Üó›€ôYÒÎYsið;ís¤€à²ˆ‚4qÉVŒI$ ‰"° æµ8cXGjœˏ¡Aâý•ËÜ¢ûï e·çLx']á"oÅÎê3¯Ç—¹”ó0nå‚âg{Œñ> S´˜îè°g238‚ãköÝfÚd´6Ò€;ò÷±¢™¼›º ¢Æ'¥Ðx'e¬ç ]bÈÆV¢ó‹kýBO ðÊâ$Ÿ!×T 3Mýמ žìٍàÌü‘8÷€àæØ8æ©6‰©L´«…oãpð„~Çk‰!ñ;‹”ÛžÍ àž±z Ÿôû øŸÝužÏ;ÿ #|u6™Þ¬ÚˆÐõA4¶â|ôl|Ê2ŽÇ¤ÝÅÇY.<#Aí.k§hóF‚”Y; M½Ö4hŸ4&›­¿tès´%FìL¥£Ãk‰ÇT¤haÁ¤ÚxfÉ`ÑìË›>i 3t‚:,–+^÷´–{Û–Nxi"x‘Ûg î¨>¥Õ܁ùZH,2Û“:8xÊ¢Çí9.É-Ìâã-=çjwµS˜dütžçwýGòú®®ûº_ˆýx$–¡ãøO EÚÛÏ÷R„×w+3£Á£öUMyR²¹âŒ°š›¸Ñãò9§Ó_Dl+Ùßc›úšGÅÌc†Ž!Ko=¶.‘Îÿ c²(2®V mª.ÿ ¹B›¹å ù„öŸSV>™ü¯$y:G¢Z×àøúdî¹û­·ýÇ´:•c LÍõi_‹ö+ÎæGÊè>OŠ•äž´§Þ{X}¨1ÚTc›»Qþ•êô°t¿OP?eæ~É{5]•ÙR£r5†nZ\ã@ &îJõ ¾àC°þV>fé¥/ü5ñÊIº_é5 ;e­h<@ Ä&æÃëE%;X,ÒãÆÞ`Oò¦kŸm#˜!ÀyÄ¢| óLšò¥Ä` ¶R=|ÈCâh5ò3DˆïF†ðÒ#ÅìÛœ?¸yhBãœí ZxßÎÄhºRK„`Þödvײ™ÀÈÑÒgŒuY w³%†ƒÓzõ ÖÏp‚dH®¦A´ù§»ÓÇMæ~)ˆð‡û:ù&Ä •vGD´À n ݇¼Ö8Fö óáà£~Ë¥x`oK|Ä?fxiØü%pìR>éò+Û±éÎ>núlFŤ'tq8LZÏvÃ?„¡ß±È⽆¯³íü@x|PöUäèØã¡ð‚ŒAìÏ"vÍwóŸÍ{ ý0.z È•Ö{,N¡£¡ŸKÕÙž>Ýœþ ÍÀ°<×EA!Å‚D™IúOÍ¡>ôG}Â` ÍßkÜL™Ž Þð™ {IøF²¹òQ3&!ÃÂÞz.d&Ï-sH¸,Ôõ˜ŽP€ 77ˆÝ¼ÊëÜw =cÕ Ú,ØÐ5ÎYÐ)ì´öœgŒ[¤ßv㙑8心>h]§µháYš£²ºÑ.{Ï7Sð•?´~×SÃKýJÛ˜ ™Íäiúu<µX¶1õ^kâçIÑ£sZ4h>j*ÔšD:4­¿_ ÷¸ Õxæÿ ¸?Mù _•­ÊÐ ä ÷ý ÑwL œ­ïnTkÛUÍN©ë:¦fV ¶ÜÔÜMªÅâA½–¿R×TXš-%iTÊT•‡Ù‚JôϐZxWÑè‰f‰òG º ×Õû2aZ7OU3[“×AT–ÞŒ…-‘¤”Ì ì&(ˆ¿­•ƒkï’:ðY¦W‘ Å)“†‘˜³Åtcø˜ñTÂwÚÇ4|üLÇªí–v- qˆèU qPE.†â‘˜µ Æ,ÐÅs]8¾„oúÑ i>ÜxxÈó)ƒ ´æÁâØ$À‰vžŸf$Ž |ãw;ÀÁIJ»b` {¦Ó¤Ú$©YÀ‘n@Óïž«9J¼êG m¤ ܯ¹ÌW4€ÐÒÅÛ‡#褕Ÿn-?í|с¥÷Ú¹¬'´ÞÜ9ÓK `hê£SÄSà?7—Wí_´…óB›»:=Ãïq`<8ñÓŒÑlú2d¬ê³£hÖ[l|$vÝro~'R®‰§°ñmY ͧäP |PUª¹·:3Œ[Û{Xÿ ºâ@‚W–Äé u‚ ¯´*=íή.pûÒdt @G‰¬ s¸ ëÉücr ÞæÑ¨Ê@>¤¢Ö±. Þ'¯°ÌME[YéïĵÂCå½ Ué©Áû'Ê9%eÔðNU”ë‘ÌsD3/®+UI˜9h.WC”빓$#:pz:YÓ ¿xž* ³$Í +$kñAŠ‹†¢ Uê>¸)_š¬÷©ßAÂÔb9ÇU ¯¾á•9¯ÏÏ÷O÷¼¼Fähal1‰3Ì[Ïr•´UCksNÐ] R‘¸¥H+§Šé†c©vÖÞ0iÓ76s†î!§=ß ¼~Ô'°Ãmäoäš³ªøi1úÉ)³yV8 CLÄØÁ‘WYïi€H6ÖÑiámø^ÈY´°Ñ7¥Û*—Ñ©L«Qƒï—Ùrÿ ›£Ð*š¸ˆL©ˆ$ˆ ÷¾D§9È®«qbqC)–ˆïv´çñsÑVT­Ø, <àïºÀO«Jý·õ àfPìð .wFšir´þ’2_Y *Æ€x\« ì€9š@ Ž|F⇥ˆkZ@hÖÄ0t¿-<“‹qµ¾*ZL¤Ú)&BJpÓF5=$„at*Zš$’ÑtdûÝRI1 2މ$€$I$#‰SÞ’Hë¬ï;Á$¡t$’`<(ñÇt)$‡Ð.Êf¢X’Kt=Éé$‚ˆªè¢oÝëòI%Rgcª÷ŠyI%¡‰ÿ !ñ)´õ $¤ Ô’IIGÿÙa 3g@sddlZddlZddlZddlZddlZddlZddlZddlZddlZ ddl Z ddl Z ddl m Z ddlmZddlmZmZddlmZz ddlZWneydZYn0e je jedZedurejZnGdddeZGd d d ZeefZ edure ej!f7Z Gd d d eej"Z#e$ed Gddde#Z%Gdddej&Z'ddZ(GdddejZ)GdddZ*Gddde*Z+GdddZ,Gddde,Z-Gddde-Z.Gd d!d!e-Z/Gd"d#d#Z0Gd$d%d%e0e*ej"Z1Gd&d'd'e0e*ej"Z2Gd(d)d)e*ej"Z3Gd*d+d+e+ej"Z4Gd,d-d-ej"Z5Gd.d/d/ej"Z6Gd0d1d1ej"Z7Gd2d3d3Z8e$ed Gd4d5d5e7Z9Gd6d7d7ej"Z:e;d8kre<dS)9N)support) socket_helper)NNTP GroupInfo)patchz keycert3.pemc@seZdZdZdZdS)SSLErrorz6Non-existent exception class when we lack SSL support.zThis will never be raised.N)__name__ __module__ __qualname____doc__reasonr r 0/opt/python39/lib/python3.9/test/test_nntplib.pyrsrc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZeddddZddZd1d d!Zedd"d#d$Zd%d&Zd'd(Zd)d*Zed+d,Zd-d.Zd/d0ZdS)2NetworkedNNTPTestsMixincCs|j}|tt|dSN)serverZ getwelcome assertEqualstrtype)selfwelcomer r r test_welcome(s z$NetworkedNNTPTestsMixin.test_welcomecCs>|j\}}||d||D]}|tt|q$dS)Nz100 )rhelp assertTrue startswithrrr)rresplinesliner r r test_help,sz!NetworkedNNTPTestsMixin.test_helpcCsH|j\}}t|dkrD|tt|d|tt|djdSNr)rlistlenrrrrgrouprrgroupsr r r test_list2s z!NetworkedNNTPTestsMixin.test_listcCsL|j|j\}}t|dkrH|tt|d|tt|djdSr) rr GROUP_PATr!rrrrr"r#r r rtest_list_active8s z(NetworkedNNTPTestsMixin.test_list_activecCsV|tj}|jdWdn1s.0Y|jj}||d|dS)NZXYZZYz500 ) assertRaisesnntplibNNTPPermanentErrorrZ _shortcmd exceptionresponserr)rcmrr r rtest_unknown_command>s*z,NetworkedNNTPTestsMixin.test_unknown_commandcCsXtjtjdd}|j|\}}t|dkrT||dt||dj t dS)N)Zdaysr) datetimedateZtodayZ timedeltarZ newgroupsr!assertIsInstancerr"r)rdtrr$r r rtest_newgroupsDs  z&NetworkedNNTPTestsMixin.test_newgroupscsbfdd}jj}||j|jj}||jd}|ddS)Ncs|tj|dSr)r2r assertNotIn GROUP_NAME)descrr r _check_descNs z=NetworkedNNTPTestsMixin.test_description.._check_descz zk.brrtt.baz)r descriptionr6assertInDESCr&r)rr9r7r r8rtest_descriptionMs  z(NetworkedNNTPTestsMixin.test_descriptioncCs^|j|j\}}||dp(|d|||t||j}|||j |jdS)Nz215 z282 ) r descriptionsr&rrr2dictr6rr;)rrZdescsr7r r rtest_descriptions]s  z)NetworkedNNTPTestsMixin.test_descriptionscCs|j|j}|dt||\}}}}}|||j||t||t||t||||| d|dS)N211 ) rr"r6rr!r2intassertLessEqualrr)rresultrcountfirstlastr"r r r test_groupfs    z"NetworkedNNTPTestsMixin.test_groupcCs<|j\}}||tj||jd||jddS)Nii)rr1r2r0assertGreaterEqualZyearrErrr1r r r test_dateqsz!NetworkedNNTPTestsMixin.test_datecCsF||t||hd|D]}||ttdfq(dS)N>:lines referencessubjectr1 message-idfrom:bytes)r2r@rKkeysvaluesrr)rart_dictvr r r_check_art_dictxs    z'NetworkedNNTPTestsMixin._check_art_dictc Csz|j|j\}}}}}|j|d|\}}t|dkrD|d|d\}}|||d|||||dS)NrBrzno articles retrieved) rr"r6xoverr!skipTestrKrErX) rrrGrHrInamerart_numrVr r r test_xovers    z"NetworkedNNTPTestsMixin.test_xoverTzHtemporarily skipped until a permanent solution is found for issue #28971c Cs|j|j\}}}}}|d}|j|df\}}|d\}} || |j||f\}}|d\}} |||||||| dS)N r)rr"r6overrXrKrE) rrrGrHrIr[startrr\rVr r r test_overs     z!NetworkedNNTPTestsMixin.test_overcCsL|j|j\}}}}}|jd|\}}|D]}|tt|dq.dS)NrP)rr"r6Zxhdrrrr)rrrGrHrIr[rrr r r test_xhdrsz!NetworkedNNTPTestsMixin.test_xhdrNcCsR||tj|dur$||j||jD]}||tq*||jdddS)Nr_).s. . )r2r)Z ArticleInforZnumberrbytesr5)rrarticler\rr r rcheck_article_resps  z*NetworkedNNTPTestsMixin.check_article_respzFIXME: see bpo-32128c s\|j|j\}}}}}|||dfD]^}z|j|\}}Wn@tjy~}z&|jds^WYd}~q&WYd}~n d}~00qq&|d| |d|| ||||j |\}} | |d|| || ||j |\}} | |d|| || |ddfd d |j D} fd d | j D} || | d g| j dS) Nrcz423 z(could not find a suitable article numberz221 z222 z220 cSs |dS)Ns X-Antivirus)r)rr r rz@NetworkedNNTPTestsMixin.test_article_head_body..csg|]}|s|qSr r .0rZ blacklistr r szBNetworkedNNTPTestsMixin.test_article_head_body..csg|]}|s|qSr r rlrnr rrosrk)rr"r6headr)NNTPTemporaryErrorr,rrZrribodyrhrr) rrrGrHrIr[r\rperrrhZfiltered_head_linesZfiltered_linesr rnrtest_article_head_bodys, " z.NetworkedNNTPTestsMixin.test_article_head_bodycsDfdd}jjd|jj\}}||dS)Ncs(|d}|ttfd|dS)NLIST OVERVIEW.FMT)r2r tupler<)capsZ caps_listr8r r _check_capssz>NetworkedNNTPTestsMixin.test_capabilities.._check_caps)rKr nntp_versiongetcapabilitiesZ capabilities)rryrrxr r8rtest_capabilitiess  z)NetworkedNNTPTestsMixin.test_capabilitiescCs&d}d}|jtj|jj||dddS)NZ notarealuserZnotarealpasswordF)userpasswordusenetrc)r(r) NNTPErrorrlogin)rZbaduserZbadpwr r r test_zlogins z#NetworkedNNTPTestsMixin.test_zlogincCs*t|}z|jWd|_nd|_0dSr)rrquit)rclsr r r test_zzquits z#NetworkedNNTPTestsMixin.test_zzquitcCsJdd}t|D]4}|ds qt||}t|s4qt||||qdS)Ncstfdd}|S)Ncs8t|j|Wdn1s*0YdSr)rtransient_internet NNTP_HOSTr8methr rwrappedszHNetworkedNNTPTestsMixin.wrap_methods..wrap_meth..wrapped) functoolswraps)rrr rr wrap_methsz7NetworkedNNTPTestsMixin.wrap_methods..wrap_methZtest_)dirrgetattrcallablesetattr)rrr[rr r r wrap_methodss   z$NetworkedNNTPTestsMixin.wrap_methodscCs@|t"|j|jdddWdn1s20YdS)NrFtimeoutr)r( ValueError NNTP_CLASSrr8r r r test_timeouts z$NetworkedNNTPTestsMixin.test_timeoutc sfdd}z|j|jtjdd*|||Wdn1sV0Y|||j|jtjddWdn1s0Y||WnNty}z4t d|j rt d|d|jWYd}~n d}~00dS)Nc s8tdsdSz Wnttfy2YdS0dS)NfileFT)hasattrrOSErrorEOFErrorr rr r is_connected s  zANetworkedNNTPTestsMixin.test_with_statement..is_connectedFr(?i)KEY.TOO.SMALLzGot  connecting to )rrrINTERNET_TIMEOUTrr assertFalserrresearchr unittestSkipTest)rrssl_errr rrtest_with_statement s.  , & z+NetworkedNNTPTestsMixin.test_with_statement)N)rr r rrr%r'r.r4r>rArJrMrXr]rZskipIfrbrdrirtr}rr classmethodrrrr r r rr&s2          rc@s8eZdZdZdZdZdZeZe ddZ e ddZ d S) NetworkedNNTPTestsznews.trigofacile.comfr.comp.lang.pythonzfr.comp.lang.*Pythonc Cstdt|jz|j|jtjdd|_Wnvty}z8t d|j rlt |d|d|jWYd}~n0d}~0tyt |d|jYn0Wdn1s0YdS)NZnetworkFrrz got rz got EOF error on connecting to )rZrequiresrrrrrrrrrr rr EOF_ERRORS)rrr r r setUpClass<s"    zNetworkedNNTPTests.setUpClasscCs|jdur|jdSr)rr)rr r r tearDownClassNs z NetworkedNNTPTests.tearDownClassN) rr r rr6r&r=rrrrrr r r rr3s rrequires SSL supportc@s0eZdZdZdZdZdZeeddZ dZ dZ dS)NetworkedNNTP_SSLTestsz nntp.aioe.orgz aioe.testzaioe.*testNNTP_SSLN) rr r rr6r&r=rr)rr% test_starttlsr r r rrSs rc@s@eZdZdZddZddZddZdd Zd d Zd d Z dS) _NNTPServerIOzA raw IO object allowing NNTP commands to be received and processed by a handler. The handler can push responses which can then be read from the IO object.cCs>tj|t|_t|_||_|j|jj|j dSr) io RawIOBase__init__BytesIOc2ss2chandlerrareadline push_data)rrr r rrss    z_NNTPServerIO.__init__cCsdSNTr r8r r rreadable|sz_NNTPServerIO.readablecCsdSrr r8r r rwritablesz_NNTPServerIO.writablecCs4|j}|jdd|j||j|dS)z.Push (buffer) some data to send to the client.rrzN)rtellseekwrite)rdataposr r rrs  z_NNTPServerIO.push_datacCs4|j}|j||j||jt|S)zThe client sends us some data)rrrrrprocess_pendingr!)rbrr r rrs     z_NNTPServerIO.writecCs2|j|jt|}t|}||d|<|S)z#The client wants to read a responseN)rrrreadr!)rbufrnr r rreadintos   z_NNTPServerIO.readintoN) rr r r rrrrrrr r r rrns rcCst|}t||}||fSr)rrBufferedRWPair)rsiorr r rmake_mock_files rc@seZdZdddZddZdS) NNTPServerNcCs||_||_||dSr)rhostZ _base_init)rfr readermoder r rrszNNTPServer.__init__cCs|j|`dSr)rcloser8r r r_closes zNNTPServer._close)N)rr r rrr r r rrs rcs4eZdZdZfddZfddZddZZS)MockedNNTPTestsMixinNcst|dSrsupersetUp make_serverr8 __class__r rrs zMockedNNTPTestsMixin.setUpcst|`dSr)rtearDownrr8rr rrs zMockedNNTPTestsMixin.tearDowncOs:||_t|j\|_}t|dg|Ri||_|jS)Nz test.server) handler_classrrrrr)rargskwargsrr r rrs z MockedNNTPTestsMixin.make_server)rr r rrrr __classcell__r r rrrs  rcseZdZfddZZS)MockedNNTPWithReaderModeMixincst|jdddS)NT)rrr8rr rrs z#MockedNNTPWithReaderModeMixin.setUp)rr r rrr r rrrsrc@seZdZdZdZddZddZddZd d Zd d Z d dZ ddZ ddZ ddZ ddZddZddZd8ddZddZd d!Zd9d"d#Zd$d%Zd&d'Zdd(d)d*Zdd(d+d,Zd-Zd.Zed/eZd:d0d1Zd;d2d3Zd date help Report problems to .rr8r r r handle_HELP szNNTPv1Handler.handle_HELPNcCsJ|dur|dn2|dkr(|dn|dkr<|dn |ddS)N412 No newsgroup selected3000234"223 3000234 <45223423@example.com><45223423@example.com>223 0 <45223423@example.com>430 No Such Article FoundrrZ message_specr r r handle_STAT)s   zNNTPv1Handler.handle_STATcCs|ddS)N*223 3000237 <668929@example.org> retrievedrr8r r r handle_NEXT3szNNTPv1Handler.handle_NEXTcCs|ddS)N,223 3000234 <45223423@example.com> retrievedrr8r r r handle_LAST6szNNTPv1Handler.handle_LASTcCs|dur|dn|dkr<|dkr0|dq|dnf|dkrP|dnR|dkr|dusdJ|d krx|d q|d kr|d q|d n |ddS)Na 215 Newsgroups in form "group high low flags". comp.lang.python 0000052340 0000002828 y comp.lang.python.announce 0000001153 0000000993 m free.it.comp.lang.python 0000000002 0000000002 y fr.comp.lang.python 0000001254 0000000760 y free.it.comp.lang.python.learner 0000000000 0000000001 y tw.bbs.comp.lang.python 0000000304 0000000304 y .ACTIVE *distutils*z 215 Newsgroups in form "group high low flags" gmane.comp.python.distutils.devel 0000014104 0000000001 m gmane.comp.python.distutils.cvs 0000000000 0000000001 m .zW 215 Newsgroups in form "group high low flags" .rva 215 Order of fields in overview database. Subject: From: Date: Message-ID: References: Bytes: Lines: Xref:full . NEWSGROUPScomp.lang.pythonz 215 Descriptions in form "group description". comp.lang.python The Python computer language. .comp.lang.python*z 215 Descriptions in form "group description". comp.lang.python.announce Announcements about the Python language. (Moderated) comp.lang.python The Python computer language. .zW 215 Descriptions in form "group description". .z501 Unknown LIST keywordr)ractionZparamr r r handle_LIST9s         zNNTPv1Handler.handle_LISTcCs|dkr$|dkr$|dkr$|dnZ|dkrH|dkrH|dkrH|dn6|dkrt|dvrt|dkrt|d d d n |d dS) NrZ20100913Z082004a 230 list of newsarticles (NNTP v2) created after Mon Sep 13 08:20:04 2010 follows .Z100913a 230 list of newsarticles (NNTP v1) created after Mon Sep 13 08:20:04 2010 follows .)Z20100101Z100101Z090000z too long linei z .zK 230 An empty list of newsarticles follows .r)rr"date_strtime_strr r rhandle_NEWNEWSos"   zNNTPv1Handler.handle_NEWNEWScCs"|dkr|dn |ddS)Nz57-59uK224 Overview information for 57-58 follows 57 Re: ANN: New Plone book with strong Python (and Zope) themes throughout Doug Hellmann Sat, 19 Jun 2010 18:04:08 -0400 <4FD05F05-F98B-44DC-8111-C6009C925F0C@gmail.com> 7103 16 Xref: news.gmane.io gmane.comp.python.authors:57 58 Looking for a few good bloggers Doug Hellmann Thu, 22 Jul 2010 09:14:14 -0400 6683 16 59 Re: Message d'erreur incompréhensible (par moi) Eric Brunel Wed, 15 Sep 2010 18:09:15 +0200 <4c90ec87$0$32425$ba4acef3@reader.news.orange.fr> 1641 27 Xref: saria.nerim.net fr.comp.lang.python:1265 . z1 224 No articles .rrr r r handle_XOVERs zNNTPv1Handler.handle_XOVER)rrcCsL|dur.|jr"|d|qH|dn|js8J|d||_dS)Nz+340 Input article; end with .440 Posting not permitted240 Article received OKrrr posted_body)rrrr r r handle_POSTs     zNNTPv1Handler.handle_POSTcCsT|dur6|jr*|dkr*|d|qP|dn|js@J|d||_dS)N+z%335 Send it; end with .435 Article not wanted235 Article transferred OKr!)r message_idrrr r r handle_IHAVEs     zNNTPv1Handler.handle_IHAVEz From: "Demo User" Subject: I am just a test article Content-Type: text/plain; charset=UTF-8; format=flowed Message-ID: ui This is just a test article. ..Here is a dot-starting line. -- Signed by André.z cCsd|dur|dn6|dkr(|dn"|dkr<|dn|ddS||j|ddS)N"220 3000237 <45223423@example.com>r 220 0 <45223423@example.com>r "220 3000234 <45223423@example.com>r .)rsample_articlerr r rhandle_ARTICLEs     zNNTPv1Handler.handle_ARTICLEcCsd|dur|dn6|dkr(|dn"|dkr<|dn|ddS||j|ddS)N"221 3000237 <45223423@example.com>r 221 0 <45223423@example.com>r "221 3000234 <45223423@example.com>r r,)r sample_headrr r r handle_HEADs     zNNTPv1Handler.handle_HEADcCsd|dur|dn6|dkr(|dn"|dkr<|dn|ddS||j|ddS)N"222 3000237 <45223423@example.com>r 222 0 <45223423@example.com>r "222 3000234 <45223423@example.com>r r,)r sample_bodyrr r r handle_BODYs     zNNTPv1Handler.handle_BODYcCsj|jr|dnT|dkr>|jr,|dqf|dd|_n(|dkrX|dd|_ntd|dS) Nz502 Already Logged Inr~z 482 User Credential Already Sentz381 Password RequiredTpassz281 Login SuccessfulzUnknown cred type {})rrrrr)rZ cred_typerr r rhandle_AUTHINFOs    zNNTPv1Handler.handle_AUTHINFO)N)NN)N)N)N) rr r r rrarrrrrrrrrrrrrrrrrr#r(r2r7r-r.r3r8r:r r r rrs: &  6     rc@s*eZdZdZddZddZd ddZdS) NNTPv2Handlerz"A handler for RFC 3977 (NNTP "v2")cCs0d}|js||dn||ddS)Na 101 Capability list: VERSION 2 3 IMPLEMENTATION INN 2.5.1{} HDR LIST ACTIVE ACTIVE.TIMES DISTRIB.PATS HEADERS NEWSGROUPS OVERVIEW.FMT OVER POST READER .z AUTHINFO USERr:)rrrrfmtr r rhandle_CAPABILITIESs z!NNTPv2Handler.handle_CAPABILITIEScCs tddS)Nz3MODE READER sent despite READER has been advertised)r)r_r r r handle_MODE szNNTPv2Handler.handle_MODENcCs ||Sr)rrr r r handle_OVER#szNNTPv2Handler.handle_OVER)N)rr r r r>r@rAr r r rr; sr;cs eZdZdZfddZZS)CapsAfterLoginNNTPv2Handlerz3A handler that allows CAPABILITIES only after logincs |js|dn tdS)Nz480 You must log in.)rrrr>r8rr rr>*s z/CapsAfterLoginNNTPv2Handler.handle_CAPABILITIES)rr r r r>rr r rrrB'srBc@s(eZdZdZddZddZddZdS) ModeSwitchingNNTPv2Handlerz$A server that starts in transit modecCs d|_dSNF) _switchedr8r r rr4sz#ModeSwitchingNNTPv2Handler.__init__cCs0d}|jr||dn||ddS)Na 101 Capability list: VERSION 2 3 IMPLEMENTATION INN 2.5.1 HDR LIST ACTIVE ACTIVE.TIMES DISTRIB.PATS HEADERS NEWSGROUPS OVERVIEW.FMT OVER POST {}READER .r:zMODE-)rErrr<r r rr>7s z.ModeSwitchingNNTPv2Handler.handle_CAPABILITIEScCs&|js|dksJd|_|ddS)NreaderTz200 Posting allowed)rEr)rZwhatr r rr@Gsz&ModeSwitchingNNTPv2Handler.handle_MODEN)rr r r rr>r@r r r rrC1srCcseZdZfddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5Zd6d7Zd8d9Zd:d;Z dd?Z"d@dAZ#Z$S)BNNTPv1v2TestsMixincstdSr)rrr8rr rrOszNNTPv1v2TestsMixin.setUpcCs||jj|jjdSr)rrrrr8r r rrRszNNTPv1v2TestsMixin.test_welcomecCs<|jdkr|d|jj|jdd|d|jjdS)NrzAUTHINFOtestusertestpw)r{r<r_capsrr5r8r r r test_authinfoUs z NNTPv1v2TestsMixin.test_authinfoc Cs:|j\}}||d||tdddddddS)Nr r 7)rr1rr0rLr r rrM]s zNNTPv1v2TestsMixin.test_datecCs6||jj|j}||d||jjdSr)rrclosedrrrr)rrr r r test_quitbs  zNNTPv1v2TestsMixin.test_quitcCs.|j\}}||d||gddS)Nz100 Legal commands)z8 authinfo user Name|pass Password|generic z datez helpz%Report problems to )rrr)rrrr r rrhs zNNTPv1v2TestsMixin.test_helpcCs~|j\}}|t|d|d}||tdddd|jd\}}|t|d|d }||td d d ddS) Nrccomp.lang.python.announceZ 0000001153Z 0000000993mrrzrz!gmane.comp.python.distutils.develZ 0000014104Z 0000000001)rr rr!r)rrr$gr r rr%rs zNNTPv1v2TestsMixin.test_listcCs|jd\}}}||d||d||d|jd\}}}||d||d||d|tj}|jdWdn1s0Y||jjd|tj}|jWdn1s0Y||jjddS) N-r r r rzr r)rstatrr(r)rqr+r,)rrr\r'r-r r r test_stats      *(zNNTPv1v2TestsMixin.test_statcCs8|j\}}}||d||d||ddS)Nr-z<668929@example.org>)rnextrrrr\r'r r r test_nexts  zNNTPv1v2TestsMixin.test_nextcCs8|j\}}}||d||d||ddS)NrrXr )rrIrr]r r r test_lasts  zNNTPv1v2TestsMixin.test_lastcCs4|jd}||d|jd}||ddS)NrThe Python computer language.comp.lang.pythonxr:)rr;r)rr7r r rr>s   z#NNTPv1v2TestsMixin.test_descriptioncCsn|jd\}}||d||ddi|jd\}}||ddd|jd\}}||idS)Nrz-215 Descriptions in form "group description".r`rz4Announcements about the Python language. (Moderated))rrUra)rr?rr#r r rrAs z$NNTPv1v2TestsMixin.test_descriptionscCs|jd\}}}}}||d|||d||d||d||d|tj}|jdWdn1s0Y|j}||j d|j dS)NrrCiiizcomp.lang.python.develz411 No such group) rr"rrrr(r)rqr+r,)rrrGrHrIr"r-excr r rrJs    *zNNTPv1v2TestsMixin.test_groupcCstdddddd}|jd|\}}d|j}|||||d d gtdddddd}|jd |\}}||d ||gdS) NrMrN rzS230 list of newsarticles (NNTP v{0}) created after Mon Sep 13 08:20:04 2010 followszBzBrz)230 An empty list of newsarticles follows)r0rnewnewsrr{r)rr3rZidsZexpectedr r r test_newnewss  zNNTPv1v2TestsMixin.test_newnewscCsZ|t|d||ddd||dd||dd||d d dS) Nrfr_ru-- Signed by André.rrks.Here is a dot-starting line.sThis is just a test article.)rr!decoderrr r r_check_article_bodys z&NNTPv1v2TestsMixin._check_article_bodycCs4|t|d||dd||dddS)Nrfrs&From: "Demo User" s7Message-ID: )rr!rlr r r_check_article_headsz&NNTPv1v2TestsMixin._check_article_headcCsH|t|d||dd||dd||dddS)NrNrfrjrk)rr!rormrlr r r_check_article_datasz&NNTPv1v2TestsMixin._check_article_datacCs$|j\}}||d|\}}}||d||d|||jd\}}||d|\}}}||d||d|||jd\}}||d|\}}}||d||d|||tj}|jdWdn1s0Y||jjd dS) Nr)r[r rXr+r*rr ) rrhrrpr(r)rqr+r,rrinfor\r'rr-r r r test_articles*               ,zNNTPv1v2TestsMixin.test_articlecCst}|jj|d\}}||d|\}}}||d||d||g|}||dt||| dt|dS)Nrr)r[r KFrom: "Demo User" Subject: I am just a test article UThis is just a test article. .Here is a dot-starting line. -- Signed by André. ) rrrrhrgetvaluerrasciirrrrrsr\r'rrr r rtest_article_files$     z$NNTPv1v2TestsMixin.test_article_filecCs$|j\}}||d|\}}}||d||d|||jd\}}||d|\}}}||d||d|||jd\}}||d|\}}}||d||d|||tj}|jdWdn1s0Y||jjd dS) Nr/r[r rXr1r0rrqr ) rrprror(r)rqr+r,rrr r r test_heads*               ,zNNTPv1v2TestsMixin.test_headcCst}|jj|d\}}||d|\}}}||d||d||g|}||dt|| | dt|dS)Nrur/r[r rvrw) rrrrprrxrrryrrrzr r rtest_head_file-s$     z!NNTPv1v2TestsMixin.test_head_filecCs$|j\}}||d|\}}}||d||d|||jd\}}||d|\}}}||d||d|||jd\}}||d|\}}}||d||d|||tj}|jdWdn1s0Y||jjd dS) Nr4r[r rXr6r5rrqr ) rrrrrmr(r)rqr+r,rrr r r test_bodyAs*               ,zNNTPv1v2TestsMixin.test_bodycCst}|jj|d\}}||d|\}}}||d||d||g|}||dt|| | dt|dS)Nrur4r[r rvrw) rrrrrrrxrrryrrrzr r rtest_body_file\s$     z!NNTPv1v2TestsMixin.test_body_filec Cs||d||t|d|d\}}||d||ddddd d d d d |d\}}||dd|d\}}||dddS)Nz224 rnr9zEDoug Hellmann zGRe: ANN: New Plone book with strong Python (and Zope) themes throughoutzSat, 19 Jun 2010 18:04:08 -0400z0<4FD05F05-F98B-44DC-8111-C6009C925F0C@gmail.com>zZ7103Z16z*news.gmane.io gmane.comp.python.authors:57)rRrPr1rQrOrSrNxrefrcrrzrP0Re: Message d'erreur incompréhensible (par moi))rrrr!)rr overviewsr\r`r r rcheck_over_xover_respps(     z(NNTPv1v2TestsMixin.check_over_xover_respcCs"|jdd\}}|||dS)Nr;)rrYrrrrr r rr]szNNTPv1v2TestsMixin.test_xovercCs |jd\}}|||dS)N)rr)rr`rrr r rrbszNNTPv1v2TestsMixin.test_oversFrom: "Demo User" Subject: I am just a test article Content-Type: text/plain; charset=UTF-8; format=flowed Message-ID: This is just a test article. .Here is a dot-starting line. -- Signed by André. cCsl|jj}|t|d||dd||dd||dd||dd ||d d dS) Nr^r_rfrs-- Signed by André. ri rjs ..Here is a dot-starting line. rs(From: "Demo User" )rr"rr!rlr r r_check_posted_bodysz%NNTPv1v2TestsMixin._check_posted_bodycGsd|j}|||f}d|j_||}||jdd}|||f}d|j_||}||S)Nr ) sample_postrr"rreplace)rfunc file_factoryrpostZ func_argsrr r r_check_post_ihave_subsz(NNTPv1v2TestsMixin._check_post_ihave_subcGs|j|g|Rdti}||||j|g|Rdti}||||j|g|Rdtji}|||dd}|j|g|Rd|i}|||dd}|j|g|Rd|i}|||dS)NrcSst|jddS)NTkeependsiterrrr r r iterlinessz6NNTPv1v2TestsMixin.check_post_ihave..iterlinescSst|jddS)NFrrrr r rrs)rrgr bytearrayrr)rrZ success_resprrrr r rcheck_post_ihaves    z#NNTPv1v2TestsMixin.check_post_ihavecCsf||jjdd|j_|tj}|j|jWdn1sH0Y| |j j ddS)Nr Fr) rrrrrr(r)rqrrr+r,rr-r r r test_posts, zNNTPv1v2TestsMixin.test_postcCsb||jjdd|tj }|jd|jWdn1sD0Y||jj ddS)Nr&r$zr%) rrZihaver(r)rqrrr+r,rr r r test_ihaves . zNNTPv1v2TestsMixin.test_ihavecCs.tdddddd}|tj|jjd|dS)NrMrcrNrr)r0r(r) NNTPDataErrorrrg)rr3r r rtest_too_long_liness z&NNTPv1v2TestsMixin.test_too_long_lines)%rr r rrrLrMrSrr%rZr^r_r>rArJrhrmrorprtr{r|r}r~rrr]rbrrrrrrrrr r rrrGMsD     rGc@s eZdZdZdZeZddZdS) NNTPv1Testsz*Tests an NNTP v1 server (no capabilities).rccCs:|j}||i||jjd||jjddS)Nrcrr|rr{Znntp_implementationrrxr r r test_capss  zNNTPv1Tests.test_capsN)rr r r r{rrrr r r rrsrc@s eZdZdZdZeZddZdS) NNTPv2Testsz,Tests an NNTP v2 server (with capabilities).rzc CsZ|j}||ddgddgdgggdgggd||jjd||jjd dS) N23ZINNz2.5.1ZUSER)rz ACTIVE.TIMESz DISTRIB.PATSZHEADERSrrv)VERSIONZIMPLEMENTATIONrHZHDRruZOVERZPOSTREADERrnz INN 2.5.1rrr r rrs  zNNTPv2Tests.test_capsN)rr r r r{r;rrr r r rrsrc@s eZdZdZdZeZddZdS)CapsAfterLoginNNTPv2TestszCTests a probably NNTP v2 server with capabilities only after login.rzcCs2||jji|jdd|d|jjdS)NrIrJr)rrrKrr<r8r r rtest_caps_only_after_login sz4CapsAfterLoginNNTPv2Tests.test_caps_only_after_loginN)rr r r r{rBrrr r r rrsrc@s eZdZdZdZeZddZdS)SendReaderNNTPv2TestszoSame tests as for v2 but we tell NTTP to send MODE READER to a server that isn't in READER mode by default.rzcCs|d|jjdS)Nr)r<rrKr8r r r(test_we_are_in_reader_mode_after_connectsz>SendReaderNNTPv2Tests.test_we_are_in_reader_mode_after_connectN)rr r r r{rCrrr r r rrsrc@sPeZdZddZddZddZddZd d Zd d Ze e d ddZ dS) MiscTestscsVfdd}|dd|dd|dd|dd|dd |d d |d d dS) Ncst||dSr)rr) decode_header)arr8r rgivessz+MiscTests.test_decode_header..givesr:za plain headerz with extra spaces z%=?ISO-8859-15?Q?D=E9buter_en_Python?=uDébuter en Pythonz=?utf-8?q?Re=3A_=5Bsqlite=5D_probl=C3=A8me_avec_ORDER_BY_sur_des_cha?= =?utf-8?q?=C3=AEnes_de_caract=C3=A8res_accentu=C3=A9es?=uPRe: [sqlite] problème avec ORDER BY sur des chaînes de caractères accentuéesz,Re: =?UTF-8?B?cHJvYmzDqG1lIGRlIG1hdHJpY2U=?=uRe: problème de matricerr rrr r8rtest_decode_headers     zMiscTests.test_decode_headercCsgd}|t|gdgd}|t|gdgd}|t|gdgd}|t|gdgd}|t|gdgd}|t|gd dS) N)Subject:From:Date: Message-ID: References:rSrN)rPrRr1rQrOrSrN)rrrrrBytes:Lines:)zsubject:zFROM:zDaTe:z message-ID:rzBYTES:r) rrrrrrSrN Xref:fullzDistribution:full) rPrRr1rQrOrSrNrZ distribution) rrrrrrrz Xref:FULLzDistribution:FULL)rrrrrrrrrPrRr1rQrOrSrNr)rr)Z_parse_overview_fmtrlr r rtest_parse_overview_fmt.s0      z!MiscTests.test_parse_overview_fmtc Cstjdg}dg}t||}|\\}}||d||dddddd d d d d g}t||}|\\}}||dddg}t||}|\\}}||dd||dddS)Nrz3000234 I am just a test article "Demo User" 6 Oct 1998 04:38:40 -0500 <45223423@example.com> <45454@example.net> 1234 17 Xref: news.example.com misc.test:3000363rXzI am just a test articlez "Demo User" z6 Oct 1998 04:38:40 -0500r z<45454@example.net>Z1234Z17z"news.example.com misc.test:3000363rz3000234 I am just a test article "Demo User" 6 Oct 1998 04:38:40 -0500 <45223423@example.com> <45454@example.net> 1234 17 z3000234 I am just a test article "Demo User" 6 Oct 1998 04:38:40 -0500 <45223423@example.com> 1234 17 Xref: rO r:)r)Z_DEFAULT_OVERVIEW_FMTZ_parse_overviewr)rr=rZoverviewr\fieldsr r rtest_parse_overviewVs6         zMiscTests.test_parse_overviewc shfdd}|dddddddd |d d dddddd |d d dddddd |d d dddddd dS)Ncst||tj|dSr)rr)Z_parse_datetimer0)rrcr8r rrsz,MiscTests.test_parse_datetime..givesZ19990623135624rTrc819990623135624990623Z090623ir rr r8rtest_parse_datetimes  zMiscTests.test_parse_datetimec sfdd}|ddddddd d |d dddddd d |d dddddddfdd}|dddd d|d ddd d|d dddddS)Nc sFt||||||}t|||ft|d||fdSrDr0rr)_unparse_datetime yMdhrVsrrr3r8r rrs z.MiscTests.test_unparse_datetime..givesrrTrrcrrrrZ20000623rMrBrcrzrnZ20100605010203cs@t|||}t|||ft|d||fdSrDr0r1rr)rrrrrrr3r8r rrs 000000r rr r8rtest_unparse_datetimes  zMiscTests.test_unparse_datetimec sfdd}|ddddddd d |d dddddd d |d dddddddfdd}|dddd d|d ddd d|d dddddS)Nc s0t||||||}t|d||fdSrrrr8r rrsz5MiscTests.test_unparse_datetime_legacy..givesrrTrrcrrrrrZ000623rMrBrcrzrnZ100605rcs*t|||}t|d||fdSrrrr8r rrsrr rr r8rtest_unparse_datetime_legacys  z&MiscTests.test_unparse_datetime_legacyrcCs|ttddS)Nr)rrr)r8r r rtest_ssl_supportszMiscTests.test_ssl_supportN) rr r rrrrrrr skipUnlesssslrr r r rrs(.  rc@seZdZdZddZdS)PublicAPITestsz>Ensures that the correct values are exposed in the public API.cCsD|ttdgd}tdur*|d|ttjt|dS)N__all__)rrNNTPReplyErrorrqr*NNTPProtocolErrorrrr)rrr)rrrsetr)rZ target_apir r rtest_module_all_attributes  z(PublicAPITests.test_module_all_attributeN)rr r r rr r r rrsrc@sHeZdZdZejZdddZddZddZ d d Z d d Z d dZ dS)MockSocketTestszaTests involving a mock socket object Used where the _NNTPServerIO file object is not enough.Nc sGfddd}Gfddddgtd|L||| |jd||dWdn1sn0YWdn1s0Y|D]}||jqdS) NcseZdZfddZdS)zNMockSocketTests.check_constructor_error_conditions..mock_socket_modulecsSrr )addressr MockSocketr rcreate_connectionsz`MockSocketTests.check_constructor_error_conditions..mock_socket_module.create_connectionN)rr r rr rr rmock_socket_modulesrcs&eZdZfddZfddZdS)zFMockSocketTests.check_constructor_error_conditions..MockSocketcsddSrr r8) socket_closedr rrszLMockSocketTests.check_constructor_error_conditions..MockSocket.closecs }t|\}}||Sr)rr)socketmoderr?r)filesrr rmakefiles  zOMockSocketTests.check_constructor_error_conditions..MockSocket.makefileN)rr r rrr )rrrr rrs rFznntplib.socketdummy)r~r)rZassertRaisesRegex nntp_classrrR)rrZexpected_error_typeZexpected_error_msgrrrrr )rrrrr"check_constructor_error_conditionss   L z2MockSocketTests.check_constructor_error_conditionscCs&Gdddt}||tj|jdS)Nc@seZdZdZdS)z1MockSocketTests.test_bad_welcome..Handlerz Bad WelcomeNrr r rr r r rHandlersr)rrr)rrrrr r rtest_bad_welcomes z MockSocketTests.test_bad_welcomecCs&Gdddt}||tj|jdS)Nc@seZdZdZdS)zEMockSocketTests.test_service_temporarily_unavailable..Handlerz#400 Service temporarily unavailableNrr r r rrsr)rrr)rqrrr r r$test_service_temporarily_unavailables z4MockSocketTests.test_service_temporarily_unavailablecCs&Gdddt}||tj|jdS)Nc@seZdZdZdS)zEMockSocketTests.test_service_permanently_unavailable..Handlerz#502 Service permanently unavailableNrr r r rrsr)rrr)r*rrr r r$test_service_permanently_unavailables z4MockSocketTests.test_service_permanently_unavailablecs,Gfdddt}d||tjdS)NcseZdZfddZdS)z6MockSocketTests.test_bad_capabilities..Handlercs|dSrrr8Zcapabilities_responser rr>szJMockSocketTests.test_bad_capabilities..Handler.handle_CAPABILITIESN)rr r r>r rr rrsrz201 bad capability)rrr)rrr rrtest_bad_capabilitiess z%MockSocketTests.test_bad_capabilitiescs8d}d}Gfdddt}d||tj||dS)Nzt@e.comZpythoncseZdZfddZdS)z3MockSocketTests.test_login_aborted..Handlercs|dSrr)rrZauthinfo_responser rr:szCMockSocketTests.test_login_aborted..Handler.handle_AUTHINFON)rr r r:r rr rrsrz503 Mechanism not recognized)rrr)r*)rrrrr rrtest_login_aborted sz"MockSocketTests.test_login_aborted)NN) rr r r r)rrrrrrrrr r r rrs  rc@seZdZdZddZdS)bypass_contextz'Bypass encryption and actual SSL modulecKs|Srr )sockrr r r wrap_socketszbypass_context.wrap_socketN)rr r r rr r r rrsrc@seZdZeddZdS) MockSslTestscOstj|dti|S)NZ ssl_context)r)rr)rkwr r rrszMockSslTests.nntp_classN)rr r staticmethodrr r r rrsrc@s0eZdZddZddZeedddZdS) LocalServerTestscCstt}t|}|tj|j|fd|_|j| |jj t tj |dd |_| |jjddddS)N)targetrF)r)rrZ bind_portlisten threadingThread run_serverZ backgroundraZ addCleanuprrZHOST __enter__nntp__exit__)rrportr r rr%s  zLocalServerTests.setUpcCs||\}}Wdn1s&0Yt}||||d}|d|}|dkrz|dq^|dkr||dt }| t |j |dd}||||d}q^|d kr|d qq^t d |q^Wdn1s 0YdS) Nrbs200 Server ready sCAPABILITIES s.101 Capability list: VERSION 2 STARTTLS . s STARTTLS s382 Begin TLS negotiation now T)Z server_sidesQUIT s 205 Bye! zUnexpected command {!r})accept contextlib ExitStack enter_contextrsendallrrrZ SSLContextZload_cert_chaincertfilerrr)rrclientr?cleanuprFrcontextr r rr1s2*       zLocalServerTests.run_serverrcCs`|jj}|jj}|j|||jj|||jj||jjtj|t |jjdSr) rrrZstarttlsZassertNotEqualr2rZ SSLSocketr(r)rrrr r rrQs zLocalServerTests.test_starttlsN) rr r rrrrrrr r r rr$s  r__main__)=rrr0rrrrr)Zos.pathosrrrrZ test.supportrrrZ unittest.mockrr ImportErrorpathrdirname__file__r rrrrrrZ SSLEOFErrorZTestCaserrrrrrrrrrr;rBrCrGrrrrrrrrrrrmainr r r rs~          , G    # N <