ÿØÿà 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ÿÙ 뛰h] ddlZddlmZddlmZddlZddlZddlmZddlm Z ddl m Z ddl m Z mZddlmZmZdd lmZdd lmZmZmZmZmZmZmZdd lmZdd lmZdd l m!Z!ddl"m#Z#ddlm$Z$ddl%Z%ddl&Z&dZ' ddl(m)Z)n #e*$rYnwxYwedZ+Gddej,Z-e-Z.Gdde/Z0dZ1e1d\Z2Z3e1d\Z4Z5e1d\Z6Z7e1d\Z8Z9e1d\Z:Z;e1d\ZZ?e1d\Z@ZAe1d\ZBZCe1d \ZDZEe1d!\ZFZGe1d"\ZHZIe1d#\ZJZKe$d$d%\ZLZMd&\ZNZOd'\ZPZQGd(d)eRZSGd*d+eRZTGd,d-eTZUGd.d/eTZVGd0d1eVZWGd2d3eVZXGd4d5eVZYGd6d7eVZZGd8d9eVZ[Gd:d;eVZ\Gd<d=e\Z]Gd>d?e[Z^Gd@dAe[Z_GdBdCe[Z`GdDdEeZadFZbdGZcdHZddIZedJZfdKZgdLZhereaZinejZidZkdMZledNZmedOedPfZndQZoejdRdMdMZpepqe.SZre!epsZtejjuZudTZvdUevzdMz ZwdVZxdWZydXZzdYZ{dZZ|d[Z}ejj~qe.SZejjqe.SZd\Zd]Zd^Zd_Zd`ZdaZdbZdcZddZdeZdfZdgZerdhZndiZdjZdkZedlZedmZdnZe2dUZedmZdoZdpZGdqdrZer eje_edsZedtZeduZedvZedwZedxZedyZedzZed{Zed|Zed}Zed~ZedZedZedZedZedZedZedZedZedZedZedZedyZedZeduZedZedzZedZed{Zee2dzZee2dzZee2dzZee2dzZeduZedZeduZed{ZedZedzZedZedZedZedZedZedZedZedtZedZedxZedyZeeeeedeeddgdzzZGdde/ZGdde/ZdddddZiddddddddddddddddddddddddddddddddddddddddddddddddɜ ZdʄZd˄Zd̄Zd̈́Zd΄ZdτZdS)N) timedelta)warn)pack)md5)Decimal)deque defaultdict)countislice)map)bPY2 integer_typesnext text_typeu binary_typeUUID)deepcopy)timegm) LooseVersion)StructzMathieu Fenniak)loadsc eZdZdZdZdZdS)UTCctSNZEROselfdts -/usr/lib/fm-agent/dependencies/pg8000/core.py utcoffsetz UTC.utcoffset> cdS)Nrr!s r$tznamez UTC.tznameAsur'ctSrrr!s r$dstzUTC.dstDr&r'N)__name__ __module__ __qualname__r%r*r,r)r'r$rr<sAr'rceZdZdZddZdZdZdZedeZ edeZ ed eZ d Z d Z d Zd S)Intervala An Interval represents a measurement of time. In PostgreSQL, an interval is defined in the measure of months, days, and microseconds; as such, the pg8000 interval type represents the same information. Note that values of the :attr:`microseconds`, :attr:`days` and :attr:`months` properties are independently measured and cannot be converted to each other. A month may be 28, 29, 30, or 31 days, and a day may occasionally be lengthened slightly by a leap second. .. attribute:: microseconds Measure of microseconds in the interval. The microseconds value is constrained to fit into a signed 64-bit integer. Any attempt to set a value too large or too small will result in an OverflowError being raised. .. attribute:: days Measure of days in the interval. The days value is constrained to fit into a signed 32-bit integer. Any attempt to set a value too large or too small will result in an OverflowError being raised. .. attribute:: months Measure of months in the interval. The months value is constrained to fit into a signed 32-bit integer. Any attempt to set a value too large or too small will result in an OverflowError being raised. rc0||_||_||_dSr) microsecondsdaysmonths)r"r3r4r5s r$__init__zInterval.__init__ms(  r'ct|tstdt|cxkr tksnt d||_dS)Nz$microseconds must be an integer typez6microseconds must be representable as a 64-bit integer) isinstancer TypeErrormin_int8max_int8 OverflowError _microsecondsr"values r$_setMicrosecondszInterval._setMicrosecondsrsj%// 'BCC CU----X----HJJ J"'D   r'ct|tstdt|cxkr tksnt d||_dS)Nzdays must be an integer typez.days must be representable as a 32-bit integer)r8rr9min_int4max_int4r<_daysr>s r$_setDayszInterval._setDays{sg%// :;; ;U----X----@BB BDJJJr'ct|tstdt|cxkr tksnt d||_dS)Nzmonths must be an integer typez0months must be representable as a 32-bit integer)r8rr9rBrCr<_monthsr>s r$ _setMonthszInterval._setMonthssg%// !<== =U----X----BDD D!DLLLr'c|jSr)r=r"s r$zInterval.s );r'c|jSr)rDrJs r$rKzInterval.sr'c|jSr)rGrJs r$rKzInterval.s4<r'c8d|jd|jd|jdS)Nz )r5r4r3rJs r$__repr__zInterval.__repr__s* KKKD$5$5$57 7r'c|duoDt|to/|j|jko|j|jko|j|jkSr)r8r1r5r4r3r"others r$__eq__zInterval.__eq__sUD 4Zx%@%@4 K5< '4,0I,C4  !3 3 4r'c.|| Sr)rSrQs r$__neq__zInterval.__neq__s;;u%%%%r'N)rrr)r-r.r/__doc__r6r@rErHpropertyr3r4r5rOrSrUr)r'r$r1r1Js  D '''!!!8;;=MNNL 8++X 6 6D X// < `_. Nr-r.r/rVr)r'r$rlrl  Dr'rlceZdZdZdS)ErrorzGeneric exception that is the base exception of all other error exceptions. This exception is part of the `DBAPI 2.0 specification `_. Nrmr)r'r$rprprnr'rpceZdZdZdS)InterfaceErroraiGeneric exception raised for errors that are related to the database interface rather than the database itself. For example, if the interface attempts to use an SSL connection but the server refuses, an InterfaceError will be raised. This exception is part of the `DBAPI 2.0 specification `_. Nrmr)r'r$rrrr Dr'rrceZdZdZdS) DatabaseErrorzGeneric exception raised for errors that are related to the database. This exception is currently never raised by pg8000. This exception is part of the `DBAPI 2.0 specification `_. Nrmr)r'r$rururnr'ruceZdZdZdS) DataErrorzGeneric exception raised for errors that are due to problems with the processed data. This exception is not currently raised by pg8000. This exception is part of the `DBAPI 2.0 specification `_. Nrmr)r'r$rwrwrnr'rwceZdZdZdS)OperationalErrora= Generic exception raised for errors that are related to the database's operation and not necessarily under the control of the programmer. This exception is currently never raised by pg8000. This exception is part of the `DBAPI 2.0 specification `_. Nrmr)r'r$ryryrsr'ryceZdZdZdS)IntegrityErrora Generic exception raised when the relational integrity of the database is affected. This exception is not currently raised by pg8000. This exception is part of the `DBAPI 2.0 specification `_. Nrmr)r'r$r{r{ Dr'r{ceZdZdZdS) InternalErroraNGeneric exception raised when the database encounters an internal error. This is currently only raised when unexpected state occurs in the pg8000 interface itself, and is typically the result of a interface bug. This exception is part of the `DBAPI 2.0 specification `_. Nrmr)r'r$r~r~r|r'r~ceZdZdZdS)ProgrammingErrora&Generic exception raised for programming errors. For example, this exception is raised if more parameter fields are in a query string than there are available parameters. This exception is part of the `DBAPI 2.0 specification `_. Nrmr)r'r$rrr|r'rceZdZdZdS)NotSupportedErrorzGeneric exception raised in case a method or database API was used which is not supported by the database. This exception is part of the `DBAPI 2.0 specification `_. Nrmr)r'r$rrrnr'rceZdZdZdS)ArrayContentNotSupportedErrorz Raised when attempting to transmit an array where the base type is not supported for binary data transfer by the interface. Nrmr)r'r$rr$ Dr'rceZdZdZdS)ArrayContentNotHomogenousErrorzl Raised when attempting to transmit an array that doesn't contain only a single type of object. Nrmr)r'r$rr,rr'rceZdZdZdS)ArrayContentEmptyErrorzRaised when attempting to transmit an empty array. The type oid of an empty array cannot be determined, and so sending them is not permitted. Nrmr)r'r$rr4s Dr'rceZdZdZdS)!ArrayDimensionsNotConsistentErrorzf Raised when attempting to transmit an array that has inconsistent multi-dimension sizes. Nrmr)r'r$rr;rr'rceZdZdZdS)ByteazBytea is a str-derived class that is mapped to a PostgreSQL byte array. This class is only used in Python 2, the built-in ``bytes`` type is used in Python 3. Nrmr)r'r$rrCrr'rc.tj|||S)zConstuct an object holding a date value. This function is part of the `DBAPI 2.0 specification `_. :rtype: :class:`datetime.date` )datetimedate)yearmonthdays r$DaterKs =uc * **r'c.tj|||S)zConstruct an object holding a time value. This function is part of the `DBAPI 2.0 specification `_. :rtype: :class:`datetime.time` )rtime)hourminuteseconds r$TimerVs =vv . ..r'c4tj||||||S)zConstruct an object holding a timestamp value. This function is part of the `DBAPI 2.0 specification `_. :rtype: :class:`datetime.datetime` )r)rrrrrrs r$ Timestampras  T5#tVV D DDr'cHttj|ddS)aConstruct an object holding a date value from the given ticks value (number of seconds since the epoch). This function is part of the `DBAPI 2.0 specification `_. :rtype: :class:`datetime.date` N)rr localtimetickss r$ DateFromTicksrls" &&rr* ++r'cHttj|ddS)aConstruct an objet holding a time value from the given ticks value (number of seconds since the epoch). This function is part of the `DBAPI 2.0 specification `_. :rtype: :class:`datetime.time` r)rrrrs r$ TimeFromTicksrxs" &&qs+ ,,r'cHttj|ddS)a Construct an object holding a timestamp value from the given ticks value (number of seconds since the epoch). This function is part of the `DBAPI 2.0 specification `_. :rtype: :class:`datetime.datetime` Nr)rrrrs r$TimestampFromTicksrs" dnU++BQB/ 00r'c2trt|S|S)zConstruct an object holding binary data. This function is part of the `DBAPI 2.0 specification `_. :rtype: :class:`pg8000.types.Bytea` for Python 2, otherwise :class:`bytes` )rr)r?s r$Binaryrs U|| r' ALTERCREATEc R d}d}d}d}d}d}d}gg} tdtd} |} d} t|D]\} }| dzt|kr || dz}nd}| |krn|dkr#| || d kr|} nf|} nb|d kr| ||} nC|d kr*|d kr$| t | n|d kr|dkr| dn|dkr|dkr|} dn|dkr%|dkr|dkr|} dn|dvrh|dkrbd}|rd}| |ny|dkrd}no|dkr&|} | t | nCt d| |n| |kr|dkr)| ||rd}n|dkrd}n|} n|dvr@|dkr:|rd}| |n|dkrd}nt d|zdz| |n| |krz|d kr|} | |nh|dvr@|dkr:|rd}| |nC|dkrd}n9t d|zdz| |n | |kr|dkr| dkr| ||} n|dvr@|dkr:|rd}| |n|dkrd}nt d|zdz| |n| |kr|dkrdxx|z cc<||s|d kr|} ddd}| dt|dzzd=n#t$r5| dttzYnwxYwn|dkr| d!kr|dkr|} ddd}| dt|dzzd=n`#t$r5| dttzYn"wxYw|d"vrndxx|z cc<n|dkr|} |} |d#vrd$}nfd%}d | |fS)&NrrrFc&dt|zS)N$)str)xs r$rKz$convert_paramstyle..scCFFlr''E"qmark?numeric:rnamedpyformat%()formatrrTsz*Only %s and %% are supported in the query.)rrz'%z:' not supported in a quoted string within the query string\z;' not supported in a quoted string within the query string._)z())rrrc|Srr))valss r$ make_argsz%convert_paramstyle..make_argsHsKr'c<tfdDS)Nc3(K|] }|V dSrr)).0prs r$ z8convert_paramstyle..make_args..Ls'77Qa777777r')tuple)r placeholderss`r$rz%convert_paramstyle..make_argsKs'7777,77777 7r') r r enumeratelenappendrrrisalnumindexr ValueErrorjoin)stylequeryOUTSIDE INSIDE_SQ INSIDE_QI INSIDE_ES INSIDE_PNin_quote_escapein_param_escape output_query param_idxstateprev_cr^cnext_cpidxrrs @r$convert_paramstylersGIIIIOOLL**E!HH55I E F%  FF1 q53u::  1q5\FFF G  Cxx##A&&&S==%EE%EEc##A&&&!'!!a3hh##DOO4444)##S##C(((('!!a3hh!##B''''*$$cfmm!##B''''000Q#XX " J&+O ''****}}*.3 )$++DOO<<<<,HJJJ##A&&&& i  Cxx##A&&&"(&+OO}}*. '000Q#XX" >&+O ''****}}*., 6M-==>>>##A&&&& i  Cxx##A&&&&000Q#XX" >&+O ''****}}*., 6M-==>>>##A&&&& i  CxxFdNN##A&&&000Q#XX" ?&+O ''****}}*., 6M->>???##A&&&& i  R   A%   >&..*:*:>v}}#EJ+11,r2BArJJ$++C#dQh--,?@@@(,,%JJJ$++C#c,6G6G2H2H,HIIIIIJ*$$S==Q#XX#EJ+11,r2BArJJ$++C#dQh--,?@@@(,,%JJJ$++C#c,6G6G2H2H,HIIIIIJ$YY $$$)$$$$("" ...     8 8 8 8 8 77< ) ++s&6APP?AR!!BA>6B<A>>BcXttt||dzSNr)utcfromtimestamp EPOCH_SECONDSd_unpackrrrs r$timestamp_recv_floatris$ MHT6,B,B1,EE F FFr'c|tjjkrt}n^|tjjkrt}nAt t |tz dz|j z}t|SN.A) rrrrrintr timetupler microsecondq_pack)vrs r$timestamp_send_integerr nsuH  !!!& h# # #, AKKMM " "] 2c 9;;=>]K &>>r'ctt||jdz ztz Sr)d_packrrrrrs r$timestamp_send_floatr zs1 &''!-#*== M N NNr'cxt|tdSNr)r  astimezoneutcreplacer s r$timestamptz_send_integerr~s/ "!,,s"3"3";";4";"H"H I IIr'cxt|tdSr)r rrrr s r$timestamptz_send_floatrs/  S 1 1 9 9 9 F F G GGr'ct||d} tt|zS#t$r5}|tkr t cYd}~S|t kr tcYd}~S|d}~wwxYwr)rEPOCH_TZrr<rDATETIME_MAX_TZrDATETIME_MIN_TZrs r$timestamptz_recv_integerrs dF # #A &F)88888  * * *" " " " " " " 2 2 2" " " " " " "G s,0 A/A* A/A*"A/(A**A/cVt|||tSr)rrrrs r$timestamptz_recv_floatrs% ff 5 5 = =S = I IIr'c|j} |t|jdzz }n#t$rYnwxYw |j}n#t$rd}YnwxYwt ||j|S)Nrr)r3rsecondsAttributeErrorr5qii_packr4)rr3r5s r$interval_send_integerr!s>L AIO,,,        L!&& 1 11s$ 11= A  A c|jdz dz } ||jz }n#t$rYnwxYw |j}n#t$rd}YnwxYwt ||j|S)Ng@@r)r3rrr5dii_packr4)rrr5s r$interval_send_floatr$snv%.G 19        GQVV , ,,s  ''3 AAct||\}}}|dkr)t|d\}}tj|||St |||S)Nrr) qii_unpackdivmodrrr1)rrrr3r4r5rrs r$interval_recv_integerr(s[!+D&!9!9L$ {{ s33!$888 dF333r'ct||\}}}|dkr)t|d\}}tj|||St t |dzdz||S)Nrr) dii_unpackr'rrr1r)rrrrr4r5secsr3s r$interval_recv_floatr-sm&tV44GT6 {{#GS11l!$l;;;GdNT122D&AAAr'c.t||dSr)rrs r$ int8_recvr/ D& ! !! $$r'c.t||dSr)h_unpackrs r$ int2_recvr3r0r'c.t||dSr)i_unpackrs r$ int4_recvr6r0r'c.t||dSr)f_unpackrs r$ float4_recvr9r0r'c.t||dSr)rrs r$ float8_recvr;r0r'c|Srr)r s r$ bytea_sendr=s Hr'c6t||||zSr)rrs r$ bytea_recvr?sT&&01222r'c||||zSrr)rs r$r?r?sF6F?*++r'c|jSrbytesr s r$ uuid_sendrDs 7Nr'c8t||||zS)NrBrrs r$ uuid_recvrFs! d6&-/0 1 1 11r'c"|rtntSr)TRUEFALSEr s r$ bool_sendrLs 44%r'ctSr)NULLr s r$ null_sendrOs Kr'c6t||||zSr)rrs r$int_inrQ s tFFVO+, - --r'ceZdZdZdZedZedZedZdZ ddZ d Z d Z dd Z d Zd ZdZdZddZdZdS)Cursora<A cursor object is returned by the :meth:`~Connection.cursor` method of a connection. It has the following attributes and methods: .. attribute:: arraysize This read/write attribute specifies the number of rows to fetch at a time with :meth:`fetchmany`. It defaults to 1. .. attribute:: connection This read-only attribute contains a reference to the connection object (an instance of :class:`Connection`) on which the cursor was created. This attribute is part of a DBAPI 2.0 extension. Accessing this attribute will generate the following warning: ``DB-API extension cursor.connection used``. .. attribute:: rowcount This read-only attribute contains the number of rows that the last ``execute()`` or ``executemany()`` method produced (for query statements like ``SELECT``) or affected (for modification statements like ``UPDATE``). The value is -1 if: - No ``execute()`` or ``executemany()`` method has been performed yet on the cursor. - There was no rowcount associated with the last ``execute()``. - At least one of the statements executed as part of an ``executemany()`` had no row count associated with it. - Using a ``SELECT`` query statement on PostgreSQL server older than version 9. - Using a ``COPY`` query statement on PostgreSQL server version 8.1 or older. This attribute is part of the `DBAPI 2.0 specification `_. .. attribute:: description This read-only attribute is a sequence of 7-item sequences. Each value contains information describing one result column. The 7 items returned for each column are (name, type_code, display_size, internal_size, precision, scale, null_ok). Only the first two values are provided by the current implementation. This attribute is part of the `DBAPI 2.0 specification `_. c||_d|_d|_d|_t |_d|_d|_dS)NrrF)_c arraysizeps _row_countr _cached_rows portal_nameportal_suspended)r" connections r$r6zCursor.__init__Ds@!GG %r'c2tdd|jS)Nz'DB-API extension cursor.connection usedr stacklevel)rrUrJs r$r\zCursor.connectionMs 61EEEEwr'c|jSr)rXrJs r$rowcountzCursor.rowcountRs r'c*|Sr)_getDescriptionrJs r$rKzCursor.Vs(<(<(>(>r'c |jdS|jd}t|dkrdSg}|D]*}||d|ddddddf+|S)Nrow_descrnametype_oid)rWrr)r"recolumnscols r$rczCursor._getDescriptionXs 7?47:& x==A  4 N NC NNVc*otT4tL N N N Nr'Nc |jj5||_|jjs(|jjs|j|dd|j|||ddddS#1swxYwYdS#t $r8}|jtd|jjtd|d}~wwxYw)aeExecutes a database operation. Parameters may be provided as a sequence, or as a mapping, depending upon the value of :data:`pg8000.paramstyle`. This method is part of the `DBAPI 2.0 specification `_. :param operation: The SQL statement to execute. :param args: If :data:`paramstyle` is ``qmark``, ``numeric``, or ``format``, this argument should be an array of parameters to bind into the statement. If :data:`paramstyle` is ``named``, the argument should be a dict mapping of parameters. If the :data:`paramstyle` is ``pyformat``, the argument value may be either an array or a mapping. :param stream: This is a pg8000 extension for use with the PostgreSQL `COPY `_ command. For a COPY FROM the parameter must be a readable file-like object, and for COPY TO it must be writable. .. versionadded:: 1.9.11 begin transactionNz Cursor closedconnection is closed) rU_lockstreamin_transaction autocommitexecuterrr_sock)r" operationargsrnrs r$rqzCursor.executeis6  7 7$ w-Edg6HEGOOD*=tDDDi666  7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7    w$_555&$%;<<<  s; BAA3& B3A77B:A7;B C 3B==Ccg}|D]2}|||||j3d|vrdnt||_dS)a1Prepare a database operation, and then execute it against all parameter sequences or mappings provided. This method is part of the `DBAPI 2.0 specification `_. :param operation: The SQL statement to execute :param parameter_sets: A sequence of parameters to execute the statement with. The values in the sequence should be sequences or mappings of parameters, the same as the args argument of the :meth:`execute` method. rN)rqrrXsum)r"rs param_sets rowcounts parameterss r$ executemanyzCursor.executemanysb $ . .J LLJ / / /   T_ - - - - "i""S^^r'c t|S#t$rYdSt$rtdt$rtdwxYw)a Fetch the next row of a query result set. This method is part of the `DBAPI 2.0 specification `_. :returns: A row as a sequence of field values, or ``None`` if no more rows are available. N#attempting to use unexecuted cursor)r StopIterationr9rrrJs r$fetchonezCursor.fetchones J::    44 J J J"#HII I J J J"#HII I Js A1Ac tt|||jn|S#t$rt dwxYw)aFetches the next set of rows of a query result. This method is part of the `DBAPI 2.0 specification `_. :param size: The number of rows to fetch when called. If not provided, the :attr:`arraysize` attribute value is used instead. :returns: A sequence, each entry of which is a sequence of field values making up a row. If no more rows are available, an empty sequence will be returned. Nr|)rr rVr9r)r"nums r$ fetchmanyzCursor.fetchmanysb" Jts{T^^DDFF F J J J"#HII I Js %(Ac\ t|S#t$rtdwxYw)a$Fetches all remaining rows of a query result. This method is part of the `DBAPI 2.0 specification `_. :returns: A sequence, each entry of which is a sequence of field values making up a row. r|)rr9rrJs r$fetchallzCursor.fetchallsB J;;  J J J"#HII I Js+cd|_dS)zCloses the cursor. This method is part of the `DBAPI 2.0 specification `_. N)rUrJs r$closez Cursor.closes r'c|S)zoA cursor object is iterable to retrieve the rows from a query. This is a DBAPI 2.0 extension. r)rJs r$__iter__zCursor.__iter__s  r'cdSzThis method is part of the `DBAPI 2.0 specification `_, however, it is not implemented by pg8000. Nr))r"sizess r$ setinputsizeszCursor.setinputsizes r'cdSrr))r"sizecolumns r$ setoutputsizezCursor.setoutputsizerr'c|jj5 |jcdddS#t$r|jr|j||jt|j |j ||js|j | |jcYcdddS#t$rR|j tdt|j ddkrtdtwxYwwxYw#1swxYwYdS)NzA query hasn't been issued.rerz no result set)rUrmrYpopleft IndexErrorr[ send_EXECUTE_writeSYNC_MSG_flushhandle_messages close_portalrWrrr}rJs r$__next__zCursor.__next__s W] . . .(0022 . . . . . . . . . . .(3G((...GNN8,,,GNN$$$G++D11103,,T222.,446666 . . . . . . . ."...w./LMMMTWZ011Q66.???+oo- . . . . . . . . . . . .s@E4BEC;,E-E;AEEEE"%E")NNr)r-r.r/rVr6rWr\ra descriptionrcrqrzr~rrrrrrrr)r'r$rSrSs;22h&&&XX(>>??K   "((((TDDD*JJJ&JJJJ.JJJ        .....r'rSNRSKZTrDC123rntArGHIBPrXrMWFLz[] 'u{}rc,eZdZdZdZdZdZdZdS)MulticastDelegatecg|_dSr delegatesrJs r$r6zMulticastDelegate.__init__Ys r'c0|||Sr)addr"delegates r$__iadd__zMulticastDelegate.__iadd__\s  r'c:|j|dSr)rrrs r$rzMulticastDelegate.add`s h'''''r'c:|j||Sr)rremovers r$__isub__zMulticastDelegate.__isub__cs h''' r'c*|jD] }||i| dSrr)r"rtkwargsras r$__call__zMulticastDelegate.__call__gs5  A At v      r'N)r-r.r/r6rrrrr)r'r$rrXs_(((r'rceZdZdZedZedZedZedZedZ edZ edZ ed Z ed Z d ZeeZd Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$d Z%d!Z&d"Z'd#Z(d$Z)d%Z*d&Z+d'Z,d(Z-d)Z.d*Z/d+Z0d,Z1d-Z2d.Z3d/Z4d0Z5d1Z6d2Z7d7d4Z8d7d5Z9d6Z:d3S)8 Connectiona2 A connection object is returned by the :func:`pg8000.connect` function. It represents a single physical connection to a PostgreSQL database. .. attribute:: Connection.notifies A list of server-side notifications received by this database connection (via the LISTEN/NOTIFY PostgreSQL commands). Each list element is a two-element tuple containing the PostgreSQL backend PID that issued the notify, and the notification name. PostgreSQL will only send notifications to a client between transactions. The contents of this property are generally only populated after a commit or rollback of the current transaction. This list can be modified by a client application to clean out notifications as they are handled. However, inspecting or modifying this collection should only be done while holding the :attr:`notifies_lock` lock in order to guarantee thread-safety. This attribute is not part of the DBAPI standard; it is a pg8000 extension. .. versionadded:: 1.07 .. attribute:: Connection.notifies_lock A :class:`threading.Lock` object that should be held to read or modify the contents of the :attr:`notifies` list. This attribute is not part of the DBAPI standard; it is a pg8000 extension. .. versionadded:: 1.07 .. attribute:: Connection.autocommit Following the DB-API specification, autocommit is off by default. It can be turned on by setting this boolean pg8000-specific autocommit property to True. .. versionadded:: 1.9 .. exception:: Connection.Error Connection.Warning Connection.InterfaceError Connection.DatabaseError Connection.InternalError Connection.OperationalError Connection.ProgrammingError Connection.IntegrityError Connection.DataError Connection.NotSupportedError All of the standard database exception types are accessible via connection instances. This is a DBAPI 2.0 extension. Accessing any of these attributes will generate the warning ``DB-API extension connection.DatabaseError used``. c6|tSr) _getErrorrlrJs r$rKzConnection.sDNN7$;$;r'c6|tSr)rrprJs r$rKzConnection.s$.."7"7r'c6|tSr)rrrrJs r$rKzConnection.4>>.+I+Ir'c6|tSr)rrurJs r$rKzConnection.$..*G*Gr'c6|tSr)rryrJs r$rKzConnection.T^^rr'c6|tSr)rr~rJs r$rKzConnection.rr'c6|tSr)rrrJs r$rKzConnection.rr'c6|tSr)rrrJs r$rKzConnection.sT^^$566r'dc8td|jzd|S)Nz#DB-API extension connection.%s usedrr^)rr-)r"errors r$rzConnection._getErrors0 1 N '( * * * * r'c #$%&'d_tdtdtdtdtdtdtdf_tj_|t d t|tr| d_ n|_ t|tr| d_ n|_ d _ d_ td _d _d _ |1|/t%jt$jt$j_nd|St-t$d st dt%jt$jt$j_nt1dt2s|j|||j||fn|j||rljj5 d dl} jt=ddjd} | tdkr | j_nt dn#tB$rt dwxYw dddn #1swxYwYj"d_#n@#t$j$$r.} j%t d| d} ~ wwxYwj#j&_'j#j(_)j#j*_+d_,t[_.t[_/t[_0xj/j1z c_/fd} fd} fd}fd}tetgtitjtmdtmd'dtni##'fd }fd!}fd"}t2rfd#&d$}fd%}n fd&&d'}fd(}fd)}fd*}fd+}fd,}t&fd-id.tp|fd/tptrfd0tp&fd1tpttfd2tptvfd3tx|fd4tptzfd5tp&fd6txt|fd7txt|fd8tx|fd9tpt~fd:tptfd;tp&fdtp|fid?tp|fd@tp|fdAtp|fdBtp|fdCtp|fdDtp|fdEtp|fdFtp|fdGtp&fdHtp&fdItx|fdJtx|fdKtptfdLtptfdMtptfdNtx|fdOtp|ftx|ftp&ftptftx|fdP_EtddQtptftd.tptftd;tx|ftd:tptftjNdItx|ftjOdJtx| fdKdKtptfdLdLtptftjRdMtptftdMtptftndRtx|ftdStptfi _WtjMjXtjZtjZi_\t2rgd/tptfjWt<d;tx| fjWt<d;txtfjWt<d;tx|fjWt<n3d/tptfjWt<d;tx| fjWt< d dTlbmc$md}me}mf%mg}mh}fdU}$%fdV}dWtx|fjW|<dWtx|fjW|<dWtx|fjW|<dWtx|fjW|<tx|fjEdW<n#tB$rYnwxYwitjjtjltj1tjotjqtjstjutjwtjytj{tj}tjtjtjtjt jtjtjtjtjt ji_dX}t't)|tdYzj zt*z} |Xt|tr| d}| tdZ|zt*z| d +t)t1| d[z+| '_j5 dx}!_$|!ttfvrct7)d\\}!}"j|!)|"d[z d|!ttfvcj$j$n<#t8$r.} n#t8$rYnwxYw| d} ~ wwxYw dddn #1swxYwYd _g_tj_dS)]Nutf8INSERTDELETEUPDATEMOVEFETCHCOPYSELECTz.The 'user' connection parameter cannot be NoneFc*ttSr)r dictr)r'r$rKz%Connection.__init__..s;t+<+<r'rAF_UNIXz9attempt to connect to unix socket on unsupported platformz)one of host or unix_sock must be providedi/rrzServer refuses SSLzESSL required but ssl module not available in this python installationrwb)modezcommunication errorc8|jSr)encode_client_encodingrr"s r$text_outz%Connection.__init__..text_out6s88D122 2r'c\|jSr) isoformatrrrs r$time_outz%Connection.__init__..time_out9s";;==''(=>> >r'c|tjjkrdjS|tjjkrdjS|jS)Ninfinityz -infinity)rrrrrrrrs r$date_outz%Connection.__init__..date_out<spHM%%%!(()>???hm'''"))$*?@@@{{}}++D,ABBBr'cRt|jSrrrrrs r$ unknown_outz(Connection.__init__..unknown_outDq66==!677 7r'rz[]rcg}d}||||zjt dt dD]T}|dvr|dvr|dn|dvr|dvr|d|||}Utd |S) NrNNone)[],r)rrz Decimal(')rr)rrrrz')r) decoder translaterrextendrevalr) ridxrarrrrglblsr" trans_tabs r$array_inz%Connection.__init__..array_inJsCF#c&j.)00)+++49,,&wqyy!F))<<  000Vz5I5IJJ{++++*__7K)K)KJJt$$$ 1  e,, ,r'c b||z}t||\}}}|dz } j|d}g}t|D]0} |t ||d|dz }1g} ||kr^t ||\} |dz }| dkr| dn%| |||| || z }||k^t |ddD]<}ttttt| g|z} =| S)N rrrrr) iii_unpackpg_typesranger ii_unpackr5reversedlistr zipiter) rrr final_idxdimhasnulltypeoid conversion dim_lengthsr^values element_lenr"s r$ array_recvz'Connection.__init__..array_recvYsZf I$.tS$9$9 !C' 2ICw/2JK3ZZ  ""9T3#7#7#:;;;qF //'c22 q"$$MM$''''MM**T3 "D"DEEE;&C //#;qrr?33 H Hc$d6ll^f-D(EFFGGMr'ctd||||zjddzdzS)Nrrrr)rrrr)rrrr"s r$ vector_inz&Connection.__init__..vector_inys[d3s6z>299%'''.wsC'8'89;>?@@ @r'cDt||||zjSr)unicoderrrrr"s r$ text_recvz&Connection.__init__..text_recv~s.&0143HJJJr'c||dkS)NrGr))raols r$ bool_recvz&Connection.__init__..bool_recvstv~%r'c^tt||||zjSr)rrrrs r$json_inz$Connection.__init__..json_ins<W&0143HJJKKKr'cDt||||zjSr)rrrs r$rz&Connection.__init__..text_recvs.&0143HJJJr'c||dkS)Nrr)rs r$r z&Connection.__init__..bool_recvsF|q((r'c^tt||||zjSr)rrrrs r$r"z$Connection.__init__..json_ins6VVf_45t7LMMOOOr'c dt|||dz}t||dz|dz}t||dz||zj}t j||t|t|t|z dzS)Nrrri@B)rrrrrr)rrrrrsecr"s r$time_inz$Connection.__init__..time_instF6A:-.//Dfqj!3455FVaZ/0778MNNPPC=fc#hhS3s88^w,F(G(GII Ir'c \|||dzj}|dkrtjjS|dkrtjjStjt |t ||dz|dzt ||dz|dzS)Nrinfiz-infr'r )rrrrrrr)rrryear_strr"s r$date_inz$Connection.__init__..date_insF6A:-.55d6KLLH6!!}((V##}((}MM3tFQJvz,A'B#C#CVaZ 3455777r'cht||||zjSr)rrrrs r$ numeric_inz'Connection.__init__..numeric_ins:VVf_,-44T5JKKMM Mr'cRt|jSrr)rar"s r$ numeric_outz(Connection.__init__..numeric_outrr'ctfSr)FC_TEXT)rsr$rKz%Connection.__init__..s Wi(r'rii=r*iiiiiii:i;Zi)i irrLrM) ip_address IPv4Address IPv6Address ip_network IPv4Network IPv6NetworkcRt|jSrrrs r$inet_outz%Connection.__init__..inet_outs1vv}}T%:;;;r'c||||zj}d|vr |dS|S)N/Frr)rrrinet_strrNrQr"s r$inet_inz$Connection.__init__..inet_insW 78??)++(??%:h666%:h///r'ieizuserz databaserr')rr _commands_with_count threadingLockrmrrr8rruserpasswordrp_xidr _cachesstatement_number portal_numbersocketAF_INET SOCK_STREAM_usockhasattrrrr settimeoutconnectsslsendallii_packrecv wrap_socket ImportErrormakefilerrrrflushrread_readwriter_backend_key_datarNoticeReceivedParameterStatusReceivedNotificationReceivedhandle_PARAMETER_STATUSrr r ordrr FC_BINARYr?r/r3r5r6rQr9r;rrr(rFrtyperOboolrLrfloatr rrrr rrr!r1rrDpy_typesinspect_datetimer  array_inspectr inspect_funcsr=rrlongrC ipaddressrNrOrPrQrRrSNOTICE_RESPONSEhandle_NOTICE_RESPONSEAUTHENTICATION_REQUESThandle_AUTHENTICATION_REQUESTPARAMETER_STATUSBACKEND_KEY_DATAhandle_BACKEND_KEY_DATAREADY_FOR_QUERYhandle_READY_FOR_QUERYROW_DESCRIPTIONhandle_ROW_DESCRIPTIONERROR_RESPONSEhandle_ERROR_RESPONSEEMPTY_QUERY_RESPONSEhandle_EMPTY_QUERY_RESPONSEDATA_ROWhandle_DATA_ROWCOMMAND_COMPLETEhandle_COMMAND_COMPLETEPARSE_COMPLETEhandle_PARSE_COMPLETE BIND_COMPLETEhandle_BIND_COMPLETECLOSE_COMPLETEhandle_CLOSE_COMPLETEPORTAL_SUSPENDEDhandle_PORTAL_SUSPENDEDNO_DATAhandle_NO_DATAPARAMETER_DESCRIPTIONhandle_PARAMETER_DESCRIPTIONNOTIFICATION_RESPONSEhandle_NOTIFICATION_RESPONSE COPY_DONEhandle_COPY_DONE COPY_DATAhandle_COPY_DATACOPY_IN_RESPONSEhandle_COPY_IN_RESPONSECOPY_OUT_RESPONSEhandle_COPY_OUT_RESPONSE message_types bytearrayi_pack NULL_BYTErrrcursor_cursor ci_unpack Exception_closeronotifies notifies_lock)(r"r^host unix_sockportdatabaser_rktimeout sslmoduleresprrrrrrrrr r"r)r/r1r3rOrPrRrSrUrZprotocolvalcodedata_lenrrNrQrrs(` @@@@@r$r6zConnection.__init__s!' hKK8akk1V99 gJJ& 1X;;%0!^%% < @BB B dI & &  F++DIIDI h * * %$OOF33DMM$DM "#<#<== !( ; T%5$mFNF>*3*?*? *L*LDKK"01E"F"FF('888,78888(888888888888888 --5-99DJJ| ; ; ; K      !6:: : ;j& Z_ j& !%011(9':':$%6$7$7! $$(DD$$ 3 3 3 3 3 ? ? ? ? ? C C C C C 8 8 8 8 8Sagg..$8899 G$ - - - - - - -     @ @ @ @ @ @  O J J J J J & & & K K K K K K  J J J J J ) ) ) O O O O O I I I I I 7 7 7 7 7 M M M M M 8 8 8 8 8$ ( ( ( ('+Y *'+Y +'+Y *'+Y * '+ Y * '+ Wi( '+Y *'+Y *'+Wf%'+Wf%'+gw''+i-'+i-'+i+'+gy)'+ y*-!'+"y*-#'+'+$y*-%'+&y*-''+(y*-)'+*y*-+'+,y*--'+.y*-/'+0y*-1'+2y*-3'+4y),5'+6y),7'+8w(9'+:w(;'+<y"67='+>y"89?'+@y"78A'+Bw)C'+Dy*-E'+'+F + ), ),(M'+'+'+(( V JJY 2 2y), #w , CF+ MD'84 MD'84 4$:; 4$<=  y2G H tY(=> dG[1 4I.  "  t4 $$ 4%   :$& :#>DM% (+Wh'?DM) $"%w !;DM# #&"=DM$  $& :#>DM% "%w!9DM#                   < < < < < 0 0 0 0 0 0 0+.w)ADM+ &*-w)ADM+ &*-w)ADM+ &*-w)ADM+ &")7!3DM#      D > T8> "D$F> d:> d: > T8 > T8 > D6> !$"B> d*> d:> D6> 44> D6> d:> T(> "4#D!>" "4#D#>$ t, t, d: t<+>>8 8  q}} ,ty 89 DFF  (I.. 3#??622 JJq((83i? @ @ @ 1  F3s88a<(())) C {{}} Z   $((tz?N"CCC%.tzz!}}%=%=ND(,D&t,TZZ1 -E-EtLLL?N"CCC:)*$*   KKMMMM D  *               $ &^--sDL!K5BK  K5 K%%K5) L!5K99L!<K9=#L!!M0)MM&A5b b)(b)8o:B no n>n&%n9& n41n93n44n99n>>oooc$tfd|tD}t|}|tdkrt d_dSttd|D_dS)Nc3pK|]0}|dd|ddjfV1dSrrNrX)rrr"s r$rz3Connection.handle_ERROR_RESPONSE..NsX##>?QqsVQqrrU\\$"788 9######r'28000z"md5 password authentication failedc3 K|] \}}|V dSrr))rkrs r$rz3Connection.handle_ERROR_RESPONSE..Us&0I0Itq!0I0I0I0I0I0Ir')rsplitrr RESPONSE_CODErrrr)r"rrW responsesmsg_dicts` r$rz Connection.handle_ERROR_RESPONSEMs#### JJy ! !#####  ?? M "g - -'(LMMDJJJ)50I0Iy0I0I0I+I+IJDJJJr'c.td|_dS)Nzquery was empty)rrr"rrWs r$rz&Connection.handle_EMPTY_QUERY_RESPONSEWs%&788 r'cdSrr)rs r$rz Connection.handle_CLOSE_COMPLETEZ r'cdSrr)rs r$rz Connection.handle_PARSE_COMPLETE]s  r'cdSrr)rs r$rzConnection.handle_BIND_COMPLETEbrr'cd|_dSNT)r[)r"rrs r$rz"Connection.handle_PORTAL_SUSPENDEDes"&r'cdSrr)rs r$rz'Connection.handle_PARAMETER_DESCRIPTIONhs r'cd|_dSr) _copy_doners r$rzConnection.handle_COPY_DONEps r'cVt|\}}|jtddS)Nz7An output stream is required for the COPY OUT response.) bh_unpackrnrr)r"rrW is_binarynum_colss r$rz#Connection.handle_COPY_OUT_RESPONSEss< (oo 8 9  IKK K  r'c:|j|dSr)rnrurs r$rzConnection.handle_COPY_DATA~s r'cPt|\}}|jsJ|jt dt r |jd}|snd|ttt|dzz||| ntd} |j |}|dkrn_|tt|dzz||d|| |t|t| dS)Nz5An input stream is required for the COPY IN response.Ti rr)rrmlockedrnrrrrsrrrrrrreadinto COPY_DONE_MSGr)r"rrWrrbffr bytes_reads r$rz"Connection.handle_COPY_IN_RESPONSEs(oo 8z  """"" 9  GII I   y~~d++ Is4yy1}(=(==>>> D!!!   T??D Y//55 ?? IzA~(>(>>??? D*-...   M""" H r'c||t|d}d}|t||z }||||zd}||dzz }|t||z }|j5|j||fddddS#1swxYwYdS)Nrrasciir)ryr5findrrrrr)r"rrW backend_pidrnull conditions r$rz'Connection.handle_NOTIFICATION_RESPONSEs !!$'''tnnQ' yyC((3.S4Z(//88  taxyyC((3.  ; ; M +y!9 : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;sCC Cc t|S)zCreates a :class:`Cursor` object bound to this connection. This function is part of the `DBAPI 2.0 specification `_. )rSrJs r$rzConnection.cursorsd||r'c~|j5||jddddddS#1swxYwYdS)zCommits the current database transaction. This function is part of the `DBAPI 2.0 specification `_. commitNrmrqrrJs r$rzConnection.commits Z 7 7 LLx 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 266c~|j5||jddddddS#1swxYwYdS)zRolls back the current database transaction. This function is part of the `DBAPI 2.0 specification `_. rollbackNrrJs r$rzConnection.rollbacks Z 9 9 LLz4 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9rc |t||jnc#t $rt dt$rt dtj $r!}tt|d}~wwxYw |j d|_dS#|j d|_wxYw)Nrl) r TERMINATE_MSGrrrrrrrrrdrryrrg)r"rs r$rzConnection._closes  KK & & & KKMMM J       9 9 9 !788 8 9 9 9 !788 8| + + +"3q66** * +  K     DJJJ K     DJ    s*AA C ?B* B%%B**C"C2cn|j5|ddddS#1swxYwYdS)zCloses the database connection. This function is part of the `DBAPI 2.0 specification `_. N)rmrrJs r$rzConnection.closes} Z   KKMMM                  s *..c|jsJt|d}|dkrdS|dkrT|jt d|t |jtz|dS|dkrtd t|d}|jt dtdtt|j|j zd |zd z}|t |tz|dS|d vr"t d t!|zd zt d t!|zd z)NrrzGserver requesting password authentication, but no password was providedr'rrzKserver requesting MD5 password authentication, but no password was providedrr)rrrr,r zAuthentication method z not supported by pg8000.z not recognized by pg8000.)rmrr5r_rr _send_messagePASSWORDrrr r cccc_unpackrr^ hexdigestrr)r"rr auth_codesaltpwds r$rz(Connection.handle_AUTHENTICATION_REQUESTsz  """""TNN1% >> D !^^}$$,---   x)B C C C KKMMMMM !^^R55::k$2233D}$$,---E((SDMDI-..88::AA'JJikk&&//2C   xy 9 9 9 KKMMMMM , , , (3y>>9+,-- -!(3y>>9,-.. .r'c&|tk|_dSr)IDLErors r$rz!Connection.handle_READY_FOR_QUERY's"dlr'c||_dSr)rvrs r$rz"Connection.handle_BACKEND_KEY_DATA+s!%r'cD|j |jdS|jdS)NrHrI)rrr>s r$rzConnection.inspect_datetime.s$ < =& &=& &r'c lg}|D]}t|} ||j|3#t$rb ||j||n4#t$r'}t dt |zdzd}~wwxYwYwxYwt|S)Ntype znot mapped to pg type)r}rrKeyErrorrrrr)r"rparamsr?typrs r$ make_paramszConnection.make_params4s D DEu++C D dmC01111 D D DDMM"9$"4S"9%"@"@AAAADDD+#a&&(+BBDDDDBA D V}}s3 8 B$)A-,B$- B7"BBB$#B$c t|d}d}t|D]}|||t|}|t |dzz }t t dt||}||d<|dz }|jd ||j |d\|d <|d <dS) Nrrr) table_oidcolumn_attrnumrg type_size type_modifierrrfrerg pg8000_fcfunc) r2rrrrrr  ihihih_unpackrWrr)r"rrr rr^rffields r$rz!Connection.handle_ROW_DESCRIPTIONBsq!u 1 1ADIIi5556D 3t99q= C/0=dC0H0HJJKKE!E&M 2IC Ij ! ( ( / / / eJ/0 .E+ f  1 1r'c  |d}tj}j|} |d|\}}n0#t$r#t ||\}}||f|d|<YnwxYw||}|} || f} |d| } | |_n#t$rdtjz} xjdz c_| dtz} gtd| Dd} | |_td | D}t| }| | jtz| tt!| | D]0\}}}| t#|d krd n|1t&|t(t*| zt. nX#t2$r}jt7d |d}~wt8j$r!}t=t|d}~wwxYw|tfd | dD}td| dD| d<| tt!| ztAddt!|zzg|Rztt!| z| d<tt!|tAddt!|zzg|Rz| d<| |d| <YnwxYw|j!"d |_#dtj$z|_%xj$dz c_$|j% dtz|_&|j&tNj(z|_)t|j&| dz}tU|| dD]^\}}|tV}n:||}| t#t!|| |_| | dtX|-|t.||j.rj/rt7ddS0|dS)Nr) statementrWpg8000_statement_rrc3&K|] }|dV dS)rNr)rrs r$rz%Connection.execute..ks&$:$:aQqT$:$:$:$:$:$:r')re param_funcsc3&K|] }|dV dS)rNr)rs r$rz%Connection.execute..os&33qad333333r'rrBrlc3JK|]}j|ddVdS)rgrN)r)rrbr"s r$rz%Connection.execute..sLII45 a m,Q/IIIIIIr'rec3&K|] }|dV dS)rNr))rrbs r$rz%Connection.execute..s&%H%HAai%H%H%H%H%H%Hr' input_funcsrYr_bind_1bind_2pg8000_portal_rzWith autocommit on, it's not possible to retrieve more rows than the pg8000 cache size, as the portal is closed when the transaction is closed.)1pg8000 paramstylerarrrrWrrbrrrrrrh_packrrrPARSEDESCRIBE STATEMENTrrrrrrrrrdrryrrrYclearrXrcrZportal_name_binr_row_cache_size_bin execute_msgr rNBINDrr[rpr)r"rrsrr cacherrrtrkeyrWstatement_namestatement_name_bin param_fcsroidfc send_funcr output_fcretvalr?s` r$rqzConnection.executeRs <D&  Z( A#(#5i#@ Iyy A A A#5j)#L#L Iy,5y,@E+ y ) ) ) Ay!!$''Q "tS!BFIIN "N "N "03t7L3M3MMN  ! !Q & ! !!/!6!6w!?!?)!K $$:$:6$:$:$:::BFI33F33333I.//C JJy''(=>>J K K K JJvc&kk** + + +&, > >"R 6##<<====   uc * * *   x5G)G H H H KK ! ! ! / !   :%()?@@@G< / / /&s1vv... /   ( ( (IIII9;JIIIIII!&%H%HJ%H%H%H H HB} ".s6{{0C0CCS3Y//<)<<<=s6{{##$BxL"#i..11S3Y//<)<<<=BxL "E$K   ]N "` !!###-D4F0G0GG a!'!3!:!:7!C!Ci!O#3  *+&61BxL@AA #D"]*; < <   E9}i&& fSXX../// MM#     bl### 4((( &!!! H  V$$$  " & 7$6777 7 7   f % % % % %sS2*AABF N(H=<N= JIJ1J  JDNNc |||tt|dz|||tdS#t$r)}t |dkrt d|d}~wt$rt dwxYw)Nrzwrite to closed filerl)rrr FLUSH_MSGrrrrr)r"rrrs r$rzConnection._send_messages 9 KK    KKs4yy1}-- . . . KK    KK " " " " "   1vv///$%;<<< 9 9 9 !788 8 9sA6A:: C$B((CcTd|_|t|jdS)NF)r[rEXECUTEr(r"rs r$rzConnection.send_EXECUTEs+#( 7F$677777r'cdSrr))r"msgrWs r$rzConnection.handle_NO_DATArr'cP|ddt}|d}||jvr8t|d}|jdkr||_n|xj|z c_|t vr/|jD])}|j|d(dSdS)NrrrW)r BINARY_SPACEr[rrX DDL_COMMANDSrar%)r"rrrcommand row_countrs r$rz"Connection.handle_COMMAND_COMPLETEscrc..) d/ / /F2JI B&&$-!!!!Y.!! l " "\ . . Q%++---- # " . .r'cd}g}|jdD]^}t||d}|dz }|dkr|d9|||||||z }_|j|dS)Nrrrrr)rWr5rrY)r"rrdata_idxrowrvlens r$rzConnection.handle_DATA_ROWsIm, ! !DD(++A.D MHrzz 4     44h55666D ""3'''''r'c<dx}|_ |tkr]t|d\}}|j|||dz ||tk]n#|xYw|j|jdS)Nr'r)rrrrtrr)r"rrrs r$rzConnection.handle_messagess  tz /))!*4::a==!9!9h("4(HqL)A)A6JJJ/))  KKMMM  : !*  " !s A(A44B c|tt|jz|t |||dSr)rCLOSEPORTALr&rrrrr8s r$rzConnection.close_portal.sY 5&6+A"ABBB H  V$$$$$r'ctd|tD}||dS)Nc3>K|]}|dd|ddfVdSrr))rrs r$rz4Connection.handle_NOTICE_RESPONSE..:s6CCQqsVQqrrUOCCCCCCr')rrrrw)r"rrWrs r$rz!Connection.handle_NOTICE_RESPONSE9sDCCTZZ -B-BCCCCC D!!!!!r'c\|t}|d|||dzd}}|tdkrI|d}t |||_dS|tdkrq|tdkrdttf|j d<ttf|j d<dttf|j d<ttf|j d<d ttf|j t <d ttf|j t"j<tt&f|j d <dSdtt(f|j d<tt*f|j d<dtt,f|j d<tt.f|j d<d tt0f|j t <d tt0f|j t"j<tt2f|j d <dS|td krt5|d|_|jt5d krOtd td tdtdtdf|_dS|jt5dkr_td td tdtdtdtdf|_dSdSdS)Nrrclient_encodingrinteger_datetimesonrHrIrJserver_versionz8.2.0rrrrrz9.0.0r)rrr rlowerpg_to_py_encodingsgetrr|r rrrrrr!r1rrr(r rrrr$r-r_server_versionr[)r"rrWposr+r?encodings r$rzz"Connection.handle_PARAMETER_STATUS=sii ""$3$ZcAgbj!1U !%&& & &||G,,2244H$6$:$:8X$N$ND ! ! ! A)** * *$'+Y8N&O d#'02H&I d#)%='? d#'02J&K d#)%:+< h')%:5< h01'02G&H d###'+Y8L&M d#'02F&G d#'+Y8N&O d#'02H&I d#)%8+: h')%85: h01'02E&F d### A&'' ' '#/ W0E0E#F#FD #l7&;&;;;hKK8akk1V99gJJ- )))% W(=(===hKK8akk1V99gJJ& -+)))( ' >=r'c t|}|tdt| t trt d\}}}t |D]\}|t |cxkr tkrnn d}t|cxkr tkrnn=d}t|cxkr tkrnnZd}]|rd}dttc } n|rd}dttc } n|rd}d ttc } nt!d  ||fd \ } d kr d t}t$ }n[#t&$r#t!dt) zdzt*$r#t!dt) zdzwxYw|tkr fd} n fd} ||| fS)Nzarray has no values)TTTFrCr:rDr<rFr9z'numeric not supported as array contentsrrBr=zoid z not supported as array contentsrc\t|D]D\}}}t| tdfstdt zEt |t |}t|}ttt||}|D]%}| t|d&t|D]F}||tdz } |}|tt|z }||z }G|S)N#not all array elements are of type rr) walk_arrayr8r}rrarray_check_dimensionsarray_has_nullarray_dim_lengthsriii_packrrrm array_flattenr) rar^rhas_nullrr inner_datar/r1rs r$ send_arrayz,Connection.array_inspect..send_arraysB)#NNGAq!%a#tDzz):;;N<ACHHLNNNN 's+++)#../44  #k*:*:Hc!J!JKK$//AKK1 ....&s++++Ayr *%.Yq\\ s: 7 77 * r'ct|D]D\}}}t|tdfstdt zEt |t |}t|D]/\}}}|d||<|d||<0tt | t dS)NrWrNr) rXr8r}rrrYrrrr arr_transr)rr^r^rarr1rs r$raz,Connection.array_inspect..send_arrays)#NNGAq!%a#tDzz):;;N<ACHHLNNNN's+++c]])"~~<?? ?=!! c= ) ), MC(8 %GWg"5)) 9a****(*****a****(*****a****(***** ? &()V"R ? &()V"R ? &()V"R3=??? M%)%5%5}6F%G%G%J"R#::C#B*3/  L L L3SXX%(JJLLL$ M M M3c#hh&)KKMMM M ??        0 G G G G G G2z**s `_. rkN)r`rprqr)r"rss r$ tpc_beginzConnection.tpc_beginsA ? B LL':D A A A A A B Br'c`d|jdd}||j|ddS)aPerforms the first phase of a transaction started with .tpc_begin(). A ProgrammingError is be raised if this method is called outside of a TPC transaction. After calling .tpc_prepare(), no statements can be executed until .tpc_commit() or .tpc_rollback() have been called. This function is part of the `DBAPI 2.0 specification `_. zPREPARE TRANSACTION 'r';N)r`rqr)r"r`s r$ tpc_preparezConnection.tpc_prepares6,09Q<<< 9 T\1d+++++r'Nc0||j}|td |j}d|_||vr'||jd|dddn|||_n #||_wxYwd|_dS)a%When called with no arguments, .tpc_commit() commits a TPC transaction previously prepared with .tpc_prepare(). If .tpc_commit() is called prior to .tpc_prepare(), a single phase commit is performed. A transaction manager may choose to do this if only a single resource is participating in the global transaction. When called with a transaction ID xid, the database commits the given transaction. If an invalid transaction ID is provided, a ProgrammingError will be raised. This form should be called outside of a transaction, and is intended for use in recovery. On return, the TPC transaction is ended. This function is part of the `DBAPI 2.0 specification `_. Nz.Cannot tpc_commit() without a TPC transaction!TzCOMMIT PREPARED 'rrw)r`rrp tpc_recoverrqrrr"rsprevious_autocommit_modes r$ tpc_commitzConnection.tpc_commits$ ;)C ;"@BB B 7'+ $"DOd&&(((( LLSVVV"F  6DOO6DO 6 6 6 6 AB B c0||j}|td |j}d|_||vr'||jd|dddn|||_n #||_wxYwd|_dS)aDWhen called with no arguments, .tpc_rollback() rolls back a TPC transaction. It may be called before or after .tpc_prepare(). When called with a transaction ID xid, it rolls back the given transaction. If an invalid transaction ID is provided, a ProgrammingError is raised. This form should be called outside of a transaction, and is intended for use in recovery. On return, the TPC transaction is ended. This function is part of the `DBAPI 2.0 specification `_. Nz9Cannot tpc_rollback() without a TPC prepared transaction!TzROLLBACK PREPARED 'rrw)r`rrprzrqrrr{s r$ tpc_rollbackzConnection.tpc_rollback s ;)C ;"KMM M 7'+ $"DOd&&(((( LLs1vvv"G  6DOO6DO 6 6 6 6 r~c j}d_}|dfd|D|_S#|_wxYw)zReturns a list of pending transaction IDs suitable for use with .tpc_commit(xid) or .tpc_rollback(xid). This function is part of the `DBAPI 2.0 specification `_. Tz!select gid FROM pg_prepared_xactscJg|]}d|dd S)rr)rs)rrBr"s r$ z*Connection.tpc_recover..I s-<<<DHHQA++<<rsC ********########FFFFFFFFFFFFFFFFFF****** :     D y||     (/    ceeQ&Q&Q&Q&Q&vQ&Q&Q&h))):c??:c??:c??:c??:c??!z%((*Z%%!z%((*!z%((*'Z11 ]Z%%Z%%#F++ ;t '(&(&(     i        I         U         E                 }         ]        M        }                $5        %5        -        (8        K   +++///EEE , , , - - - 1 1 1    FF F  qvv qzz11X;;& e,e,e,P $1%% === $ $u(()) $5# #881<   GGG OOOJJJ HHH #'//s/;;#'//s/;;   JJJ 2 2 2 - - -444BBB%%%%%%%%%%%%%%%   ,3333,,,222 qyy &    vbzz AfII ...D.D.D.D.D.D.D.D.L"/FK!C&&31S661S66!C&&!C&&3 1S661S663# 31S66 !C&&## AcFF AcFF 1S66AcFFqvvqvv # !C&& #qvv 1S66 1S66 AcFF  # FF1II  &&)) FF1II% FF1II%  AcFF 3AcFF# qvv !C&&# AcFFQsVV!C&&3# # 1S66qvvaffQsVV DSSaajj))44$==D6A:+EFF G G (_7_7_7_7_7_7_7_7F'   .T. d.$ h%.&*'.(*).**+.,*-.. H/.0 k1.2 k3.4 k5.6 k7.8 k9.: l;.< l=.> l?.@ lA.B[...b,s<BB  B