o
    [hJ                     @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlZd dlm	Z	 ddl
mZ eZdefd	d
ZG dd deZe dZdd ZdS )    N)Path)Popen)sleep)send_termination_notice   )BaseCommandreturnc              	   C   s6   i }| D ]}z	|  j||< W q ty   Y qw |S N)statst_mtimeFileNotFoundError)filesmtimesp r   z/home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/otree/cli/devserver.py
get_mtimes   s   r   c                   @   s   e Zd Zdd Zdd ZdS )Commandc                 C   s   |j dddd d S )Nport?Z8000)nargsdefault)add_argument)selfparserr   r   r   add_arguments   s   zCommand.add_argumentsc                 C   s   t | d S r	   )run_reloader)r   r   r   r   r   handle   s   zCommand.handleN)__name__
__module____qualname__r   r   r   r   r   r   r      s    r   ZOTREE_CORE_DEVc                 C   sl  t dd| g}td}t|dt|d }tr%|tdd t|}tj	do4tj
tjk}zq	 | }|d
urB|W S t|}d
}|D ]}	|	|v r`|	|v r`||	 ||	 kr`|	} nqJ|rt|d |}t| }
|r|
sdD ]}td| td t| }
|
r nqt|
std |  |
rt|
d t dd| dg}td q7 ty   |d Y d
S w )zb
    better to have my own autoreloader so i can easily swap between daphne/hypercorn/uvicorn
    ZotreeZdevserver_inner.z*.pyz*/*.pyzc:/otree/nodj/otreez**/*.pywinTNzchanged, restarting)r         zRetrying shutdownr   zFailed to shut down	   z--is-reloadr#   )r   r   listglob_OTREE_CORE_DEVextendr   sysplatform
startswithprefixbase_prefixpollprint_functionr   r   	terminateoskillKeyboardInterruptwait)r   procrootZfiles_to_watchr   Zis_windows_venv	exit_codeZ
new_mtimesZchanged_filefZ	child_pidZ	retry_numr   r   r   r   !   sT    

"r   )r2   pathlibr   
subprocessr   timer   r*   Z
otree.mainr   baser   printr0   dictr   r   getenvr(   r   r   r   r   r   <module>   s    

