a
    LcòfH  ã                   @   sœ   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	m
Z
 d dlmZmZmZ d dlmZ d dlmZ edejƒZG d	d
„ d
e	ƒZdS )é    N)Údatetime)Úsettings)ÚBaseCommandÚCommandError)Ú
WSGIServerÚget_internal_wsgi_applicationÚrun)Ú
autoreload)Ú_lazy_re_compilezÖ^(?:
(?P<addr>
    (?P<ipv4>\d{1,3}(?:\.\d{1,3}){3}) |         # IPv4 address
    (?P<ipv6>\[[a-fA-F0-9:]+\]) |               # IPv6 address
    (?P<fqdn>[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*) # FQDN
):)?(?P<port>\d+)$c                       st   e Zd ZdZg ZdZddhZdZdZdZ	dZ
eZd	d
„ Z‡ fdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚCommandz0Starts a lightweight web server for development.)Úshutdown_messagez--verbosityz--tracebackz	127.0.0.1z::1Z8000Úhttpc                 C   s\   |j dddd� |j ddddd	d
� |j ddddd
� |j ddddd
� |j dddd� d S )NÚaddrportú?z$Optional port number, or ipaddr:port)ÚnargsÚhelpz--ipv6z-6Ú
store_trueÚuse_ipv6z$Tells Django to use an IPv6 address.)ÚactionÚdestr   z--nothreadingÚstore_falseÚuse_threadingz"Tells Django to NOT use threading.z
--noreloadÚuse_reloaderz*Tells Django to NOT use the auto-reloader.z--skip-checkszSkip system checks.)r   r   )Úadd_argument)ÚselfÚparser© r   úf/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/django/core/management/commands/runserver.pyÚadd_arguments'   s6    ÿûüüýzCommand.add_argumentsc                    s(   |d rdt jd< tƒ j|i |¤Ž d S )NÚno_colorZnocolorZDJANGO_COLORS)ÚosÚenvironÚsuperÚexecute©r   ÚargsÚoptions©Ú	__class__r   r   r#   D   s    
zCommand.executec                 O   s   t ƒ S )z/Return the default WSGI handler for the runner.)r   r$   r   r   r   Úget_handlerL   s    zCommand.get_handlerc                 O   s  t jst jstdƒ‚|d | _| jr2tjs2tdƒ‚d| _|d sPd| _| j	| _
n–t t|d ¡}|d u rxtd|d  ƒ‚| ¡ \| _}}}| _
| j
 ¡ s¦td| j
 ƒ‚| jræ|rÎ| jd	d
… | _d| _d| _n| jræ|sætd| j ƒ‚| j�s
| jrú| jn| j| _| j| _| jf i |¤Ž d S )Nz6You must set settings.ALLOWED_HOSTS if DEBUG is False.r   z"Your Python does not support IPv6.Fr   Ú z5"%s" is not a valid port number or address:port pair.z%r is not a valid port number.é   éÿÿÿÿTz!"%s" is not a valid IPv6 address.)r   ÚDEBUGZALLOWED_HOSTSr   r   ÚsocketÚhas_ipv6Ú	_raw_ipv6ÚaddrÚdefault_portÚportÚreÚmatchÚ
naiveip_reÚgroupsÚisdigitÚdefault_addr_ipv6Údefault_addrr   )r   r%   r&   ÚmZ_ipv4Z_ipv6Z_fqdnr   r   r   ÚhandleP   s<    

ÿÿ

zCommand.handlec                 K   s6   |d }|r"t j| jfi |¤Ž n| jdi |¤Ž dS )z1Run the server, using the autoreloader if needed.r   N)N)r	   Zrun_with_reloaderÚ	inner_run)r   r&   r   r   r   r   r   q   s    zCommand.runc           	      O   s*  t  ¡  |d }| dd¡}|d s<| j d¡ | jdd� |  ¡  z8| j|i |¤Ž}t| j	t
| jƒ|| j|| j| jd� W n¨ työ } zbtjd	tjd
tjdi}z||j }W n tyÆ   |}Y n0 | j d| ¡ t d¡ W Y d }~n8d }~0  t�y$   |�r| j |¡ t d¡ Y n0 d S )Nr   r   r*   Zskip_checkszPerforming system checks...

T)Zdisplay_num_errors)Zipv6Ú	threadingÚon_bindÚ
server_clsz.You don't have permission to access that port.zThat port is already in use.z%That IP address can't be assigned to.z	Error: %sr+   r   )r	   Zraise_last_exceptionÚgetÚstdoutÚwriteÚcheckZcheck_migrationsr)   r   r1   Úintr3   r   r?   r@   ÚOSErrorÚerrnoÚEACCESÚ
EADDRINUSEZEADDRNOTAVAILÚKeyErrorÚstderrr    Ú_exitÚKeyboardInterruptÚsysÚexit)	r   r%   r&   r>   r   ÚhandlerÚeZERRORSZ
error_textr   r   r   r=   z   sB    ù
	ý
zCommand.inner_runc                 C   s”   t jdkrdnd}| jr(d| j› d�}n| jdkr8d}n| j}t ¡  d¡}|  ¡ }t|› d	|› d
t	j
›d| j› d|› d|› d|› d�| jd� d S )NÚwin32z
CTRL-BREAKz	CONTROL-Cú[ú]Ú0z0.0.0.0z%B %d, %Y - %Xz
Django version z, using settings z 
Starting development server at z://ú:z/
Quit the server with Ú.)Úfile)rN   Úplatformr0   r1   r   ÚnowÚstrftimeÚget_versionÚprintr   ZSETTINGS_MODULEÚprotocolrB   )r   Zserver_portZquit_commandr1   rZ   Úversionr   r   r   r?   ¨   s0    
ÿÿþþþýûzCommand.on_bind)Ú__name__Ú
__module__Ú__qualname__r   Zrequires_system_checksZstealth_optionsZsuppressed_base_argumentsr:   r9   r2   r^   r   r@   r   r#   r)   r<   r   r=   r?   Ú__classcell__r   r   r'   r   r      s    !	.r   )rG   r    r4   r.   rN   r   Zdjango.confr   Zdjango.core.management.baser   r   Zdjango.core.servers.basehttpr   r   r   Zdjango.utilsr	   Zdjango.utils.regex_helperr
   ÚXr6   r   r   r   r   r   Ú<module>   s   ù