
    Sf                        d dl Z d dlZd dlZd dlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddlm
Z
 dd	lmZ dd
lmZ d dlmZ d dlmZ g dZe j        d          dk    Zerd Znd Z e
j        ej        e           d dD             Zed          eurd ZeD ]Z e
j        ee            G d d          Zdi fdZd Z G d de          Zd Zd Z  G d d          Z! G d d           Z"ej#        ej$        fej%        ej&        fd!Z' G d" d#          Z( G d$ d%e)          Z* G d& d'          Z+d( Z,i fd)Z-	 	 dad+Z. G d, d-          Z/ G d. d/          Z0dbd0Z1 G d1 d2e+          Z2 G d3 d4e+          Z3 G d5 d6e3          Z4 G d7 d8e+          Z5 G d9 d:e+          Z6 G d; d<e+          Z7 G d= d>e+          Z8d?Z9ese9d@z  Z9 e-dAe9          Z: G dB dCe:          Z; e-dDdE          Z<dFZ=ese=dGz  Z= e-dHe=          Z> e-dIdJ          Z?dKdKdKdLdLdMe?_@         G dN dIe?          ZA G dO dPe(          ZBeB                    dQe           eB                    dRe           eB                    dSejC        e5           eB                    dTejD        e3           eB                    dUejE        e3           eB                    dVejF        e3           eB                    dWejG        e3           eB                    dXejH        e4            eIedY          reB                    dYejJ        e6           eB                    dZejK        eA           eB                    d[ee;           eB                    d\eLe<           eB                    d/e0e8           eB                    d]e1e>           eB                    d-e/e7           eB                    dLe2d^_           eB                    dKd^`           dS )c    N)
format_exc   )
connection)context)pool)process)	reduction)util)get_context)Queue)	monotonic)BaseManagerSyncManager	BaseProxyToken   c                 P    t           j         | j        |                                 ffS N)arraytypecodetobytesas    C/var/www/html/env/lib/python3.11/site-packages/billiard/managers.pyreduce_arrayr   *   s    {QZ555    c                 P    t           j         | j        |                                 ffS r   )r   r   tostringr   s    r   r   r   -   s    {QZ666r   c           	      X    g | ]'}t           t          i |                                (S  )typegetattr.0names     r   
<listcomp>r&   1   sC     7 7 7 $72t$$&&'' 7 7 7r   )itemskeysvaluesc                 0    t           t          |           ffS r   )listobjs    r   rebuild_as_listr.   5   s    d3ii]""r   c                   .    e Zd ZdZdZd Zd Zd Zd ZdS )r   z3
    Type to uniquely identify a shared object
    typeidaddressidc                 2    |||c| _         | _        | _        d S r   r0   )selfr1   r2   r3   s       r   __init__zToken.__init__E   s    06,dlDGGGr   c                 *    | j         | j        | j        fS r   r0   r5   s    r   __getstate__zToken.__getstate__H   s    T\4733r   c                 0    |\  | _         | _        | _        d S r   r0   )r5   states     r   __setstate__zToken.__setstate__K   s    /4,dlDGGGr   c                 P    | j         j        d| j        d| j        d| j        dS )Nz(typeid=z
, address=z, id=))	__class____name__r1   r2   r3   r8   s    r   __repr__zToken.__repr__N   s4    ^$$$dkkk4<<<J 	Jr   N)	r@   
__module____qualname____doc__	__slots__r6   r9   r<   rA   r    r   r   r   r   ?   si          ,IE E E4 4 45 5 5J J J J Jr   r   r    c                     |                      ||||f           |                                 \  }}|dk    r|S t          ||          )zL
    Send a message to manager using connection `c` and return response
    #RETURN)sendrecvconvert_to_error)cr3   
methodnameargskwdskindresults          r   dispatchrQ   W   sP     FFB
D$'(((6688LD&y
4
(
((r   c                     | dk    r|S | dk    r't          |          t          u sJ t          |          S | dk    r*t          |          t          u sJ t          d|z            S t          d          S )N#ERROR
#TRACEBACK#UNSERIALIZABLEzUnserializable message: %s
zUnrecognized message type)r!   strRemoteError
ValueError)rO   rP   s     r   rJ   rJ   b   s    x			F||s""""6"""	"	"	"F||s""""9FBCCC5666r   c                       e Zd Zd ZdS )rW   c                 B    dt          | j        d                   z   dz   S )NzM
---------------------------------------------------------------------------
r   zK---------------------------------------------------------------------------)rV   rM   r8   s    r   __str__zRemoteError.__str__q   s     &TYq\):)::XEFr   N)r@   rB   rC   r[   r    r   r   rW   rW   o   s(        G G G G Gr   rW   c                     g }t          |           D ]6}t          | |          }t          |          r|                    |           7|S )z4
    Return a list of names of methods of `obj`
    )dirr"   callableappend)r-   tempr%   funcs       r   all_methodsrb   y   sS     DC  sD!!D>> 	KKKr   c                 4    d t          |           D             S )zP
    Return a list of names of methods of `obj` which do not start with '_'
    c                 *    g | ]}|d          dk    |S )r   _r    r#   s     r   r&   z"public_methods.<locals>.<listcomp>   s!    @@@TaCDr   )rb   r,   s    r   public_methodsrf      s!     A@[--@@@@r   c                       e Zd ZdZg dZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zeee
dZd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )ServerzM
    Server class which runs in a process controlled by a manager object
    )	shutdowncreateaccept_connectionget_methods
debug_infonumber_of_objectsdummyincrefdecrefc                 *   t          |t                    sJ || _        t          j        |          | _        t          |         \  }} ||d          | _        | j        j        | _        ddi| _	        i | _
        t          j                    | _        d S )N   )r2   backlog0Nr    )
isinstancebytesregistryr   AuthenticationStringauthkeylistener_clientlistenerr2   	id_to_objid_to_refcount	threadingRLockmutex)r5   ry   r2   r{   
serializerListenerClients          r   r6   zServer.__init__   s    '5))))) 3G<<*:6& !"===},z* _&&


r   c                 ^   t          j                    | _        | t          j                    _        	 t          j        | j                  }d|_        |	                                 	 | j        
                                s3| j                            d           | j        
                                3n# t          t          f$ r Y nw xY wt          j        t          j        k    r@t#          j        d           t          j        t          _        t          j        t          _        t          j        d           dS # t          j        t          j        k    r@t#          j        d           t          j        t          _        t          j        t          _        t          j        d           w xY w)z(
        Run the server forever
        )targetTr   zresetting stdout, stderrr   N)r   Event
stop_eventr   current_process_manager_serverThreadaccepterdaemonstartis_setwaitKeyboardInterrupt
SystemExitsysstdout
__stdout__r
   debug
__stderr__stderrexit)r5   r   s     r   serve_foreverzServer.serve_forever   sP    $/++48!!1	 't}===H"HONN/0022 ,O((+++ /0022 ,%z2    zS^++
5666 ^
 ^
HQKKKKK	 zS^++
5666 ^
 ^
HQKKKKs1   5D< (AB5 4D< 5C	D< C		D< <A0F,c                     	 	 | j                                         }n# t          $ r Y (w xY wt          j        | j        |f          }d|_        |                                 c)NTr   rM   )r}   acceptOSErrorr   r   handle_requestr   r   )r5   rK   ts      r   r   zServer.accepter   st    	M((**    (;1%HHHAAHGGIII	s    
**c                    dx}x}}	 t          j        || j                   t          j        || j                   |                                }|\  }}}}|| j        v sJ d|z              t          | |          }	  ||g|R i |}d|f}	n@# t          $ r dt                      f}	Y n$w xY w# t          $ r dt                      f}	Y nw xY w	 |	                    |	           n# t          $ r~}
	 |	                    dt                      f           n# t          $ r Y nw xY wt          j        d|	           t          j        d|           t          j        d|
           Y d}
~
nd}
~
ww xY w|                                 dS )z)
        Handle a new connection
        Nz%r unrecognizedrG   rT   zFailure to send message: %rz ... request was %r ... exception was %r)r   deliver_challenger{   answer_challengerI   publicr"   	Exceptionr   rH   r
   infoclose)r5   rK   funcnamerP   requestignorerM   rN   ra   msgexcs              r   r   zServer.handle_request   s    '+**6G	*(DL999'4<888ffhhG+2(FHdDt{***,=,H***4**D*a/$///$// !&)  3 3 3#Z\\23  	/ 	/ 	/.CCC	/		4FF3KKKK 	4 	4 	4jll34444   I3S999I+W555I-s33333333	4 	
					s[   A5B/ >B B,+B,/CCC& &
E.1#DE)
D"E)!D""AE))E.c                    t          j        dt          j                    j                   |j        }|j        }| j        }| j        	                                s	 dx}} |            }|\  }}}	}
||         \  }}}||vr%t          d|dt          |          d|          t          ||          }	  ||	i |
}|o|                    |d          }|r7|                     |||          \  }}t          || j        |          }d||ff}n d|f}n# t"          $ r}d|f}Y d}~nd}~ww xY wn# t          $ rX |d	t%                      f}nB	 | j        |         } || |||g|	R i |
}d|f}n # t"          $ r d	t%                      f}Y nw xY wY nit(          $ rB t          j        d
t          j                    j                   t+          j        d           Y nt"          $ r d	t%                      f}Y nw xY w	 	  ||           n*# t"          $ r  |dt/          |          f           Y nw xY wn# t"          $ r}t          j        dt          j                    j                   t          j        d|           t          j        d|           |                                 t+          j        d           Y d}~nd}~ww xY w| j        	                                dS dS )zQ
        Handle requests from the proxies in a particular process/thread
        z$starting server thread to service %rNzmethod z of z object is not in exposed=#PROXYrG   rS   rT   z$got EOF -- exiting thread serving %rr   rU   zexception in thread serving %rz ... message was %rr   r   )r
   r   r   current_threadr%   rI   rH   r~   r   r   AttributeErrorr!   r"   getrj   r   r2   r   r   fallback_mappingEOFErrorr   r   reprr   r   )r5   connrI   rH   r~   rL   r-   r   identrM   rN   exposed	gettypeidfunctionresr1   ridentrexposedtokenr   r   fallback_funcrP   s                          r   serve_clientzServer.serve_client   s    	
9+--2	4 	4 	4 yyN	/((** =	.3#''
S$&&07-z4*3E*:'WiW,,(.&JJS				77<  
 #3
33/"(D1D11C 'J9==T+J+JF /+/;;tVS+I+I( %fdlF C C'(E):;(#. ! * * *#S/CCCCCC* " ; ; ;%'6CC;(,(=j(I!. $s"59" " "=A" "  )&1$ ; ; ;+Z\\:;    
A$355:< < < 3 3 3#Z\\239DIIII  9 9 9D+T#YY7888889   	:#2449; ; ;	/555	13777

o /((** =	 =	 =	 =	 =	s   AD1 7D ?AD1 
D-D(#D1 (D--D1 1G8 E0/G80F
G8FG8AG8G87G8=H	 H4 	$H0-H4 /H00H4 4
K>A=K  Kc                     |S r   r    r5   r   r   r-   s       r   fallback_getvaluezServer.fallback_getvalue1  s    
r   c                      t          |          S r   rV   r   s       r   fallback_strzServer.fallback_str4  s    3xxr   c                      t          |          S r   )r   r   s       r   fallback_reprzServer.fallback_repr7  s    Cyyr   )r[   rA   	#GETVALUEc                     d S r   r    r5   rK   s     r   ro   zServer.dummy@  s    r   c                    | j         5  g }t          | j                                                  }|                                 |D ]W}|dk    rO|                    d|d| j        |         dt          | j        |         d                   dd                    Xd                    |          cddd           S # 1 swxY w Y   dS )	zO
        Return some info --- useful to spot problems with refcounting
        ru   z  z:       refcount=z
    r   NK   
)	r   r+   r~   r(   sortr_   r   rV   join)r5   rK   rP   r(   r   s        r   rm   zServer.debug_infoC  s$    Z 		% 		%F++--..DIIKKK H HC<<MMM#(55$*=e*D*D*D#&t~e'<Q'?#@#@"#E#E#G H H H 99V$$		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		%s   B+C  CCc                 0    t          | j                  dz
  S )z*
        Number of shared objects
        r   )lenr~   r   s     r   rn   zServer.number_of_objectsR  s     4>""Q&&r   c                    	 t          j        d           |                    d           n#  ddl}|                                 Y nxY w| j                                         dS # | j                                         w xY w)z'
        Shutdown this process
        z!Manager received shutdown messagerG   Nr   N)r
   r   rH   	traceback	print_excr   set)r5   rK   r   s      r   ri   zServer.shutdownX  s    	"J:;;;FF$%%%%	"!!!!!O!!!!!DO!!!!s   ), A& AA& &Bc                 H   | j         5  | j        |         \  }}}}| t          |          dk    r|rJ |d         }	n ||i |}	|t          |	          }|7t	          |          t
          u sJ t          |          t          |          z   }dt          |	          z  }
t          j	        d||
           |	t          |          |f| j        |
<   |
| j        vr
d| j        |
<   |                     ||
           |
t          |          fcddd           S # 1 swxY w Y   dS )z>
        Create a new shared object and return its id
        Nr   r   z%xz&%r callable returned object with id %r)r   ry   r   rf   r!   dictr+   r3   r
   r   r   r~   r   rp   tuple)r5   rK   r1   rM   rN   r^   r   method_to_typeid	proxytyper-   r   s              r   rj   zServer.createe  s    Z 	) 	)f% ;Hg/ 4yyA~~d~~21gh---(--+,--5555w--$/?*@*@@ 2c77NEJ?OOO%(#g,,8H$IDN5!D///-.#E* KK5!!!%..(;	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   DDDDc                 L    t          | j        |j                 d                   S )zL
        Return the methods of the shared object indicated by token
        r   )r   r~   r3   )r5   rK   r   s      r   rl   zServer.get_methods  s      T^EH-a0111r   c                     |t          j                    _        |                    d           |                     |           dS )z=
        Spawn a new thread to serve this connection
        r   N)r   r   r%   rH   r   )r5   rK   r%   s      r   rk   zServer.accept_connection  sB     +/	 ""'	 !!!!r   c                 p    | j         5  | j        |xx         dz  cc<   d d d            d S # 1 swxY w Y   d S )Nr   )r   r   r5   rK   r   s      r   rp   zServer.incref  s    Z 	, 	,&&&!+&&&	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   +//c                    | j         5  | j        |         dk    sJ | j        |xx         dz  cc<   | j        |         dk    r%| j        |= | j        |= t          j        d|           d d d            d S # 1 swxY w Y   d S )Nr   r   zdisposing of obj with id %r)r   r   r~   r
   r   r   s      r   rq   zServer.decref  s    Z 	A 	A&u-2222&&&!+&&&"5)Q..N5)4+>u+E
8%@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As   AA44A8;A8N)r@   rB   rC   rD   r   r6   r   r   r   r   r   r   r   r   ro   rm   rn   ri   rj   rl   rk   rp   rq   r    r   r   rh   rh      sT        N N NF' ' '  ,       DH H HT        !&   % % %' ' '" " "!) !) !)F2 2 2  , , ,A A A A Ar   rh   c                        e Zd ZdgZdZdZdZdS )Statevaluer   r      N)r@   rB   rC   rE   INITIALSTARTEDSHUTDOWNr    r   r   r   r     s$        	IGGHHHr   r   )pickle	xmlrpclibc                       e Zd ZdZi ZeZ	 	 ddZd Zd Z	d Z
dd	Ze	 dd
            Zd ZddZd Zd Zd Zd Zed             Z ed           Ze	 	 dd            ZdS )r   z!
    Base class for managers
    Nr   c                 8   |t          j                    j        }|| _        t          j        |          | _        t                      | _        t          j        | j        _	        || _
        t          |         \  | _        | _        |pt                      | _        d S r   )r   r   r{   _addressrz   _authkeyr   _stater   r   _serializerr|   	_Listener_Clientr   _ctx)r5   r2   r{   r   ctxs        r   r6   zBaseManager.__init__  sw    ?-//7G4W==gg!M%'6z'B$(;==			r   c                 R    t          |           j        | j        | j        | j        ffS r   )r!   from_addressr   r   r   r8   s    r   
__reduce__zBaseManager.__reduce__  s+    T

't/?@B 	Br   c                     | j         j        t          j        k    sJ t	          | j        | j        | j        | j                  S )zX
        Return server object with serve_forever() method and address attribute
        )	r   r   r   r   rh   	_registryr   r   r   r8   s    r   
get_serverzBaseManager.get_server  s@     { EM1111dndmmT%57 7 	7r   c                     t           | j                 \  }} || j        | j                  }t	          |dd           t
          j        | j        _        dS )z>
        Connect manager object to the server process
        r{   Nro   )	r|   r   r   r   rQ   r   r   r   r   )r5   r   r   r   s       r   connectzBaseManager.connect  sR     +4+;<&vdmT];;;tW%%%!Mr   r    c           
      ^   | j         j        t          j        k    sJ |t	          |          st          d          t          j        d          \  }}| j        	                    t          |           j        | j        | j        | j        | j        |||f          | _        d                    d | j        j        D                       }t          |           j        dz   |z   | j        _        | j                                         |                                 |                                | _        |                                 t          j        | j         _        t3          j        | t          |           j        | j        | j        | j        | j         | j        fd	
          | _        dS )z@
        Spawn a server process for this manager object
        Nzinitializer must be a callableF)duplexr   :c              3   4   K   | ]}t          |          V  d S r   r   )r$   is     r   	<genexpr>z$BaseManager.start.<locals>.<genexpr>  s(      AAAQAAAAAAr   -r   rM   exitpriority)r   r   r   r   r^   	TypeErrorr   Piper   Processr!   _run_serverr   r   r   r   _processr   	_identityr@   r%   r   r   rI   r   r
   Finalize_finalize_managerr   ri   )r5   initializerinitargsreaderwriterr   s         r   r   zBaseManager.start  sz    { EM1111"8K+@+@"<=== $666 	))::).$-"FKC * 
 

 AA)@AAAAA!$ZZ036> 	 "M$t**.-+t|-	
 
 
r   c                     | ||  |                      ||||          }|                    |j                   |                                 t	          j        d|j                   |                                 dS )z@
        Create a server, report its address and run it
        Nzmanager serving at %r)_ServerrH   r2   r   r
   r   r   )	clsry   r2   r{   r   r  r  r  servers	            r   r  zBaseManager._run_server  s     "K"" XwDD 	FN### 		)6>:::r   c                 N   | j         j        t          j        k    s
J d            |                     | j        | j                  }	 t          |dd|f|z   |          \  }}|                                 n# |                                 w xY wt          || j        |          |fS )zP
        Create a new shared object; return the token and exposed tuple
        zserver not yet startedr   Nrj   )
r   r   r   r   r   r   r   rQ   r   r   )r5   r1   rM   rN   r   r3   r   s          r   _createzBaseManager._create  s     { EM1113K111||DM4=|AA	"4x$*9t#3T; ;KB JJLLLLDJJLLLLVT]B//88s   A6 6Bc                     | j         <| j                             |           | j                                         sd| _         dS dS dS )zC
        Join the manager process (if it has been spawned)
        N)r  r   is_aliver5   timeouts     r   r   zBaseManager.join(  sU     =$Mw'''=))++ % $ %$% %r   c                     |                      | j        | j                  }	 t          |dd          |                                 S # |                                 w xY w)zS
        Return some info about the servers shared objects and connections
        r   Nrm   r   r   r   rQ   r   r5   r   s     r   _debug_infozBaseManager._debug_info1  sR     ||DM4=|AA	D$55JJLLLLDJJLLLL   A Ac                     |                      | j        | j                  }	 t          |dd          |                                 S # |                                 w xY w)z5
        Return the number of shared objects
        r   Nrn   r  r   s     r   _number_of_objectszBaseManager._number_of_objects;  sS     ||DM4=|AA	D$(;<<JJLLLLDJJLLLLr"  c                     | j         j        t          j        k    r|                                  | j         j        t          j        k    sJ | S r   )r   r   r   r   r   r   r8   s    r   	__enter__zBaseManager.__enter__E  s>    ;--JJLLL{ EM1111r   c                 .    |                                   d S r   )ri   r5   exc_typeexc_valexc_tbs       r   __exit__zBaseManager.__exit__K  s    r   c                     | j                     rt          j        d           	  |||          }	 t          |dd           |                                 n# |                                 w xY wn# t
          $ r Y nw xY w | j        d            | j                     r{t          j        d           t          | d          rWt          j        d	            | j                      | j        d
            | j                     rt          j        d           t          j
        |_        	 t          j        |= dS # t          $ r Y dS w xY w)zQ
        Shutdown the manager process; will be registered as a finalizer
        z#sending shutdown message to managerr   Nri   g      ?)r  zmanager still alive	terminatez'trying to `terminate()` manager processg?z#manager still alive after terminate)r  r
   r   rQ   r   r   r   hasattrr.  r   r   r   r   _address_to_localKeyError)r   r2   r{   r;   r   r   s         r   r  zBaseManager._finalize_managerN  s   
 7 	II;<<<ww888!T4444JJLLLLDJJLLLLL    GL%%%%w!! I	/0007K00 IIGHHH%G%''' GL----'w')) I	"GHHHn	+G444 	 	 	DD	s:   A4 A A4 A00A4 4
B B1E   
EEc                     | j         S r   )r   r8   s    r   <lambda>zBaseManager.<lambda>n  s    DM r   Tc                    d| j         vr| j                                        | _        t          |pt	          dd          }|pt	          dd          }|r`|                                D ]K\  }}t          |          t          u sJ d|z              t          |          t          u sJ d|z              L|||f| j        <   |r fd}	|	_        t          | |	           dS dS )z9
        Register a typeid with the manager type
        r   N	_exposed__method_to_typeid_z%r is not a stringc                     t          j        d            | j        g|R i |\  }} || j        | | j        |          }|                     |j        | j                  }t          |d d|j        f           |S )Nz)requesting creation of a shared %r objectmanagerr{   r   r   rq   )	r
   r   r  r   r   r   r2   rQ   r3   )	r5   rM   rN   r   expproxyr   r   r1   s	          r   r`   z"BaseManager.register.<locals>.temp  s    
FOOO)T\&@4@@@4@@
s!	4+T M3   ||EM4=|IItX{;;;r   )
__dict__r   copy	AutoProxyr"   r'   r!   rV   r@   setattr)
r  r1   r^   r   r   r   create_methodkeyr   r`   s
    ` `      r   registerzBaseManager.registerp  sN    cl**M..00CM!IBWYTBB  ;I3T:: 	
  	H.4466 H H
UCyyC''')=)C'''E{{c)))+?%+G)))) g/!
f  	'	 	 	 	 	 	 #DMC&&&&&	' 	'r   )NNr   Nrv   r   )NNNNT)r@   rB   rC   rD   r   rh   r  r6   r   r   r   r   classmethodr  r  r   r!  r$  r&  r,  staticmethodr  propertyr2   rB  r    r   r   r   r     s_         IG>F
) 
) 
) 
)B B B7 7 7* * *"
 "
 "
 "
H /1   [&9 9 9% % % %           \> h1122GEI6:'' '' '' ['' '' ''r   r   c                       e Zd Zd Zd ZdS )ProcessLocalSetc                 2    t          j        | d            d S )Nc                 *    |                                  S r   )clearr,   s    r   r3  z*ProcessLocalSet.__init__.<locals>.<lambda>  s    399;; r   )r
   register_after_forkr8   s    r   r6   zProcessLocalSet.__init__  s     '>'>?????r   c                 $    t          |           dfS rv   )r!   r8   s    r   r   zProcessLocalSet.__reduce__  s    Dzz2~r   N)r@   rB   rC   r6   r   r    r   r   rG  rG    s5        @ @ @    r   rG  c                       e Zd ZdZi Z ej                    Z	 	 ddZd Z	di fdZ
d Zd	 Zed
             Zd Zd Zd Zd Zd ZdS )r   z.
    A base for proxies of shared objects
    NTc                    t           j        5  t           j                            |j        d           }|5t          j                    t                      f}|t           j        |j        <   d d d            n# 1 swxY w Y   |d         | _        |d         | _	        || _
        | j
        j        | _        || _        || _        t          |         d         | _        |t#          j        |          | _        n6| j        | j        j        | _        nt#          j                    j        | _        |r|                                  t          j        | t           j                   d S )Nr   r   )r   _mutexr0  r   r2   r
   ForkAwareLocalrG  _tls_idset_tokenr3   _id_managerr   r|   r   r   rz   r   r   r{   _increfrK  _after_fork)r5   r   r   r9  r{   r   rp   	tls_idsets           r   r6   zBaseProxy.__init__  sy    	G 	G!377tLLI  /11?3D3DD	=F	+EM:		G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G aL	
  l;>%&z215#8AADMM]& M2DMM#355=DM 	LLNNN y'<=====s   AA66A:=A:c                 \   t          j        d           t          j                    j        }t          j                    j        dk    r|dt          j                    j        z   z  }|                     | j        j	        | j
                  }t          |d d|f           || j        _        d S )Nzmaking connection to manager
MainThread|r   rk   )r
   r   r   r   r%   r   r   r   rS  r2   r   rQ   rQ  r   )r5   r%   r   s      r   _connectzBaseProxy._connect  s    
1222&((-#%%*l::C)244999D||DK/|GGt04':::#	r   r    c                    	 | j         j        }n[# t          $ rN t          j        dt          j                    j                   |                                  | j         j        }Y nw xY w|	                    | j
        |||f           |                                \  }}|dk    r|S |dk    r|\  }}| j        j        |j                 d         }	| j        j        |_         |	|| j        | j        | j        |          }
|                     |j        | j                  }t)          |dd|j        f           |
S t-          ||          )	zW
        Try to call a method of the referrent and return a copy of the result
        z#thread %r does not own a connectionrG   r   r8  r   Nrq   )rQ  r   r   r
   r   r   r   r%   r\  rH   rT  rI   rU  r   r1   rS  r2   r   r   r   rQ   r3   rJ   )r5   rL   rM   rN   r   rO   rP   r   r   r   r;  s              r   _callmethodzBaseProxy._callmethod  sV   	(9'DD 	( 	( 	(J< /1168 8 8MMOOO9'DDD		( 			48Zt4555yy{{f9MX#NGU/=bAI K/EMIt'w  E <<t}<EEDT4EH;777LtV,,,s    AA'&A'c                 ,    |                      d          S )z9
        Get a copy of the value of the referent
        r   r_  r8   s    r   	_getvaluezBaseProxy._getvalue  s     ,,,r   c           
         |                      | j        j        | j                  }t	          |d d| j        f           t          j        d| j        j                   | j	        
                    | j                   | j        o| j        j        }t          j        | t          j        | j        | j        || j        | j	        | j         fd          | _        d S )Nr   rp   z	INCREF %r
   r  )r   rS  r2   r   rQ   rT  r
   r   r3   rR  addrU  r   r  r   _decrefrQ  _close)r5   r   r;   s      r   rV  zBaseProxy._incref  s    ||DK/|GGtX{333
;///!!!6$-"6m)#+t}e)T[$,8	
 
 
r   c                 8   |                     | j                   ||j        t          j        k    rr	 t          j        d| j                    || j        |          }t          |d d| j        f           nF# t          $ r}t          j        d|           Y d }~n"d }~ww xY wt          j        d| j                   |sXt          |d          rJt          j        dt          j                    j                   |j                                         |`d S d S d S )Nz	DECREF %rr   rq   z... decref failed %sz%DECREF %r -- manager already shutdownr   z-thread %r has no more proxies so closing conn)discardr3   r   r   r   r
   r   r2   rQ   r   r/  r   r   r%   r   r   )r   r{   r;   tlsidsetr   r   r   s           r   rf  zBaseProxy._decref  s?   eh =EK5=888
;111wu}g>>>tX{;;;; 8 8 8
13777777778 J>III  	l33 	JF /1168 8 8N  """		 	 	 	s   AA8 8
B!BB!c                     d | _         	 |                                  d S # t          $ r }t          j        d|           Y d }~d S d }~ww xY w)Nzincref failed: %s)rU  rV  r   r
   r   )r5   r   s     r   rW  zBaseProxy._after_fork,  sc    	0LLNNNNN 	0 	0 	0I)3/////////	0s    
A	AA	c                     i }t          j                    
| j        |d<   t          | dd          r&| j        |d<   t
          t          | j        | j        |ffS t
          t          |           | j        | j        |ffS )Nr{   _isautoFr   )
r   get_spawning_popenr   r"   r5  RebuildProxyr>  rS  r   r!   r5   rN   s     r   r   zBaseProxy.__reduce__4  s    %''3"mDO4E** 	G"nDO T-=tDF F !$ZZd.>EG Gr   c                 *    |                                  S r   )rb  )r5   memos     r   __deepcopy__zBaseProxy.__deepcopy__A  s    ~~r   c                 d    dt          |           j        | j        j        t	          |           fz  S )Nz<%s object, typeid %r at %#x>)r!   r@   rS  r1   r3   r8   s    r   rA   zBaseProxy.__repr__D  s/    .T

#T[%7DBC 	Cr   c                     	 |                      d          S # t          $ r t          |           dd         dz   cY S w xY w)zV
        Return representation of the referent (or a fall-back if that fails)
        rA   Nr^  z; '__str__()' failed>)r_  r   r   r8   s    r   r[   zBaseProxy.__str__H  sV    	=##J/// 	= 	= 	=::crc?%<<<<<	=s    $>>NNNT)r@   rB   rC   rD   r0  r
   ForkAwareThreadLockrO  r6   r\  r_  rb  rV  rD  rf  rW  r   rt  rA   r[   r    r   r   r   r     s         %T%''F2648!> !> !> !>F$ $ $ ,.B - - - -<- - -
 
 
    \00 0 0G G G     C C C= = = = =r   r   c                 $   t          t          j                    dd          }|r(|j        |j        k    r|j        |j                 d         S |                    dd          o"t          t          j                    dd           } | ||fd|i|S )z
    Function used for unpickling proxy objects.

    If possible the shared object is returned, or otherwise a proxy for it.
    r   Nr   rp   T_inheritingF)r"   r   r   r2   r~   r3   pop)ra   r   r   rN   r  rp   s         r   rp  rp  V  s     W,..0A4HHF >&.EM11)!,, HHXt$$ I/11=%HHH 	 tE:==f====r   c                     t          |          }	 || |f         S # t          $ r Y nw xY wi }|D ]}t          d|d|d|           t          | t          f|          }||_        ||| |f<   |S )zC
    Return an proxy type whose methods are given by `exposed`
    zdef z7(self, *args, **kwds):
        return self._callmethod(z, args, kwds))r   r1  execr!   r   r5  )r%   r   _cachedicmeth	ProxyTypes         r   MakeProxyTyper  l  s     GnnGtWo&&    C H H6:ddDDDBCF	H 	H 	H 	H TI<--I!I'FD'?s   	 
((Tc                    t           |         d         }|T || j        |          }	 t          |dd| f          }|                                 n# |                                 w xY w|	||j        }|t          j                    j        }t          d| j	        z  |          } || ||||          }	d|	_
        |	S )z*
    Return an auto-proxy for `token`
    r   Nr   rl   zAutoProxy[%s])r9  r{   rp   T)r|   r2   rQ   r   r   r   r   r{   r  r1   rn  )
r   r   r9  r{   r   rp   r   r   r  r;  s
             r   r>  r>    s    
 j)!,Gwu}g666	tT=5(CCGJJLLLLDJJLLLL7.")++3o<gFFIIeZ'#% % %EEMLs   A A'c                       e Zd Zd Zd ZdS )	Namespacec                 :    | j                             |           d S r   )r<  updaterq  s     r   r6   zNamespace.__init__  s    T"""""r   c                 2   t          | j                                                  }g }|D ]4\  }}|                    d          s|                    |d|           5|                                 | j        j        dd                    |          dS )Nre   =(, r>   )	r+   r<  r'   
startswithr_   r   r?   r@   r   )r5   _itemsr`   r%   r   s        r   rA   zNamespace.__repr__  s    dm))++,,! 	5 	5KD%??3'' 5tttUU3444		>222DIIdOOOODDr   N)r@   rB   rC   r6   rA   r    r   r   r  r    s7        # # #E E E E Er   r  c                   @    e Zd ZddZd Zd Zd Z eee          ZdS )ValueTc                 "    || _         || _        d S r   )	_typecode_value)r5   r   r   locks       r   r6   zValue.__init__  s    !r   c                     | j         S r   r  r8   s    r   r   z	Value.get  s
    {r   c                     || _         d S r   r  r5   r   s     r   r   z	Value.set  s    r   c                 P    t          |           j        d| j        d| j        dS )Nr  r  r>   )r!   r@   r  r  r8   s    r   rA   zValue.__repr__  s/    #Dzz222#~~~t{{{< 	<r   NT)	r@   rB   rC   r6   r   r   rA   rE  r   r    r   r   r  r    sb               < < < HS#EEEr   r  c                 ,    t          j         | |          S r   )r   )r   sequencer  s      r   Arrayr    s    ;x***r   c                   ^    e Zd Zej        d         dk    rdZndZd Zd Zd Z	d Z
d	 Zd
 ZdS )IteratorProxyr   r   )__next__rH   throwr   )r  nextrH   r  r   c                 .    |                      d|          S )Nr  ra  r5   rM   s     r   r  zIteratorProxy.next  s    ##FD111r   c                     | S r   r    r8   s    r   __iter__zIteratorProxy.__iter__      r   c                 .    |                      d|          S )Nr  ra  r  s     r   r  zIteratorProxy.__next__  s    
D111r   c                 .    |                      d|          S )NrH   ra  r  s     r   rH   zIteratorProxy.send  s    ---r   c                 .    |                      d|          S )Nr  ra  r  s     r   r  zIteratorProxy.throw      ...r   c                 .    |                      d|          S )Nr   ra  r  s     r   r   zIteratorProxy.close  r  r   N)r@   rB   rC   r   version_info_exposedr5  r  r  r  rH   r  r   r    r   r   r  r    s        
a9B		2 	2 	2  2 2 2. . ./ / // / / / /r   r  c                   ,    e Zd ZdZddZd Zd Zd ZdS )	AcquirerProxy)acquirereleaseTNc                 @    ||fn||f}|                      d|          S Nr  ra  )r5   blockingr  rM   s       r   r  zAcquirerProxy.acquire  s,    &||Xw4G	4000r   c                 ,    |                      d          S Nr  ra  r8   s    r   r  zAcquirerProxy.release      	***r   c                 ,    |                      d          S r  ra  r8   s    r   r&  zAcquirerProxy.__enter__  r  r   c                 ,    |                      d          S r  ra  r(  s       r   r,  zAcquirerProxy.__exit__  r  r   )TN)r@   rB   rC   r5  r  r  r&  r,  r    r   r   r  r    sZ        &I1 1 1 1+ + ++ + ++ + + + +r   r  c                   .    e Zd ZdZddZd Zd ZddZdS )ConditionProxy)r  r  r   notify
notify_allNc                 0    |                      d|f          S Nr   ra  r  s     r   r   zConditionProxy.wait      
333r   c                 ,    |                      d          S )Nr  ra  r8   s    r   r  zConditionProxy.notify      )))r   c                 ,    |                      d          S )Nr  ra  r8   s    r   r  zConditionProxy.notify_all  s    ---r   c                      |            }|r|S |t                      |z   }nd }d }|s;||t                      z
  }|dk    rn!|                     |            |            }|;|S )Nr   )r   r   )r5   	predicater  rP   endtimewaittimes         r   wait_forzConditionProxy.wait_for  s     	MkkG+GGGH 	!""Y[[0q==IIhY[[F  	! r   r   )r@   rB   rC   r5  r   r  r  r  r    r   r   r  r    s_        FI4 4 4 4* * *. . .     r   r  c                   ,    e Zd ZdZd Zd Zd ZddZdS )
EventProxy)r   r   rJ  r   c                 ,    |                      d          S )Nr   ra  r8   s    r   r   zEventProxy.is_set  r  r   c                 ,    |                      d          S Nr   ra  r8   s    r   r   zEventProxy.set      &&&r   c                 ,    |                      d          S )NrJ  ra  r8   s    r   rJ  zEventProxy.clear      (((r   Nc                 0    |                      d|f          S r  ra  r  s     r   r   zEventProxy.wait  r  r   r   )r@   rB   rC   r5  r   r   rJ  r   r    r   r   r  r    sZ        2I* * *' ' ') ) )4 4 4 4 4 4r   r  c                   h    e Zd ZdZd	dZd Zd Zed             Zed             Z	ed             Z
dS )
BarrierProxy)__getattribute__r   abortresetNc                 0    |                      d|f          S r  ra  r  s     r   r   zBarrierProxy.wait%  s    444r   c                 ,    |                      d          S )Nr  ra  r8   s    r   r  zBarrierProxy.abort(  r  r   c                 ,    |                      d          S )Nr  ra  r8   s    r   r  zBarrierProxy.reset+  r  r   c                 .    |                      dd          S )Nr  )partiesra  r8   s    r   r  zBarrierProxy.parties.  s     2MBBBr   c                 .    |                      dd          S )Nr  )	n_waitingra  r8   s    r   r  zBarrierProxy.n_waiting2  s     2ODDDr   c                 .    |                      dd          S )Nr  )brokenra  r8   s    r   r  zBarrierProxy.broken6  s     2LAAAr   r   )r@   rB   rC   r5  r   r  r  rE  r  r  r  r    r   r   r  r  "  s        >I5 5 5 5) ) )) ) ) C C XC E E XE B B XB B Br   r  c                   $    e Zd ZdZd Zd Zd ZdS )NamespaceProxy)r  __setattr____delattr__c                     |d         dk    rt                               | |          S t                               | d          } |d|f          S )Nr   re   r_  r  )objectr  r5   rA  
callmethods      r   __getattr__zNamespaceProxy.__getattr__>  sO    q6S==**4555,,T=AA
z,sf555r   c                     |d         dk    rt                               | ||          S t                               | d          } |d||f          S )Nr   re   r_  r  )r  r  r  )r5   rA  r   r  s       r   r  zNamespaceProxy.__setattr__D  sR    q6S==%%dC777,,T=AA
z-#u666r   c                     |d         dk    rt                               | |          S t                               | d          } |d|f          S )Nr   re   r_  r  )r  r  r  r  s      r   r  zNamespaceProxy.__delattr__J  sN    q6S==%%dC000,,T=AA
z-#000r   N)r@   rB   rC   r5  r  r  r  r    r   r   r  r  ;  sF        BI6 6 67 7 71 1 1 1 1r   r  c                   6    e Zd ZdZd Zd Z eee          ZdS )
ValueProxy)r   r   c                 ,    |                      d          S )Nr   ra  r8   s    r   r   zValueProxy.getT  r  r   c                 0    |                      d|f          S r  ra  r  s     r   r   zValueProxy.setW  s    x000r   N)r@   rB   rC   r5  r   r   rE  r   r    r   r   r  r  Q  sB        I' ' '1 1 1HS#EEEr   r  )__add____contains____delitem____getitem____len____mul____reversed____rmul____setitem__r_   countextendindexinsertr{  removereverser   __imul__)__getslice____setslice____delslice__BaseListProxyc                       e Zd Zd Zd ZdS )	ListProxyc                 4    |                      d|f           | S )Nr  ra  r  s     r   __iadd__zListProxy.__iadd__i  s    E8,,,r   c                 4    |                      d|f           | S )Nr  ra  r  s     r   r  zListProxy.__imul__m  s    eX...r   N)r@   rB   rC   r  r  r    r   r   r  r  g  s2              r   r  	DictProxy)r  r  r  r  r  rJ  r=  r   has_keyr'   r(   r{  popitem
setdefaultr  r)   )r  r  r  )r  r   
ArrayProxy	PoolProxy)applyapply_asyncr   imapimap_unorderedr   map	map_asyncstarmapstarmap_asyncr.  AsyncResultIterator)r  r  r  r  r  c                       e Zd Zd Zd ZdS )r  c                     | S r   r    r8   s    r   r&  zPoolProxy.__enter__  r  r   c                 .    |                                   d S r   )r.  )r5   exc_infos     r   r,  zPoolProxy.__exit__  s    r   N)r@   rB   rC   r&  r,  r    r   r   r  r    s2              r   c                       e Zd ZdZdS )r   a!  
    Subclass of `BaseManager` which supports a number of shared object types.

    The types registered are those intended for the synchronization
    of threads, plus `dict`, `list` and `Namespace`.

    The `billiard.Manager()` function creates started instances of
    this class.
    N)r@   rB   rC   rD   r    r   r   r   r     s           r   r   r   JoinableQueuer   Lockr   	SemaphoreBoundedSemaphore	ConditionBarrierPoolr+   r   r  F)r   r@  )r@  rw  r  )Mr   r   r   r   r    r   r   r   r   r	   r
   r   queuer   timer   __all__r  PY3r   rB  
view_typesr+   r.   	view_typer   rQ   rJ   r   rW   rb   rf   rh   r   r   r   XmlListener	XmlClientr|   r   r   rG  r   rp  r  r>  r  r  r  r  r  r  r  r  r  r  _ListProxy_Attributesr  r  r  _ArrayProxy_Attributesr  BasePoolProxyr6  r  r   r   r  r   r  r   r!  r/  r"  r#  r   r    r   r   <module>r0     sE   


                                                                       
>
>
>	qQ  76 6 6 67 7 7 	 5; - - -7 757 7 7
a=# # # 7 7		9o6666J J J J J J J J0 &(b ) ) ) )
7 
7 
7G G G G G) G G G	 	 	A A APA PA PA PA PA PA PA PAn        "J$56(**>? ]' ]' ]' ]' ]' ]' ]' ]'H    c   c= c= c= c= c= c= c= c=T> > >, )+    , 8<#'   <E E E E E E E E       $+ + + +/ / / / /I / / /2+ + + + +I + + +"    ]   >4 4 4 4 4 4 4 4 B B B B B9 B B B21 1 1 1 1Y 1 1 1,          NMMo/DEE        M+ (  	   ?>>]<)?@@
 k ,  
 !" $ $         	 	 	 	 	+ 	 	 	   We $ $ $   _e , , ,   Wioz : : :   VY^] ; ; ;   Wio} = = =   [)"5} E E E   ')C"$ $ $   [)"5~ F F F
79i   EI$5|DDD   VTY	 2 2 2   VT9 - - -   VT9 - - -   WeZ 0 0 0   WeZ 0 0 0   [)^ < < <   Z=  N N N   ]%  8 8 8 8 8r   