o
    /hBh                     @   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
mZ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mZ d d
lmZmZ d dl m!Z" zdej#v rsdZ$nd dl%m&Z& dZ$W n e'y   dZ$Y nw z(d dl(m)Z) d dl*m+Z+ d dl,m-Z. d dl,m/Z/ d dl0m1Z1 d dl(m2Z2 dZ3W n e'y   dZ3Y nw zd dl4Z4dZ5W n e'y   dZ5Y nw d dl6m7Z7 d dl8m9Z9m:Z:m;Z;m<Z< d dl=m>Z> e Z?e@dejAZBe@dejCZDdZEeFeddZGeFeddZHe IeJZKeL ZMd eeN fd!d"ZOe3r3e2jPQ D ]\ZRZSG d#d$ d$eSZTeTe2jPeR< q d%d& ZUd'd( ZVG d)d* d*eZWd+d, ZXdS )-    N)Path)ListSet)settings)BaseCommandCommandErrorSystemCheckError)color_styleget_internal_wsgi_application)Signal)get_template_directoriesreset_loaders)file_changed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
    )
8000&RUNSERVERPLUS_POLLER_RELOADER_INTERVAL   "RUNSERVERPLUS_POLLER_RELOADER_TYPEautoreturnc               	   C   sJ   t  } t D ]}t|D ]\}}}|D ]}| tj|| qqq| S N)setr   oswalkaddpathjoin)template_listtemplate_dirbase_dir_	filenamesfilename r2   o/var/www/html/env_mimamsha/lib/python3.10/site-packages/django_extensions/management/commands/runserver_plus.pyget_all_template_filesc   s   
r4   c                       sT   e Zd Z fddZedd Zejdd Zdeddf fd	d
Zdd Z	  Z
S )WrappedReloaderLoopc                    s&   t  | _t j|i | | j| _d S r%   )r4   _template_filessuper__init__extra_files_extra_files)selfargskwargs	__class__r2   r3   r8   s   s   zWrappedReloaderLoop.__init__c                 C   sd   t  }t| jt|kr(|| j}|D ]}tdd| d | | qt  || _| jt	|S )Ninfoz * New file z added, reset template loaders)
r4   lenr6   
differencer   register_file_changedr   r:   union_error_files)r;   template_fileschangedr1   r2   r2   r3   r9   x   s   
zWrappedReloaderLoop.extra_filesc                 C   s
   || _ d S r%   )r:   )r;   r9   r2   r2   r3   r9      s   
r1   r$   Nc                    sX   t |}tj| |d}tdd |D st | d S tdd|d | | d S )N)sender	file_pathc                 s   s    | ]}|d  V  qdS )r!   Nr2   ).0resr2   r2   r3   	<genexpr>   s    z5WrappedReloaderLoop.trigger_reload.<locals>.<genexpr>r@   z * Detected change in z, reset template loaders)r   r   sendanyr7   trigger_reloadr   rC   )r;   r1   r*   resultsr>   r2   r3   rO      s   
z"WrappedReloaderLoop.trigger_reloadc                 C   s(   t | drt|j}|| j|< d S d S )Nmtimes)hasattrr'   statst_mtimerQ   )r;   r1   mtimer2   r2   r3   rC      s   
z)WrappedReloaderLoop.register_file_changed)__name__
__module____qualname__r8   propertyr9   setterstrrO   rC   __classcell__r2   r2   r>   r3   r5   r   s    

r5   c                   C   s
   t   S r%   )r   watched_filesr2   r2   r2   r3   gen_filenames   s   
r^   c                    s   t   fdd}|S )Nc                     sp   z | i |W S  t y7   t }|\}}}t|dd d u r*t|d d }n|j}|tvr6t|  w )Nr1   r   )		Exceptionsysexc_infogetattr	traceback
extract_tbr1   rE   r)   )r<   r=   
_exceptionr/   evtbr1   fnr2   r3   wrapper   s   

zcheck_errors.<locals>.wrapper)	functoolswraps)rj   rk   r2   ri   r3   check_errors   s   rn   c                       s   e Zd ZU dZg Zee ed< 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.requires_system_checksz.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"t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d0d1d2tg d3d4 |jd5d6d2tg d7d4 |jd8d9d"ttd:t d4 |jd;d<d"ttd=t d4 |jd>dd?d	d@d |jdAddBd	dCd |jdDddEd	dFd |jdGdHd"dIdJdK |jdLdMdd	dNdK |jdOdPdd	dQdK tr	|jdRddSddTd |jdUddVd	dWd d S d S )XN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defaultrt   z
--noreloadstore_falseuse_reloaderTz*Tells Django to NOT use the auto-reloader.z	--browseropen_browserzTells Django to open a browser.)rw   rx   rt   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).)rx   ry   rt   z--print-sqlz%Print SQL queries as they're executed)rw   ry   rt   z--truncate-sqlstorez/Truncate SQL queries to a number of characters.)rw   typert   z--print-sql-locationz4Show location in code where SQL query generated fromz--cert	cert_pathz(Deprecated alias for --cert-file option.)rx   rw   r   rt   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-filer9   appendzQauto-reload whenever the given file changes too (can be specified multiple times))rx   rw   r   ry   rt   z--exclude-patternexclude_patternszYignore reload on changes to files matching this pattern (can be specified multiple times)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.)rx   rw   ry   rt   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_handlerz5Tells Django to NOT automatically serve static files.z
--insecureinsecure_servingz3Allows serving static files even if DEBUG is False.)	r7   add_argumentsadd_argumentintadd_mutually_exclusive_groupr[    DEFAULT_POLLER_RELOADER_INTERVALDEFAULT_POLLER_RELOADER_TYPEUSE_STATICFILES)r;   parser
cert_groupr>   r2   r3   r      sb  				
	
zCommand.add_argumentsc                 O   s  |d }|d }|dkrt jd| _n|dkr!t jd | _n|dkr)d| _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{   |ss|ss|	rwtdd}	Y n6w |s|stjrd}ttdd ptj}||vrt|tr||f7 }n||g7 }|rd|
_n|rd|
_dd }|	r|ntt_|d | _| jrtjstdd| _ |sztj!}W n	 t"y   Y nw |sd| _#t$| _%nLt&'t(|}|d u rtd| |) \| _#}}}| _%| j%* std| j% | j#r0|r"| j#dd | _#d| _d| _ n| jr0|s0td| j# | j#s@| jr:dnd | _#d| _ |d! dkrId n|d! }t+|d" |d# |tj,d$d% | -| W d    d S 1 smw   Y  d S )&Nrq   r   r   RUNSERVER_PLUS_SHOW_MESSAGESonceneverFT1r~   r1   werkzeugr   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.PdbMiddleware
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   r   printra   stderrpost_mortem)requestexc_type	exc_valuerh   r   pr   r2   r2   r3   
postmortem  s   z"Command.handle.<locals>.postmortemrv   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!   r_   z!"%s" is not a valid IPv6 address.z::1z	127.0.0.1truncate_sql	print_sqlprint_sql_locationRUNSERVER_PLUS)r   r   truncatelogger
confprefix).r'   environgetshow_startup_messagesr   r   r   r   rV   logging	getLoggersetLevelINFO
addHandler	propagatedjango_pdb.middlewarer   ImportErrorr   r   DEBUGrc   MIDDLEWARE_CLASSES
isinstancetuplealways_breakr   django_views_debugtechnical_500_responserv   sockethas_ipv6	_raw_ipv6!RUNSERVERPLUS_SERVER_ADDRESS_PORTAttributeErroraddrDEFAULT_PORTportrematch
naiveip_regroupsisdigitr   r@   	inner_run)r;   r<   optionsrq   r   logredirect
werklogger
pdb_optionipdb_optionr   r   
middlewaresettings_middlewarer   m_ipv4_ipv6_fqdnr   r2   r2   r3   handle  s   









$zCommand.handlec                 O   s   t  S )z/Return the default WSGI handler for the runner.r
   )r;   r<   r   r2   r2   r3   get_handler   s   zCommand.get_handlerc                    s    fdd}|S )Nc                    s&   t  trtdt }t| )Nr   )r   r   ansi_escapesubr[   )envstart_responseerror_messageexcr2   r3   application  s   
z.Command.get_error_handler.<locals>.applicationr2   )r;   r   r   r   r2   r   r3   get_error_handler  s   zCommand.get_error_handlerc                    sx  t stdtjrzt  W n ty   | jrtd Y nw G  fdddt} d } d } d }t	j
dkr<d	nd
} d } d }t d | _t d }	 d | _| jr_td zt| j| jd t| j  t| jd1i  }
W n% ty } z| jjd| dd | j|fi  }
W Y d }~nd }~ww tr d } d }|rtjs|rt|
}
 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w d }d|rdnd | j!s| j"nd!| j" | j#f }| jrGtd"t$% tj&f  td#|f  td$ td%|  |rOt'(| |retj)re|  jtt*d&d' t+ O  _t,td(g rv|  jttj-O  _|	tt,td)g O }	|sd*tj.d+< tj./d+d*kr| jrd,tj.d-< t0|
d.}
t1j2| d/ t3| j"t4| j#|
|d.| j|	|||||d0 d S )2NzWerkzeug is required to use runserver_plus. Please visit https://werkzeug.palletsprojects.com/ 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|v r|d= td}|d ur||d< |S )Nr   zwerkzeug.server.shutdownREMOTE_USER)r7   make_environr'   getenv)r;   r   remote_user)r?   r   r2   r3   r   $  s   

z:Command.inner_run.<locals>.WSGIRequestHandler.make_environ)rV   rW   rX   r   r\   r2   r   r>   r3   r   #  s    r   r}   r{   r|   win32z	CONTROL-Cz
CTRL-BREAKr   r   r9   r   r   zPerforming system checks...
)display_num_errorsz Error occurred during checks: %rz

)endingr   r   r   r   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.adhocz%s://%s:%s/httpshttpz[%s]z%
Django version %s, using settings %rz#Development server is running at %szCUsing the Werkzeug debugger (https://werkzeug.palletsprojects.com/)zQuit the server with %s.c                 S   s   t | dS )Nz.mo)r[   endswithr   r2   r2   r3   <lambda>{  s    z#Command.inner_run.<locals>.<lambda>RUNSERVER_PLUS_EXTRA_FILESRUNSERVER_PLUS_EXCLUDE_PATTERNStrueWERKZEUG_RUN_MAINoffWERKZEUG_DEBUG_PINT)rH   )	r{   use_debuggerr9   r   r   r   r}   request_handlerssl_contextr2   )5HAS_WERKZEUGr   r   r   set_werkzeug_log_colorr`   r   r   _WSGIRequestHandlerra   platformr&   r9   r   rn   checkcheck_migrationsr   r   writer   r   r   HAS_OPENSSLdetermine_ssl_files_pathsr'   r*   splitsplitextexistsr   r+   r   r   r   r   djangoget_versionSETTINGS_MODULE
webbrowseropenUSE_I18Nfilterr^   rc   r   r   r   r   runserver_plus_startedrM   r   r   )r;   r   r   r}   r{   r|   quit_commandr   r   r   handlerr   r   r   certfilekeyfiledir_pathrootr/   r   bind_urlr2   r   r3   r     s   
	







zCommand.inner_runc                 C   sT   t j|dp	d}t j|dpd}| ||| j}| ||| j}||fS )Nr   r   r   )r'   r*   
expanduserr   _determine_path_for_fileDEFAULT_CRT_EXTENSIONDEFAULT_KEY_EXTENSION)clsr   r   r   	cert_filekey_filer2   r2   r3   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_pathexpected_extension	directory	file_name	extensionr2   r2   r3   r    s   z Command._determine_path_for_filec                 C   s   |  |p|  |pt S r%   )_get_directoryr'   getcwd)r  r%  r&  r2   r2   r3   r"    s
   
z+Command._get_directory_basing_on_file_pathsc                 C      t j|d S )Nr   )r'   r*   r	  r  rI   r2   r2   r3   r+       zCommand._get_directoryc                 C   s   t jt j|d d S )Nr!   r   )r'   r*   r
  r	  r.  r2   r2   r3   r#    s   zCommand._get_file_namec                 C   r-  )Nr!   )r'   r*   r
  r.  r2   r2   r3   r$    r/  zCommand._get_extension)rV   rW   rX   rt   rp   r   r[   __annotations__r  r  r   r   r   r   r   r   classmethodr  r  r"  r+  r#  r$  r\   r2   r2   r>   r3   ro      s2   
  <
{
 




ro   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y'    ||g|R   Y S w |d dkr4|}n=|d dkr@|}n1|dkrJ|}n'|d dkrV|}n|dkr`|}n|d d	krl	|}n
|}t|| d S )
Nz%s - - [%s] %sr!   r   2r   30434044)address_stringlog_date_time_stringr[   r`   HTTP_SUCCESS	HTTP_INFOHTTP_NOT_MODIFIEDHTTP_REDIRECTHTTP_NOT_FOUNDHTTP_BAD_REQUESTHTTP_SERVER_ERRORr   )r;   r   messager<   msg	http_code	_orig_log_styler2   r3   werk_log  s0   
z(set_werkzeug_log_color.<locals>.werk_logN)r	   r  log)rF  r2   rC  r3   r    s   
r  )Yr   r'   r   r   ra   rd   r  rl   pathlibr   typingr   r   r  django.confr   django.core.management.baser   r   r   django.core.management.colorr	   django.core.servers.basehttpr   django.dispatchr   django.template.autoreloadr   r   django.utils.autoreloadr   r   django.viewsr   r   INSTALLED_APPSr   #django.contrib.staticfiles.handlersr   r   r   r   werkzeug.debugr   werkzeug.servingr   r  r   werkzeug._internalr   r   r   OpenSSLr  /django_extensions.management.technical_responser   "django_extensions.management.utilsr   r   r   r   )django_extensions.management.debug_cursorr   r  compileXr   VERBOSEr   r   rc   r   r   r   rV   r   r&   rE   r[   r4   reloader_loopsitemsnamereloader_loop_klassr5   r^   rn   ro   r  r2   r2   r2   r3   <module>   s   


/    