o
    FgVc(                     @   sZ  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 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dLd d!ZdLd"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 )M    partialN)Threadz>you have to enable the uWSGI master process to use this modulec                 C   "   t jdkrt| tr| dS | S N)   r   zutf-8)sysversion_info
isinstancestrencodeval r   F/var/www/html/kck/venv/lib/python3.10/site-packages/uwsgidecorators.py_encode1      
r   c                 C   r   r   )r   r	   r
   bytesdecoder   r   r   r   _decode1   r   r   c                 C      t dd |  D S )Nc                 s   $    | ]\}}t |t |fV  qd S N)r   .0KVr   r   r   	<genexpr>%      " z%_encode_to_spooler.<locals>.<genexpr>dictitemsvarsr   r   r   _encode_to_spooler$      r$   c                 C   r   )Nc                 s   r   r   r   r   r   r   r   r   )   r   z'_decode_from_spooler.<locals>.<genexpr>r   r"   r   r   r   _decode_from_spooler(   r%   r'   c                  C   s*   t ddD ]} t| s|   S qtd)Nr      zNo free uwsgi signal available)rangeuwsgisignal_registered	Exception)signumr   r   r   get_free_signal,   s
   
r.   c                 C   s   t dd |  D } d| v rdD ]}t| || |< qt| } t| d  }d| v r8|| d i | 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_funcr1   ud_spool_ret)	r    r!   pickleloadspopr'   spooler_functionsintget)r#   kfretr   r   r   manage_spool_request4   s   r=   c                  C   s   t D ]} |   qd S r   )postfork_chainr;   r   r   r   postfork_chain_hookG   s   r@   c                   @      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widr;   r>   appendselfr;   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 rC   )r;   rE   r*   	worker_idrH   r/   r1   r   r   r   __call__X   s
   zpostfork.__call__N__name__
__module____qualname__rI   rL   r   r   r   r   rB   O   s    rB   c                   @   $   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|| n(i }dD ]}||v r1||||i q!|| |t|t|d t	t
|S )Nr   )message_dictspoolerpriorityatbodyr0   )	base_dictcopypass_argumentslenupdater6   r4   dumpsr*   spoolr$   )rH   r/   r1   	argumentsspooler_argskeyr   r   r   rL   b   s"   


z_spoolraw.__call__c                 O   s   | j j| g|R i |S r   )	__class__rL   rK   r   r   r   r^   t   s   z_spoolraw.spoolc                 C   sP   dt jvrtd| jj || _| jt| jj< | j| j_|| _	d| jji| _
d S )NrT   z9you have to enable the uWSGI spooler to use @%s decoratorr2   )r*   optr,   rb   rN   r;   r7   rL   r^   rZ   rX   )rH   r;   rZ   r   r   r   rI   w   s   


z_spoolraw.__init__N)rN   rO   rP   rL   r^   rI   r   r   r   r   rR   `   s    rR   c                   @      e Zd Zdd ZdS )_spoolc                 O   (   t tj| jd< tj| g|R i |S Nr3   )r   r*   SPOOL_OKrX   rR   rL   rK   r   r   r   rL         z_spool.__call__NrN   rO   rP   rL   r   r   r   r   re          re   c                   @   rd   )_spoolforeverc                 O   rf   rg   )r   r*   SPOOL_RETRYrX   rR   rL   rK   r   r   r   rL      ri   z_spoolforever.__call__Nrj   r   r   r   r   rl      rk   rl   Fc                 C   s   | st ||dS || |S )N)rZ   r   )r;   rZ   _classr   r   r   spool_decorate   s   
ro   c                 C   s
   t | |S r   )ro   r;   rZ   r   r   r   spoolraw      
rq   c                 C      t | |tS r   )ro   re   rp   r   r   r   r^         r^   c                 C   rs   r   )ro   rl   rp   r   r   r   spoolforever   rt   ru   c                   @   rQ   )mulefuncc                 C   s4   t |r|j| _d| _|t|j< d S || _d | _d S rC   )rD   rN   fnamemulemule_functionsrG   r   r   r   rI      s   
zmulefunc.__init__c              	   O   s$   t td| j||d| j d S )Nuwsgi_mulefunc)servicefuncr/   r1   )r*   mule_msgr4   r]   rw   rx   rK   r   r   r   	real_call   s   zmulefunc.real_callc                 O   s6   | j s|d j| _ |d t| j < | jS | j|i |S rC   )rw   rN   ry   r~   rK   r   r   r   rL      s
   zmulefunc.__call__NrN   rO   rP   rI   r~   rL   r   r   r   r   rv      s    	
rv   c                 C   s8   t | }|d dkrt|d  |d i |d S d S )Nr{   rz   r|   r/   r1   )r4   r5   ry   )messagemsgr   r   r   mule_msg_dispatcher   s   
r   c                   @   rA   )rpcc                 C   
   || _ d S r   namerH   r   r   r   r   rI      rr   zrpc.__init__c                 C      t | j| |S r   )r*   register_rpcr   rG   r   r   r   rL         zrpc.__call__NrM   r   r   r   r   r          r   c                   @   rA   )	farm_loopc                 C      || _ || _d S r   )r;   farm)rH   r;   r   r   r   r   rI         
zfarm_loop.__init__c                 C   s:   t  dkrd S t | jsd S 	 t  }|r| | qrC   )r*   mule_idin_farmr   farm_get_msgr;   rH   r   r   r   r   rL      s   
zfarm_loop.__call__NrM   r   r   r   r   r          r   c                   @   s   e Zd ZdddZdd ZdS )r   Nc                 K   r   r   r   )rH   r   r1   r   r   r   rI      rr   zfarm.__init__c                 C      t t|| j d S r   )r>   rF   r   r   rG   r   r   r   rL      r%   zfarm.__call__r   rM   r   r   r   r   r      s    
r   c                   @   rA   )
mule_brainc                 C   r   r   r;   numrH   r;   r   r   r   r   rI      r   zmule_brain.__init__c              	   C   sZ   t  | jkr+z|   W d S    t }t|d |d |d  td Y d S d S )Nr         r*   r   r   r;   r   exc_info
excepthookexitrH   excr   r   r   rL      s   zmule_brain.__call__NrM   r   r   r   r   r      r   r   c                   @   rd   )mule_brainloopc              	   C   sX   t  | jkr*	 z|   W n   t }t|d |d |d  td Y qd S )NTr   r   r   r   r   r   r   r   rL      s   zmule_brainloop.__call__Nrj   r   r   r   r   r      rk   r   c                   @   rA   )rx   c                 C   r   r   r   rH   r   r   r   r   rI     rr   zmule.__init__c                 C   r   r   )r>   rF   r   r   rG   r   r   r   rL     r%   zmule.__call__NrM   r   r   r   r   rx   
      rx   c                   @   rd   )muleloopc                 C   r   r   )r>   rF   r   r   rG   r   r   r   rL     r%   zmuleloop.__call__Nrj   r   r   r   r   r     s    r   c                   @   rA   )mulemsg_loopc                 C   r   r   r   r   r   r   r   rI     r   zmulemsg_loop.__init__c                 C   s,   t  | jkr	 t  }|r| | qd S r   )r*   r   r   mule_get_msgr;   r   r   r   r   rL     s   
zmulemsg_loop.__call__NrM   r   r   r   r   r     r   r   c                   @   rA   )mulemsgc                 C   r   r   r   r   r   r   r   rI   &  rr   zmulemsg.__init__c                 C   r   r   )r>   rF   r   r   rG   r   r   r   rL   )  r%   zmulemsg.__call__NrM   r   r   r   r   r   %  r   r   c                   @   rA   )signalc                 K   s   || _ |dd| _d S )Ntarget )r   r9   r   )rH   r   r1   r   r   r   rI   /  s   zsignal.__init__c                 C   s   t | j| j| |S r   )r*   register_signalr   r   rG   r   r   r   rL   3  s   zsignal.__call__NrM   r   r   r   r   r   -  r   r   c                   @   rA   )timerc                 K   (   | dt | _|| _| dd| _d S Nr-   r   r   r9   r.   r   secsr   rH   r   r1   r   r   r   rI   :     ztimer.__init__c                 C   &   t | j| j| t | j| j |S r   )r*   r   r   r   	add_timerr   rG   r   r   r   rL   ?     ztimer.__call__NrM   r   r   r   r   r   8      r   c                   @   rA   )cronc                 K   s@   | dt | _|| _|| _|| _|| _|| _| dd| _d S r   )	r9   r.   r   minutehourdaymonthdayweekr   )rH   r   r   r   r   r   r1   r   r   r   rI   G  s   zcron.__init__c                 C   s6   t | j| j| t | j| j| j| j| j| j	 |S r   )
r*   r   r   r   add_cronr   r   r   r   r   rG   r   r   r   rL   P  s
   zcron.__call__NrM   r   r   r   r   r   E  s    	r   c                   @   rA   )rbtimerc                 K   r   r   r   r   r   r   r   rI   Y  r   zrbtimer.__init__c                 C   r   r   )r*   r   r   r   add_rb_timerr   rG   r   r   r   rL   ^  r   zrbtimer.__call__NrM   r   r   r   r   r   W  r   r   c                   @   rA   )filemonc                 K   r   r   )r9   r.   r   fsobjr   )rH   r   r1   r   r   r   rI   f  r   zfilemon.__init__c                 C   r   r   )r*   r   r   r   add_file_monitorr   rG   r   r   r   rL   k  r   zfilemon.__call__NrM   r   r   r   r   r   d  r   r   c                   @   rA   )erlangc                 C   r   r   r   r   r   r   r   rI   s  rr   zerlang.__init__c                 C   r   r   )r*   erlang_register_processr   rG   r   r   r   rL   v  r   zerlang.__call__NrM   r   r   r   r   r   q  r   r   c                   @   rA   )lockc                 C   r   r   r?   rG   r   r   r   rI   |  rr   zlock.__init__c                 O   s:   t  rd S t   z| j|i |W t   S t   w r   )r*   i_am_the_spoolerr   r;   unlockrK   r   r   r   rL     s   zlock.__call__NrM   r   r   r   r   r   {  r   r   c                   @   rA   )threadc                 C   r   r   r?   rG   r   r   r   rI     rr   zthread.__init__c                 G   s"   t | j|d}d|_|  | jS )N)r   r/   T)r   r;   daemonstart)rH   r/   tr   r   r   rL     s   zthread.__call__NrM   r   r   r   r   r     r   r   c                   @   rQ   )harakiric                 C   r   r   )s)rH   secondsr   r   r   rI     rr   zharakiri.__init__c                 O   s*   t | j | j|i |}t d |S rC   )r*   set_user_harakirir   r;   )rH   r/   r1   rr   r   r   r~     s   
zharakiri.real_callc                 C   s   || _ | jS r   )r;   r~   rG   r   r   r   rL     s   zharakiri.__call__Nr   r   r   r   r   r     s    r   )NF)4	functoolsr   r   	threadingr   cPickler4   r*   	masterpidr,   r7   ry   r>   r   r   r$   r'   r.   r=   r@   rT   post_fork_hookobjectrB   rR   re   rl   ro   rq   r^   ru   rv   r   mule_msg_hookr   r   r   r   r   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sj    
#



	
