o
    ȕh                     @   sz   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlZddl	m
Z
mZmZ eeZG dd dejjZdS )    N)	b64decode   )template	bugreport	strtoboolc                       sl   e Zd Zdd Zdd Z fddZdd Zd	d
 Zg ddf fdd	Ze	dd Z
dd Zdd Z  ZS )BaseHandlerc                 C   sD   | j jjs| j jjs | dd | dd | dd d S d S d S )NzAccess-Control-Allow-Origin*zAccess-Control-Allow-HeaderszGx-requested-with,access-control-allow-origin,authorization,content-typezAccess-Control-Allow-Methodsz' PUT, DELETE, OPTIONS, POST, GET, PATCH)applicationoptions
basic_authauth
set_headerself r   R/var/www/Befach/backend/venv/lib/python3.10/site-packages/flower/views/__init__.pyset_default_headers   s   zBaseHandler.set_default_headersc                 O   s   |  d |   d S )N   )
set_statusfinish)r   ___r   r   r   r
      s   
zBaseHandler.optionsc                    sf   | j j}tttj}ttdd |t| @ rJ |	| |j	|j
d t j|i | d S )Nc                 S   s   | d S )Nr   r   )xr   r   r   <lambda>!   s    z$BaseHandler.render.<locals>.<lambda>)
url_prefix)r	   r
   inspect
getmembersr   
isfunctionsetmapkeysupdater   superrender)r   argskwargsapp_options	functions	__class__r   r   r#      s   "
zBaseHandler.renderc                 K   s  |dv r$d}d|v r|d d t jjkr|d d j}| jd|d d S |dkrBdtj|d  }| jd	| jj	j
||t d
 d S |dkrX| | | dd | d d S d}d|v r||d d t jjkr||d d j}| dd | t| | | |   d S )N)i  i   exc_infor      z404.html)messagei  z
error.html)debugstatus_codeerror_tracer     zWWW-AuthenticatezBasic realm="flower"zAccess deniedzContent-Typez
text/plain)tornadoweb	HTTPErrorlog_messager#   join	tracebackformat_exceptionr	   r
   r.   r   r   r   r   writestr)r   r/   r%   r-   r0   r   r   r   write_error&   s0   


zBaseHandler.write_errorc              
   C   s   | j jj}|rP| jjdd}z-| \}}t| 	 }|dkr(t
jd|D ]
}t||r4 nq*t
jdW n tyO } zt
jd|d }~ww | j jjsWdS | d}|rrt|tsg|	 }t| j jj|rr|S d S )NAuthorizationr*   Basicr1   Tuser)r	   r
   r   requestheadersgetsplitr   encodedecoder2   r3   r4   hmaccompare_digest
ValueErrorr   get_secure_cookie
isinstancer:   rematch)r   r   auth_headerbasiccredentialsstored_credentialexcr>   r   r   r   get_current_userA   s6   



zBaseHandler.get_current_userTNc                    s   t  |||}|rt|trtj|}|d ur\z|tu r'tt|}W |S ||}W |S  t	t
fy[ } z |d u rG|d u rG|W  Y d }~S tjdd| d|j d|d }~ww |S )Ni  zInvalid argument 'z' of type '')r"   get_argumentrI   r:   r2   escapexhtml_escapeboolr   rG   	TypeErrorr3   r4   __name__)r   namedefaultstriptypeargrP   r(   r   r   rS   _   s,   	
zBaseHandler.get_argumentc                 C   s   | j jS )z return Celery application object)r	   cappr   r   r   r   r^   q   s   zBaseHandler.cappc                 C   sJ   | j jj}|r#z
|t|}W |S  ty"   td|j Y |S w |S )NzFailed to format '%s' task)r	   r
   format_taskcopy	Exceptionlogger	exceptionuuid)r   taskcustom_format_taskr   r   r   r_   v   s   
zBaseHandler.format_taskc                 C   sr   t g }| jj D ]\}}|dg D ]	}||d  qq
|s5t | jjjgdd | jjj	p1g D B }t
|S )Nactive_queuesrY   c                 S   s   h | ]}|j r|j qS r   )rY   ).0qr   r   r   	<setcomp>   s    z5BaseHandler.get_active_queue_names.<locals>.<setcomp>)r   r	   workersitemsrA   addr^   conftask_default_queuetask_queuessorted)r   queuesr   infoqueuer   r   r   get_active_queue_names   s   z"BaseHandler.get_active_queue_names)rX   
__module____qualname__r   r
   r#   r;   rQ   rS   propertyr^   r_   ru   __classcell__r   r   r(   r   r      s    
	r   )rJ   r   r7   r`   loggingrE   base64r   r2   utilsr   r   r   	getLoggerrX   rb   r3   RequestHandlerr   r   r   r   r   <module>   s    
