QhdZddlZddlZddlZddlZddlZddlZddlmZm Z dZ ej j Z e jZGdde ZGddZd ed dfd ZdS) z>Monkey-patching to add multiprocessing support for coverage.pyN)AnyDictz_coverage$patchedceZdZdZdZdS)ProcessWithCoveragezEA?GN)__name__ __module__ __qualname____doc__r#r"rrs)FF:::::r)rc^eZdZdZdeddfdZdeeeffdZdeeefddfdZdS) StowawayzLAn object to pickle, so when it is unpickled, it can apply the monkey-patch.rcfilereturnNc||_dS)Nr,)rr,s r"__init__zStowaway.__init__7s  r)cd|jiSNr,r/)rs r" __getstate__zStowaway.__getstate__:s$+&&r)statec0t|ddSr2)patch_multiprocessing)rr4s r" __setstate__zStowaway.__setstate__=seHo.....r)) r$r%r&r'strr0rr3r7r(r)r"r+r+5sVVst'd38n''''/$sCx./T//////r)r+r,r-ctttrdStjt _t jt j d< ddlm }|j dtdtttfffd }||_ n#tt f$rYnwxYwt#ttddS) zMonkey-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. NCOVERAGE_RCFILEr)spawnnamer-cB|}t|d<|S)z@Get the original preparation data, and also insert our stowaway.stowaway)r+)r<doriginal_get_preparation_datar,s r""get_preparation_data_with_stowawayzApatch_multiprocessing..get_preparation_data_with_stowaway`s)--d33A$V,,AjMHr)T)hasattrmultiprocessingPATCHED_MARKERrr#OriginalProcessospathabspathenvironr;get_preparation_datar8rr ImportErrorAttributeErrorsetattr)r,r;rAr@s` @r"r6r6As//!4!?O%'GOOF$;$;BJ ! H))))))(-(B% S T#s(^        &H""  (      O^T22222s" BB21B2)r'rCmultiprocessing.processrFos.pathrrtypingrrrDprocess BaseProcessrEr#rrr+r8r6r(r)r"rSsED   %")5$/:::::/:::: / / / / / / / /'3#'3$'3'3'3'3'3'3r)