U
    FgVc(                     @   s^  d dl mZ d dlZd dlmZ zd dlZW n   d dlZY nX d dlZe 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| dS | S d S N)   r   zutf-8)sysversion_info
isinstancestrencodeval r   O/var/www/html/UseVoiceDocker/env/lib/python3.8/site-packages/uwsgidecorators.py_encode1   s    
r   c                 C   s&   t jdkrt| tr| dS | S d S r   )r   r   r	   bytesdecoder   r   r   r   _decode1   s    
r   c                 C   s   t dd |  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 |  D S )Nc                 s   s"   | ]\}}t |t |fV  qd S r   r   r   r   r   r   r   )   s     z'_decode_from_spooler.<locals>.<genexpr>r   r   r   r   r   _decode_from_spooler(   s    r!   c                  C   s.   t ddD ]} t| s
|   S q
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 |  D } d| kr<dD ]}t| || |< q"t| } t| d  }d| krl|| d | d }n|| }t| d|S )Nc                 s   s   | ]\}}t ||fV  qd S r   r    r   r   r   r   r   7   s     z'manage_spool_request.<locals>.<genexpr>argsr(   kwargsud_spool_funcr*   ud_spool_ret)	r   r   pickleloadspopr!   spooler_functionsintget)r   kfretr   r   r   manage_spool_request4   s    r6   c                  C   s   t D ]
} |   qd S r   )postfork_chainr4   r   r   r   postfork_chain_hookG   s    r9   c                   @   s   e Zd Zdd Zdd ZdS )postforkc                 C   s0   t |rd| _|| _nd | _|| _t|  d S Nr   )callablewidr4   r7   appendselfr4   r   r   r   __init__P   s    zpostfork.__init__c                 O   s8   | j r*| jdkr"| jt kr"d S |   S |d | _ d S r;   )r4   r=   r$   Z	worker_idr@   r(   r*   r   r   r   __call__X   s
    zpostfork.__call__N__name__
__module____qualname__rA   rC   r   r   r   r   r:   O   s   r:   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )	_spoolrawc                 O   s   | j  }| js:t|dkr*||d  |r|| nPi }dD ] }||krB||||i qB|| |t|t|d t	t
|S )Nr   )Zmessage_dictspoolerpriorityatbodyr)   )	base_dictcopypass_argumentslenupdater/   r-   dumpsr$   spoolr   )r@   r(   r*   	argumentsZspooler_argskeyr   r   r   rC   b   s    

z_spoolraw.__call__c                 O   s   | j j| f||S r   )	__class__rC   rB   r   r   r   rS   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 )NrI   z9you have to enable the uWSGI spooler to use @%s decoratorr+   )r$   optr%   rV   rE   r4   r0   rC   rS   rO   rM   )r@   r4   rO   r   r   r   rA   w   s    


z_spoolraw.__init__N)rE   rF   rG   rC   rS   rA   r   r   r   r   rH   `   s   rH   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_OKrM   rH   rC   rB   r   r   r   rC      s    z_spool.__call__NrE   rF   rG   rC   r   r   r   r   rX      s   rX   c                   @   s   e Zd Zdd ZdS )_spoolforeverc                 O   s"   t tj| jd< tj| f||S rY   )r
   r$   ZSPOOL_RETRYrM   rH   rC   rB   r   r   r   rC      s    z_spoolforever.__call__NrZ   r   r   r   r   r[      s   r[   Fc                 C   s   | st ||dS || |S )N)rO   r   )r4   rO   _classr   r   r   spool_decorate   s    r]   c                 C   s
   t | |S r   )r]   r4   rO   r   r   r   spoolraw   s    r_   c                 C   s   t | |tS r   )r]   rX   r^   r   r   r   rS      s    rS   c                 C   s   t | |tS r   )r]   r[   r^   r   r   r   spoolforever   s    r`   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 r;   )r<   rE   fnamemulemule_functionsr?   r   r   r   rA      s    zmulefunc.__init__c              	   O   s$   t td| j||d| j d S )Nuwsgi_mulefunc)servicefuncr(   r*   )r$   Zmule_msgr-   rR   rb   rc   rB   r   r   r   	real_call   s    zmulefunc.real_callc                 O   s2   | j s&|d j| _ |d t| j < | jS | j||S r;   )rb   rE   rd   rh   rB   r   r   r   rC      s
    zmulefunc.__call__NrE   rF   rG   rA   rh   rC   r   r   r   r   ra      s   	
ra   c                 C   s4   t | }|d dkr0t|d  |d |d S d S )Nrf   re   rg   r(   r*   )r-   r.   rd   )messagemsgr   r   r   mule_msg_dispatcher   s    
rl   c                   @   s   e Zd Zdd Zdd ZdS )rpcc                 C   s
   || _ d S r   namer@   ro   r   r   r   rA      s    zrpc.__init__c                 C   s   t | j| |S r   )r$   Zregister_rpcro   r?   r   r   r   rC      s    zrpc.__call__NrD   r   r   r   r   rm      s   rm   c                   @   s   e Zd Zdd Zdd ZdS )	farm_loopc                 C   s   || _ || _d S r   )r4   farm)r@   r4   rr   r   r   r   rA      s    zfarm_loop.__init__c                 C   s<   t  dkrd S t | js d S t  }|r | | q d S r;   )r$   mule_idZin_farmrr   Zfarm_get_msgr4   r@   rj   r   r   r   rC      s    zfarm_loop.__call__NrD   r   r   r   r   rq      s   rq   c                   @   s   e Zd ZdddZdd ZdS )rr   Nc                 K   s
   || _ d S r   rn   )r@   ro   r*   r   r   r   rA      s    zfarm.__init__c                 C   s   t t|| j d S r   )r7   r>   rq   ro   r?   r   r   r   rC      s    zfarm.__call__)NrD   r   r   r   r   rr      s   
rr   c                   @   s   e Zd Zdd Zdd ZdS )
mule_brainc                 C   s   || _ || _d S r   r4   numr@   r4   rw   r   r   r   rA      s    zmule_brain.__init__c              	   C   sX   t  | jkrTz|   W n8   t }t|d |d |d  td Y nX d S Nr         r$   rs   rw   r4   r   exc_info
excepthookexitr@   excr   r   r   rC      s    zmule_brain.__call__NrD   r   r   r   r   ru      s   ru   c                   @   s   e Zd Zdd ZdS )mule_brainloopc              	   C   sZ   t  | jkrVz|   W q   t }t|d |d |d  td Y qX qd S ry   r|   r   r   r   r   rC      s    zmule_brainloop.__call__NrZ   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd Zdd ZdS )rc   c                 C   s
   || _ d S r   rw   r@   rw   r   r   r   rA     s    zmule.__init__c                 C   s   t t|| j d S r   )r7   r>   ru   rw   r?   r   r   r   rC     s    zmule.__call__NrD   r   r   r   r   rc   
  s   rc   c                   @   s   e Zd Zdd ZdS )muleloopc                 C   s   t t|| j d S r   )r7   r>   r   rw   r?   r   r   r   rC     s    zmuleloop.__call__NrZ   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )mulemsg_loopc                 C   s   || _ || _d S r   rv   rx   r   r   r   rA     s    zmulemsg_loop.__init__c                 C   s*   t  | jkr&t  }|r| | qd S r   )r$   rs   rw   Zmule_get_msgr4   rt   r   r   r   rC     s    zmulemsg_loop.__call__NrD   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )mulemsgc                 C   s
   || _ d S r   r   r   r   r   r   rA   &  s    zmulemsg.__init__c                 C   s   t t|| j d S r   )r7   r>   r   rw   r?   r   r   r   rC   )  s    zmulemsg.__call__NrD   r   r   r   r   r   %  s   r   c                   @   s   e Zd Zdd Zdd ZdS )signalc                 K   s   || _ |dd| _d S )Ntarget )rw   r2   r   )r@   rw   r*   r   r   r   rA   /  s    zsignal.__init__c                 C   s   t | j| j| |S r   )r$   register_signalrw   r   r?   r   r   r   rC   3  s    zsignal.__call__NrD   r   r   r   r   r   -  s   r   c                   @   s   e Zd Zdd Zdd ZdS )timerc                 K   s(   | dt | _|| _| dd| _d S Nr&   r   r   r2   r'   rw   secsr   r@   r   r*   r   r   r   rA   :  s    ztimer.__init__c                 C   s&   t | j| j| t | j| j |S r   )r$   r   rw   r   Z	add_timerr   r?   r   r   r   rC   ?  s    ztimer.__call__NrD   r   r   r   r   r   8  s   r   c                   @   s   e Zd Zdd Zdd ZdS )cronc                 K   s@   | dt | _|| _|| _|| _|| _|| _| dd| _d S r   )	r2   r'   rw   minutehourdaymonthdayweekr   )r@   r   r   r   r   r   r*   r   r   r   rA   G  s    zcron.__init__c                 C   s6   t | j| j| t | j| j| j| j| j| j	 |S r   )
r$   r   rw   r   Zadd_cronr   r   r   r   r   r?   r   r   r   rC   P  s      zcron.__call__NrD   r   r   r   r   r   E  s   	r   c                   @   s   e Zd Zdd Zdd ZdS )rbtimerc                 K   s(   | dt | _|| _| dd| _d S r   r   r   r   r   r   rA   Y  s    zrbtimer.__init__c                 C   s&   t | j| j| t | j| j |S r   )r$   r   rw   r   Zadd_rb_timerr   r?   r   r   r   rC   ^  s    zrbtimer.__call__NrD   r   r   r   r   r   W  s   r   c                   @   s   e Zd Zdd Zdd ZdS )filemonc                 K   s(   | dt | _|| _| dd| _d S r   )r2   r'   rw   fsobjr   )r@   r   r*   r   r   r   rA   f  s    zfilemon.__init__c                 C   s&   t | j| j| t | j| j |S r   )r$   r   rw   r   Zadd_file_monitorr   r?   r   r   r   rC   k  s    zfilemon.__call__NrD   r   r   r   r   r   d  s   r   c                   @   s   e Zd Zdd Zdd ZdS )erlangc                 C   s
   || _ d S r   rn   rp   r   r   r   rA   s  s    zerlang.__init__c                 C   s   t | j| |S r   )r$   Zerlang_register_processro   r?   r   r   r   rC   v  s    zerlang.__call__NrD   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 r   r8   r?   r   r   r   rA   |  s    zlock.__init__c                 O   s4   t  rd S t   z| j||W S t   X d S r   )r$   Zi_am_the_spoolerr   Zunlockr4   rB   r   r   r   rC     s    zlock.__call__NrD   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 r   r8   r?   r   r   r   rA     s    zthread.__init__c                 G   s"   t | j|d}d|_|  | jS )N)r   r(   T)r   r4   daemonstart)r@   r(   tr   r   r   rC     s    zthread.__call__NrD   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 r   )s)r@   secondsr   r   r   rA     s    zharakiri.__init__c                 O   s&   t | j | j||}t d |S r;   )r$   Zset_user_harakirir   r4   )r@   r(   r*   rr   r   r   rh     s    
zharakiri.real_callc                 C   s   || _ | jS r   )r4   rh   r?   r   r   r   rC     s    zharakiri.__call__Nri   r   r   r   r   r     s   r   )NF)NF)NF)4	functoolsr   r   	threadingr   cPickler-   r$   Z	masterpidr%   r0   rd   r7   r   r   r   r!   r'   r6   r9   rI   Zpost_fork_hookobjectr:   rH   rX   r[   r]   r_   rS   r`   ra   rl   Zmule_msg_hookrm   rq   rr   ru   r   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sh   #



	
