o
    Ì^½^/  ã                   @   s„   d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 e  e¡Zdd„ Zdd„ Zd	d
„ Zdd„ Z		ddd„ZdS )é    N)ÚisfileÚjoin)Úbuild)Úload_configc                  C   sn   t j d¡r1t jdkr3ddl} zddlm} W n
 ty!   Y dS w t|  ¡ |ƒs5|  	|ƒ ¡ dS dS dS dS )aO  
    Select compatible event loop for Tornado 5+.

    As of Python 3.8, the default event loop on Windows is `proactor`,
    however Tornado requires the old default "selector" event loop.
    As Tornado has decided to leave this to users to set, MkDocs needs
    to set it. See https://github.com/tornadoweb/tornado/issues/2608.
    Úwin)é   é   r   N)ÚWindowsSelectorEventLoopPolicy)
ÚsysÚplatformÚ
startswithÚversion_infoÚasyncior	   ÚImportErrorÚ
isinstanceÚget_event_loop_policyÚset_event_loop_policy)r   r	   © r   ú7/usr/lib/python3/dist-packages/mkdocs/commands/serve.pyÚ_init_asyncio_patch   s   	ÿør   c                    s&   ddl m‰  G ‡ ‡fdd„d|ƒ}|S )Nr   )ÚLoaderc                       s    e Zd Z‡‡ ‡fdd„Z‡  ZS )z _get_handler.<locals>.WebHandlerc                    sX   |dv r*d  |¡}ttˆ|ƒƒr|  ˆ ˆƒ |¡ ¡ ¡ d S tƒ j|fi |¤Ž d S d S )N)i”  iô  z{}.html)Úformatr   r   ÚwriteÚloadÚgenerateÚsuperÚwrite_error)ÚselfÚstatus_codeÚkwargsÚ
error_page)r   Ú	__class__Úsite_dirr   r   r   '   s   
ûz,_get_handler.<locals>.WebHandler.write_error)Ú__name__Ú
__module__Ú__qualname__r   Ú__classcell__r   ©r   r"   ©r!   r   Ú
WebHandler%   ó    r)   )Útornado.templater   )r"   ÚStaticFileHandlerr)   r   r'   r   Ú_get_handler!   s   r-   c           	         sž   t ƒ  ddlm} dd l‰ G ‡ ‡fdd„d|ƒ}|ƒ }| |d |¡ | |d |¡ |d jD ]}| ||¡ q0|d jd	|||d
�}|jˆ| |dd� d S )Nr   )ÚServerc                       s    e Zd Z‡ ‡‡fdd„Z‡  ZS )z%_livereload.<locals>.LiveReloadServerc                    s2   t ƒ  |¡}|d d tˆˆjjƒ|d d fgS )Nr   é   )r   Úget_web_handlersr-   Úhandlersr,   )r   Úscriptr1   )r!   Ú
livereloadr"   r   r   r0   =   s   &z6_livereload.<locals>.LiveReloadServer.get_web_handlers)r#   r$   r%   r0   r&   r   ©r3   r"   r(   r   ÚLiveReloadServer;   r*   r5   Údocs_dirÚconfig_file_pathÚthemeÚpluginsÚserve)ÚconfigÚbuilder)ÚrootÚhostÚportÚrestart_delay)r   r3   r.   Úlivereload.handlersÚwatchÚdirsÚ	run_eventr:   )	r>   r?   r;   r<   r"   r.   r5   ÚserverÚdr   r4   r   Ú_livereload3   s   rG   c                 C   s˜   t ƒ  ddlm} ddlm} | dt||jƒ|ddœfg¡}|j|| d� t 	d| |¡ t 	d	¡ z
|j
 ¡  ¡  W d S  tyK   t 	d
¡ Y d S w )Nr   )Úioloop)Úwebz/(.*)z
index.html)ÚpathÚdefault_filename)r?   ÚaddresszRunning at: http://%s:%s/zHold ctrl+c to quit.zStopping server...)r   ÚtornadorH   rI   ÚApplicationr-   r,   ÚlistenÚlogÚinfoÚIOLoopÚinstanceÚstartÚKeyboardInterrupt)r>   r?   r"   rH   rI   Úapplicationr   r   r   Ú_static_serverQ   s"   þÿ
ÿrW   r3   c              	      sŒ   t jdd�‰‡ ‡‡‡‡‡‡‡fdd„}z,|ƒ }|d \}	}
ˆdv r*t|	|
||ˆƒ nt|	|
ˆƒ W t ˆ¡ dS W t ˆ¡ dS t ˆ¡ w )zã
    Start the MkDocs development server

    By default it will serve the documentation on http://localhost:8000/ and
    it will rebuild the documentation and refresh the page automatically
    whenever a file is edited.
    Úmkdocs_)Úprefixc               	      sZ   t  d¡ td	ˆ ˆˆˆˆˆdœˆ¤Ž} d | d ¡| d< ˆdv }ˆdk}t| ||d� | S )
NzBuilding documentation...)Úconfig_fileÚdev_addrÚstrictr8   Ú	theme_dirr"   z
http://{}/r[   Úsite_url)Údirtyr3   r_   )Úlive_serverr_   r   )rP   rQ   r   r   r   )r;   r`   r_   ©rZ   r[   r   r3   r"   r\   r8   r]   r   r   r<   x   s    
úù
zserve.<locals>.builderr[   )r3   r_   N)ÚtempfileÚmkdtemprG   rW   ÚshutilÚrmtree)rZ   r[   r\   r8   r]   r3   r   r<   r;   r>   r?   r   ra   r   r:   i   s   ür:   )NNNNNr3   )Úloggingrd   rb   r
   Úos.pathr   r   Úmkdocs.commands.buildr   Úmkdocs.configr   Ú	getLoggerr#   rP   r   r-   rG   rW   r:   r   r   r   r   Ú<module>   s    
ÿ