3
"„»e˜(  ã            
   @   s^  d dl mZ d dlZd dlmZ yd dlZW n   d dlZY nX d dlZejƒ d kr^e	dƒ‚i Z
i Zg 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e_G dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZddefdd„ZdLdd„ZdMd d!„ZdNd"d#„ZG d$d%„ d%eƒZd&d'„ Z e e_!G d(d)„ d)eƒZ"G d*d+„ d+eƒZ#G d,d-„ d-eƒZ$G d.d/„ d/eƒZ%G d0d1„ d1e%ƒZ&G d2d3„ d3eƒZ'G d4d5„ d5e'ƒZ(G d6d7„ d7eƒZ)G d8d9„ d9eƒZ*G d:d;„ d;eƒZ+G d<d=„ d=eƒZ,G d>d?„ d?eƒZ-G d@dA„ dAeƒZ.G dBdC„ dCeƒZ/G dDdE„ dEeƒZ0G dFdG„ dGeƒZ1G dHdI„ dIeƒZ2G dJdK„ dKeƒZ3dS )Oé    )ÚpartialN)ÚThreadz>you have to enable the uWSGI master process to use this modulec             C   s&   t jdkrt| tƒr| jdƒS | S d S )Né   r   zutf-8)r   r   )ÚsysÚversion_infoÚ
isinstanceÚstrÚencode)Úval© r   úJ/tmp/pip-build-3_2q_hju/uwsgi/uWSGI-2.0.23.data/purelib/uwsgidecorators.pyÚ_encode1   s    
r   c             C   s&   t jdkrt| tƒr| jdƒS | S d S )Nr   r   zutf-8)r   r   )r   r   r   ÚbytesÚdecode)r
   r   r   r   Ú_decode1   s    
r   c             C   s   t dd„ | jƒ D ƒƒS )Nc             s   s"   | ]\}}t |ƒt |ƒfV  qd S )N)r   )Ú.0ÚKÚVr   r   r   ú	<genexpr>%   s    z%_encode_to_spooler.<locals>.<genexpr>)ÚdictÚitems)Úvarsr   r   r   Ú_encode_to_spooler$   s    r   c             C   s   t dd„ | jƒ D ƒƒS )Nc             s   s"   | ]\}}t |ƒt |ƒfV  qd S )N)r   )r   r   r   r   r   r   r   )   s    z'_decode_from_spooler.<locals>.<genexpr>)r   r   )r   r   r   r   Ú_decode_from_spooler(   s    r   c              C   s.   x t ddƒD ]} tj| ƒs| S qW tdƒ‚d S )Nr   é   zNo free uwsgi signal available)ÚrangeÚuwsgiZsignal_registeredÚ	Exception)Úsignumr   r   r   Úget_free_signal,   s    
r   c             C   sˆ   t dd„ | jƒ D ƒƒ} d| kr@x dD ]}tj| j|ƒƒ| |< q$W t| ƒ} t| d  }d| krp|| d | d Ž}n|| ƒ}t| jd|ƒƒS )Nc             s   s   | ]\}}t |ƒ|fV  qd S )N)r   )r   r   r   r   r   r   r   7   s    z'manage_spool_request.<locals>.<genexpr>ÚargsÚkwargsÚud_spool_funcÚud_spool_ret)r    r!   )	r   r   ÚpickleÚloadsÚpopr   Úspooler_functionsÚintÚget)r   ÚkÚfÚretr   r   r   Úmanage_spool_request4   s    
r-   c              C   s   xt D ]
} | ƒ  qW d S )N)Úpostfork_chain)r+   r   r   r   Úpostfork_chain_hookG   s    
r/   c               @   s   e Zd Zdd„ Zdd„ ZdS )Úpostforkc             C   s0   t |ƒrd| _|| _nd | _|| _tj| ƒ d S )Nr   )ÚcallableÚwidr+   r.   Úappend)Úselfr+   r   r   r   Ú__init__P   s    zpostfork.__init__c             O   s8   | j r*| jdkr"| jtjƒ kr"d S | j ƒ S |d | _ d S )Nr   )r+   r2   r   Z	worker_id)r4   r    r!   r   r   r   Ú__call__X   s
    zpostfork.__call__N)Ú__name__Ú
__module__Ú__qualname__r5   r6   r   r   r   r   r0   O   s   r0   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú	_spoolrawc             O   sœ   | j jƒ }| js:t|ƒdkr*|j|d ƒ |rŽ|j|ƒ nTi }x(dD ] }||krD|j||j|ƒiƒ qDW |j|ƒ |jtj|ƒtj|ƒdœƒ tj	t
|ƒƒS )	Nr   Úmessage_dictÚspoolerÚpriorityÚatÚbody)r    r!   )r;   r<   r=   r>   r?   )Ú	base_dictÚcopyÚpass_argumentsÚlenÚupdater&   r$   Údumpsr   Úspoolr   )r4   r    r!   Ú	argumentsZspooler_argsÚkeyr   r   r   r6   b   s    


z_spoolraw.__call__c             O   s   | j j| f|ž|ŽS )N)Ú	__class__r6   )r4   r    r!   r   r   r   rF   t   s    z_spoolraw.spoolc             C   sP   dt jkrtd| jj ƒ‚|| _| jt| jj< | j| j_|| _	d| jji| _
d S )Nr<   z9you have to enable the uWSGI spooler to use @%s decoratorr"   )r   Úoptr   rI   r7   r+   r'   r6   rF   rB   r@   )r4   r+   rB   r   r   r   r5   w   s    

z_spoolraw.__init__N)r7   r8   r9   r6   rF   r5   r   r   r   r   r:   `   s   r:   c               @   s   e Zd Zdd„ ZdS )Ú_spoolc             O   s"   t tjƒ| jd< tj| f|ž|ŽS )Nr#   )r   r   ZSPOOL_OKr@   r:   r6   )r4   r    r!   r   r   r   r6   …   s    z_spool.__call__N)r7   r8   r9   r6   r   r   r   r   rK   ƒ   s   rK   c               @   s   e Zd Zdd„ ZdS )Ú_spoolforeverc             O   s"   t tjƒ| jd< tj| f|ž|ŽS )Nr#   )r   r   ZSPOOL_RETRYr@   r:   r6   )r4   r    r!   r   r   r   r6   Œ   s    z_spoolforever.__call__N)r7   r8   r9   r6   r   r   r   r   rL   Š   s   rL   Fc             C   s   | st ||dS || |ƒS )N)rB   )r   )r+   rB   Ú_classr   r   r   Úspool_decorate‘   s    rN   c             C   s
   t | |ƒS )N)rN   )r+   rB   r   r   r   Úspoolraw—   s    rO   c             C   s   t | |tƒS )N)rN   rK   )r+   rB   r   r   r   rF   ›   s    rF   c             C   s   t | |tƒS )N)rN   rL   )r+   rB   r   r   r   ÚspoolforeverŸ   s    rP   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Úmulefuncc             C   s2   t |ƒr"|j| _d| _|t|j< n|| _d | _d S )Nr   )r1   r7   ÚfnameÚmuleÚmule_functions)r4   r+   r   r   r   r5   ¥   s    zmulefunc.__init__c             O   s$   t jtjd| j||dœƒ| jƒ d S )NÚuwsgi_mulefunc)ÚserviceÚfuncr    r!   )r   Zmule_msgr$   rE   rR   rS   )r4   r    r!   r   r   r   Ú	real_call®   s    zmulefunc.real_callc             O   s2   | j s&|d j| _ |d t| j < | jS | j||ŽS )Nr   )rR   r7   rT   rX   )r4   r    r!   r   r   r   r6   ¸   s
    zmulefunc.__call__N)r7   r8   r9   r5   rX   r6   r   r   r   r   rQ   £   s   	
rQ   c             C   s4   t j| ƒ}|d dkr0t|d  |d |d ŽS d S )NrV   rU   rW   r    r!   )r$   r%   rT   )ÚmessageÚmsgr   r   r   Úmule_msg_dispatcherÁ   s    
r[   c               @   s   e Zd Zdd„ Zdd„ ZdS )Úrpcc             C   s
   || _ d S )N)Úname)r4   r]   r   r   r   r5   Ë   s    zrpc.__init__c             C   s   t j| j|ƒ |S )N)r   Zregister_rpcr]   )r4   r+   r   r   r   r6   Î   s    zrpc.__call__N)r7   r8   r9   r5   r6   r   r   r   r   r\   É   s   r\   c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú	farm_loopc             C   s   || _ || _d S )N)r+   Úfarm)r4   r+   r_   r   r   r   r5   Õ   s    zfarm_loop.__init__c             C   s@   t jƒ dkrd S t j| jƒs d S xt jƒ }|r"| j|ƒ q"W d S )Nr   )r   Úmule_idZin_farmr_   Zfarm_get_msgr+   )r4   rY   r   r   r   r6   Ù   s    zfarm_loop.__call__N)r7   r8   r9   r5   r6   r   r   r   r   r^   Ó   s   r^   c               @   s   e Zd Zddd„Zdd„ ZdS )r_   Nc             K   s
   || _ d S )N)r]   )r4   r]   r!   r   r   r   r5   æ   s    zfarm.__init__c             C   s   t jt|| jƒƒ d S )N)r.   r3   r^   r]   )r4   r+   r   r   r   r6   é   s    zfarm.__call__)N)r7   r8   r9   r5   r6   r   r   r   r   r_   ä   s   
r_   c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú
mule_brainc             C   s   || _ || _d S )N)r+   Únum)r4   r+   rb   r   r   r   r5   ï   s    zmule_brain.__init__c             C   sX   t jƒ | jkrTy| jƒ  W n8   tjƒ }tj|d |d |d ƒ tjdƒ Y nX d S )Nr   é   é   )r   r`   rb   r+   r   Úexc_infoÚ
excepthookÚexit)r4   Úexcr   r   r   r6   ó   s    zmule_brain.__call__N)r7   r8   r9   r5   r6   r   r   r   r   ra   í   s   ra   c               @   s   e Zd Zdd„ ZdS )Úmule_brainloopc             C   s^   t jƒ | jkrZxJy| jƒ  W q   tjƒ }tj|d |d |d ƒ tjdƒ Y qX qW d S )Nr   rc   rd   )r   r`   rb   r+   r   re   rf   rg   )r4   rh   r   r   r   r6   ÿ   s    zmule_brainloop.__call__N)r7   r8   r9   r6   r   r   r   r   ri   ý   s   ri   c               @   s   e Zd Zdd„ Zdd„ ZdS )rS   c             C   s
   || _ d S )N)rb   )r4   rb   r   r   r   r5     s    zmule.__init__c             C   s   t jt|| jƒƒ d S )N)r.   r3   ra   rb   )r4   r+   r   r   r   r6     s    zmule.__call__N)r7   r8   r9   r5   r6   r   r   r   r   rS   
  s   rS   c               @   s   e Zd Zdd„ ZdS )Úmuleloopc             C   s   t jt|| jƒƒ d S )N)r.   r3   ri   rb   )r4   r+   r   r   r   r6     s    zmuleloop.__call__N)r7   r8   r9   r6   r   r   r   r   rj     s   rj   c               @   s   e Zd Zdd„ Zdd„ ZdS )Úmulemsg_loopc             C   s   || _ || _d S )N)r+   rb   )r4   r+   rb   r   r   r   r5     s    zmulemsg_loop.__init__c             C   s.   t jƒ | jkr*xt jƒ }|r| j|ƒ qW d S )N)r   r`   rb   Zmule_get_msgr+   )r4   rY   r   r   r   r6     s
    zmulemsg_loop.__call__N)r7   r8   r9   r5   r6   r   r   r   r   rk     s   rk   c               @   s   e Zd Zdd„ Zdd„ ZdS )Úmulemsgc             C   s
   || _ d S )N)rb   )r4   rb   r   r   r   r5   &  s    zmulemsg.__init__c             C   s   t jt|| jƒƒ d S )N)r.   r3   rk   rb   )r4   r+   r   r   r   r6   )  s    zmulemsg.__call__N)r7   r8   r9   r5   r6   r   r   r   r   rl   %  s   rl   c               @   s   e Zd Zdd„ Zdd„ ZdS )Úsignalc             K   s   || _ |jddƒ| _d S )NÚtargetÚ )rb   r)   rn   )r4   rb   r!   r   r   r   r5   /  s    zsignal.__init__c             C   s   t j| j| j|ƒ |S )N)r   Úregister_signalrb   rn   )r4   r+   r   r   r   r6   3  s    zsignal.__call__N)r7   r8   r9   r5   r6   r   r   r   r   rm   -  s   rm   c               @   s   e Zd Zdd„ Zdd„ ZdS )Útimerc             K   s(   |j dtƒ ƒ| _|| _|j ddƒ| _d S )Nr   rn   ro   )r)   r   rb   Úsecsrn   )r4   rr   r!   r   r   r   r5   :  s    ztimer.__init__c             C   s&   t j| j| j|ƒ t j| j| jƒ |S )N)r   rp   rb   rn   Z	add_timerrr   )r4   r+   r   r   r   r6   ?  s    ztimer.__call__N)r7   r8   r9   r5   r6   r   r   r   r   rq   8  s   rq   c               @   s   e Zd Zdd„ Zdd„ ZdS )Úcronc             K   s@   |j dtƒ ƒ| _|| _|| _|| _|| _|| _|j ddƒ| _d S )Nr   rn   ro   )	r)   r   rb   ÚminuteÚhourÚdayÚmonthÚdayweekrn   )r4   rt   ru   rv   rw   rx   r!   r   r   r   r5   G  s    zcron.__init__c             C   s6   t j| j| j|ƒ t j| j| j| j| j| j| j	ƒ |S )N)
r   rp   rb   rn   Zadd_cronrt   ru   rv   rw   rx   )r4   r+   r   r   r   r6   P  s    zcron.__call__N)r7   r8   r9   r5   r6   r   r   r   r   rs   E  s   	rs   c               @   s   e Zd Zdd„ Zdd„ ZdS )Úrbtimerc             K   s(   |j dtƒ ƒ| _|| _|j ddƒ| _d S )Nr   rn   ro   )r)   r   rb   rr   rn   )r4   rr   r!   r   r   r   r5   Y  s    zrbtimer.__init__c             C   s&   t j| j| j|ƒ t j| j| jƒ |S )N)r   rp   rb   rn   Zadd_rb_timerrr   )r4   r+   r   r   r   r6   ^  s    zrbtimer.__call__N)r7   r8   r9   r5   r6   r   r   r   r   ry   W  s   ry   c               @   s   e Zd Zdd„ Zdd„ ZdS )Úfilemonc             K   s(   |j dtƒ ƒ| _|| _|j ddƒ| _d S )Nr   rn   ro   )r)   r   rb   Úfsobjrn   )r4   r{   r!   r   r   r   r5   f  s    zfilemon.__init__c             C   s&   t j| j| j|ƒ t j| j| jƒ |S )N)r   rp   rb   rn   Zadd_file_monitorr{   )r4   r+   r   r   r   r6   k  s    zfilemon.__call__N)r7   r8   r9   r5   r6   r   r   r   r   rz   d  s   rz   c               @   s   e Zd Zdd„ Zdd„ ZdS )Úerlangc             C   s
   || _ d S )N)r]   )r4   r]   r   r   r   r5   s  s    zerlang.__init__c             C   s   t j| j|ƒ |S )N)r   Zerlang_register_processr]   )r4   r+   r   r   r   r6   v  s    zerlang.__call__N)r7   r8   r9   r5   r6   r   r   r   r   r|   q  s   r|   c               @   s   e Zd Zdd„ Zdd„ ZdS )Úlockc             C   s
   || _ d S )N)r+   )r4   r+   r   r   r   r5   |  s    zlock.__init__c          
   O   s0   t jƒ rd S t jƒ  z| j||ŽS t jƒ  X d S )N)r   Zi_am_the_spoolerr}   r+   Zunlock)r4   r    r!   r   r   r   r6     s    zlock.__call__N)r7   r8   r9   r5   r6   r   r   r   r   r}   {  s   r}   c               @   s   e Zd Zdd„ Zdd„ ZdS )Úthreadc             C   s
   || _ d S )N)r+   )r4   r+   r   r   r   r5   Œ  s    zthread.__init__c             G   s"   t | j|d}d|_|jƒ  | jS )N)rn   r    T)r   r+   ÚdaemonÚstart)r4   r    Útr   r   r   r6     s    zthread.__call__N)r7   r8   r9   r5   r6   r   r   r   r   r~   Š  s   r~   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Úharakiric             C   s
   || _ d S )N)Ús)r4   Úsecondsr   r   r   r5   ˜  s    zharakiri.__init__c             O   s&   t j| jƒ | j||Ž}t jdƒ |S )Nr   )r   Zset_user_harakirirƒ   r+   )r4   r    r!   Úrr   r   r   rX   ›  s    
zharakiri.real_callc             C   s   || _ | jS )N)r+   rX   )r4   r+   r   r   r   r6   ¡  s    zharakiri.__call__N)r7   r8   r9   r5   rX   r6   r   r   r   r   r‚   –  s   r‚   )NF)NF)NF)4Ú	functoolsr   r   Ú	threadingr   ÚcPickler$   r   Z	masterpidr   r'   rT   r.   r   r   r   r   r   r-   r/   r<   Zpost_fork_hookÚobjectr0   r:   rK   rL   rN   rO   rF   rP   rQ   r[   Zmule_msg_hookr\   r^   r_   ra   ri   rS   rj   rk   rl   rm   rq   rs   ry   rz   r|   r}   r~   r‚   r   r   r   r   Ú<module>   sf   #



	
