a
    ܌xdZU                     @   s`  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	 d dl
Z
d dlmZ d dlmZmZ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 z$d
ejv rdZnd dlmZ dZW n e y   dZY n0 zPd 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+ dZ,W n e yT   dZ,Y n0 zd dl-Z-dZ.W n e y~   dZ.Y n0 d dl/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5 d dl6m7Z7 e Z8e9dej:Z;e9dej<Z=dZ>e?eddZ@e?eddZAe BeCZDeE ZFe,r4e+jGH D ]$\ZIZJG dd deJZKeKe+jGeI< qd d! ZLd"d# ZMG d$d% d%eZNd&d' ZOdS )(    N)Set)settings)BaseCommandCommandErrorSystemCheckError)color_styleget_internal_wsgi_application)Signal)get_reloader)debugzwhitenoise.runserver_nostaticF)StaticFilesHandlerT)
run_simple)DebuggedApplication)WSGIRequestHandler)make_ssl_devcert)_log)	_reloader)null_technical_500_response)RedirectHandlerhas_ipdbsetup_loggersignalcommand)monkey_patch_cursordebugwrapperz^(?:
(?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+)$z
    \x1B  # ESC
    (?:   # 7-bit C1 Fe (except CSI)
        [@-Z\\-_]
    |     # or [ for CSI, followed by a control sequence
        \[
        [0-?]*  # Parameter bytes
        [ -/]*  # Intermediate bytes
        [@-~]   # Final byte
    )
Z8000Z&RUNSERVERPLUS_POLLER_RELOADER_INTERVAL   Z"RUNSERVERPLUS_POLLER_RELOADER_TYPEautoc                       s6   e Zd Z fddZedd Zejdd Z  ZS )WrappedReloaderLoopc                    s   t  j|i | | j| _d S N)super__init__extra_files_extra_files)selfargskwargs	__class__ l/var/www/html/Ranjet/env/lib/python3.9/site-packages/django_extensions/management/commands/runserver_plus.pyr   S   s    zWrappedReloaderLoop.__init__c                 C   s   | j tS r   )r!   union_error_files)r"   r'   r'   r(   r    W   s    zWrappedReloaderLoop.extra_filesc                 C   s
   || _ d S r   )r!   )r"   r    r'   r'   r(   r    [   s    )__name__
__module____qualname__r   propertyr    setter__classcell__r'   r'   r%   r(   r   R   s
   
r   c                   C   s
   t   S r   )r   Zwatched_filesr'   r'   r'   r(   gen_filenamesb   s    r1   c                    s   t   fdd}|S )Nc                     sx   z | i |W S  t yr   t }|\}}}t|dd d u rTt|d d }n|j}|tvrlt|  Y n0 d S )Nfilenamer   )		Exceptionsysexc_infogetattr	traceback
extract_tbr2   r*   add)r#   r$   
_exception_Zevtbr2   fnr'   r(   wrapperh   s    

zcheck_errors.<locals>.wrapper)	functoolswraps)r?   r@   r'   r>   r(   check_errorsf   s    rC   c                       s   e Zd ZdZdZdZdZ fddZedd Z	d	d
 Z
dd Zdd Zedd Zedd Zedd Zedd Zedd Zedd Z  ZS )Commandz0Starts a lightweight Web server for development.Fz.crtz.keyc                    s  t  | |jdddd |jddd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 |jddd dd |jddd	dd  |jd!dd	d"d  | }|jd#d$d%td&d' |jd(d$d%td)d' |jd*d+d%td,d' |jd-d.d/tg d0d1 |jd2d3d%ttd4t d1 |jd5d6d%ttd7t d1 |jd8dd9d	d:d |jd;dd<d	d=d |jd>dd?d	d@d |jdAdBd%dCdDdE |jdFdGdd	dHdE |jdIdJdd	dKdE tr|jdLddMddNd |jdOddPd	dQd d S )RNaddrport?z$Optional port number, or ipaddr:port)nargshelpz--ipv6z-6
store_trueuse_ipv6Fz#Tells Django to use a IPv6 address.)actiondestdefaultrH   z
--noreloadstore_falseuse_reloaderTz*Tells Django to NOT use the auto-reloader.z	--browseropen_browserzTells Django to open a browser.)rK   rL   rH   z--nothreadingthreadedz!Do not run in multithreaded mode.z
--threadedzRun in multithreaded mode.z--outputoutput_filezRSpecifies an output file to send a copy of all messages (not flushed immediately).)rL   rM   rH   z--print-sqlz%Print SQL queries as they're executed)rK   rM   rH   z--print-sql-locationz4Show location in code where SQL query generated fromz--cert	cert_pathstorez(Deprecated alias for --cert-file option.)rL   rK   typerH   z--cert-filezSSL .crt file path. If not provided path from --key-file will be selected. Either --cert-file or --key-file must be provided to use SSL.z
--key-filekey_file_pathzSSL .key file path. If not provided path from --cert-file will be selected. Either --cert-file or --key-file must be provided to use SSL.z--extra-filer    appendzQauto-reload whenever the given file changes too (can be specified multiple times))rL   rK   rU   rM   rH   z--reloader-intervalreloader_intervalzVAfter how many seconds auto-reload should scan for updates in poller-mode [default=%s]z--reloader-typereloader_typezHWerkzeug reloader type [options are auto, watchdog, or stat, default=%s]z--pdbpdbz-Drop into pdb shell at the start of any view.z--ipdbipdbz.Drop into ipdb shell at the start of any view.z--pmpmz;Drop into (i)pdb shell if an exception is raised in a view.z--startup-messagesstartup_messagesreloadzEWhen to show startup messages: reload [default], once, always, never.)rL   rK   rM   rH   z--keep-meta-shutdownkeep_meta_shutdown_funczKeep request.META['werkzeug.server.shutdown'] function which is automatically removed because Django debug pages tries to call the function and unintentionally shuts down the Werkzeug server.z--nopinnopinz+Disable the PIN in werkzeug. USE IT WISELY!z
--nostaticuse_static_handlerzCTells Django to NOT automatically serve static files at STATIC_URL.z
--insecureinsecure_servingz3Allows serving static files even if DEBUG is False.)	r   add_argumentsadd_argumentadd_mutually_exclusive_groupstrint DEFAULT_POLLER_RELOADER_INTERVALDEFAULT_POLLER_RELOADER_TYPEUSE_STATICFILES)r"   parserZ
cert_groupr%   r'   r(   rc      s    





zCommand.add_argumentsc                 O   s  |d }|d }|dkr(t jd| _n0|dkrBt jd | _n|dkrRd| _nd| _d	t jd< tt| j|d
 d tt}t	
d}|t	j || d|_|d }|d }|d }	zddlm}
 W n* ty   |s|s|	rtdd}	Y n|0 |s|stjrPd}ttdd p"tj}||vrPt|trF||f7 }n
||g7 }|r^d|
_n|rjd|
_dd }|	r||ntt_|d | _| jrtjstdd| _ |sz
tj!}W n t"y   Y n0 |sd| _#t$| _%nt&'t(|}|d u rtd| |) \| _#}}}| _%| j%* s6td| j% | j#r~|rb| j#dd | _#d| _d| _ n| jr~|s~td| j# | j#s| jrdnd | _#d| _ t+|d! |d" tj,d#d$ | -| W d    n1 s0    Y  d S )%NrE   r]   r^   ZRUNSERVER_PLUS_SHOW_MESSAGESonceneverFT1rR   r2   werkzeugrZ   r[   r\   r   )PdbMiddlewarezdjango-pdb is required for --pdb, --ipdb and --pm options. Please visit https://pypi.python.org/pypi/django-pdb or install via pip. (pip install django-pdb)z#django_pdb.middleware.PdbMiddlewareZ
MIDDLEWAREc                 S   sD   t  rdd l}|}ndd l}|}td||f tjd || d S )Nr   zException occured: %s, %s)file)r   r[   rZ   printr5   stderrZpost_mortem)requestexc_type	exc_valuer=   r[   prZ   r'   r'   r(   
postmortem   s    z"Command.handle.<locals>.postmortemrJ   z"Your Python does not support IPv6. z5"%s" is not a valid port number or address:port pair.z%r is not a valid port number.r   r3   z!"%s" is not a valid IPv6 address.z::1z	127.0.0.1	print_sqlprint_sql_locationZRUNSERVER_PLUS)r{   r|   loggerZ
confprefix).osenvirongetshow_startup_messagesr   r}   rt   r   r+   logging	getLoggersetLevelINFO
addHandler	propagateZdjango_pdb.middlewarerq   ImportErrorr   r   DEBUGr7   ZMIDDLEWARE_CLASSES
isinstancetupleZalways_breakr   django_views_debugZtechnical_500_responserJ   sockethas_ipv6	_raw_ipv6Z!RUNSERVERPLUS_SERVER_ADDRESS_PORTAttributeErroraddrDEFAULT_PORTportrematch
naiveip_regroupsisdigitr   info	inner_run)r"   r#   optionsrE   r]   ZlogredirectZ
werkloggerZ
pdb_optionZipdb_optionr\   rq   Z
middlewareZsettings_middlewarery   mZ_ipv4Z_ipv6Z_fqdnr'   r'   r(   handle   s    








zCommand.handlec                 O   s   t  S )z/Return the default WSGI handler for the runner.r   )r"   r#   r   r'   r'   r(   get_handler$  s    zCommand.get_handlerc                    s    fdd}|S )Nc                    s*   t  tr"tdt }t| d S )Nrz   )r   r   ansi_escapesubrf   )envZstart_responseerror_messageexcr'   r(   application)  s    
z.Command.get_error_handler.<locals>.applicationr'   )r"   r   r   r   r'   r   r(   get_error_handler(  s    zCommand.get_error_handlerc                    sj  t stdtjr>z
t  W n  ty<   | jr8td Y n0 G  fdddt} d } d } d }t	j
dkrxd	nd
} d } d }t d | _ d | _| jrtd z6t| j| jd t| j  t| jf i  }	W nL ty4 }
 z2| jjd|
 dd | j|
fi  }	W Y d }
~
n
d }
~
0 0 trh d } d }|rhtjs`|rht|	}	 d s| d r$tstd|  \}}tj|\}}tj|\}}z@tj|rtj|r||f}nttj||dd}W n( t y    | jrtd d}Y n0 nd }d|r4dnd| j!sD| j"nd | j" | j#f }| jrtd!t$% tj&f  td"|f  td# td$|  |rt'(| |rtj)r|  jtt*d%d& t+ O  _t,td'g r|  jttj-O  _|sd(tj.d)< tj./d)d(kr2| jr(d*tj.d+< t0|	d,}	t1j2| d- t3| j"t4| j#|	|d,| j|||||d. d S )/NzWerkzeug is required to use runserver_plus.  Please visit http://werkzeug.pocoo.org/ or install via pip. (pip install Werkzeug)zDWrapping internal werkzeug logger for color highlighting has failed!c                       s   e Zd Z fddZ  ZS )z-Command.inner_run.<locals>.WSGIRequestHandlerc                    s   t   }d s|d= |S )Nr_   zwerkzeug.server.shutdown)r   make_environ)r"   r   )r&   r   r'   r(   r   ?  s    
z:Command.inner_run.<locals>.WSGIRequestHandler.make_environ)r+   r,   r-   r   r0   r'   r   r%   r(   r   >  s   r   rQ   rO   rP   win32z	CONTROL-Cz
CTRL-BREAKrX   rY   r    r`   zPerforming system checks...
)Zdisplay_num_errorsz Error occurred during checks: %rz

)endingra   rb   rS   rV   zsPython OpenSSL Library is required to use runserver_plus with ssl support. Install via pip (pip install pyOpenSSL).	localhost)hostz<Werkzeug version is less than 0.9, trying adhoc certificate.Zadhocz%s://%s:%s/httpshttpz[%s]z%
Django version %s, using settings %rz#Development server is running at %sz8Using the Werkzeug debugger (http://werkzeug.pocoo.org/)zQuit the server with %s.c                 S   s   t | dS )Nz.mo)rf   endswithro   r'   r'   r(   <lambda>      z#Command.inner_run.<locals>.<lambda>RUNSERVER_PLUS_EXTRA_FILEStrueZWERKZEUG_RUN_MAINoffZWERKZEUG_DEBUG_PINT)Zsender)rO   Zuse_debuggerr    rX   rY   rQ   Zrequest_handlerssl_context)5HAS_WERKZEUGr   r   r   set_werkzeug_log_colorr4   r   rs   _WSGIRequestHandlerr5   platformsetr    r`   rC   checkZcheck_migrationsr   rt   writer   rj   r   HAS_OPENSSLdetermine_ssl_files_pathsr~   pathsplitsplitextexistsr   joinr   r   r   r   djangoget_versionZSETTINGS_MODULE
webbrowseropenZUSE_I18Nfilterr1   r7   r   r   r   r   runserver_plus_startedsendr   rg   )r"   r   r   rQ   rO   rP   Zquit_commandrX   rY   handlerr   ra   rb   certfilekeyfileZdir_pathrootr<   r   Zbind_urlr'   r   r(   r   2  s    

(
&



zCommand.inner_runc                 C   sD   | dpd}| dpd}| ||| j}| ||| j}||fS )NrV   rz   rS   )r   _determine_path_for_fileDEFAULT_CRT_EXTENSIONDEFAULT_KEY_EXTENSION)clsr   rV   rS   	cert_filekey_filer'   r'   r(   r     s
    z!Command.determine_ssl_files_pathsc                 C   s@   |  ||}| |p| |}| |p,|}tj||| S r   )#_get_directory_basing_on_file_paths_get_file_name_get_extensionr~   r   r   )r   current_file_pathother_file_pathZexpected_extension	directory	file_name	extensionr'   r'   r(   r     s    z Command._determine_path_for_filec                 C   s   |  |p|  |pt S r   )_get_directoryr~   getcwd)r   r   r   r'   r'   r(   r     s    z+Command._get_directory_basing_on_file_pathsc                 C   s   t j|d S )Nr   )r~   r   r   r   	file_pathr'   r'   r(   r     s    zCommand._get_directoryc                 C   s   t jt j|d d S )Nr   r   )r~   r   r   r   r   r'   r'   r(   r     s    zCommand._get_file_namec                 C   s   t j|d S )Nr   )r~   r   r   r   r'   r'   r(   r     s    zCommand._get_extension)r+   r,   r-   rH   Zrequires_system_checksr   r   rc   r   r   r   r   r   classmethodr   r   r   r   r   r   r0   r'   r'   r%   r(   rD      s,   8
d
q




rD   c                     s$   t  tj  fdd} | t_dS )z%Try to set color to the werkzeug log.c                    s   z*d|   |  || f }t|d }W n$ tyN    ||g|R   Y S 0 |d dkrh|}nz|d dkr|}nb|dkr|}nN|d dkr|}n6|dkr|}n"|d d	kr؈	|}n

|}t|| d S )
Nz%s - - [%s] %sr   r   2rn   Z3043Z4044)Zaddress_stringZlog_date_time_stringrf   r4   ZHTTP_SUCCESSZ	HTTP_INFOZHTTP_NOT_MODIFIEDZHTTP_REDIRECTZHTTP_NOT_FOUNDZHTTP_BAD_REQUESTZHTTP_SERVER_ERRORr   )r"   rU   messager#   msgZ	http_codeZ	_orig_log_styler'   r(   werk_log  s.    
z(set_werkzeug_log_color.<locals>.werk_logN)r   r   log)r   r'   r   r(   r     s    r   )Pr   r~   r   r   r5   r8   r   rA   typingr   r   Zdjango.confr   Zdjango.core.management.baser   r   r   Zdjango.core.management.colorr   Zdjango.core.servers.basehttpr	   Zdjango.dispatchr
   Zdjango.utils.autoreloadr   Zdjango.viewsr   r   ZINSTALLED_APPSrj   Z#django.contrib.staticfiles.handlersr   r   rp   r   Zwerkzeug.debugr   Zwerkzeug.servingr   r   r   Zwerkzeug._internalr   r   r   ZOpenSSLr   Z/django_extensions.management.technical_responser   Z"django_extensions.management.utilsr   r   r   r   Z)django_extensions.management.debug_cursorr   r   compileXr   VERBOSEr   r   r7   rh   ri   r   r+   r}   r   r*   Zreloader_loopsitemsnameZreloader_loop_klassr   r1   rC   rD   r   r'   r'   r'   r(   <module>   s~   





  F