U
    d                     @   s  d dl Z 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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 eeZe jd  dkre jd dkre j !drd dl"Z"e"#e"$  dd Z%G dd de
j&j'Z(dS )    N)partial)ThreadPoolExecutor)ioloop)run_on_executor)
HTTPServer)url   )controlhandlers)Events)	Inspector)default_options      winc                 C   sP   t | tkr2td|d| jj| j| j| jS d|d| d | d fS )Nz/{}{}/r   r   )	typer   formatstripregexpatternZhandler_classkwargsname)handler
url_prefix r   ./tmp/pip-unpacked-wheel-3pokl8eb/flower/app.pyrewrite_handler    s      r   c                       sX   e Zd ZeZdZd fdd	Zdd Zdd Ze	dd	 Z
e	d
d ZdddZ  ZS )FlowerNc              
      s   t } d k	r$ jr$ fdd|D }|j|d tt| jf |  pHt| _|pXtj	
 | _|dd | _|ptt | _| jj  | j| jd| _| j| j t| j| j| jjd | _|pt| j| jj| jj| jj| jj| j| jj| jjd| _ d| _!d S )	Nc                    s   g | ]}t | jqS r   )r   r   ).0hoptionsr   r   
<listcomp>/   s     z#Flower.__init__.<locals>.<listcomp>r
   ssl_options)max_workersg     @@)db
persistentstate_save_intervalenable_eventsio_loopZmax_workers_in_memoryZmax_tasks_in_memoryF)"default_handlersr   updatesuperr   __init__r   r#   r   ZIOLoopinstancer+   getr%   celeryZCelerycapploaderZimport_default_modulespool_executor_clsr&   executorZset_default_executorr   Zinspect_timeout	inspectorr   r'   r(   r)   r*   Z	max_taskseventsstarted)selfr#   r3   r8   r+   r   r   	__class__r"   r   r/   +   s0    
	zFlower.__init__c                 C   s~   | j   | jjs4| j| jj| jj| j| jjd n.ddl	m
} t| }|| jjdd}|| d| _|   | j  d S )N)addressr%   xheadersr   )bind_unix_socketi  )modeT)r8   startr#   Zunix_socketlistenportr=   r%   r>   Ztornado.netutilr?   r   Z
add_socketr9   update_workersr+   )r:   r?   serversocketr   r   r   rA   I   s    

zFlower.startc                 C   sF   | j rB| j  td | jjdd td | j  d| _ d S )NzStopping executors...F)waitzStopping event loop...)r9   r8   stoploggingdebugr6   shutdownr+   r:   r   r   r   rH   Z   s    



zFlower.stopc                 C   s   t | j jdd S )NZdriver_type)getattrr3   
connection	transportrL   r   r   r   rO   c   s    zFlower.transportc                 C   s   | j jS N)r7   workersrL   r   r   r   rQ   g   s    zFlower.workersc                 C   s   | j |S rP   )r7   inspect)r:   Z
workernamer   r   r   rD   k   s    zFlower.update_workers)NNNN)N)__name__
__module____qualname__r   r5   r&   r/   rA   rH   propertyrO   rQ   rD   __classcell__r   r   r;   r   r   '   s     	

r   ))systimerI   collections	functoolsr   concurrent.futuresr   r2   Ztornado.webZtornador   Ztornado.concurrentr   Ztornado.httpserverr   r   apir	   urlsr   r,   r8   r   r7   r   r#   r   	getLoggerrS   loggerversion_infoplatform
startswithZasyncioZset_event_loop_policyZWindowsSelectorEventLoopPolicyr   ZwebApplicationr   r   r   r   r   <module>   s,   
(