
    jg_                        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" 	 dejF                  v rdZ$nd dl%m&Z& d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Z3	 d dl4Z4dZ5d dl6m7Z7 d dl8m9Z9m:Z:m;Z;m<Z< d dl=m>Z>  e       Z? ej                  dej                        ZB ej                  dej                        ZDdZE eFedd      ZG eFedd      ZH e j                  eJ      ZK eL       ZMd eeN   fd!ZOe3r<e2j                  j                         D ]  \  ZRZS G d" d#eS      ZTeTe2j                  eR<   ! d$ ZUd% ZV G d& d'e      ZWd( ZXy# e'$ r dZ$Y w xY w# e'$ r dZ3Y w xY w# e'$ r dZ5Y 
w xY w))    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            	          t               } t               D ]V  }t        j                  |      D ]<  \  }}}|D ]1  }| j	                  t        j
                  j                  ||             3 > X | S N)setr   oswalkaddpathjoin)template_listtemplate_dirbase_dir_	filenamesfilenames         o/var/www/html/Stanley/venv/lib/python3.12/site-packages/django_extensions/management/commands/runserver_plus.pyget_all_template_filesr5   Q   s_    EM02&(ggl&;"Ha%!!"'',,x"BC & '< 3
     c                   l     e Zd Z fdZed        Zej                  d        Zdeddf fdZd Z	 xZ
S )	WrappedReloaderLoopc                 d    t               | _        t        |   |i | | j                  | _        y r'   )r5   _template_filessuper__init__extra_files_extra_files)selfargskwargs	__class__s      r4   r<   zWrappedReloaderLoop.__init__`   s.    1G1I$ $1&1$($4$4!r6   c                 @   t               }t        | j                        t        |      k7  rM|j                  | j                        }|D ]#  }t	        dd| d       | j                  |       % t                || _        | j                  j                  t        |      S )Ninfoz * New file z added, reset template loaders)
r5   lenr:   
differencer   register_file_changedr   r>   union_error_files)r?   template_fileschangedr3   s       r4   r=   zWrappedReloaderLoop.extra_filese   s    !7!9 t++,N0CC,778L8LMG$+V|H:=[%\]228< %, "O'5$((..|^LLr6   c                     || _         y r'   )r>   )r?   r=   s     r4   r=   zWrappedReloaderLoop.extra_filesw   s
    $/!r6   r3   r%   Nc                     t        |      }t        j                  | |      }t        d |D              st        |   |       y t        dd|d       | j                  |       y )N)sender	file_pathc              3   &   K   | ]	  }|d      yw)r"   N ).0ress     r4   	<genexpr>z5WrappedReloaderLoop.trigger_reload.<locals>.<genexpr>~   s     5Wc3q6Ws   rD   z * Detected change in z, reset template loaders)r   r   sendanyr;   trigger_reloadr   rG   )r?   r3   r,   resultsrB   s       r4   rW   z"WrappedReloaderLoop.trigger_reload{   s\    H~&++44H5W55G*84#9(E]!^_..x8r6   c                 z    t        | d      r/t        j                  |      j                  }|| j                  |<   y y )Nmtimes)hasattrr)   statst_mtimerZ   )r?   r3   mtimes      r4   rG   z)WrappedReloaderLoop.register_file_changed   s3    4*GGH-66E,1DKK) +r6   )__name__
__module____qualname__r<   propertyr=   setterstrrW   rG   __classcell__rB   s   @r4   r8   r8   _   sP    5
 M M" 0  09s 9t 92r6   r8   c                  2    t               j                         S r'   )r   watched_filesrQ   r6   r4   gen_filenamesri      s    >''))r6   c                 B     t        j                          fd       }|S )Nc                  
   	  | i |S # t         $ rn t        j                         }|\  }}}t        |dd       t	        j
                  |      d   d   }n|j                  }|t        vrt        j                  |        w xY w)Nr3   r   )		Exceptionsysexc_infogetattr	traceback
extract_tbr3   rI   r+   )r@   rA   
_exceptionr1   evtbr3   fns          r4   wrapperzcheck_errors.<locals>.wrapper   s    	t&v&& 	J"IAr2r:t,4$//3B7:;;|+  *	s
    A7B)	functoolswraps)rv   rw   s   ` r4   check_errorsrz      s%    __R & Nr6   c                        e Zd ZU dZg Zee   ed<   dZdZ	 fdZ
ed        Zd Zd Zd	 Zed
        Zed        Zed        Zed        Zed        Zed        Z xZS )Commandz0Starts a lightweight Web server for development.requires_system_checksz.crtz.keyc           	         t         |   |       |j                  ddd       |j                  ddddd	d
       |j                  ddddd       |j                  dddd       |j                  dddd       |j                  dddd       |j                  ddd d       |j                  ddd	d        |j                  d!d"t        d#$       |j                  d%dd	d&        |j	                         }|j                  d'd(d"t
        d)*       |j                  d+d(d"t
        d,*       |j                  d-d.d"t
        d/*       |j                  d0d1d2t
        g d34       |j                  d5d6d2t
        g d74       |j                  d8d9d"t        t        d:t        z  4       |j                  d;d<d"t
        t        d=t        z  4       |j                  d>dd?d	d@       |j                  dAddBd	dC       |j                  dDddEd	dF       |j                  dGdHd"dIdJK       |j                  dLdMdd	dNK       |j                  dOdPdd	dQK       t        r-|j                  dRddSddT       |j                  dUddVd	dW       y y )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defaultr   z
--noreloadstore_falseuse_reloaderTz*Tells Django to NOT use the auto-reloader.z	--browseropen_browserzTells Django to open a browser.)r   r   r   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).)r   r   r   z--print-sqlz%Print SQL queries as they're executed)r   r   r   z--truncate-sqlstorez/Truncate SQL queries to a number of characters.)r   typer   z--print-sql-locationz4Show location in code where SQL query generated fromz--cert	cert_pathz(Deprecated alias for --cert-file option.)r   r   r   r   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))r   r   r   r   r   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.)r   r   r   r   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intadd_mutually_exclusive_grouprd    DEFAULT_POLLER_RELOADER_INTERVALDEFAULT_POLLER_RELOADER_TYPEUSE_STATICFILES)r?   parser
cert_grouprB   s      r4   r   zCommand.add_arguments   sz   f%Jc!G 	 	IHd<jZ_!F 	 	HL^]a!M 	 	OK>!B 	 	DOM
!D 	 	FLJ!= 	 	?J]D!u 	 	wM,!H 	 	J,W3!R 	 	T2<QV!W 	 	Y88:
{7QT%O 	  	QKVY&e 	  	f 	LwUX"a 	 	b 	NxVYce!t 	 	v/6HQY`cmo!| 	 	~18KT[be  pP!y  }]  "] 	 	^-OGZ]  hD!k  oK  "K 	 	LGLue!P 	 	RH\PU!Q 	 	SF<dE!^ 	 	`07IRYck!h 	 	j29R[gqv"8 	 	9 	IGLRW!N 	 	P ]I]gk%j   l\HZdi%Z   \ r6   c                    |d   }|d   }|dk(  r%t         j                  j                  d      | _        n?|dk(  r&t         j                  j                  d       | _        n|dk(  rd| _        nd| _        d	t         j                  d<   t	        t
        | j                  |d
          t        t              }t        j                  d      }|j                  t        j                         |j                  |       d|_        |d   }|d   }|d   }		 ddlm}
 |s|st"        j$                  rFd}t'        t"        dd       xs t"        j(                  }||vrt+        |t,              r||fz  }n||gz  }|rd|
_        n	|rd|
_        d }|	rnt4        t6        _        |d   | _        | j:                  rt<        j>                  st3        d      d| _         |s	 t"        jB                  }|sd| _#        tH        | _%        ntM        jN                  tP        |      }|t3        d|z        |jS                         \  | _#        }}}| _%        | jJ                  jU                         st3        d| jJ                  z        | jF                  rK|r#| jF                  dd | _#        d| _        d| _         n&| j:                  r|st3        d| jF                  z        | jF                  s| j:                  rdnd| _#        d| _         |d    dk(  rd n|d    }tW        |d!   |d"   |t
        jX                  d#$      5  | j[                  |       d d d        y # t0        $ r |s|s|	rt3        d      d}	Y w xY w# tD        $ r Y w xY w# 1 sw Y   y xY w)%Nr   r   r   RUNSERVER_PLUS_SHOW_MESSAGESonceneverFT1r   r3   werkzeugr   r   r   r   )PdbMiddlewarez#django_pdb.middleware.PdbMiddleware
MIDDLEWAREc                     t               rdd l}|}ndd l}|}t        d|d|t        j
                         |j                  |       y )Nr   zException occured: z, )file)r   r   r   printrn   stderrpost_mortem)requestexc_type	exc_valueru   r   pr   s          r4   
postmortemz"Command.handle.<locals>.postmortem!  s9    :AAXyIPSPZPZ[b!r6   zdjango-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)r   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"   rl   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   r_   logging	getLoggersetLevelINFO
addHandler	propagatedjango_pdb.middlewarer   r   DEBUGrp   MIDDLEWARE_CLASSES
isinstancetuplealways_breakImportErrorr   r   django_views_debugtechnical_500_responser   sockethas_ipv6	_raw_ipv6!RUNSERVERPLUS_SERVER_ADDRESS_PORTAttributeErroraddrDEFAULT_PORTportrematch
naiveip_regroupsisdigitr   rD   	inner_run)r?   r@   optionsr   r   logredirect
werklogger
pdb_optionipdb_optionr   r   
middlewaresettings_middlewarer   m_ipv4_ipv6_fqdnr   s                      r4   handlezCommand.handle   sx   :&"#56x')+8V)WD&'-/ZZ^^<Z-[)[D&().D&)-D&58

12VT[[7=3IJ%h/ &&z2
GLL)k*$
U^
foT]!	"; kX^^B
&-hd&K&jxOjOj#%88!"5u=+
}<++
|;+ -2*-3*" CEJJe1
+==CDD#EE DI$DIX.Ay" $;=E$F G G89
5DIueUDI99$$&"#C#'99$- . .yy $		!BDI$(DM%)DN]]5&'J)-(3 4 4yy!%KDI!DN">2a74W^=T,w{7K`gh|`}  IQ  Z`  Ze  Ze  rB  CNN7# C  CO  	[B"  $B  C  CB	V " 8 C  Cs0   M M& (M6M#"M#&	M32M36M?c                     t               S )z/Return the default WSGI handler for the runner.r   )r?   r@   r   s      r4   get_handlerzCommand.get_handlerT  s    ,..r6   c                     fd}|S )Nc                 |    t        t              r*t        j                  dt	                    }t        |      )Nr   )r   r	   ansi_escapesubrd   )envstart_responseerror_messageexcs      r4   applicationz.Command.get_error_handler.<locals>.applicationY  s2    #/0 +CH =&}55Ir6   rQ   )r?   r   r   r   s    `  r4   get_error_handlerzCommand.get_error_handlerX  s    	 r6   c                 	   t         st        d      t        j                  r	 t	                 G fddt              }d   }d   }d   }t        j                  dk7  rd	nd
}d   }d   }t        d         | _        t        d         }	d   | _        | j                  rt        d       	  t        | j                        | j                          t        | j                                  t        | j"                        d3i }
t*        r)d   }d   }|rt        j                  s|rt-        |
      }
d   sd   rt.        st        d      | j1                        \  }}t2        j4                  j7                  |      \  }}t2        j4                  j9                  |      \  }}	 t2        j4                  j;                  |      r$t2        j4                  j;                  |      r||f}n+t=        t2        j4                  j?                  ||      d      }nd }|rdndd | jB                  s| jD                  nd!| jD                  z  d"| jF                  d#}| j                  rXt        d$tI        jJ                         d%t        jL                         t        d&|       t        d'       t        d(|z         |rtO        jP                  |       |rAt        jR                  r1| xj                  t        tU        d) tW                           z  c_        tY        t        d*g       r,| xj                  t        t        jZ                        z  c_        |	t        tY        t        d+g             z  }	|sd,t2        j\                  d-<   t2        j\                  j_                  d-      d,k7  r+| j                  rd.t2        j\                  d/<   ta        |
d0      }
tb        je                  | 1       tg        | jD                  ti        | jF                        |
|d0| j                  |	|||||2       y # t
        $ r | j                  rt        d       Y #w xY w# t
        $ r>}| j$                  j'                  d|z  d        | j(                  |fi }
Y d }~d }~ww xY w# t@        $ r | j                  rt        d       d}Y w xY w)4NzWerkzeug 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                   "     e Zd Z fdZ xZS )-Command.inner_run.<locals>.WSGIRequestHandlerc                 t    t         |          }d   sd|v r|d= t        j                  d      }|||d<   |S )Nr   zwerkzeug.server.shutdownREMOTE_USER)r;   make_environr)   getenv)r?   r   remote_userrB   r   s      r4   r   z:Command.inner_run.<locals>.WSGIRequestHandler.make_environo  sN    '.089>X\c>c :; ii6*-8GM*r6   )r_   r`   ra   r   re   )rB   r   s   @r4   r   r   n  s     r6   r   r   r   r   win32z	CONTROL-Cz
CTRL-BREAKr   r   r=   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.adhochttpshttpz://z[%s]:/z
Django version z, using settings z!Development server is running at zCUsing the Werkzeug debugger (https://werkzeug.palletsprojects.com/)zQuit the server with %s.c                 6    t        |       j                  d      S )Nz.mo)rd   endswithr   s    r4   <lambda>z#Command.inner_run.<locals>.<lambda>  s    CM<R<RSX<Yr6   RUNSERVER_PLUS_EXTRA_FILESRUNSERVER_PLUS_EXCLUDE_PATTERNStrueWERKZEUG_RUN_MAINoffWERKZEUG_DEBUG_PINT)rN   )	r   use_debuggerr=   r   r   r   r   request_handlerssl_contextrQ   )5HAS_WERKZEUGr   r   r   set_werkzeug_log_colorrm   r   r   _WSGIRequestHandlerrn   platformr(   r=   r   rz   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filterri   rp   r  r   r   r   runserver_plus_startedrU   r   r   )r?   r   r   r   r   r   quit_commandr   r   r   handlerr   r   r   certfilekeyfiledir_pathrootr1   r  bind_urls    `                   r4   r   zCommand.inner_runb  s8      k  l  l >>b&(
	!4 	 :&~.~.&)llg&={<#$780w}56w'9:;W%
%%12	=$L$8R8RS/L../14l4#3#34?w?G
 !()=!>&'9:!x~~9I,W5;7?#;" $N O O !% > >w GHgWW]]84NHdgg&&t,GD!&77>>(+w0G#+W"5K"2277<<$3OVa"bK K #G.		U[^b^g^gUg0gimirirt %%f>P>P>RT\TlTlmn8EFWX,|;<OOH%H--F+Y[h[j$k ll892>H$G$G HHC2SUW XYY
 .4BJJ*+ ::>>-.&8zz38

/0)'48G##4#0II		N%((-/'.#	
C  b--`ab@  	=KK@3FvV,d,,S<G<G	=0  &--XY%&s=   
P. 2AQ 0A.R . QQ	R3RR"SSc                     |j                  d      xs d}|j                  d      xs d}| j                  ||| j                        }| j                  ||| j                        }||fS )Nr   r   r   )r   _determine_path_for_fileDEFAULT_CRT_EXTENSIONDEFAULT_KEY_EXTENSION)clsr   r   r   	cert_filekey_files         r4   r   z!Command.determine_ssl_files_paths  sg    O4:KK,2	00M3KdKde	//y#JcJcd(""r6   c                     | j                  ||      }| j                  |      xs | j                  |      }| j                  |      xs |}t        j                  j                  |||z         S r'   )#_get_directory_basing_on_file_paths_get_file_name_get_extensionr)   r,   r-   )r7  current_file_pathother_file_pathexpected_extension	directory	file_name	extensions          r4   r4  z Command._determine_path_for_file  sh    ;;<M_	&&'89`S=O=OP_=`	&&'89O=O	ww||Iy9'<==r6   c                 v    | j                  |      xs' | j                  |      xs t        j                         S r'   )_get_directoryr)   getcwd)r7  r>  r?  s      r4   r;  z+Command._get_directory_basing_on_file_paths  s3    !!"34j8J8J?8[j_a_h_h_jjr6   c                 F    t         j                  j                  |      d   S )Nr   )r)   r,   r!  r7  rO   s     r4   rE  zCommand._get_directory  s    ww}}Y'**r6   c                     t         j                  j                  t         j                  j                  |      d         d   S )Nr"   r   )r)   r,   r"  r!  rH  s     r4   r<  zCommand._get_file_name  s.    wwi 8 ;<Q??r6   c                 F    t         j                  j                  |      d   S )Nr"   )r)   r,   r"  rH  s     r4   r=  zCommand._get_extension  s    ww	*1--r6   )r_   r`   ra   r   r}   r   rd   __annotations__r5  r6  r   r   r   r   r   r   classmethodr   r4  r;  rE  r<  r=  re   rf   s   @r4   r|   r|      s    =D )+DI*"":\x d$ d$L/v
p # # > > k k + + @ @ . .r6   r|   c                  ^    t               t        j                  fd} | t        _        y)z%Try to set color to the werkzeug log.c                    	 | j                         d| j                         d||z  }t        |d         }|d   dk(  rj	                  |      }n|d   dk(  rj                  |      }ns|dk(  rj                  |      }n\|d   dk(  rj                  |      }nB|d	k(  rj                  |      }n+|d   d
k(  rj                  |      }nj                  |      }t        ||       y # t        $ r  ||g| cY S w xY w)Nz - - [z] r"   r   2r   30434044)address_stringlog_date_time_stringrd   rm   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_styles         r4   werk_logz(set_werkzeug_log_color.<locals>.werk_log  s   	3##%))+$C
 DGI
 Q<3%%c*Cq\S ""3'C%**3/Cq\S &&s+C%'',Cq\S ))#.C **3/CT3+  	3T72T22	3s   7C. .DDN)r
   r  log)rb  r`  ra  s    @@r4   r  r    s%    ]F#''I> 'r6   )Yr   r)   r   r   rn   rq   r'  rx   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   rp   r   r   r   r_   r   r(   rI   rd   r5   reloader_loopsitemsnamereloader_loop_klassr8   ri   rz   r|   r  rQ   r6   r4   <module>r~     s    	 	  
         S S 4 F " N > 4&(*A*AAJ	#2J1'"LK X e e U   RZZ 
 tt
 bjj 
 ZZ
 #*85]_`#a  &x1UW]^ 			8	$uC  %.%=%=%C%C%E!!(	2"5 (	2T *=	  &W &F\*2N.k N.b
$'{  O  L  Ks6   ,F &F% -F3 F"!F"%F0/F03F>=F>