ÿØÿà JFIF    ÿÛ „  ( %"1!%)+...383,7(-.+  -+++--++++---+-+-----+---------------+---+-++7-----ÿÀ  ß â" ÿÄ     ÿÄ H    !1AQaq"‘¡2B±ÁÑð#R“Ò Tbr‚²á3csƒ’ÂñDS¢³$CÿÄ   ÿÄ %  !1AQa"23‘ÿÚ   ? ôÿ ¨pŸªáÿ —åYõõ\?àÒü©ŠÄï¨pŸªáÿ —åYõõ\?àÓü©ŠÄá 0Ÿªáÿ Ÿå[úƒ ú®ði~TÁbqÐ8OÕpÿ ƒOò¤Oè`–RÂáœá™êi€ßÉ< FtŸI“öÌ8úDf´°å}“¾œ6  öFá°y¥jñÇh†ˆ¢ã/ÃÐ:ªcÈ "Y¡ðÑl>ÿ ”ÏËte:qž\oäŠe÷󲍷˜HT4&ÿ ÓÐü6ö®¿øþßèô Ÿ•7Ñi’•j|“ñì>b…þS?*Óôÿ ÓÐü*h¥£ír¶ü UãS炟[AÐaè[ûª•õ&õj?†Éö+EzP—WeÒírJFt ‘BŒ†Ï‡%#tE Øz ¥OÛ«!1›üä±Í™%ºÍãö]°î(–:@<‹ŒÊö×òÆt¦ãº+‡¦%ÌÁ²h´OƒJŒtMÜ>ÀÜÊw3Y´•牋4ǍýʏTì>œú=Íwhyë,¾Ôò×õ¿ßÊa»«þˆѪQ|%6ž™A õ%:øj<>É—ÿ Å_ˆCbõ¥š±ý¯Ýƒï…¶|RëócÍf溪“t.СøTÿ *Ä¿-{†çàczůŽ_–^XþŒ±miB[X±d 1,é”zEù»& î9gœf™9Ð'.;—™i}!ôšåîqêÛ٤ёý£½ÆA–àôe"A$˝Úsäÿ ÷Û #°xŸëí(l »ý3—¥5m! rt`†0~'j2(]S¦¦kv,ÚÇ l¦øJA£Šƒ J3E8ÙiŽ:cÉžúeZ°€¯\®kÖ(79«Ž:¯X”¾³Š&¡* ….‰Ž(ÜíŸ2¥ª‡×Hi²TF¤ò[¨íÈRëÉ䢍mgÑ.Ÿ<öäS0í„ǹÁU´f#Vß;Õ–…P@3ío<ä-±»Ž.L|kªÀê›fÂ6@»eu‚|ÓaÞÆŸ…¨ááå>åŠ?cKü6ùTÍÆ”†sĤÚ;H2RÚ†õ\Ö·Ÿn'¾ ñ#ºI¤Å´%çÁ­‚â7›‹qT3Iï¨ÖÚ5I7Ë!ÅOóŸ¶øÝñØôת¦$Tcö‘[«Ö³šÒ';Aþ ¸èíg A2Z"i¸vdÄ÷.iõ®§)¿]¤À†–‡É&ä{V¶iŽ”.Ó×Õÿ û?h¬Mt–íª[ÿ Ñÿ ÌV(í}=ibÔ¡›¥¢±b Lô¥‡piη_Z<‡z§èŒ)iÖwiÇ 2hÙ3·=’d÷8éŽ1¦¸c¤µ€7›7Ø ð\á)} ¹fËí›pAÃL%âc2 í§æQz¿;T8sæ°qø)QFMð‰XŒÂ±N¢aF¨…8¯!U  Z©RÊ ÖPVÄÀÍin™Ì-GˆªÅËŠ›•zË}º±ŽÍFò¹}Uw×#ä5B¤{î}Ð<ÙD é©¤&‡ïDbàÁôMÁ." ¤‡ú*õ'VŽ|¼´Úgllº¼klz[Æüï÷Aób‡Eÿ dÑ»Xx9ÃÜ£ÁT/`¼¸vI±Ýµ·Ë‚“G³þ*Ÿû´r|*}<¨îºœ @¦mÄ’M¹”.œ«Y–|6ÏU¤jç¥ÕÞqO ˜kDÆÁ¨5ÿ š;ÐЦ¦€GÙk \ –Þ=â¼=SͧµªS°ÚÍpÜãQűÀõ¬?ÃÁ1Ñ•õZà?hóœ€ L¦l{Y*K˜Ù›zc˜–ˆâ ø+¾ ­-Ök¥%ùEÜA'}ˆ><ÊIè“bpÍ/qÞâvoX€w,\úªò6Z[XdÒæ­@Ö—€$òJí#é>'°Ú ôª˜<)4ryÙ£|óAÅn5žêŸyÒäMÝ2{"}‰–¤l÷ûWX\l¾Á¸góÉOÔ /óñB¤f¸çñ[.P˜ZsÊË*ßT܈§QN¢’¡¨§V¼(Üù*eÕ“”5T¨‹Âê¥FŒã½Dü[8'Ò¥a…Ú¶k7a *•›¼'Ò·\8¨ª\@\õ¢¦íq+DÙrmÎ…_ªæ»ŠÓœ¡¯’Ré9MÅ×D™lælffc+ŒÑ,ý™ÿ ¯þǤ=Å’Á7µ÷ÚÛ/“Ü€ñýã¼àí¾ÕÑ+ƒ,uµMâÀÄbm:ÒÎPæ{˜Gz[ƒ¯«® KHà`ߨŠéí¯P8Aq.C‰ à€kòpj´kN¶qô€…Õ,ÜNŠª-­{Zö’æû44‰sŽè‰îVíRœÕm" 6?³D9¡ÇTíÅꋇ`4«¸ÝÁô ï’ýorqКÇZ«x4Žâéþuïf¹µö[P ,Q£éaX±`PÉÍZ ¸äYúg üAx ’6Lê‚xÝÓ*äQ  Ï’¨hÍ =²,6ï#rÃ<¯–£»ƒ‹,–ê•€ aÛsñ'%Æ"®ÛüìBᝠHÚ3ß°©$“XnœÖ’î2ËTeûìxîß ¦å¿çÉ ðK§þ{‘t‚Ϋ¬jéîZ[ ”š7L¥4VÚCE×]m¤Øy”ä4-dz£œ§¸x.*ãÊÊ b÷•h:©‡¦s`BTÁRû¾g⻩‹jø sF¢àJøFl‘È•Xᓁà~*j¯ +(ÚÕ6-£¯÷GŠØy‚<Ç’.F‹Hœw(+)ÜÜâÈzÄäT§FߘãÏ;DmVœ3Àu@mÚüXÝü•3B¨òÌÁÛ<·ÃÜ z,Ì@õÅ·d2]ü8s÷IôÞ¯^Ç9¢u„~ëAŸï4«M? K]­ÅàPl@s_ p:°¬ZR”´›JC[CS.h‹ƒïËœ«Æ]–÷ó‚wR×k7X‰k›‘´ù¦=¡«‰¨¨Â')—71ó’c‡Ðúµ `é.{§p¹ój\Ž{1h{o±Ý=áUÊïGÖŒõ–-BÄm+AZX¶¡ ïHðæ¥JmÙ;…䡟ˆ¦ ° äšiÉg«$üMk5¤L“’çÊvïâï ,=f“"íἊ5ô¬x6{ɏžID0e¸vçmi'︧ºð9$ò¹÷*£’9ÿ ²TÔ…×>JV¥}Œ}$p[bÔ®*[jzS*8 ”·T›Í–ñUîƒwo$áè=LT™ç—~ô·¤ÈÚ$榍q‰„+´kFm)ž‹©i–ËqÞŠ‰à¶ü( ‚•§ •°ò·‡#5ª•µÊ﯅¡X¨šÁ*F#TXJÊ ušJVÍ&=iÄs1‚3•'fý§5Ñ<=[íÞ­ PÚ;ѱÌ_~Ä££8rÞ ²w;’hDT°>ÈG¬8Á²ÚzŽ®ò®qZcqJêäÞ-ö[ܘbň±çb“ж31²n×iƒðÕ;1¶þÉ ªX‰,ßqÏ$>•î íZ¥Z 1{ç൵+ƒÕµ¥°T$§K]á»Ûï*·¤tMI’ÂZbŽÕiÒ˜}bÓ0£ª5›¨ [5Ž^ÝœWøÂÝh° ¢OWun£¤5 a2Z.G2³YL]jåtì”ä ÁÓ‘%"©<Ôúʰsº UZvä‡ÄiÆÒM .÷V·™ø#kèýiíÌ–ª)µT[)BˆõÑ xB¾B€ÖT¨.¥~ð@VĶr#¸ü*åZNDŽH;âi ],©£öØpù(šºãö¼T.uCê•4@ÿ GÕÛ)Cx›®0ø#:ÏðFÒbR\(€€Ä®fã4Þ‰Fä¯HXƒÅ,†öEÑÔÜ]Öv²?tLÃvBY£ú6Êu5ÅAQ³1‘’¬x–HŒÐ‡ ^ ¸KwJôÖŽ5×CÚ¨vÜ«/B0$×k°=ðbÇ(Ï)w±A†Á† 11Í=èQšµ626ŒÜ/`G«µ<}—-Ö7KEHÈÉðóȤmݱû±·ø«Snmá=“䫚mݱŸ¡¶~ó·“äUóJæúòB|E LêŽy´jDÔ$G¢þÐñ7óR8ýÒ…Ç› WVe#·Ÿ p·Fx~•ݤF÷0Èÿ K¯æS<6’¡WШ; ´ÿ ¥Êø\Òuî†åÝ–VNœkÒ7oòX¨Á­Ø÷FÎÑä±g÷ÿ M~Çî=p,X´ ÝÌÚÅ‹’ÃjÖ.ØöÏñ qïQ¤ÓZE†° =6·]܈ s¸>v•Ž^Ý\wq9r‰Î\¸¡kURÒ$­*‹Nq?Þª*!sŠÆ:TU_u±T+øX¡ ®¹¡,ÄâÃBTsÜ$Ø›4m椴zÜK]’’›Pƒ @€#â˜`é¹=I‡fiV•Ôî“nRm+µFPOhÍ0B£ €+¬5c v•:P'ÒyÎ ‰V~‚Ó†ÖuókDoh$å\*ö%Ю=£«…aȼ½÷Û.-½VŒŠ¼'lyî±1¬3ó#ÞE¿ÔS¤gV£m›=§\û"—WU¤ÚǼÿ ÂnÁGŒÃ ‚õN D³õNÚíŒÕ;HôyÄÈ©P¹Ä{:?R‘Ô¨âF÷ø£bÅó® JS|‚R÷ivýáâ€Æé¡è³´IئÑT!§˜•ت‚¬â@q€wnïCWÄ@JU€ê¯m6]Ï:£âx'+ÒðXvÓ¦Úm=–´7œ $ì“B£~p%ÕŸUþ« N@¼üï~w˜ñø5®—'Ôe»¤5ã//€ž~‰Tþ›Å7•#¤× Íö pÄ$ùeåì*«ÓŠEØWEÈsßg ¦ûvžSsLpºÊW–âµEWöˬH; ™!CYõZ ÃÄf æ#1W. \uWâ\,\Çf j’<qTbên›Î[vxx£ë 'ö¨1›˜ÀM¼Pÿ H)ƒêêŒA7s,|F“ 꺸k³9Ìö*ç®;Ö!Ö$Eiž•¹ÒÚ†ýóéÝû¾ÕS®ó$’NÝäŸz¤5r¦ãÄÃD÷Üø!°ø‡Ô&@m™Ì^Ãä­d q5Lnÿ N;.6½·N|#ä"1Nƒx“ã<3('&ñßt  ~ªu”1Tb㫨9ê–›–bìd$ߣ=#ÕãÒmU¯eí$EFù5ýYô櫨æì™Ç—±ssM]·á¿0ÕåJRÓªîiƒ+O58ÖñªŠÒx" \µâá¨i’¤i —Ö ” M+M¤ë9‚‰A¦°Qõ¾ßøK~¼Ã‘g…Ö´~÷Ï[3GUœÒ½#…kàÔ®Ò”‰³·dWV‰IP‰Ú8u¹”E ÖqLj¾êÕCBš{A^Âß;–¨`¯¬ìö ˼ ×tìø.tƐm*n¨y4o&Àx¥n¦×î‡aupáÛj8¿m›è¶ã!o½;ß0y^ý×^EÑ¿ÒjzŒ­)vÚÑnÄL …^ªô× ‡—‚3k Îý­hï]içå–îÏ*÷ñþ»Ô CÒjøjÍznˆ´ ¹#b'Fô‹ ‰v¥'’à'T´ƒHýÍ%M‰ ƒ&ÆÇŒï1 ‘ –Þ ‰i¬s žR-Ÿ kЬá¬7:þ 0ŒÅÒÕ/aÙ¬ÃÝ#Úøœ ©aiVc‰. ¹¦ãµ” ›Yg¦›ÆÎýº°f³7ƒhá·¸­}&D9¡ÂsÉÙÞèŠõØàC™¨ñbFC|´Ü(ŸƒÚÒ-%»'a Ì¿)ËÇn¿úÿ ÞŽX…4ÊÅH^ôΑí@ù¹Eh¶“L8Çjù ¼ÎåVªóR©Ï5uà V4lZß®=€xÖŸ–ÑÈ ÷”¨°¾__yM1tÉ?uÆþIkÄgæ@þ[¢†°XÃJ£j·:nkÅ¢u ‘}âGzö­/IµèЬ¼48q¦F°ŽR¼=ûì{´¯RýicS ÕÛ íNtÍÙï£,w4rêì®»~x(©Uñ§#Ñ&œÕ¤>ÎåÍÓ9’Ö{9eV­[Öjâ²ãu]˜å2›qÑšÕJç0€sÄ|Êëè0튔bÁ>“{×_F`Ø©ºê:µä,v¤ðfc1±"«ÔÍän1#=· Âøv~H½ÐßA¾¿Ü€Óš]Õ; I¾÷ç‚Qi†î¹9ywÔKG˜áñ zQY—§ÃÕZ07§X‚ Áh;ÁM)iÌCH-¯T‘ë|A0{Ò½LÚ–TâÖkÜ’dÀ“rmm»”جPF³ÖcbE§T€ÒxKºû’Ó®7±²(\4ŽÃ¸Uu@j™yĵ;³µ!Á¢b.W¤=mõ´êµK k ¸K^ÜÛ#p*Ü14qkZç5ïë †°5Ï%ÍÛ<Õ¤×Ô¥ê†C Õ´¼ú$ƒÖ“”]Ù¬qÞÚ[4©ý!ûÏ—Áb쳐XµA¬â~`›Çr¸8ìùÝ䫦<>ä÷«?xs´ÇÑ /á;¹øüÊÈÙà{"@Žïzâ¬[âß‚ U_<ÇŸ½4èN˜ú61®qŠu ¦þF£»äJ_ˆÙÎ~ ÞAã–݄ϗrŠD;xTž‘ô`É«…suãO`?³à™ô Lý#Íc5öoæØ‚y´´÷«ZR§<&JÇ+éâô´€i!Àˆ0æAoàðLèÖ-2ŸõW.’t^–(KÁmHµV@xÜÇy®Ñø­â^:Ú3w· 7½¹°ñ¸â¹®:',«Mœ—n­Á+Ãbš LÈ‘ÄnRÓÅœ%¦²‰¨ùQ:¤f‚ "PÕtô¸…cæl…&˜Ú˜Ôkv‹ž+vŠ,=¢v­6—Xy*¥t£«<™:“aîϲ=¦6rO]XI¿Œ÷¤zÚ­›¶ 6÷”w\d ü~v®ˆÌk«^m<ÿ ¢‰Õ\)ùºŽ;… lîÙÅEŠ®cѾ@vnMÏ,¼“ñ•ŽBxðÃzãÇç%3ˆ"}Ù•Åî> BÉú;Ò]V+P˜F_´ßé> Øše|ï‡ÄOmFæÇ ãqÞ$/xÐx­z`ï9"œÜij‚!7.\Td…9M‡•iŽ‹¾‘50ÞŽn¥ß4ÉôO ¹*í^QêËÜÇÌ8=ާs‰'ÂëÙ«á%Pú[O †ÅP¯Vsް.‰,kc¶ ¬A9n˜XÎ-ÞšN["¹QÕ‰ƒMýÁߺXJæÍaLj¾×Ãmã¾ãÚ uñÒþåQô¦¥ /ÄUx:‚ÍÜ’ Đ©ØÝ3V¨‰ÕnÐ6ó*óúK­«…c ¯U òhsý­jóÔj#,ímŒRµ«lbïUTŒÑ8†Ä0œÏr`ð¡¬É Ї ë"À² ™ 6¥ f¶ ¢ÚoܱԷ-<Àî)†a¶ž'Ú»¨TXqØæ¶÷YÄHy˜9ÈIW­YÀuMFë ºÏ’AqÌ4·/Ú †ô'i$øä­=Ä Ý|öK×40è|È6p‘0§)o¥ctî§H+CA-“ xØ|ÐXАç l8íºð3Ø:³¤¬KX¯UÿÙ 3 &IYIh0@sdZy ddlZWnek r$YnXddlZddlZddlZddlZddlZddlm Z ddl Z ddl Z ddl m Z ddl mZddlmZddlmZddlmZy ddlZWnek rddlZYnXdd lmZddlZejd ZdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldZdmZdnZdoZd/d0Z d1ffd2d3Z!ffd4d5Z"d6d7Z#d8d9Z$d:d;Z%dd?Z'd@dAZ(dBdCZ)dDdEZ*dFdGZ+dHdIZ,GdJdKdKe Z-GdLdMdMe.Z/dS)paThe code in this module is mostly copy/pasted out of the distutils2 source code, as recommended by Tarek Ziade. As such, it may be subject to some change as distutils2 development continues, and will have to be kept up to date. I didn't want to use it directly from distutils2 itself, since I do not want it to be an installation dependency for our packages yet--it is still too unstable (the latest version on PyPI doesn't even install). N) defaultdict)log)errors)manifest_maker)dist) extension) extra_filesz\s*(.*?)\s*\((.*)\)\s*$metadata home_pagesummary description classifierplatform requires_distsetup_requires_dist provides_distobsoletes_distfiles packages_rootmodulesglobalcommandsbackwards_compatuse_2to3zip_safe tests_require)nameversionZauthorZ author_emailZ maintainerZmaintainer_emailZurlr keywordslong_descriptionZ download_url classifiers platformslicenseinstall_requiressetup_requiresprovides obsoletes package_dirpackages package_datanamespace_packages data_filesscripts py_modulescmdclassrrrdependency_linksinclude_package_datar r!r#r%r&r*r(r)r+r,r-r/r$r.r0rc Cs|jd}t|d}|d|}|d}xf|dkrytdj||gd}PWq,tk r|dkrh|d8}|d|}||}d}Yq,Xq,Wx@||dD]0}yt||}Wqtk rt|YqXqW|S)zResolve a name like ``module.object`` to an object and return it. Raise ImportError if the module or name is not found. .Nr)fromlist)splitlen __import__join ImportErrorgetattrAttributeError)rpartsZcursor module_nameZ attr_nameZretpartr@*/usr/lib/python3/dist-packages/pbr/util.py resolve_names*     rBz setup.cfgcCstjdkrtj}ntj}tjj|s>tj dtjj ||j |i}xF|j D]:}t ||<x*|j|D]\}}||||jdd<qpWqVWt|dd}t|dd }|rtjj |}tjjd |z"|rjd d t|D}x|D]z} t| } y | |Wqtk r$tjd Yqtjd} tjd| | ftjtjtjdYqXqWtjj|t||} d| d<d| d<t|t |} | r| | d<t!|}|r|| d<t"| t|dd}|rt#j$t|Wd|rtjj%d X| S)aDistutils2 to distutils1 compatibility util. This method uses an existing setup.cfg to generate a dictionary of keywords that can be used by distutils.core.setup(kwargs**). :param file: The setup.cfg path. :parm script_args: List of commands setup.py was called with. :raises DistutilsFileError: When the setup.cfg file is not found. zfile '%s' does not exist-_r setup_hooksrrrcSsg|]}|dkr|qS)zpbr.hooks.setup_hookr@).0hookr@r@rA szcfg_to_args..z)setup hook %s terminated the installationr2z#setup hook %s raised exception: %s Tr0Fr ext_modules entry_pointsrN)rCrD)&sys version_info configparser ConfigParserZSafeConfigParserospathexistsrZDistutilsFileErrorabspathreadZsectionsdictitemsreplacehas_get_optioninsertsplit_multilinerB SystemExitrerrorexc_info traceback format_excexitpbrhooksZ setup_hooksetup_cfg_to_setup_kwargsregister_custom_compilersget_extension_modulesget_entry_points wrap_commandsrZset_extra_filespop)rR script_argsparserconfigsectionkvaluerGr'rIZhook_fnekwargsrKrLZfiles_extra_filesr@r@rA cfg_to_argssd               rrc# Csi}i}xtD]}tt|dkr4t|\}}n tt|dkrTt|d}|}t|||}|s|dkrt||d}|rt|}d}x8|D]0} t| } z|| jjd7}Wd| jXqW|}nq|tkrt |}|t krt|}n"|t kr|j d$kr d}nd}|r|d%kr,dd|D}|dkrg} d} xD|D]<} t j| | }|jdj}|jdj}| j||fqDW| |d<n*|dkrd|i}n|d&krti}d}d}x|D]}d|kr*|jdd\}}|j|j}}||kr||}|j|jn|j}||j<n(|r@tjd|n|j|jjd}qW|dkrn|j}|}nF|dkri}tj}x*|D]"}t|}||}|||j<qW|}|||<qWd|krFd} |d}xh|D]`}g}t||}x@|D]8} t j| | }|jdj}|jd}|j||fqW|||<qWi} x|D]}!x||!D]z\} }|rd|!|f}"d |krytjd!|r|!}"Wn"tk rtjd"YnXn|!}"| j|"gj| q^WqPW| j dg|d<| |d#<|S)'zqProcesses the setup.cfg options and converts them to arguments accepted by setuptools' setup() function. rDr2rrdescription_filer4z Ntruet1yesyTFr#rcSsg|]}tjd|qS)z\1\2)_VERSION_SPEC_REsub)rHZpredr@r@rArJQsz-setup_cfg_to_setup_kwargs..z6(?P[^;]*);?(?P[^#]*?)(?:\s*#.*)?$package env_markerr'r)r+=z1malformed package_data first line %r (misses "=")r.extrasz6(?P[^:]*):?(?P[^#]*?)(?:\s*#.*)?$z%s:(%s)Z bdist_wheelz(%s)zMarker evaluation failed, see the following error. For more information see: http://docs.openstack.org/developer/pbr/compatibility.html#evaluate-markerextras_require)rtrurvrwrx)r#r)r)r+)!D1_D2_SETUP_ARGSr7rYr[openrUstripclose CSV_FIELDS split_csv MULTI_FIELDS BOOL_FIELDSlowerrematchgroupappendr6extendrDistutilsOptionErrorrWst_dist DistributionrBget_command_name pkg_resourcesZevaluate_marker SyntaxErrorrr] setdefaultri)#rlrjrqZall_requirementsargrmoptionZ in_cfg_valuerofilenamersr#Zrequirement_patternZ requirementmZrequirement_packager|r+ firstlineprevlinekeyr.rZcls_nameclscmdr~ZextraZextra_requirementsZ requirementsZ extras_valuerZ req_groupZ extras_keyr@r@rArds                                rdcCst|dd}|rt|}xx|D]p}t|}t|dr<|j}n|j}t|drT|j}nd|}|j}tj j }||j|f||<t j |t j d|<qWdS)zHandle custom compilers; this has no real equivalent in distutils, where additional compilers could only be added programmatically, so we have to hack it in somehow. r compilersrr zcustom compiler %sz distutils.N) rYr[rBhasattrr__name__r __module__ distutilsZ ccompilerZcompiler_classrMr)rlrZcompilerrZdescr>Zccr@r@rAres    rec Cs:d}g}x*|D] }d|kr,|jdd}n |jdd}dd|D}t|dko\|ddkri}x|D]}t|||}|s~qht|}|dkrg}xX|D]P} | jdd} t| dkr| djdf} n| dj| djf} |j| qW|}|||<qhW|rd|kr|d|d<|jtj|jdf|qW|S)zHandle extension modulessources include_dirs define_macros undef_macros library_dirs librariesruntime_library_dirs extra_objectsextra_compile_argsextra_link_argsexport_symbols swig_optsdepends:r2r}cSsg|] }|jqSr@)r)rHlr@r@rArJsz)get_extension_modules..rDrrNr) rrrrrrrrrrrrr) r6r7rYr[rrrZ Extensionri) rlZEXTENSION_FIELDSrKrmZlabelsZext_argsZfieldroZmacrosZmacror@r@rArfsT           rfcCs&d|kr iStdd|djDS)aProcess the [entry_points] section of setup.cfg to handle setuptools entry points. This is, of course, not a standard feature of distutils2/packaging, but as there is not currently a standard alternative in packaging, we provide support for them. rLcss|]\}}|t|fVqdS)N)r[)rHrror@r@rA 'sz#get_entry_points..)rVrW)rlr@r@rArgsrgc Cs"tj}|jxHtjdD]:}|j|jkrt|dr@|j}n |j d}||j|j<qWx|j D]\}}i}xZ|j |j D]H\}}|d}|j ds|j dr|jdd\} } |j| i} || | <qW|sqdd|kr||dkr|d|}n |j|}t|||} | |jdi|<qdWdS) Nzdistutils.commandsresolveFr2z pre_hook.z post_hook.r1r.)rrZparse_config_filesrZiter_entry_pointsrr.rrloadZget_command_listZget_option_dictrW startswithr6rZget_command_class wrap_command) rqrZepr.rrFrcZoptvalZ hook_typealiasZ hook_dictZ new_cmdclassr@r@rArh+s.        rhcCs2|fdd}t||tf|t|jd|jddS)NcSs"|jd|j||jddS)Npre_hook post_hook)run_command_hooksrun)selfr.r@r@rArXs  zwrap_command..runrr)rrrr)typeobjectrget)rr.rcrr@r@rArWs   rcCs|d krtd|t||d}|dkr,dSx|jD]}t|try t|}Wqtk rtjd}t j d||fYqXn|}t |dst j d|t jd |||jy ||Wq6tjd}t jd ||ft jtjtjdYq6Xq6WdS) zRun hooks registered for that command and phase. *cmd_obj* is a finalized command object; *hook_kind* is either 'pre_hook' or 'post_hook'. rrzinvalid hook kind: %rNr2zcannot find hook %s: %s__call__zhook %r is not callablezrunning %s %s for command %szhook %s raised exception: %s )rr) ValueErrorr;values isinstancestrrBr:rMr^rZDistutilsModuleErrorrrrinforr]r_r`ra)Zcmd_objZ hook_kindrcrIZhook_objerrrpr@r@rArcs2        rcCs(||kr |||kr |||SdSdS)NFr@)rlrmrr@r@rArYs rYcCs"dddd|jdDD}|S)z3Special behaviour when we have a multi line optionscSsg|] }|r|qSr@r@)rHelementr@r@rArJsz#split_multiline..css|]}|jVqdS)N)r)rHrr@r@rArsz"split_multiline.. )r6)ror@r@rAr[sr[cCs"dddd|jdDD}|S)z8Special behaviour when we have a comma separated optionscSsg|] }|r|qSr@r@)rHrr@r@rArJszsplit_csv..css|]}|jVqdS)N)r)rHchunkr@r@rArszsplit_csv..,)r6)ror@r@rArsrcsfdd}|S)z[A function decorator to monkey-patch a method of the same name on the given class. cs<t|jd}|r8t|d r8t|d|t|j||S)NZ_orig)r;rrsetattr)funcZorig)rr@rAwrappers  z#monkeypatch_method..wrapperr@)rrr@)rrAmonkeypatch_methods rcs"eZdZdZdfdd ZZS)DefaultGetDictzXLike defaultdict, but the get() method also sets and returns the default value. Ncs"|dkr|j}tt|j||S)N)default_factorysuperrr)rrdefault) __class__r@rArszDefaultGetDict.get)N)rr __qualname____doc__r __classcell__r@r@)rrArsrcs(eZdZdZddZfddZZS) IgnoreDictzA dictionary that ignores any insertions in which the key is a string matching any string in `ignore`. The ignore list can also contain wildcard patterns using '*'. cCs$tjddjdd|D|_dS)Nz(%s)|cSsg|]}|jddqS)*z.*)rX)rHZpatr@r@rArJsz'IgnoreDict.__init__..)rcompiler9_IgnoreDict__ignore)rignorer@r@rA__init__s zIgnoreDict.__init__cs&|jj|rdStt|j||dS)N)rrrr __setitem__)rrr)rr@rArs zIgnoreDict.__setitem__)rrrrrrrr@r@)rrArsr)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)r)rr)rr)rr)rr)rr)r)r)r r!r#r%r&r*r(r)r+r,r-r/r$rr.)rrr0)r)0rZmultiprocessingr:ZloggingrQrrMr_ collectionsrZdistutils.ccompilerrrrrZsetuptools.command.egg_inforZ setuptoolsrrrrPrOrbrZ pbr.hooksrryrrrrrBrrrdrerfrgrhrrrYr[rrrrVrr@r@r@rA5s           \ -"5, )