o
    i                     @  s   d dl mZ 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	Zd dl
mZ d dlmZmZ d dlmZ d dlZddlmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ ddlmZ dddZG dd dZG dd dZ dS )    )annotationsN)Callable)DistributionPackageNotFoundError)Any   )utils)channel)	DEV_LEVELlogger)Plugin)AgentServer   )proto	main_filepathlib.Pathreturnlist[pathlib.Path]c                   s   g  d fdd}|ds|d t jD ]}||js$||jd	d
 q|  g} D ]D}|d}|s6q,t|}|di }|ddrp|d}|rp|	drpt
j|}	t
j|	j}
t
j|
}t|}|| q,|S )Nnamestrr   boolc                   s0   zt | } | W dS  ty   Y dS w )NTF)r   	from_nameappendr   )r   distpackages \/var/www/html/livekit_bhavya/venv/lib/python3.10/site-packages/livekit/agents/cli/watcher.py_try_add   s   

z'_find_watchable_paths.<locals>._try_addzlivekit.agentszlivekit-agents.-zdirect_url.jsondir_infoeditableFurlzfile://)r   r   r   r   )r   registered_pluginspackagereplaceabsolute	read_textjsonloadsget
startswithurllibparseurlparseunquotepathrequesturl2pathnamepathlibPathr   )r   r   pluginpathspkgdurl	durl_jsonr!   r1   
parsed_urlfile_url_path
local_path	file_pathr   r   r   _find_watchable_paths   s2   	







r?   c                   @  sJ   e Zd ZdddZdddZdddZdddZeje	ddddZ
dS )WatchServerworker_runner+Callable[[AgentServer, proto.CliArgs], Any]serverr   r   r   cli_argsproto.CliArgsloopasyncio.AbstractEventLoopr   Nonec                 C  sT   t  \| _|_|| _|| _|| _|| _|| _t	j
d   | _d| _t	j
d   | _d S )NF)socket
socketpair_mp_pchmp_cch	_cli_args_worker_runner
_main_file_loop_serverasyncioFuture_recv_jobs_fut_worker_reloading
_close_fut)selfrA   rC   r   rD   rF   r   r   r   __init__B   s   zWatchServer.__init__c              	     s   t  jD ]}ttd|  qtjjj	 j
I d H  _ j  }tjtdd fdd}t| }z# jI d H  W tj|I d H  tj|I d H   j I d H  d S tj|I d H  tj|I d H   j I d H  w )Nz	Watching r   r   rH   c                     sB   t j j j jft j  jdI d H    I d H  d S )N)targetargswatch_filtercallback)	
watchfilesarun_processrN   rQ   rM   filtersPythonFilter
_on_reloadacloser   rW   watch_pathsr   r   	_run_task]   s   
z"WatchServer.run.<locals>._run_taskr   rH   )r?   rO   r   logr
   r   aioduplex_unix_AsyncDuplexopenrK   _pchrP   create_task_read_ipc_tasklog_exceptionsrR   rV   cancel_and_waitrc   )rW   pthread_ipc_taskrf   run_taskr   rd   r   runU   s"   


zWatchServer.runc                   s    | j  s| j d  d S d S N)rV   done
set_resultrW   r   r   r   rc   q   s   
zWatchServer.aclose_set[watchfiles.main.FileChange]c              	     s   | j rd S d| _ zHt| jt I d H  t | _t	
tj tj| jddI d H  W d    n1 s7w   Y  W | j jd7  _d S W | j jd7  _d S | j jd7  _w )NTg      ?)timeoutr   )rU   r	   asend_messagerm   r   ActiveJobsRequestrR   rS   rT   
contextlibsuppressTimeoutErrorwait_forrM   reload_count)rW   rz   r   r   r   rb   u   s   
&zWatchServer._on_reloadrY   c                   s   g }	 t | jtjI d H }t|tjr<|j| jjkrq|j	}t
tj | jd  W d    n1 s7w   Y  t|tjrPt | jtj|dI d H  t|tjrYd| _q)NT)jobsF)r	   arecv_messagerm   r   IPC_MESSAGES
isinstanceActiveJobsResponser   rM   r   r   r   rR   InvalidStateErrorrT   rx   ReloadJobsRequestr}   ReloadJobsResponseReloadedrU   )rW   active_jobsmsgr   r   r   ro      s    zWatchServer._read_ipc_taskN)rA   rB   rC   r   r   r   rD   rE   rF   rG   r   rH   rg   )rz   r{   r   rH   )__name__
__module____qualname__rX   ru   rc   rb   r   rp   r   ro   r   r   r   r   r@   A   s    




r@   c                   @  sD   e Zd Z	ddd
dZdddZejeddddZdddZ	dS )WatchClientNworkerr   rD   rE   rF    asyncio.AbstractEventLoop | Noner   rH   c                 C  s   |pt  | _|| _|| _d S rv   )rR   get_event_looprP   _workerrM   )rW   r   rD   rF   r   r   r   rX      s   
zWatchClient.__init__c                 C  s   | j |  | _d S rv   )rP   rn   _run
_main_taskry   r   r   r   start   s   zWatchClient.startrY   c                   s
  | j jsJ zptjjj| j jI d H | _t	| jt
 I d H  	 zt| jt
jI d H }W n tjjjy>   Y W d S w t|t
jr[| jj}t	| jt
j|| j jdI d H  nt|t
jrw| j|jI d H  t	| jt
 I d H  q# tjjjy   Y d S w )NT)r   r   )rM   rL   r   ri   rj   rk   rl   _cchr	   r}   r   r   r   r   DuplexClosedr   r~   r   r   r   r   r   _reload_jobsr   r   )rW   r   r   r   r   r   r      s4   zWatchClient._runc                   sb   | j sd S | j   ttj | j I d H  W d    n1 s"w   Y  | j I d H  d S rv   )r   cancelr   r   rR   CancelledErrorr   rc   ry   r   r   r   rc      s   
zWatchClient.acloserv   )r   r   rD   rE   rF   r   r   rH   rg   )
r   r   r   rX   r   r   rp   r   r   rc   r   r   r   r   r      s    


r   )r   r   r   r   )!
__future__r   rR   r   r)   r4   rI   urllib.parser-   urllib.requestcollections.abcr   importlib.metadatar   r   typingr   r^    r   ipcr	   rh   r
   r   r6   r   r   r   r   r?   r@   r   r   r   r   r   <module>   s*    
)U