§ {<ˆjãóº—dZddlZddlZddlZddlZddlZddlZddlmZm Z dZ ej j Z e jZGd„de ¦«ZGd„d¦«Zd ed dfd „ZdS) z>Monkey-patching to add multiprocessing support for coverage.pyéN)ÚAnyÚDictz_coverage$patchedcó—eZdZdZd„ZdS)ÚProcessWithCoveragezÃEÅA?GN)Ú__name__Ú __module__Ú __qualname__Ú__doc__r#©ór"rrs)€€€€€ØFÐFð:ð:ð:ð:ð:r)rcó^—eZdZdZdeddfd„Zdeeeffd„Zdeeefddfd„ZdS) ÚStowawayzLAn object to pickle, so when it is unpickled, it can apply the monkey-patch.ÚrcfileÚreturnNcó—||_dS)N©r,)rr,s r"Ú__init__zStowaway.__init__7s €ØˆŒ ˆ ˆ r)có—d|jiS©Nr,r/)rs r"Ú __getstate__zStowaway.__getstate__:s€Ø˜$œ+Ð&Ð&r)Ústatecó0—t|d¦«dSr2)Úpatch_multiprocessing)rr4s r"Ú __setstate__zStowaway.__setstate__=s€Ý˜e HœoÑ.Ô.Ð.Ð.Ð.r)) r$r%r&r'Ústrr0rr3r7r(r)r"r+r+5s‰€€€€€ØVÐVð˜sð tððððð'˜d 3¨ 8œnð'ð'ð'ð'ð/ $ s¨C x¤.ð/°Tð/ð/ð/ð/ð/ð/r)r+r,r-c󤇇—ttt¦«rdStjt _t j ‰¦«t j d< ddlm }|j Šdtdtttffˆˆfd„ }||_ n#tt f$rYnwxYwt#ttd¦«dS) zàMonkey-patch the multiprocessing module. This enables coverage measurement of processes started by multiprocessing. This involves aggressive monkey-patching. `rcfile` is the path to the rcfile being used. NÚCOVERAGE_RCFILEr)ÚspawnÚnamer-cóB•—‰|¦«}t‰¦«|d<|S)z@Get the original preparation data, and also insert our stowaway.Ústowaway)r+)r<ÚdÚoriginal_get_preparation_datar,s €€r"Ú"get_preparation_data_with_stowawayzApatch_multiprocessing..get_preparation_data_with_stowaway`s)ø€à-Ð-¨dÑ3Ô3ˆAÝ$ VÑ,Ô,ˆAˆj‰M؈Hr)T)ÚhasattrÚmultiprocessingÚPATCHED_MARKERrr#ÚOriginalProcessÚosÚpathÚabspathÚenvironr;Úget_preparation_datar8rrÚ ImportErrorÚAttributeErrorÚsetattr)r,r;rAr@s` @r"r6r6Asîøø€õ�¥Ñ/Ô/ð؈å!4Ô!?…OÔõ%'¤G§O¢O°FÑ$;Ô$;…B„JÐ Ñ!ð HØ)Ð)Ð)Ð)Ð)Ð)Ø(-Ô(BÐ%ð µSð ½TÅ#ÅsÀ(¼^ð ð ð ð ð ð ð ð &HˆÔ"Ð"øõ �Ð (ð ð ð Ø ˆð øøøõ �O�^¨TÑ2Ô2Ð2Ð2Ð2sÁ" BÂB2Â1B2)r'rCÚmultiprocessing.processrFÚos.pathrrÚtypingrrrDÚprocessÚ BaseProcessrEr#rrr+r8r6r(r)r"úrSsððEÐDàÐÐÐØÐÐÐØ € € € Ø€€€Ø € € € ØÐÐÐàÐÐÐÐÐÐÐð %€ð"Ô)Ô5€Ø$Ô/Ðð:ð:ð:ð:ð:˜/ñ:ô:ð:ð: /ð /ð /ð /ð /ñ /ô /ð /ð'3 #ð'3¨$ð'3ð'3ð'3ð'3ð'3ð'3r)