
    2yi4                       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	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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mZmZmZ d dlZd dl ZdZ! ejD                  e!      Z# G d dejH                        Z% e% ejL                  e'      i       Z(ddZ)ddZ* G d	 d
ejV                  ejX                  jZ                        Z. G d dejX                  j^                        Z0ddZ1ddZ2y)    )annotationsN)AnyBinaryIOCallableIterablean  
var livereload = function(epoch, requestId) {
    var req, timeout;

    var poll = function() {
        req = new XMLHttpRequest();
        req.onloadend = function() {
            if (parseFloat(this.responseText) > epoch) {
                location.reload();
            } else {
                timeout = setTimeout(poll, this.status === 200 ? 0 : 3000);
            }
        };
        req.open("GET", "/livereload/" + epoch + "/" + requestId);
        req.send();
    }

    var stop = function() {
        if (req) {
            req.abort();
        }
        if (timeout) {
            clearTimeout(timeout);
        }
        req = timeout = undefined;
    };

    window.addEventListener("load", function() {
        if (document.visibilityState === "visible") {
            poll();
        }
    });
    window.addEventListener("visibilitychange", function() {
        if (document.visibilityState === "visible") {
            poll();
        } else {
            stop();
        }
    });
    window.addEventListener("beforeunload", stop);

    console.log('Enabled live reload');
}
livereload(${epoch}, ${request_id});
c                      e Zd ZddZy)_LoggerAdapterc                6    t        j                  d      |z   |fS )Nz[%H:%M:%S] )timestrftime)selfmsgkwargss      \/var/www/html/content_weaver/venv/lib/python3.12/site-packages/mkdocs/livereload/__init__.pyprocessz_LoggerAdapter.processN   s    }}]+c1699    N)r   strr   dictreturnztuple[str, dict])__name__
__module____qualname__r    r   r   r	   r	   M   s    :r   r	   c                N    d| j                  d      z   j                  d      dz   S )z3Ensure the mount path starts and ends with a slash./)lstriprstrip)
mount_paths    r   _normalize_mount_pathr   U   s(    *##C((005;;r   c                (    d|  d| t        |       S )Nzhttp://:)r   )hostportpaths      r   
_serve_urlr%   Z   s     TF!D6"7"=!>??r   c                       e Zd ZdZdZ	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZdddddZddZddd	Zd
 Z	dd fdZ
ddZddZd Zeej                   d               Zed        Z xZS )LiveReloadServerT<   c                T    | _         	 t        t        j                  |      t        j                        rt
        j                   _        t        j                  j                  |       _        t        |       _        t        |||       _        d _         _        d  _        t(         U  ||ft,        d        j/                   j0                         t3                _         j4                   _        t9        j:                          _        d _        t9        j:                          _         d _!        t9        jD                   fd       _#        tH        jJ                  jL                  jO                  |       _(        i  _)        i  _*        y # t        $ r Y Xw xY w)Ng?c                     y Nr   )codes    r   <lambda>z+LiveReloadServer.__init__.<locals>.<lambda>x   s    r   F)bind_and_activatec                 &     j                        S r+   )serve_forever)r   shutdown_delays   r   r-   z+LiveReloadServer.__init__.<locals>.<lambda>   s    D<N<N~<^ r   )targettimeout)+builder
isinstance	ipaddress
ip_addressIPv6AddresssocketAF_INET6address_family	Exceptionosr$   abspathrootr   r   r%   urlbuild_delayr1   error_handlersuper__init___Handlerset_appserve_request
_timestamp_wanted_epoch_visible_epoch	threading	Condition_epoch_cond_want_rebuild_rebuild_cond	_shutdownThreadserve_threadwatchdog	observerspollingPollingObserverobserver_watched_paths_watch_refs)	r   r5   r"   r#   r@   r   polling_intervalr1   	__class__s	   `      `r   rE   zLiveReloadServer.__init__b   sO    	)..t4i6K6KL&,oo# GGOOD)	/
;dD*5,<M$x5IT''('\"00$..0#(&002%,,4^_ **22BBK[B\.0+-3  		s   AF 	F'&F'	recursivec                   t         j                  j                  |      }|| j                  u st	        d      | j
                  v r j
                  |xx   dz  cc<   yd j
                  |<    fd}t        j                  j                         }||_	        t        j                  d| d        j                  j                  |||       j                  |<   y)z]Add the 'path' to watched paths, call the function and reload when any file changes under it.Nz9Plugins can no longer pass a 'func' parameter to watch().   c                    | j                   ry t        j                  t        |              j                  5  d_        j                  j                          d d d        y # 1 sw Y   y xY wNT)is_directorylogdebugr   rP   rO   
notify_all)eventr   s    r   callbackz(LiveReloadServer.watch.<locals>.callback   sW    !!IIc%j!## 0%)"""--/0 0 0s   "A$$A-z
Watching ''r]   )r>   r$   r?   r5   	TypeErrorrY   rT   eventsFileSystemEventHandleron_any_eventrd   re   rX   schedulerZ   )r   r$   funcr^   rh   handlers   `     r   watchzLiveReloadServer.watch   s    wwt$ 4WXX4&&&%*%$%D!	0 //88:'		JtfA&'!%!7!7QZ!7![r   c                4   t         j                  j                  |      }| j                  |xx   dz  cc<   | j                  |   dk  rP| j                  j	                  |       | j
                  j                  | j                  j	                  |             yy)zWStop watching file changes for path. Raises if there was no corresponding `watch` call.r`   r   N)r>   r$   r?   rY   poprX   
unschedulerZ   )r   r$   s     r   unwatchzLiveReloadServer.unwatch   sy    wwt$D!Q&!t$)##D)MM$$T%5%5%9%9$%?@ *r   F)open_in_browserc               *   | j                          | j                          | j                  rT| j                  j	                          dj                  d | j                  D              }t        j                  d|        |r$t        j                  d| j                   d       n"t        j                  d| j                          | j                  j	                          |rt        j                  | j                         | j                          y )Nz, c              3  :   K   | ]  }d t        |       d   yw)ri   N)_try_relativize_path).0r$   s     r   	<genexpr>z)LiveReloadServer.serve.<locals>.<genexpr>   s      !dA&:4&@%A"C!ds   zWatching paths for changes: zServing on z and opening it in a browser)server_bindserver_activaterY   rX   startjoinrd   inforA   rS   
webbrowseropen_build_loop)r   rv   	paths_strs      r   servezLiveReloadServer.serve   s    MM!		!dPTPcPc!ddIHH3I;?@HH{488*,HIJHH{488*-.!OODHH%r   c                    	  j                   5   j                   j                   fd j                        s,	  j                   j                   fd j                        s, j                  r
	 d d d        y t        j                  d        j                   j                   j                        r<t        j                  d        j                   j                   j                        r<t                _
        d _        d d d        	  j                           j,                  5  t        j                  d        j                   _         j,                  j1                          d d d        v# 1 sw Y   qxY w# t        $ r`}t        |t              rt!        |t"        j$                         nt'        j(                          t        j+                  d       Y d }~d }~ww xY w# 1 sw Y   xY w)	Nc                 8     j                   xs  j                  S r+   )rO   rQ   r   s   r   r-   z.LiveReloadServer._build_loop.<locals>.<lambda>   s    D..@$.. r   r3   zDetected file changesz*Waiting for file changes to stop happeningF)filezcAn error happened during the rebuild. The server will appear stuck until build errors are resolved.zReloading browsers)rP   wait_forr1   rQ   rd   r   waitrB   re   rI   rJ   rO   r5   r=   r6   
SystemExitprintsysstderr	traceback	print_excerrorrN   rK   rf   )r   es   ` r   r   zLiveReloadServer._build_loop   s   ## +,,55@$J]J] 6 
  ,,55@$J]J] 6  >>+ + 01((--d6F6F-GIIJK ((--d6F6F-G &0\"%*"+ 
 !! .-.&*&8&8#  ++-.; + +$  a,!#**-'')		y . .sE   AE9&E9<A6E93E9F .AG19F	G.AG))G.1G:c                   | j                   j                          | j                  5  d| _        | j                  j	                          d d d        | j
                  j                         rt        | !          | j                          |r5| j
                  j                          | j                   j                          y y # 1 sw Y   yxY wrb   )rX   stoprP   rQ   rf   rS   is_aliverD   shutdownserver_closer   )r   r   r\   s     r   r   zLiveReloadServer.shutdown   s     	,!DN))+	, %%'G""$MM  	, 	,s   "CCc                6   	 | j                  ||      }||S d}d}d }	 | j	                  |      }||j                         } ||dg       |gS # t        $ r d}d}t        j                  |       Y Ww xY w# t        $ r t        j                  d       Y gw xY w)Ni  z404 Not Foundi  z500 Internal Server Errorz"Failed to render an error message!)Content-Typez	text/html)_serve_requestr=   rd   	exceptionrC   encode)r   environstart_responseresultr,   r   error_contents          r   rH   zLiveReloadServer.serve_request   s    
	"((.AF !D!C	@ ..t4M  JJLMs:;<'  	D-CMM#	  	@MM>?	@s"   A A7 "A43A47BBc                    |d   j                  d      j                  dd      }|j                  d      rt        j                  d|      x}rt        |d          |dd	g        fd
} j                  5   |       sI j                  |j                  d      |        j                  j                  | j                         d j                  z  gcd d d        S |dz   j                   j                        r|t         j                        d  }|j                  d      r|dz  }t        j                   d|z         j#                  d      }t$        j&                  j)                   j*                  |      }n;|dk(  r5 |ddt,        j.                  j1                   j                        fg       g S y  j                  5   j                  j                   fd        j                  d d d        	 t3        |d      } j8                  r_|j                  d      rN|5  |j;                         }	d d d         j=                  	      }	t?        j@                  |	      }t        |	      }
nt$        j&                  jC                  |      }
 jE                  |      } |dd|fdtG        |
      fg       tH        jJ                  jM                  |      S # 1 sw Y   xY w# 1 sw Y   xY w# t4        $ r |j                  d      smt$        j&                  j7                  t$        j&                  j)                  |d            r0 |ddt,        j.                  j1                  |      dz   fg       g cY S Y y w xY w# 1 sw Y   JxY w)N	PATH_INFOzlatin-1zutf-8ignorez/livereload/z/livereload/([0-9]+)/[0-9]+r`   z200 OK)r   z
text/plainc                 "    j                    kD  S r+   )rK   )epochr   s   r   	conditionz2LiveReloadServer._serve_request.<locals>.condition  s    ..66r   HTTP_REFERER)
request_idr3   s   %dr   z
index.htmlz	302 FoundLocationc                 6     j                    j                  k(  S r+   )rK   rJ   r   s   r   r-   z1LiveReloadServer._serve_request.<locals>.<lambda>-  s    d.A.ATEWEW.W r   rbz.htmlr   zContent-Length)'r   decode
startswithre	fullmatchintrN   _log_poll_requestgetr   poll_response_timeoutrK   r   lenendswith	posixpathnormpathr   r>   r$   r   r@   urllibparsequoter   OSErrorisfilerY   read_inject_js_into_htmlioBytesIOgetsize_guess_typer   wsgirefutilFileWrapper)r   r   r   r$   mr   rel_file_path	file_pathr   contentcontent_lengthcontent_typer   s   `           @r   r   zLiveReloadServer._serve_request  s    {#**95<<WhO??>*LL!?FFqFAaD	x*H)IJ7 %% 9$; ..w{{>/JW[.\((11)TE_E_1`!D$7$7789 9 3J""4??3 T__!5!78M}}S!-%..s]/BCJJ3OMTYY>IS[;*fll6H6H6Y)Z([\I  	(%%&WX''E	(	!)T2D 9#5#5g#> &))+&//?G::g&D \NWW__Y7N''	258H#nJ]7^_	
 ||''--a9 9.	( 	(  	==%"''..iQ]9^*_{j&,,:L:LT:RUX:X-Y,Z[			& &s8   :A K	+K(=K4 (NK%(K14BM>=M>Nc                    	 |j                  d      }t        j	                  |t                     }d|d | |j                         ||d  fz  S # t        $ r t        |      }Y Qw xY w)Ns   </body>)r   r   s   %b<script>%b</script>%b)rindex
ValueErrorr   _SCRIPT_TEMPLATE
substituterI   r   )r   r   r   body_endscripts        r   r   z%LiveReloadServer._inject_js_into_htmlG  sw    	$~~j1H
 ",,5Z\,R)IXMMOHI-
 
 	
  	$7|H	$s   A A%$A%c                4    t         j                  d|        y )NzBrowser connected: )rd   r   )clsrA   r   s      r   r   z"LiveReloadServer._log_poll_requestU  s     	&se,-r   c                    |j                  d      ry|j                  d      ryt        j                  |      \  }}|r|S y)N)z.jsz.JSz.mjszapplication/javascriptz.gzzapplication/gzipzapplication/octet-stream)r   	mimetypes
guess_type)r   r$   guess_s       r   r   zLiveReloadServer._guess_typeZ  sB     ==/0+==%''-qL)r   )r   g      ?g      ?)r5   zCallable[[], None]r"   r   r#   r   r@   r   r   r   r[   floatr1   r   r   Noner+   )r$   r   ro   r   r^   boolr   r   )r$   r   r   r   )F)r   r   )r   zIterable[bytes])r   zIterable[bytes] | None)r   r   r   daemon_threadsr   rE   rq   ru   r   r   r   rH   r   r   classmethod	functools	lru_cacher   r   __classcell__)r\   s   @r   r'   r'   ^   s    N "% $'.#'. '. 	'.
 '. '.  '. '. 
'.R\t \0A (- (!.F!0=.~
 .  . * *r   r'   c                      e Zd ZddZd Zy)rF   c                    t        |      dk(  rt        j                  nt        j                  }t        j	                  |d| j
                   d|        y )N200"z" code )r   loggingDEBUGWARNINGrd   requestline)r   r,   sizelevels       r   log_requestz_Handler.log_requestj  s>    !$Te!34++,GD6:;r   c                0    t        j                  |g|  y r+   )rd   re   )r   formatargss      r   log_messagez_Handler.log_messagen  s    		& 4 r   N)-r   )r   r   r   r   r   r   r   r   rF   rF   i  s    <!r   rF   c                 B    t        t        j                         dz        S )Ni  )roundr   	monotonicr   r   r   rI   rI   r  s    !D())r   c                    t        j                  |       }	 |j                  t        j                               }t        |      S # t
        $ r Y t        |      S w xY w)zIMake the path relative to current directory if it's under that directory.)pathlibPathrelative_tor>   getcwdr   r   )r$   ps     r   ry   ry   v  sQ    TAMM"))+& q6M  q6Ms   #A 	AA)r   r   r   r   )r"   r   r#   r   r$   r   r   r   )r   r   )r$   r   r   r   )3
__future__r   r   r   r7   r   r   r>   os.pathr   r   r   r:   socketserverstringr   rL   r   r   urllib.parser   r   wsgiref.simple_serverr   wsgiref.utiltypingr   r   r   r   watchdog.eventsrT   watchdog.observers.polling_SCRIPT_TEMPLATE_STRTemplater   LoggerAdapterr	   	getLoggerr   rd   r   r%   ThreadingMixInsimple_server
WSGIServerr'   WSGIRequestHandlerrF   rI   ry   r   r   r   <module>r     s    "  	    	    	    
        4 4  !, Z #6??#78 :W** :
 &W&&x0"5<
@H*|22G4I4I4T4T H*V!w$$77 !*r   