o
    Df                     @   s  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rZdd Zndd Ze
eje dd dD Zed  eurdd ZeD ]Ze
ee qxG dd d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%Z!G d&d' d'Z"ej#ej$fej%ej&fd(Z'G d)d* d*Z(G d+d, d,e)Z*G d-d. d.Z+d/d0 Z,i fd1d2Z-		3dkd4d5Z.G d6d7 d7Z/G d8d9 d9Z0dld:d;Z1G d<d= d=e+Z2G d>d? d?e+Z3G d@dA dAe3Z4G dBdC dCe+Z5G dDdE dEe+Z6G dFdG dGe+Z7G dHdI dIe+Z8dJZ9es9e9dK7 Z9e-dLe9Z:G dMdN dNe:Z;e-dOdPZ<dQZ=esTe=dR7 Z=e-dSe=Z>e-dTdUZ?dVdVdVdWdWdXe?_@G dYdT dTe?ZAG dZd[ d[e(ZBeBd\e eBd]e eBd^ejCe5 eBd_ejDe3 eBd`ejEe3 eBdaejFe3 eBdbejGe3 eBdcejHe4 eIeddreBddejJe6 eBdeejKeA eBdfee; eBdgeLe< eBd9e0e8 eBd;e1e> eBd7e/e7 eBjdWe2dhdi eBjdVdhdj dS )m    N)
format_exc   )
connection)context)pool)process)	reduction)util)get_context)Queue)	monotonic)BaseManagerSyncManager	BaseProxyToken   c                 C      t j | j|  ffS N)arraytypecodetobytesa r   J/home/ubuntu/webapp/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#   )items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   z3
    Type to uniquely identify a shared object
    typeidaddressidc                 C   s   |||| _ | _| _d S r   r,   )selfr-   r.   r/   r   r   r   __init__E   s   zToken.__init__c                 C   s   | j | j| jfS r   r,   r0   r   r   r   __getstate__H      zToken.__getstate__c                 C   s   |\| _ | _| _d S r   r,   )r0   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.   r/   r2   r   r   r   __repr__N   s   zToken.__repr__N)	r8   
__module____qualname____doc__	__slots__r1   r3   r6   r9   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)cr/   
methodnameargskwdskindresultr   r   r   dispatchW   s
   
rH   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)rF   rG   r   r   r   rA   b   s   rA   c                   @   s   e Zd Zdd ZdS )rM   c                 C   s   dt | jd  d S )NzM
---------------------------------------------------------------------------
r   zK---------------------------------------------------------------------------)rL   rD   r2   r   r   r   __str__q   s   zRemoteError.__str__N)r8   r:   r;   rO   r   r   r   r   rM   o   s    rM   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   

rU   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>)rU   r(   r   r   r   public_methods   s   rW   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)r0   rh   r.   rj   
serializerListenerClientr   r   r   r1      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)ro   Event
stop_eventr   current_process_manager_serverThreadaccepterdaemonstartis_setwaitKeyboardInterrupt
SystemExitsysstdout
__stdout__r	   debug
__stderr__stderrexit)r0   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ru   rD   )rl   acceptOSErrorro   rz   handle_requestr|   r}   )r0   rB   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 unrecognizedrJ   r>   zFailure to send message: %rz ... request was %r ... exception was %r)r   deliver_challengerj   answer_challenger@   publicr   	Exceptionr   r?   r	   infoclose)r0   rB   funcnamerG   requestignorerD   rE   rT   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 rd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=%rrI   #PROXYr>   rJ   z$got EOF -- exiting thread serving %rr   rK   zexception in thread serving %rz ... message was %rr   r   )r	   r   ro   current_threadr"   r@   r?   rm   rw   r~   AttributeErrorr   r   r   getrZ   r   r.   r   fallback_mappingEOFErrorr   r   reprr   r   )r0   connr@   r?   rm   rC   r)   r   identrD   rE   exposed	gettypeidfunctionresr   r   r-   ridentrexposedtokenfallback_funcrG   r   r   r   serve_client   s   


zServer.serve_clientc                 C   s   |S r   r   r0   r   r   r)   r   r   r   fallback_getvalue1     zServer.fallback_getvaluec                 C      t |S r   rL   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)rO   r9   	#GETVALUEc                 C   s   d S r   r   r0   rB   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
        rd   z  %s:       refcount=%s
    %sr   NK   
)	rq   r'   rm   r%   sortrR   rn   rL   join)r0   rB   rG   r%   r   r   r   r   r]   C  s   
$zServer.debug_infoc                 C   s   t | jd S )z*
        Number of shared objects
        r   )lenrm   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_excrw   set)r0   rB   r   r   r   r   rY   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)rq   rh   r   rW   r   dictr'   r/   r	   r   r   rm   rn   r`   tuple)r0   rB   r-   rD   rE   rQ   r   method_to_typeid	proxytyper)   r   r   r   r   rZ   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   rm   r/   )r0   rB   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)ro   r   r"   r?   r   )r0   rB   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   )rq   rn   r0   rB   r   r   r   r   r`     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)rq   rn   rm   r	   r   r   r   r   r   ra     s   "zServer.decrefN)r8   r:   r;   r<   r   r1   r   r{   r   r   r   r   r   r   r_   r]   r^   rY   rZ   r\   r[   r`   ra   r   r   r   r   rX      s0    
"J#rX   c                   @   s   e Zd ZdgZdZdZdZdS )Statevaluer   r      N)r8   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   rx   rj   _addressri   _authkeyr   _stater   r   _serializerrk   	_Listener_Clientr
   _ctx)r0   r.   rj   rr   ctxr   r   r   r1     s   

zBaseManager.__init__c                 C   s   t | j| j| j| jffS r   )r   from_addressr   r   r   r2   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   rX   	_registryr   r   r   r2   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
        rj   Nr_   )	rk   r   r   r   rH   r   r   r   r   )r0   rs   rt   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   rD   exitpriority)r   r   r   r   rQ   	TypeErrorr   Piper   Processr   _run_serverr   r   r   r   _processr   	_identityr8   r"   r}   r   r@   r   r	   Finalize_finalize_managerr   rY   )r0   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   )	clsrh   r.   rj   rr   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   NrZ   )
r   r   r   r   r   r   r   rH   r   r   )r0   r-   rD   rE   r   r/   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r0   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   rH   r   r0   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   r2   r   r   r   	__enter__E  s   zBaseManager.__enter__c                 C      |    d S r   )rY   r0   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   NrY   g      ?)r   zmanager still alive	terminatez'trying to `terminate()` manager processg?z#manager still alive after terminate)r   r	   r   rH   r   r   r   hasattrr  r   r   r   r   _address_to_localKeyError)r   r.   rj   r5   r   r   r   r   r   r   N  s2   




zBaseManager._finalize_managerc                 C      | j S r   )r   r2   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}|rD| 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managerrj   r   r   ra   )	r	   r   r   r   r   r   r.   rH   r/   )r0   rD   rE   r   expproxyr   r   r-   r   r   rS     s   z"BaseManager.register.<locals>.temp)
__dict__r   copy	AutoProxyr   r$   r   rL   r8   setattr)
r   r-   rQ   r   r   r   create_methodkeyr   rS   r   r  r   registerp  s&   



zBaseManager.register)NNr   Nre   r   )NNNNT)r8   r:   r;   r<   r   rX   r   r1   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_forkr2   r   r   r   r1     r   zProcessLocalSet.__init__c                 C   s   t | dfS re   )r   r2   r   r   r   r     r  zProcessLocalSet.__reduce__N)r8   r:   r;   r1   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_tokenr/   _id_managerr   rk   r   r   ri   r   rx   rj   _increfr  _after_fork)r0   r   rr   r  rj   r   r`   	tls_idsetr   r   r   r1     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   rx   r"   ro   r   r   r$  r.   r   rH   r"  r   )r0   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   Nra   )r"  r   r   r	   r   ro   r   r"   r,  r?   r%  r@   r&  r   r-   r$  r.   r   r   r   rH   r/   rA   )r0   rC   rD   rE   r   rF   rG   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.  r2   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   r`   z	INCREF %r
   r   )r   r$  r.   r   rH   r%  r	   r   r/   r#  addr&  r   r   r   _decrefr"  _close)r0   r   r5   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   ra   z... decref failed %sz%DECREF %r -- manager already shutdownr   z-thread %r has no more proxies so closing conn)discardr/   r   r   r   r	   r   r.   rH   r   r  ro   r   r"   r   r   )r   rj   r5   tlsidsetr   r   r   r   r   r   r4    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   )r0   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 )Nrj   _isautoFr   )
r   get_spawning_popenr   r   r	  RebuildProxyr  r$  r   r   r0   rE   r   r   r   r   4  s   

zBaseProxy.__reduce__c                 C   r  r   )r1  )r0   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   r8   r$  r-   r/   r2   r   r   r   r9   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)
        r9   Nr-  z; '__str__()' failed>)r.  r   r   r2   r   r   r   rO   H  s
   zBaseProxy.__str__NNNT)r8   r:   r;   r<   r  r	   ForkAwareThreadLockr   r1   r,  r.  r1  r'  r  r4  r(  r   r>  r9   rO   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.
    ry   Nr   r`   T_inheritingF)r   r   rx   r.   rm   r/   pop)rT   r   rr   rE   r   r`   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"   rH  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  rj   r`   T)rk   r.   rH   r   r   r   rx   rj   rH  r-   r9  )
r   rr   r  rj   r   r`   r   r   rG  r  r   r   r   r    s    

r  c                   @   r  )	Namespacec                 K   s   | j | d S r   )r  updater<  r   r   r   r1     r4   zNamespace.__init__c                 C   sZ   t | j }g }|D ]\}}|ds|d||f  q|  d| jjd|f S )NrV   z%s=%rz%s(%s)z, )	r'   r  r$   
startswithrR   r   r7   r8   r   )r0   _itemsrS   r"   r   r   r   r   r9     s   
zNamespace.__repr__N)r8   r:   r;   r1   r9   r   r   r   r   rI    r  rI  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)r0   r   r   lockr   r   r   r1     s   
zValue.__init__c                 C   r  r   rO  r2   r   r   r   r     s   z	Value.getc                 C   s
   || _ d S r   rQ  r0   r   r   r   r   r        
z	Value.setc                 C   s   dt | j| j| jf S )Nz
%s(%r, %r))r   r8   rN  rO  r2   r   r   r   r9     s   
zValue.__repr__NT)	r8   r:   r;   r1   r   r   r9   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  r0  r0   rD   r   r   r   rZ    r  zIteratorProxy.nextc                 C      | S r   r   r2   r   r   r   __iter__  r   zIteratorProxy.__iter__c                 G   r[  )NrX  r0  r\  r   r   r   rX    r  zIteratorProxy.__next__c                 G   r[  )Nr?   r0  r\  r   r   r   r?     r  zIteratorProxy.sendc                 G   r[  )NrY  r0  r\  r   r   r   rY    r  zIteratorProxy.throwc                 G   r[  )Nr   r0  r\  r   r   r   r     r  zIteratorProxy.closeN)r8   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  r0  )r0   blockingr   rD   r   r   r   rb    s   zAcquirerProxy.acquirec                 C   r/  Nrc  r0  r2   r   r   r   rc    rS  zAcquirerProxy.releasec                 C   r/  rd  r0  r2   r   r   r   r     rS  zAcquirerProxy.__enter__c                 C   r/  rf  r0  r   r   r   r   r    rS  zAcquirerProxy.__exit__)TN)r8   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   r0  r   r   r   r   r     r+   zConditionProxy.waitc                 C   r/  )Nrh  r0  r2   r   r   r   rh    rS  zConditionProxy.notifyc                 C   r/  )Nri  r0  r2   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   )r0   	predicater   rG   endtimewaittimer   r   r   wait_for  s"   

zConditionProxy.wait_forr   )r8   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   r/  )Nr~   r0  r2   r   r   r   r~     rS  zEventProxy.is_setc                 C   r/  Nr   r0  r2   r   r   r   r     rS  zEventProxy.setc                 C   r/  )Nr  r0  r2   r   r   r   r    rS  zEventProxy.clearNc                 C   rj  rk  r0  r   r   r   r   r     r+   zEventProxy.waitr   )r8   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  r0  r   r   r   r   r   %  r+   zBarrierProxy.waitc                 C   r/  )Nrt  r0  r2   r   r   r   rt  (  rS  zBarrierProxy.abortc                 C   r/  )Nru  r0  r2   r   r   r   ru  +  rS  zBarrierProxy.resetc                 C      |  ddS )Nrs  )partiesr0  r2   r   r   r   rw  .     zBarrierProxy.partiesc                 C   rv  )Nrs  )	n_waitingr0  r2   r   r   r   ry  2  rx  zBarrierProxy.n_waitingc                 C   rv  )Nrs  )brokenr0  r2   r   r   r   rz  6  rx  zBarrierProxy.brokenr   )r8   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   rV   r.  rs  )objectrs  r0   r  
callmethodr   r   r   __getattr__>     zNamespaceProxy.__getattr__c                 C   s4   |d dkrt | ||S t | d}|d||fS )Nr   rV   r.  r|  )r~  r|  rs  )r0   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   rV   r.  r}  )r~  r}  rs  r  r   r   r   r}  J  r  zNamespaceProxy.__delattr__N)r8   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   r/  )Nr   r0  r2   r   r   r   r   T  rS  zValueProxy.getc                 C   rj  rq  r0  rR  r   r   r   r   W  r+   zValueProxy.setN)r8   r:   r;   r	  r   r   r  r   r   r   r   r   r  Q  s
    r  )__add____contains____delitem____getitem____len____mul____reversed____rmul____setitem__rR   countextendindexinsertrB  removereverser   __imul__)__getslice____setslice____delslice__BaseListProxyc                   @   r  )	ListProxyc                 C      |  d|f | S )Nr  r0  rR  r   r   r   __iadd__i     zListProxy.__iadd__c                 C   r  )Nr  r0  rR  r   r   r   r  m  r  zListProxy.__imul__N)r8   r:   r;   r  r  r   r   r   r   r  g  s    r  	DictProxy)r  r  r  r  r  r  r  r   has_keyr$   r%   rB  popitem
setdefaultrJ  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   r2   r   r   r   r     r   zPoolProxy.__enter__c                 G   r   r   )r  )r0   exc_infor   r   r   r    r  zPoolProxy.__exit__N)r8   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)r8   r:   r;   r<   r   r   r   r   r     s    r   r   JoinableQueuerv   Lockrp   	SemaphoreBoundedSemaphore	ConditionBarrierPoolr'   r   F)r   r  )r  r?  rT  )Mr   ro   r   r   r    r   r   r   r   r   r	   r
   queuer   timer   __all__r_  PY3r   r  
view_typesr'   r*   	view_typer   rH   rA   r   rM   rU   rW   rX   r   rs   rt   XmlListener	XmlClientrk   r   r   r  r   r;  rH  r  rI  rM  rV  rW  ra  rg  rp  rr  r{  r  _ListProxy_Attributesr  r  r  _ArrayProxy_Attributesr  BasePoolProxyr
  r  r   rv   r  rp   r  r  r  r  r  r  r   r   r   r   r   <module>   s   

  


 e +





	
