
    O&iS                     L   d 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	 ddlm
Z
 ddlmZ ddlmZ ddlmZ  ej        d	          Z G d
 de          Z G d dej                  Z G d dej                  Z G d dej                  Z G d de          ZdS )z
    livereload.handlers
    ~~~~~~~~~~~~~~~~~~~

    HTTP and WebSocket handlers for livereload.

    :copyright: (c) 2013 by Hsiaoming Yang
    :license: BSD, see LICENSE for more details.
    N)web)ioloop)escape)gen_log)WebSocketHandler)
ObjectDict
livereloadc                       e Zd ZdZ e            ZdZdZdZd Z	d Z
d Zd Zed             Zed             Zedd	            Zd
 ZdS )LiveReloadHandler   Nc                     dS NT selfs    `/home/geonatureadmin/si_en_reseau/tutos/venv/lib/python3.11/site-packages/livereload/handlers.pyallow_draft76zLiveReloadHandler.allow_draft76!       t    c                     dS r   r   )r   origins     r   check_originzLiveReloadHandler.check_origin$   r   r   c                 d    | t           j        v r!t           j                            |            d S d S N)r   waitersremover   s    r   on_closezLiveReloadHandler.on_close'   s6    $,,,%,,T22222 -,r   c                     t          |t                    rt          j        |          }	 |                     |           d S #  t
                              dd           Y d S xY w)NError sending messageTexc_info)
isinstancedictr   json_encodewrite_messageloggererror)r   messages     r   send_messagezLiveReloadHandler.send_message+   sn    gt$$ 	2(11G	Aw'''''	ALL04L@@@@@@s   A A#c                    | j         rd S | j        j        sEt                              d           | j                            t          j                               t          j                    | _         t                              d           | j        	                    | j
                  sHt                              d           t          j        | j
        d          	                                 d S d S )NzWatch current working directoryzStart watching changeszStart detecting changesi   )_last_reload_timewatcher_tasksr&   infowatchosgetcwdtimestart
poll_tasksr   PeriodicCallback)clss    r   start_taskszLiveReloadHandler.start_tasks4   s      	F{! 	+KK9:::Kbikk*** $	,---{  00 	AKK1222#CNC88>>@@@@@	A 	Ar   c                    | j                                         \  }}|r|dk    s| j        sd S t          j        }|rt          d|z
  d          }|dk    rd}t          j                    | j        z
  |k     rt          	                    d|           d S |r;t          j                                        }|                    || j                   d S |                                  d S )Nforeverr      __livereload__r   z
Ignore: %s)r,   examiner   r   DEFAULT_RELOAD_TIMEmaxr2   r+   r&   r.   r   IOLoopcurrent
call_laterreload_waiters)r6   filepathdelayreload_timeloops        r   r4   zLiveReloadHandler.poll_tasksC   s    +--//% 	5I--S[-F'; 	,a%i++K'''K9;;..<< KKh///F 	!=((**DOOE3#566666     r   c                    t                               dt          | j                  | j        j                   || j        j        pd}d|| j        dd}t          j                    | _        | j        	                                D ]U}	 |
                    |           #  t                               dd           | j                            |           Y SxY wd S )NzReload %s waiters: %s*reloadT)commandpathliveCSSliveImgr   r    )r&   r.   lenr   r,   rC   live_cssr2   r+   copyr%   r'   r   )r6   rK   msgwaiters       r   rB   z LiveReloadHandler.reload_waitersZ   s    #K 	
 	
 	
 <;'.3D  |	
 
 !%	k&&(( 	+ 	+F+$$S))))+4tDDD""6*****	+ 	+s   	B8Cc                 >   t          t          j        |                    }|j        dk    rddgdd}|                     |           |j        dk    rGd|v rEt
                              d|j        z             t          j	        
                    |            dS dS dS )	zHandshake with livereload.js

        1. client send 'hello'
        2. server reply 'hello'
        3. client send 'info'
        helloz*http://livereload.com/protocols/official-7zlivereload-tornado)rJ   	protocols
serverNamer.   urlzBrowser Connected: %sN)r   r   json_decoderJ   r)   r&   r.   rW   r   r   add)r   r(   	handshakes      r   
on_messagezLiveReloadHandler.on_messaget   s     V/8899?g%%"@ 3 I i(((?f$$')9)9KK/'+=>>>%))$///// %$)9)9r   r   )__name__
__module____qualname__r=   setr   r,   rO   r+   r   r   r   r)   classmethodr7   r4   rB   r[   r   r   r   r   r      s        ceeGGH    3 3 3A A A A A [A ! ! [!, + + + [+20 0 0 0 0r   r   c                   T    e Zd Zi Zed             Zed             Zed             ZdS )MtimeStaticFileHandlerc                     t          j        |          }t          j                            |t          j                           }|S )zReturns the time that ``abspath`` was last modified.

        May be overridden in subclasses.  Should return a `~datetime.datetime`
        object or None.
        )r0   statdatetimeutcfromtimestampST_MTIME)r6   abspathstat_resultmodifieds       r   get_content_modified_timez0MtimeStaticFileHandler.get_content_modified_time   s:     gg&&$55&( (r   c                    |                      |          }t          j                    }t          |                     |          d          }|                    |                                           t          |t                    r|                    |           n|D ]}|                    |           |	                                S )zReturns a version string for the resource at the given path.

        This class method may be overridden by subclasses.  The
        default implementation is a hash of the file's contents.

        .. versionadded:: 3.1
        z%Y-%m-%d %H:%M:%S)
get_contenthashlibmd5formatrk   updateencoder"   bytes	hexdigest)r6   rh   datahasher
mtime_datachunks         r   get_content_versionz*MtimeStaticFileHandler.get_content_version   s     w''C99'BBDWXX
j''))***dE"" 	%MM$ % %e$$$$!!!r   c                 ~     fd} j         5   j        } j        }||vr ||          \  }}|||<   |||<   n[|                    |          }|                    |          }|                     |          k    r ||          \  }}|||<   |||<   |r|cd d d            S 	 d d d            n# 1 swxY w Y   d S )Nc                     	                      |           }                    |           }||fS # t          $ r t          j        d|            Y dS w xY w)NzCould not open static file %r)NN)ry   rk   	Exceptionr   r'   )abs_pathhshmtmr6   s      r   _load_versionzAMtimeStaticFileHandler._get_cached_version.<locals>._load_version   sl    "--h7733H==Cx " " "=xHHH!zz"s   -1 AA)_lock_static_hashes_static_mtimesgetrk   )r6   r}   r   hashesmtimesr   r~   s   `      r   _get_cached_versionz*MtimeStaticFileHandler._get_cached_version   sa   	" 	" 	" 	" 	" Y 	 	'F'Fv%%(=22S#&x #&x  jj**jj**#77AAAA,}X66HC'*F8$'*F8$ )	 	 	 	 	 	 	 	&'	 	 	 	 	 	 	 	 	 	 	 	 	 	 	* ts   B
B22B69B6N)r\   r]   r^   r   r`   rk   ry   r   r   r   r   rb   rb      sh        N	 	 [	 " " [",     [     r   rb   c                       e Zd Zd ZdS )LiveReloadJSHandlerc                    |                      dd           t          j                            t          j                            t
                              }t          j                            |d          }t          |d          5 }|                     |	                                           d d d            d S # 1 swxY w Y   d S )NzContent-Typezapplication/javascriptzvendors/livereload.jsrb)

set_headerr0   rK   rh   dirname__file__joinopenwriteread)r   rootjs_filefs       r   r   zLiveReloadJSHandler.get   s    (@AAAwrwx8899',,t%<=='4   	!AJJqvvxx   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   (B==CCNr\   r]   r^   r   r   r   r   r   r      s#        ! ! ! ! !r   r   c                       e Zd Zd ZdS )ForceReloadHandlerc                     |                      dd           pd}t                              |           |                     d           d S )NrK   )defaultrH   ok)get_argumentr   rB   r   )r   rK   s     r   r   zForceReloadHandler.get   sK       66=#((...

4r   Nr   r   r   r   r   r      s#            r   r   c                       e Zd Zd ZdS )StaticFileHandlerc                     dS )NFr   r   s    r   should_return_304z#StaticFileHandler.should_return_304   s    ur   N)r\   r]   r^   r   r   r   r   r   r      s#            r   r   )__doc__re   rn   r0   rd   r2   loggingtornador   r   r   tornado.logr   tornado.websocketr   tornado.utilr   	getLoggerr&   r   r   rb   RequestHandlerr   r   r   r   r   <module>r      s      				                            . . . . . . # # # # # #		<	(	(n0 n0 n0 n0 n0( n0 n0 n0bG G G G GS2 G G GT! ! ! ! !#, ! ! !    +       .     r   