3 Õì2a $ã@sddlmZmZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddddd gZ e j d kpŠeed ƒoŠeed ƒoŠeejd ƒZGdd„dejƒZejZd5dd „Ze j d k�re dddg7Z ddlZd6dd„Zdd„Zdd„Zdd„ZGdd„deƒZnHe dddg7Z ddlZe j dkZdd„Zdd„Zdd„Zd d„Zd!d„Zd"d#„Z Gd$d%„d%ƒZ!ee"e!ƒj#ƒe ƒd&d'„Z$ee"e%j&ƒe$ƒee"e'j(ƒe$ƒd(d)„Z)d*d+„Z*eej+e)ƒe j d k�râd,d-„Z,d.d/„Z-eeje,ƒnd0d-„Z,d1d/„Z-eeje,ƒGd2d3„d3ed4�Z.dS)7é)ÚABCMetaÚabstractmethodNé)ÚcontextÚ send_handleÚ recv_handleÚForkingPicklerÚregisterÚdumpÚwin32ZCMSG_LENÚ SCM_RIGHTSÚsendmsgcsFeZdZiZejZ‡fdd„Zedd„ƒZ eddd„ƒZ e j Z ‡Z S) rcs*tƒj|Ž|jjƒ|_|jj|jƒdS)N)ÚsuperÚ__init__Ú_copyreg_dispatch_tableÚcopyÚdispatch_tableÚupdateÚ_extra_reducers)ÚselfÚargs)Ú __class__©ú./opt/alt/python36/lib64/python3.6/reduction.pyr&s  zForkingPickler.__init__cCs||j|<dS)N)r)ÚclsÚtypeÚreducerrrr +szForkingPickler.registerNcCs tjƒ}|||ƒj|ƒ|jƒS)N)ÚioÚBytesIOr Ú getbuffer)rÚobjÚprotocolÚbufrrrÚdumps0szForkingPickler.dumps)N)Ú__name__Ú __module__Ú __qualname__rÚcopyregrrrÚ classmethodr r#ÚpickleÚloadsÚ __classcell__rr)rrr!s   cCst||ƒj|ƒdS)N)rr )r Úfiler!rrrr :sÚ DupHandleÚ duplicateÚ steal_handleFcCs*|dkrtjƒ}tjtjƒ||d|tjƒS)Nr)Ú_winapiÚGetCurrentProcessÚDuplicateHandleÚDUPLICATE_SAME_ACCESS)ÚhandleZtarget_processZ inheritablerrrr.Gs  cCsBtjtjd|ƒ}z tj||tjƒddtjtjBƒStj|ƒXdS)NFr)r0Ú OpenProcessÚPROCESS_DUP_HANDLEr2r1r3ÚDUPLICATE_CLOSE_SOURCEÚ CloseHandle)Z source_pidr4Zsource_process_handlerrrr/Os  cCst|tj|ƒ}|j|ƒdS)N)r-r0r3Úsend)Úconnr4Údestination_pidZdhrrrr[scCs |jƒjƒS)N)ÚrecvÚdetach)r:rrrr`sc@seZdZddd„Zdd„ZdS)r-Nc Cs\|dkrtjƒ}tjtjd|ƒ}ztjtjƒ|||ddƒ|_Wdtj|ƒX||_ ||_ dS)NFr) ÚosÚgetpidr0r5r6r2r1Ú_handler8Ú_accessÚ_pid)rr4ÚaccessÚpidÚprocrrrrfs zDupHandle.__init__c CsV|jtjƒkr|jStjtjd|jƒ}ztj||jtjƒ|j dtj ƒStj |ƒXdS)NF) rBr>r?r@r0r5r6r2r1rAr7r8)rrErrrr=us  zDupHandle.detach)N)r$r%r&rr=rrrrr-ds ÚDupFdÚsendfdsÚrecvfdsÚdarwincCsVtjd|ƒ}tt|ƒdgƒ}|j|gtjtj|fgƒtrR|jdƒdkrRt dƒ‚dS)NÚiéróAz%did not receive acknowledgement of fd) ÚarrayÚbytesÚlenr ÚsocketÚ SOL_SOCKETr Ú ACKNOWLEDGEr<Ú RuntimeError)ÚsockZfdsÚmsgrrrrG�s  c CsÜtjdƒ}|j|}|jdtj|ƒƒ\}}}}| r>| r>t‚yxtrN|jdƒt|ƒdkrjt dt|ƒƒ‚|d\}} } |tj kr´| tj kr´t| ƒ|jdkr¢t ‚|j | ƒt|ƒSWnt tfk rÎYnXt dƒ‚dS)NrJrrLzreceived %d items of ancdatarzInvalid data received)rMÚitemsizeZrecvmsgrPZ CMSG_SPACEÚEOFErrorrRr9rOrSrQr Ú ValueErrorZ frombytesÚlistÚ IndexError) rTÚsizeÚaZ bytes_sizerUZancdataÚflagsZaddrZ cmsg_levelZ cmsg_typeZ cmsg_datarrrrH•s*          c Cs2tj|jƒtjtjƒ�}t||gƒWdQRXdS)N)rPÚfromfdÚfilenoÚAF_UNIXÚ SOCK_STREAMrG)r:r4r;Úsrrrr®sc Cs0tj|jƒtjtjƒ�}t|dƒdSQRXdS)Nrr)rPr^r_r`rarH)r:rbrrrr³scCsFtjƒ}|dk r |j|j|ƒƒStr:ddlm}|j|ƒStdƒ‚dS)Nr)Úresource_sharerz&SCM_RIGHTS appears not to be available)rZget_spawning_popenrFZduplicate_for_childÚHAVE_SEND_HANDLEÚrcrX)ÚfdZ popen_objrcrrrrF¸s  cCs2|jdkrt|j|jjffSt|j|jjffSdS)N)Ú__self__ÚgetattrrÚ__func__r$)ÚmrrrÚ_reduce_methodÇs rkc@seZdZdd„ZdS)Ú_CcCsdS)Nr)rrrrÚfÍsz_C.fN)r$r%r&rmrrrrrlÌsrlcCst|j|jffS)N)rhÚ __objclass__r$)rjrrrÚ_reduce_method_descriptorÒsrocCst|j|j|jpiffS)N)Ú_rebuild_partialÚfuncrÚkeywords)ÚprrrÚ_reduce_partialØsrtcCstj|f|ž|ŽS)N)Ú functoolsÚpartial)rqrrrrrrrpÚsrpcCsddlm}t||ƒffS)Nr)Ú DupSocket)rcrwÚ_rebuild_socket)rbrwrrrÚ_reduce_socketãs rycCs|jƒS)N)r=)ZdsrrrrxæsrxcCs"t|jƒƒ}t||j|j|jffS)N)rFr_rxÚfamilyrÚproto)rbÚdfrrrryës cCs|jƒ}tj||||d�S)N)r_)r=rP)r|rzrr{rfrrrrxîsc@s`eZdZeZeZeZeZeZej dkr4e Z e Z e Z n e Z eZeZeZeZeZeZeZdd„ZdS)ÚAbstractReducerr cGsNtttƒjƒtƒtttjƒtƒtttj ƒtƒtt j t ƒtt j tƒdS)N)r rrlrmrkrYÚappendroÚintÚ__add__rurvrtrPry)rrrrrr s  zAbstractReducer.__init__N)r$r%r&rr r rrÚsysÚplatformr/r.r-rGrHrFrkrorpryrxrrrrrr}ôs$ r})Ú metaclass)N)NF)/Úabcrrr'rurr>r)rPr�rerÚ__all__r‚ÚhasattrrdZPicklerrr r r0r.r/rrÚobjectr-rMrRrGrHrFrkrlrrmrorYr~rr€rtrprvryrxr}rrrrÚ sb         #