o
    svXjé�  ã                   @   s  d dl mZ 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mZmZ g d¢Zejd  dkZer^dd„ Zndd„ Ze eje¡ dd„ dD ƒZed  eur…dd„ ZeD ]Ze ee¡ q|G dd„ deƒZdi fdd„Zdd„ ZG dd„ de ƒZ!d d!„ Z"d"d#„ Z#G d$d%„ d%eƒZ$G d&d'„ d'eƒZ%ej&ej'fej(ej)fd(œZ*G d)d*„ d*eƒZ+G d+d,„ d,e,ƒZ-G d-d.„ d.eƒZ.d/d0„ Z/i fd1d2„Z0		3dkd4d5„Z1G d6d7„ d7eƒZ2G d8d9„ d9eƒZ3dld:d;„Z4G d<d=„ d=e.ƒZ5G d>d?„ d?e.ƒZ6G d@dA„ dAe6ƒZ7G dBdC„ dCe.ƒZ8G dDdE„ dEe.ƒZ9G dFdG„ dGe.ƒZ:G dHdI„ dIe.ƒZ;dJZ<e�sDe<dK7 Z<e0dLe<ƒZ=G dMdN„ dNe=ƒZ>e0dOdPƒZ?dQZ@e�s_e@dR7 Z@e0dSe@ƒZAe0dTdUƒZBdVdVdVdWdWdXœeB_CG dYdT„ dTeBƒZDG dZd[„ d[e+ƒZEeE d\e¡ eE d]e¡ eE d^ejFe8¡ eE d_ejGe6¡ eE d`ejHe6¡ eE daejIe6¡ eE dbejJe6¡ eE dcejKe7¡ eLeddƒ�rÌeE ddejMe9¡ eE dee
jNeD¡ eE dfee>¡ eE dgeOe?¡ eE d9e3e;¡ eE d;e4eA¡ eE d7e2e:¡ eEjdWe5dhdi� eEjdVdhdj� dS )mé    )Úabsolute_importN)Ú
format_excé   )Ú
connection)Úcontext)Úpool)Úprocess)Ú	reduction)Úutil)Úget_context)ÚQueueÚitemsÚ	monotonic)ÚBaseManagerÚSyncManagerÚ	BaseProxyÚTokené   c                 C   ó   t j | j|  ¡ ffS ©N)ÚarrayÚtypecodeÚtobytes©Úa© r   úN/var/www/html/myproject/venv/lib/python3.10/site-packages/billiard/managers.pyÚreduce_array*   ó   r   c                 C   r   r   )r   r   Útostringr   r   r   r   r   -   r   c                 C   s   g | ]
}t ti |ƒƒ ƒ‘qS r   )ÚtypeÚgetattr©Ú.0Únamer   r   r   Ú
<listcomp>1   s    ÿr%   )r   ÚkeysÚvaluesc                 C   s   t t | ƒffS r   )Úlist©Úobjr   r   r   Úrebuild_as_list5   ó   r+   c                   @   s4   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )r   z4
    Type to uniquely indentify a shared object
    ©ÚtypeidÚaddressÚidc                 C   s   |||| _ | _| _d S r   r-   )Úselfr.   r/   r0   r   r   r   Ú__init__E   s   zToken.__init__c                 C   s   | j | j| jfS r   r-   ©r1   r   r   r   Ú__getstate__H   ó   zToken.__getstate__c                 C   s   |\| _ | _| _d S r   r-   )r1   Ústater   r   r   Ú__setstate__K   r   zToken.__setstate__c                 C   s   d| j j| j| j| jf S )Nz %s(typeid=%r, address=%r, id=%r))Ú	__class__Ú__name__r.   r/   r0   r3   r   r   r   Ú__repr__N   s   ÿzToken.__repr__N)	r9   Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r2   r4   r7   r:   r   r   r   r   r   ?   s    r   r   c                 C   s4   |   ||||f¡ |  ¡ \}}|dkr|S t||ƒ‚)zL
    Send a message to manager using connection `c` and return response
    ú#RETURN)ÚsendÚrecvÚconvert_to_error)Úcr0   Ú
methodnameÚargsÚkwdsÚkindÚresultr   r   r   ÚdispatchW   s
   
rI   c                 C   sX   | dkr|S | dkrt |ƒtu sJ ‚t|ƒS | dkr(t |ƒtu s"J ‚td| ƒS tdƒS )Nú#ERRORú
#TRACEBACKú#UNSERIALIZABLEzUnserializable message: %s
zUnrecognized message type)r    ÚstrÚRemoteErrorÚ
ValueError)rG   rH   r   r   r   rB   b   s   rB   c                   @   s   e Zd Zdd„ ZdS )rN   c                 C   s   dt | jd ƒ d S )NzM
---------------------------------------------------------------------------
r   zK---------------------------------------------------------------------------)rM   rE   r3   r   r   r   Ú__str__q   s   zRemoteError.__str__N)r9   r;   r<   rP   r   r   r   r   rN   o   s    rN   c                 C   s2   g }t | ƒD ]}t| |ƒ}t|ƒr| |¡ q|S )z4
    Return a list of names of methods of `obj`
    )Údirr!   ÚcallableÚappend)r*   Útempr$   Úfuncr   r   r   Úall_methodsy   s   

€rV   c                 C   s   dd„ t | ƒD ƒS )zP
    Return a list of names of methods of `obj` which do not start with '_'
    c                 S   s   g | ]
}|d  dkr|‘qS )r   Ú_r   r"   r   r   r   r%   ‰   s    z"public_methods.<locals>.<listcomp>)rV   r)   r   r   r   Úpublic_methods…   s   rX   c                   @   s¬   e Zd ZdZg d¢Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zeee
dœZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$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                 C   sb   t |tƒsJ ‚|| _t |¡| _t| \}}||dd�| _| jj| _ddi| _	i | _
t ¡ | _d S )Né   )r/   ÚbacklogÚ0©Nr   )Ú
isinstanceÚbytesÚregistryr   ÚAuthenticationStringÚauthkeyÚlistener_clientÚlistenerr/   Ú	id_to_objÚid_to_refcountÚ	threadingÚRLockÚmutex)r1   ri   r/   rk   Ú
serializerÚListenerÚClientr   r   r   r2   —   s   

zServer.__init__c              	   C   sÖ   t  ¡ | _| t ¡ _zGt j| jd�}d|_| 	¡  z| j 
¡ s*| j d¡ | j 
¡ rW n ttfy6   Y nw W tjtjkrKt d¡ tjt_tjt_t d¡ dS tjtjkret d¡ tjt_tjt_t d¡ w )z(
        Run the server forever
        )ÚtargetTr   zresetting stdout, stderrr   N)rp   ÚEventÚ
stop_eventr   Úcurrent_processÚ_manager_serverÚThreadÚaccepterÚdaemonÚstartÚis_setÚwaitÚKeyboardInterruptÚ
SystemExitÚsysÚstdoutÚ
__stdout__r
   ÚdebugÚ
__stderr__ÚstderrÚexit)r1   r|   r   r   r   Úserve_forever¥   s2   



ÿ€ÿ€
ü
zServer.serve_foreverc                 C   sF   	 z| j  ¡ }W n	 ty   Y q w tj| j|fd�}d|_| ¡  q)NT©rv   rE   )rm   ÚacceptÚOSErrorrp   r{   Úhandle_requestr}   r~   )r1   rC   Útr   r   r   r|   »   s   ÿùzServer.accepterc                 C   sJ  d } }}z*t  || j¡ t  || j¡ | ¡ }|\}}}}|| jv s*J d| ƒ‚t| |ƒ}W n ty>   dtƒ f}	Y n!w z||g|¢R i |¤Ž}W n tyZ   dtƒ f}	Y nw d|f}	z| 	|	¡ W n8 tyž }
 z,z
| 	dtƒ f¡ W n	 ty�   Y nw t
 d|	¡ t
 d|¡ t
 d|
¡ W Y d}
~
nd}
~
ww | ¡  dS )z)
        Handle a new connection
        Nz%r unrecognizedrK   r?   zFailure to send message: %rz ... request was %rú ... exception was %r)r   Údeliver_challengerk   Úanswer_challengerA   Úpublicr!   Ú	Exceptionr   r@   r
   ÚinfoÚclose)r1   rC   ÚfuncnamerH   ÚrequestÚignorerE   rF   rU   ÚmsgÚexcr   r   r   rŽ   Å   s>   ÿÿÿ€ù	zServer.handle_requestc                 C   sv  t  dt ¡ j¡ |j}|j}| j}| j 	¡ �s9zod }}|ƒ }|\}}}	}
|| \}}}||vr<t
d|t|ƒ|f ƒ‚t||ƒ}z	||	i |
¤Ž}W n ty` } z
d|f}W Y d}~n*d}~ww |oh| |d¡}|r‚|  |||¡\}}t|| j|ƒ}d||ff}nd|f}W n^ t
yÂ   |du r˜dtƒ f}n(z| j| }|| |||g|	¢R i |
¤Ž}d|f}W n ty¿   dtƒ f}Y nw Y n$ tyØ   t  dt ¡ j¡ t d	¡ Y n tyå   dtƒ f}Y nw zz||ƒ W n tyþ   |d
t|ƒfƒ Y nw W n1 t�y1 } z$t  dt ¡ j¡ t  d|¡ t  d|¡ | ¡  t d¡ W Y d}~nd}~ww | j 	¡ rdS dS )zQ
        Handle requests from the proxies in a particular process/thread
        z$starting server thread to service %rNz+method %r of %r object is not in exposed=%rrJ   ú#PROXYr?   rK   z$got EOF -- exiting thread serving %rr   rL   zexception in thread serving %rz ... message was %rr�   r   )r
   r†   rp   Úcurrent_threadr$   rA   r@   rn   rx   r   ÚAttributeErrorr    r!   r”   Úgetr[   r   r/   r   Úfallback_mappingÚEOFErrorrƒ   r‰   Úreprr•   r–   )r1   ÚconnrA   r@   rn   rD   r*   r˜   ÚidentrE   rF   ÚexposedÚ	gettypeidÚfunctionÚresr›   rš   r.   ÚridentÚrexposedÚtokenÚfallback_funcrH   r   r   r   Úserve_clientç   s–   ÿ
ÿÿ
€ÿ€
ÿÿÿÿ€ÿÿÿ€ÿ€úÉzServer.serve_clientc                 C   s   |S r   r   ©r1   r£   r¤   r*   r   r   r   Úfallback_getvalue1  ó   zServer.fallback_getvaluec                 C   ó   t |ƒS r   ©rM   r®   r   r   r   Úfallback_str4  ó   zServer.fallback_strc                 C   r±   r   )r¢   r®   r   r   r   Úfallback_repr7  r´   zServer.fallback_repr)rP   r:   ú	#GETVALUEc                 C   s   d S r   r   ©r1   rC   r   r   r   r`   @  r°   zServer.dummyc              
   C   s�   | j �; g }t| j ¡ ƒ}| ¡  |D ]}|dkr1| d|| j| t| j| d ƒdd… f ¡ qd |¡W  d  ƒ S 1 sAw   Y  dS )zO
        Return some info --- useful to spot problems with refcounting
        re   z  %s:       refcount=%s
    %sr   NéK   Ú
)	rr   r(   rn   r&   ÚsortrS   ro   rM   Újoin)r1   rC   rH   r&   r¤   r   r   r   r^   C  s   
ÿÿ€$÷zServer.debug_infoc                 C   s   t | jƒd S )z*
        Number of shared objects
        r   )Úlenrn   r·   r   r   r   r_   R  s   zServer.number_of_objectsc                 C   s`   z)zt  d¡ | d¡ W n   ddl}| ¡  Y W | j ¡  dS W | j ¡  dS | j ¡  w )z'
        Shutdown this process
        z!Manager received shutdown message©r?   Nr   N)r
   r†   r@   Ú	tracebackÚ	print_excrx   Úset)r1   rC   r¾   r   r   r   rZ   X  s   
ûzServer.shutdownc                 O   s  | j �t | j| \}}}}|du r t|ƒdkr|rJ ‚|d }	n||i |¤Ž}	|du r/t|	ƒ}|durCt|ƒtu s;J ‚t|ƒt|ƒ }dt|	ƒ }
t 	d||
¡ |	t
|ƒ|f| j|
< |
| jvrdd| j|
< |  ||
¡ |
t|ƒfW  d  ƒ S 1 szw   Y  dS )z>
        Create a new shared object and return its id
        Nr   r   z%xz&%r callable returned object with id %r)rr   ri   r¼   rX   r    Údictr(   r0   r
   r†   rÀ   rn   ro   ra   Útuple)r1   rC   r.   rE   rF   rR   r¥   Úmethod_to_typeidÚ	proxytyper*   r¤   r   r   r   r[   e  s(   
ÿ



$ãzServer.createc                 C   s   t | j|j d ƒS )zL
        Return the methods of the shared object indicated by token
        r   )rÂ   rn   r0   )r1   rC   r«   r   r   r   r]   ˆ  s   zServer.get_methodsc                 C   s"   |t  ¡ _| d¡ |  |¡ dS )z=
        Spawn a new thread to serve this connection
        r½   N)rp   r�   r$   r@   r­   )r1   rC   r$   r   r   r   r\   Ž  s   

zServer.accept_connectionc                 C   s>   | j � | j|  d7  < W d   ƒ d S 1 sw   Y  d S )Nr   )rr   ro   ©r1   rC   r¤   r   r   r   ra   –  s   "ÿzServer.increfc                 C   sŠ   | j �8 | j| dksJ ‚| j|  d8  < | j| dkr3| j|= | j|= t d|¡ W d   ƒ d S W d   ƒ d S 1 s>w   Y  d S )Nr   r   zdisposing of obj with id %r)rr   ro   rn   r
   r†   rÅ   r   r   r   rb   š  s   û"ýzServer.decrefN)r9   r;   r<   r=   r“   r2   rŠ   r|   rŽ   r­   r¯   r³   rµ   r    r`   r^   r_   rZ   r[   r]   r\   ra   rb   r   r   r   r   rY   �   s0    
"Jý#rY   c                   @   s   e Zd ZdgZdZdZdZdS )ÚStateÚvaluer   r   é   N)r9   r;   r<   r>   ÚINITIALÚSTARTEDÚSHUTDOWNr   r   r   r   rÆ   §  s
    rÆ   )ÚpickleÚ	xmlrpclibc                   @   s´   e Zd ZdZi ZeZ		d$dd„Zdd„ Zdd	„ Z	d
d„ Z
d%dd„Ze	d%dd„ƒZdd„ Zd&dd„Zdd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZedd „ ƒZe		!d'd"d#„ƒZdS )(r   z!
    Base class for managers
    NrÌ   c                 C   s\   |d u r	t  ¡ j}|| _t  |¡| _tƒ | _tj| j_	|| _
t| \| _| _|p*tƒ | _d S r   )r   ry   rk   Ú_addressrj   Ú_authkeyrÆ   Ú_staterÉ   rÇ   Ú_serializerrl   Ú	_ListenerÚ_Clientr   Ú_ctx)r1   r/   rk   rs   Úctxr   r   r   r2   Â  s   

zBaseManager.__init__c                 C   s   t | ƒj| j| j| jffS r   )r    Úfrom_addressrÎ   rÏ   rÑ   r3   r   r   r   Ú
__reduce__Î  s   ÿzBaseManager.__reduce__c                 C   s(   | 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É   rY   Ú	_registryrÎ   rÏ   rÑ   r3   r   r   r   Ú
get_serverÒ  s   
ÿzBaseManager.get_serverc                 C   s8   t | j \}}|| j| jd�}t|ddƒ tj| j_dS )z>
        Connect manager object to the server process
        ©rk   Nr`   )	rl   rÑ   rÎ   rÏ   rI   rÆ   rÊ   rÐ   rÇ   )r1   rt   ru   r£   r   r   r   ÚconnectÚ  s   zBaseManager.connectr   c              	   C   sö   | j jtjks	J ‚|durt|ƒstdƒ‚tjdd�\}}| jj	t
| ƒj| j| j| j| j|||fd�| _d dd„ | jjD ƒ¡}t
| ƒjd	 | | j_| j ¡  | ¡  | ¡ | _| ¡  tj| j _tj| t
| ƒj| j| j| j| j | jfd
d�| _dS )z@
        Spawn a server process for this manager object
        Nzinitializer must be a callableF)Úduplexr‹   ú:c                 s   s   � | ]}t |ƒV  qd S r   r²   )r#   Úir   r   r   Ú	<genexpr>õ  s   € z$BaseManager.start.<locals>.<genexpr>ú-r   ©rE   Úexitpriority)rÐ   rÇ   rÆ   rÉ   rR   Ú	TypeErrorr   ÚPiperÔ   ÚProcessr    Ú_run_serverrØ   rÎ   rÏ   rÑ   Ú_processr»   Ú	_identityr9   r$   r~   r–   rA   rÊ   r
   ÚFinalizeÚ_finalize_managerrÓ   rZ   )r1   ÚinitializerÚinitargsÚreaderÚwriterr¤   r   r   r   r~   ã  s0   
ÿþ



ÿüzBaseManager.startc           	      C   sN   |dur||Ž  |   ||||¡}| |j¡ | ¡  t d|j¡ | ¡  dS )z@
        Create a server, report its address and run it
        Nzmanager serving at %r)Ú_Serverr@   r/   r–   r
   r•   rŠ   )	Úclsri   r/   rk   rs   rî   rë   rì   Úserverr   r   r   ræ     s   zBaseManager._run_serverc                 O   sl   | j jtjksJ dƒ‚| j| j| jd�}zt|dd|f| |ƒ\}}W | ¡  n| ¡  w t	|| j|ƒ|fS )zP
        Create a new shared object; return the token and exposed tuple
        zserver not yet startedrÚ   Nr[   )
rÐ   rÇ   rÆ   rÊ   rÓ   rÎ   rÏ   rI   r–   r   )r1   r.   rE   rF   r£   r0   r¥   r   r   r   Ú_create  s   

ÿzBaseManager._createc                 C   s2   | j dur| 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©r1   Útimeoutr   r   r   r»   (  s   


ýzBaseManager.joinc                 C   ó4   | j | j| jd�}zt|ddƒW | ¡  S | ¡  w )zS
        Return some info about the servers shared objects and connections
        rÚ   Nr^   ©rÓ   rÎ   rÏ   rI   r–   ©r1   r£   r   r   r   Ú_debug_info1  ó   zBaseManager._debug_infoc                 C   rö   )z5
        Return the number of shared objects
        rÚ   Nr_   r÷   rø   r   r   r   Ú_number_of_objects;  rú   zBaseManager._number_of_objectsc                 C   s,   | j jtjkr|  ¡  | j jtjksJ ‚| S r   )rÐ   rÇ   rÆ   rÉ   r~   rÊ   r3   r   r   r   Ú	__enter__E  s   zBaseManager.__enter__c                 C   ó   |   ¡  d S r   )rZ   ©r1   Úexc_typeÚexc_valÚexc_tbr   r   r   Ú__exit__K  ó   zBaseManager.__exit__c                 C   sÞ   |   ¡ rYt d¡ z|||d�}zt|ddƒ W | ¡  n| ¡  w W n	 ty,   Y nw | jdd� |   ¡ rYt d¡ t| dƒrYt d	¡ |  ¡  | jd
d� |   ¡ rYt d¡ t	j
|_ztj|= W dS  tyn   Y dS w )zQ
        Shutdown the manager process; will be registered as a finalizer
        z#sending shutdown message to managerrÚ   NrZ   g      ð?)rõ   zmanager still aliveÚ	terminatez'trying to `terminate()` manager processgš™™™™™¹?z#manager still alive after terminate)ró   r
   r•   rI   r–   r”   r»   Úhasattrr  rÆ   rË   rÇ   r   Ú_address_to_localÚKeyError)r   r/   rk   r6   rÓ   r£   r   r   r   rê   N  s2   
ÿ



ÿzBaseManager._finalize_managerc                 C   ó   | j S r   )rÎ   r3   r   r   r   Ú<lambda>n  s    zBaseManager.<lambda>Tc           
         sÆ   d| j vr| j ¡ | _ˆ du rt‰ |ptˆ ddƒ}|p tˆ ddƒ}|rDt|ƒD ]\}}t|ƒtu s7J d| ƒ‚t|ƒtu sCJ d| ƒ‚q'|||ˆ f| jˆ< |ra‡ ‡fd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                    sf   t  dˆ¡ | jˆg|¢R i |¤Ž\}}ˆ || j| | j|d�}| j|j| jd�}t|d d|jfƒ |S )Nz)requesting creation of a shared %r object©Úmanagerrk   r¥   rÚ   rb   )	r
   r†   rò   rÑ   rÏ   rÓ   r/   rI   r0   )r1   rE   rF   r«   ÚexpÚproxyr£   ©rÄ   r.   r   r   rT   �  s   þz"BaseManager.register.<locals>.temp)
Ú__dict__rØ   ÚcopyÚ	AutoProxyr!   r   r    rM   r9   Úsetattr)
rð   r.   rR   rÄ   r¥   rÃ   Úcreate_methodÚkeyrÇ   rT   r   r  r   Úregisterp  s&   

þ
ÿ
ôzBaseManager.register)NNrÌ   Nrf   r   )NNNNT)r9   r;   r<   r=   rØ   rY   rï   r2   r×   rÙ   rÛ   r~   Úclassmethodræ   rò   r»   rù   rû   rü   r  Ústaticmethodrê   Úpropertyr/   r  r   r   r   r   r   »  s6    
ÿ
	$ÿ
	


ÿr   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚProcessLocalSetc                 C   s   t  | dd„ ¡ d S )Nc                 S   ó   |   ¡ S r   )Úclearr)   r   r   r   r	  ¢  s    z*ProcessLocalSet.__init__.<locals>.<lambda>)r
   Úregister_after_forkr3   r   r   r   r2   ¡  r   zProcessLocalSet.__init__c                 C   s   t | ƒdfS rf   )r    r3   r   r   r   r×   ¤  r  zProcessLocalSet.__reduce__N)r9   r;   r<   r2   r×   r   r   r   r   r  Ÿ  ó    r  c                   @   s„   e Zd ZdZi Ze ¡ Z		ddd„Zdd„ Z	di fd	d
„Z
dd„ Zdd„ Zedd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )r   z.
    A base for proxies of shared objects
    NTc                 C   sì   t j�! t j |jd ¡}|d u rt ¡ tƒ f}|t j|j< W d   ƒ n1 s'w   Y  |d | _|d | _	|| _
| j
j| _|| _|| _t| d | _|d urVt |¡| _n| jd ura| jj| _nt ¡ j| _|rm|  ¡  t | t j¡ d S )Nr   r   )r   Ú_mutexr  rŸ   r/   r
   ÚForkAwareLocalr  Ú_tlsÚ_idsetÚ_tokenr0   Ú_idÚ_managerrÑ   rl   rÓ   r   rj   rÏ   ry   rk   Ú_increfr  Ú_after_fork)r1   r«   rs   r  rk   r¥   ra   Ú	tls_idsetr   r   r   r2   ³  s,   €ü



zBaseProxy.__init__c                 C   sd   t  d¡ t ¡ j}t ¡ jdkr|dt ¡ j 7 }| j| jj	| j
d�}t|d d|fƒ || j_d S )Nzmaking connection to managerÚ
MainThreadú|rÚ   r\   )r
   r†   r   ry   r$   rp   r�   rÓ   r%  r/   rÏ   rI   r#  r   )r1   r$   r£   r   r   r   Ú_connectÖ  s   

zBaseProxy._connectr   c                 C   sä   z| j j}W n ty    t dt ¡ j¡ |  ¡  | j j}Y nw | 	| j
|||f¡ | ¡ \}}|dkr7|S |dkrm|\}}| jj|j d }	| jj|_|	|| j| j| j|d�}
| j|j| jd�}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 connectionr?   rœ   éÿÿÿÿr  rÚ   Nrb   )r#  r   rž   r
   r†   rp   r�   r$   r-  r@   r&  rA   r'  rØ   r.   r%  r/   rÑ   rÏ   rÓ   rI   r0   rB   )r1   rD   rE   rF   r£   rG   rH   r¥   r«   rÄ   r  r   r   r   Ú_callmethodß  s2   ÿü

þ
zBaseProxy._callmethodc                 C   ó
   |   d¡S )z9
        Get a copy of the value of the referent
        r¶   ©r/  r3   r   r   r   Ú	_getvalueý  s   
zBaseProxy._getvaluec              	   C   s‚   | j | jj| jd�}t|d d| jfƒ t d| jj¡ | j	 
| j¡ | jo(| jj}tj| tj| j| j|| j| j	| j fdd�| _d S )NrÚ   ra   z	INCREF %ré
   rá   )rÓ   r%  r/   rÏ   rI   r&  r
   r†   r0   r$  Úaddr'  rÐ   ré   r   Ú_decrefr#  Ú_close)r1   r£   r6   r   r   r   r(    s   
ÿüzBaseProxy._increfc              
   C   sÌ   |  | j¡ |d u s|jtjkrBzt d| j¡ || j|d�}t|d d| jfƒ W n t	yA } zt d|¡ W Y d }~nd }~ww t d| j¡ |sbt
|dƒrdt dt ¡ j¡ |j ¡  |`d S d S d S )Nz	DECREF %rrÚ   rb   z... decref failed %sz%DECREF %r -- manager already shutdownr   z-thread %r has no more proxies so closing conn)Údiscardr0   rÇ   rÆ   rÊ   r
   r†   r/   rI   r”   r  rp   r�   r$   r   r–   )r«   rk   r6   ÚtlsÚidsetrÓ   r£   r›   r   r   r   r5    s$   €ÿÿ
üzBaseProxy._decrefc              
   C   sH   d | _ z|  ¡  W d S  ty# } zt d|¡ W Y d }~d S d }~ww )Nzincref failed: %s)r'  r(  r”   r
   r•   )r1   r›   r   r   r   r)  ,  s   €þzBaseProxy._after_forkc                 C   s\   i }t  ¡ d ur| j|d< t| ddƒr"| j|d< tt| j| j|ffS tt	| ƒ| j| j|ffS )Nrk   Ú_isautoFr¥   )
r   Úget_spawning_popenrÏ   r!   r
  ÚRebuildProxyr  r%  rÑ   r    ©r1   rF   r   r   r   r×   4  s   

ÿÿzBaseProxy.__reduce__c                 C   r  r   )r2  )r1   Úmemor   r   r   Ú__deepcopy__A  r´   zBaseProxy.__deepcopy__c                 C   s   dt | ƒj| jjt| ƒf S )Nz<%s object, typeid %r at %#x>)r    r9   r%  r.   r0   r3   r   r   r   r:   D  s   ÿzBaseProxy.__repr__c                 C   s4   z|   d¡W S  ty   t| ƒdd… d  Y S w )zV
        Return representation of the referent (or a fall-back if that fails)
        r:   Nr.  z; '__str__()' failed>)r/  r”   r¢   r3   r   r   r   rP   H  s
   ÿzBaseProxy.__str__©NNNT)r9   r;   r<   r=   r  r
   ÚForkAwareThreadLockr!  r2   r-  r/  r2  r(  r  r5  r)  r×   r?  r:   rP   r   r   r   r   r   ¬  s$    
ÿ#	
r   c                 C   sd   t t ¡ ddƒ}|r|j|jkr|j|j d S | dd¡o&t t ¡ 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.
    rz   Nr   ra   TÚ_inheritingF)r!   r   ry   r/   rn   r0   Úpop)rU   r«   rs   rF   rñ   ra   r   r   r   r<  V  s   þr<  c                 C   sn   t |ƒ}z|| |f W S  ty   Y nw i }|D ]}td||f |ƒ qt| tf|ƒ}||_||| |f< |S )zC
    Return an proxy type whose methods are given by `exposed`
    zLdef %s(self, *args, **kwds):
        return self._callmethod(%r, args, kwds))rÂ   r  Úexecr    r   r
  )r$   r¥   Ú_cacheÚdicÚmethÚ	ProxyTyper   r   r   ÚMakeProxyTypel  s"   ÿÿÿrI  Tc           
      C   sž   t | d }|du r%|| j|d�}zt|dd| fƒ}W | ¡  n| ¡  w |du r0|dur0|j}|du r9t ¡ j}td| j	 |ƒ}|| ||||d�}	d|	_
|	S )z*
    Return an auto-proxy for `token`
    r   NrÚ   r]   zAutoProxy[%s])r  rk   ra   T)rl   r/   rI   r–   rÏ   r   ry   rk   rI  r.   r:  )
r«   rs   r  rk   r¥   ra   rÓ   r£   rH  r  r   r   r   r  ‚  s    

ÿr  c                   @   r  )Ú	Namespacec                 K   s   | j  |¡ d S r   )r  Úupdater=  r   r   r   r2   ¢  r5   zNamespace.__init__c                 C   sZ   t | j ¡ ƒ}g }|D ]\}}| d¡s| d||f ¡ q| ¡  d| jjd |¡f S )NrW   z%s=%rz%s(%s)z, )	r(   r  r   Ú
startswithrS   rº   r8   r9   r»   )r1   r   rT   r$   rÇ   r   r   r   r:   ¥  s   
€zNamespace.__repr__N)r9   r;   r<   r2   r:   r   r   r   r   rJ     r   rJ  c                   @   s8   e Zd Zddd„Zdd„ Zdd„ Zdd	„ ZeeeƒZd
S )ÚValueTc                 C   s   || _ || _d S r   )Ú	_typecodeÚ_value)r1   r   rÇ   Úlockr   r   r   r2   ±  s   
zValue.__init__c                 C   r  r   ©rO  r3   r   r   r   rŸ   µ  s   z	Value.getc                 C   s
   || _ d S r   rQ  ©r1   rÇ   r   r   r   rÀ   ¸  ó   
z	Value.setc                 C   s   dt | ƒj| j| jf S )Nz
%s(%r, %r))r    r9   rN  rO  r3   r   r   r   r:   »  s   
ÿzValue.__repr__N©T)	r9   r;   r<   r2   rŸ   rÀ   r:   r  rÇ   r   r   r   r   rM  ¯  s    
rM  c                 C   s   t   | |¡S r   )r   )r   ÚsequencerP  r   r   r   ÚArrayÁ  r  rV  c                   @   sT   e Zd Zejd dkrdZndZdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚIteratorProxyr   r   )Ú__next__r@   Úthrowr–   )rX  Únextr@   rY  r–   c                 G   ó   |   d|¡S )NrZ  r1  ©r1   rE   r   r   r   rZ  Ï  r  zIteratorProxy.nextc                 C   ó   | S r   r   r3   r   r   r   Ú__iter__Ò  r°   zIteratorProxy.__iter__c                 G   r[  )NrX  r1  r\  r   r   r   rX  Õ  r  zIteratorProxy.__next__c                 G   r[  )Nr@   r1  r\  r   r   r   r@   Ø  r  zIteratorProxy.sendc                 G   r[  )NrY  r1  r\  r   r   r   rY  Û  r  zIteratorProxy.throwc                 G   r[  )Nr–   r1  r\  r   r   r   r–   Þ  r  zIteratorProxy.closeN)r9   r;   r<   rƒ   Úversion_infoÚ_exposedr
  rZ  r^  rX  r@   rY  r–   r   r   r   r   rW  É  s    rW  c                   @   s2   e Zd ZdZddd„Zdd„ Zdd	„ Zd
d„ ZdS )ÚAcquirerProxy)ÚacquireÚreleaseTNc                 C   s"   |d u r|fn||f}|   d|¡S ©Nrb  r1  )r1   Úblockingrõ   rE   r   r   r   rb  å  s   zAcquirerProxy.acquirec                 C   r0  ©Nrc  r1  r3   r   r   r   rc  é  rS  zAcquirerProxy.releasec                 C   r0  rd  r1  r3   r   r   r   rü   ì  rS  zAcquirerProxy.__enter__c                 C   r0  rf  r1  rþ   r   r   r   r  ï  rS  zAcquirerProxy.__exit__)TN)r9   r;   r<   r
  rb  rc  rü   r  r   r   r   r   ra  â  s    
ra  c                   @   s4   e Zd ZdZddd„Zdd„ Zdd„ Zdd	d
„ZdS )ÚConditionProxy)rb  rc  r€   ÚnotifyÚ
notify_allNc                 C   ó   |   d|f¡S ©Nr€   r1  rô   r   r   r   r€   ö  r,   zConditionProxy.waitc                 C   r0  )Nrh  r1  r3   r   r   r   rh  ù  rS  zConditionProxy.notifyc                 C   r0  )Nri  r1  r3   r   r   r   ri  ü  rS  zConditionProxy.notify_allc                 C   sf   |ƒ }|r|S |d urt ƒ | }nd }d }|s1|d ur'|t ƒ  }|dkr'	 |S |  |¡ |ƒ }|r|S )Nr   )r   r€   )r1   Ú	predicaterõ   rH   ÚendtimeÚwaittimer   r   r   Úwait_forÿ  s"   

þúzConditionProxy.wait_forr   )r9   r;   r<   r
  r€   rh  ri  ro  r   r   r   r   rg  ó  s    
rg  c                   @   s2   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	d
„ZdS )Ú
EventProxy)r   rÀ   r  r€   c                 C   r0  )Nr   r1  r3   r   r   r   r     rS  zEventProxy.is_setc                 C   r0  ©NrÀ   r1  r3   r   r   r   rÀ     rS  zEventProxy.setc                 C   r0  )Nr  r1  r3   r   r   r   r    rS  zEventProxy.clearNc                 C   rj  rk  r1  rô   r   r   r   r€     r,   zEventProxy.waitr   )r9   r;   r<   r
  r   rÀ   r  r€   r   r   r   r   rp    s    rp  c                   @   sN   e Zd ZdZddd„Zdd„ Zdd„ Zed	d
„ ƒZedd„ ƒZ	edd„ ƒZ
dS )ÚBarrierProxy)Ú__getattribute__r€   ÚabortÚresetNc                 C   rj  rk  r1  rô   r   r   r   r€   %  r,   zBarrierProxy.waitc                 C   r0  )Nrt  r1  r3   r   r   r   rt  (  rS  zBarrierProxy.abortc                 C   r0  )Nru  r1  r3   r   r   r   ru  +  rS  zBarrierProxy.resetc                 C   ó   |   dd¡S )Nrs  )Úpartiesr1  r3   r   r   r   rw  .  ó   zBarrierProxy.partiesc                 C   rv  )Nrs  )Ú	n_waitingr1  r3   r   r   r   ry  2  rx  zBarrierProxy.n_waitingc                 C   rv  )Nrs  )Úbrokenr1  r3   r   r   r   rz  6  rx  zBarrierProxy.brokenr   )r9   r;   r<   r
  r€   rt  ru  r  rw  ry  rz  r   r   r   r   rr  "  s    


rr  c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚNamespaceProxy)rs  Ú__setattr__Ú__delattr__c                 C   s0   |d dkrt  | |¡S t  | d¡}|d|fƒS )Nr   rW   r/  rs  )Úobjectrs  ©r1   r  Ú
callmethodr   r   r   Ú__getattr__>  ó   zNamespaceProxy.__getattr__c                 C   s4   |d dkrt  | ||¡S t  | d¡}|d||fƒS )Nr   rW   r/  r|  )r~  r|  rs  )r1   r  rÇ   r€  r   r   r   r|  D  s   zNamespaceProxy.__setattr__c                 C   s0   |d dkrt  | |¡S t  | d¡}|d|fƒS )Nr   rW   r/  r}  )r~  r}  rs  r  r   r   r   r}  J  r‚  zNamespaceProxy.__delattr__N)r9   r;   r<   r
  r�  r|  r}  r   r   r   r   r{  ;  s
    r{  c                   @   s*   e Zd ZdZdd„ Zdd„ ZeeeƒZdS )Ú
ValueProxy)rŸ   rÀ   c                 C   r0  )NrŸ   r1  r3   r   r   r   rŸ   T  rS  zValueProxy.getc                 C   rj  rq  r1  rR  r   r   r   rÀ   W  r,   zValueProxy.setN)r9   r;   r<   r
  rŸ   rÀ   r  rÇ   r   r   r   r   rƒ  Q  s
    rƒ  )Ú__add__Ú__contains__Ú__delitem__Ú__getitem__Ú__len__Ú__mul__Ú__reversed__Ú__rmul__Ú__setitem__rS   ÚcountÚextendÚindexÚinsertrC  ÚremoveÚreverserº   Ú__imul__)Ú__getslice__Ú__setslice__Ú__delslice__ÚBaseListProxyc                   @   r  )Ú	ListProxyc                 C   ó   |   d|f¡ | S )NrŽ  r1  rR  r   r   r   Ú__iadd__i  ó   zListProxy.__iadd__c                 C   r™  )Nr“  r1  rR  r   r   r   r“  m  r›  zListProxy.__imul__N)r9   r;   r<   rš  r“  r   r   r   r   r˜  g  s    r˜  Ú	DictProxy)r…  r†  r‡  rˆ  rŒ  r  r  rŸ   Úhas_keyr   r&   rC  ÚpopitemÚ
setdefaultrK  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                   @   r  )r¡  c                 C   r]  r   r   r3   r   r   r   rü   �  r°   zPoolProxy.__enter__c                 G   rý   r   )r  )r1   Úexc_infor   r   r   r  ’  r  zPoolProxy.__exit__N)r9   r;   r<   rü   r  r   r   r   r   r¡  Ž  s    c                   @   s   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)r9   r;   r<   r=   r   r   r   r   r   ›  s    r   r   ÚJoinableQueuerw   ÚLockrq   Ú	SemaphoreÚBoundedSemaphoreÚ	ConditionÚBarrierÚPoolr(   rÁ   F)rÄ   r  )r  r@  rT  )PÚ
__future__r   rƒ   rp   r   r¾   r   Ú r   r   r   r   r	   r
   r   Úfiver   r   r   Ú__all__r_  ÚPY3r   r  Ú
view_typesr(   r+   Ú	view_typer~  r   rI   rB   r”   rN   rV   rX   rY   rÆ   rt   ru   ÚXmlListenerÚ	XmlClientrl   r   rÀ   r  r   r<  rI  r  rJ  rM  rV  rW  ra  rg  rp  rr  r{  rƒ  Ú_ListProxy_Attributesr—  r˜  rœ  Ú_ArrayProxy_Attributesr   ÚBasePoolProxyr  r¡  r   rw   r®  rq   r¯  r°  r±  r  r²  r³  rÁ   r   r   r   r   Ú<module>   sÄ   	
ÿ
  

þ
 e +
ÿ




û	
ÿ