
    ⾙h$                        d dl Z d dlZd dlZd dlZd dlZd dlZddlmZ g dZej                  d    dk(  Z
ej                  dk(  xs)  eed      xr  eed      xr  eej                  d	      Ze
rd dlZ G d
 dej                        Zn G d dej                        Zej"                  Zd'dZej                  dk(  r%eg dz  ZddlmZ d(dZd Zd Zd Z G d d      Zn)eg dz  Zd dlZej                  dk(  Zd Zd Zd Zd Zd Zd Z G d d      Z  e e! e        jD                        e       d  Z# e e!e$jJ                        e#        e e!e&jN                        e#       d! Z(d" Z) ee jT                  e(       ej                  dk(  rd# Z+d$ Z, eej                  e+       yd% Z+d& Z, eej                  e+       y))    N   )context)send_handlerecv_handleForkingPicklerregisterdump   win32CMSG_LEN
SCM_RIGHTSsendmsgc                        e Zd ZdZi Zej                  Z fdZe	d        Z
e	dd       Ze	dd       Zej                  Z xZS )r   )Pickler subclass used by multiprocessing.c                     t        t        | 
  |  | j                  j	                         | _        | j
                  j                  | j                         y N)superr   __init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducers)selfargs	__class__s     N/var/www/Befach/backend/env/lib/python3.12/site-packages/billiard/reduction.pyr   zForkingPickler.__init__*   sC    .$0$7"&">">"C"C"ED&&t';';<    c                 "    || j                   |<   y)&Register a reduce function for a type.N)r   )clstypereduces      r   r   zForkingPickler.register/   s     )/C%r   c                 z    t        j                         } | ||      j                  |       |j                         S r   )ioBytesIOr	   	getbufferr!   objprotocolbufs       r   dumpszForkingPickler.dumps4   s.    **,CX##C(==?"r   c                 @    | j                  |j                               S r   )loadsr'   r!   r+   r*   s      r   loadbufzForkingPickler.loadbuf:   s    99S]]_--r   r   )__name__
__module____qualname____doc__r   copyregr   r   r   classmethodr   r,   r0   pickler.   __classcell__)r   s   @r   r   r   %   sc    7")"8"8	=
 
	/ 
	/ 
	# 
	#
 
	. 
	. r   r   c                       e Zd ZdZej
                  j                  j                         Zed        Z	edd       Z
edd       Zeej                  fd       Zy)r   r   c                 .    fd}|| j                   |<   y)r    c                 :     |      } | j                   |d|i y )Nr)   )save_reduce)r   r)   rvr#   s      r   
dispatcherz+ForkingPickler.register.<locals>.dispatcherI   s!    C[   2.S.r   N)dispatch)r!   r"   r#   r>   s     ` r   r   zForkingPickler.registerF   s    / ",CLLr   Nc                 z    t        j                         } | ||      j                  |       |j                         S r   )r%   r&   r	   getvaluer(   s       r   r,   zForkingPickler.dumpsN   s.    **,CX##C(<<>!r   c                 @    | j                  |j                               S r   )r.   rA   r/   s      r   r0   zForkingPickler.loadbufT   s    99S\\^,,r   c                 f    t        |t        j                        r|j                         } ||      S r   )
isinstancer%   r&   rA   )r!   r+   r.   s      r   r.   zForkingPickler.loadsX   s%    #rzz*lln:r   r   )r1   r2   r3   r4   r7   Picklerr?   r   r6   r   r,   r0   r.    r   r   r   r   B   sr    7>>**//1		, 
	, 
	" 
	"
 
	- 
	- 
"(,, 	 
	r   c                 :    t        ||      j                  |        y)z3Replacement for pickle.dump() using ForkingPickler.N)r   r	   )r)   filer*   s      r   r	   r	   `   s    4"'',r   )	DupHandle	duplicatesteal_handle)_winapic                     |t        j                         }t        j                  t        j                         | |d|t         j                        S )z<Duplicate a handle.  (target_process is a handle not a pid!)r   )rL   GetCurrentProcessDuplicateHandleDUPLICATE_SAME_ACCESS)handletarget_processinheritables      r   rJ   rJ   m   sF    !$668N&&%%'{G99; 	;r   c           	      B   t        j                  t         j                  d|       }	 t        j                  ||t        j                         ddt         j
                  t         j                  z        t        j                  |       S # t        j                  |       w xY w)z5Steal a handle from process identified by source_pid.Fr   )rL   OpenProcessPROCESS_DUP_HANDLErO   rN   rP   DUPLICATE_CLOSE_SOURCECloseHandle)
source_pidrQ   source_process_handles      r   rK   rK   u   s~     ' 3 3&&z!;	7**%v))+Q--0N0NNP
  56G 56s   A
B Bc                 \    t        |t        j                  |      }| j                  |       yz&Send a handle over a local connection.N)rI   rL   rP   send)connrQ   destination_piddhs       r   r   r      s!    vw<<oN		"r   c                 >    | j                         j                         S ))Receive a handle over a local connection.)recvdetach)r^   s    r   r   r      s    yy{!!##r   c                       e Zd ZdZddZd Zy)rI   zPicklable wrapper for a handle.Nc                 X   |t        j                         }t        j                  t        j                  d|      }	 t        j
                  t        j                         |||dd      | _        t        j                  |       || _	        || _
        y # t        j                  |       w xY w)NFr   )osgetpidrL   rU   rV   rO   rN   _handlerX   _access_pid)r   rQ   accesspidprocs        r   r   zDupHandle.__init__   s    { iik&&w'A'A5#ND*&66--/D&% 4 ##D)!DLDI ##D)s   1B B)c                    | j                   t        j                         k(  r| j                  S t	        j
                  t        j                  d| j                         }	 t	        j                  || j                  t	        j                         | j                  dt        j                        t	        j                  |       S # t	        j                  |       w xY w)z1Get the handle.  This should only be called once.F)rk   rg   rh   ri   rL   rU   rV   rO   rN   rj   rW   rX   )r   rn   s     r   rd   zDupHandle.detach   s     yyBIIK'||#&&w'A'A5'+yy2D*..$,,(A(A(CLL%)G)GI ##D)##D)s   AC Cr   )r1   r2   r3   r4   r   rd   rF   r   r   rI   rI      s    -		*r   rI   )DupFdsendfdsrecvfdsdarwinc                    t        j                   d|      }t        t        |      dz  g      }| j                  |gt        j
                  t        j                  |fg       t        r | j                  d      dk7  rt        d      yy)z,Send an array of fds over an AF_UNIX socket.i   r      Az%did not receive acknowledgement of fdN)
arraybyteslenr   socket
SOL_SOCKETr   ACKNOWLEDGErc   RuntimeError)sockfdsmsgs      r   rq   rq      sr    kk#s#SX^$%cUf//1B1BCHIJ499Q<4/FGG 0;r   c                    t        j                   d      }|j                  |z  }| j                  dt        j                  |            \  }}}}|s|st
        	 t        r| j                  d       t        |      dk7  rt        dt        |      z        |d   \  }}	}
|t        j                  k(  rf|	t        j                  k(  rSt        |
      |j                  z  dk7  rt        |j                  |
       t        |      dz  |d   k(  sJ t        |      S t        d      # t        t        f$ r Y t        d      w xY w)z/Receive an array of fds over an AF_UNIX socket.ru   r   rw   zreceived %d items of ancdatar   rv   zInvalid data received)rx   itemsizerecvmsgr{   r   EOFErrorr}   r]   rz   r~   r|   r   
ValueError	frombyteslist
IndexError)r   sizea
bytes_sizer   ancdataflagsaddr
cmsg_level	cmsg_type	cmsg_datas              r   rr   rr      s2   KKZZ$&
$(LLvz*%
!WeT 7N			$7|q "2S\A  07qz,J	9f///!2!22y>AJJ.!3$$I&1v|s1v---Aw 233 J' 	233	s   B=D# #D?>D?c                     | j                         }t        j                  |t        j                  t        j                        5 }t        ||g       ddd       y# 1 sw Y   yxY wr\   )filenor{   fromfdAF_UNIXSOCK_STREAMrq   )r^   rQ   r_   fdss        r   r   r      sJ    [[]]]2v~~v/A/AB 	!aAx 	! 	! 	!s   AA$c                     | j                         }t        j                  |t        j                  t        j                        5 }t        |d      d   cddd       S # 1 sw Y   yxY w)rb   r   r   N)r   r{   r   r   r   rr   )r^   r   r   s      r   r   r      sL    [[]]]2v~~v/A/AB 	$a1a=#	$ 	$ 	$s   AA&c                     t        j                         }| |j                  |j                  |             S t        rddlm} |j                  |       S t        d      )zReturn a wrapper for an fd.r   )resource_sharerz&SCM_RIGHTS appears not to be available)r   get_spawning_popenrp   duplicate_for_childHAVE_SEND_HANDLE r   r   )r   	popen_objr   s      r   rp   rp      sS    ..0	 ??9#@#@#DEE)"((,,EFFr   c                     | j                   (t        | j                  | j                  j                  ffS t        | j                   | j                  j                  ffS r   )__self__getattrr   __func__r1   ms    r   _reduce_methodr      sH    zzajj&9&9:::QZZ%8%8999r   c                       e Zd Zd Zy)_Cc                      y r   rF   )r   s    r   fz_C.f   s    r   N)r1   r2   r3   r   rF   r   r   r   r      s    r   r   c                 >    t         | j                  | j                  ffS r   )r   __objclass__r1   r   s    r   _reduce_method_descriptorr      s    Q^^QZZ000r   c                 \    t         | j                  | j                  | j                  xs i ffS r   )_rebuild_partialfuncr   keywords)ps    r   _reduce_partialr     s%    affaffajj.>B???r   c                 4    t        j                  | g|i |S r   )	functoolspartial)r   r   r   s      r   r   r   
  s    T5D5H55r   c                 ,    ddl m} t         ||       ffS )Nr   )	DupSocket)r   r   _rebuild_socket)r   r   s     r   _reduce_socketr     s    .1//r   c                 "    | j                         S r   )rd   )dss    r   r   r     s    yy{r   c                     t        | j                               }t        || j                  | j                  | j
                  ffS r   )rp   r   r   familyr"   proto)r   dfs     r   r   r     s2    188:QXXqvvqww ???r   c                 T    | j                         }t        j                  ||||      S )N)r   )rd   r{   )r   r   r"   r   r   s        r   r   r   "  s"    YY[}}VT5<<r   r   )NF)-r   r%   rg   r7   r{   sysr   r   __all__version_infoPY3platformhasattrr   r5   rE   r   r   r	   compatrL   rJ   rK   r   r   rI   rx   r}   rq   rr   rp   r   r   r"   r   r   r   appendint__add__r   r   r   r   r   rF   r   r   <module>r      s    	 	   
 
N	qQ LLG+ 8VZ0 7V\27V]]I6   : 6 ""- <<799G;
7
$* *F ..G ,,(*KH48!$	G :  	bdff~ &1 dkk	5 6 ckk	5 6@6 		O , <<70V]]N+@= V]]N+r   