
    ǷiLX                     <   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	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 	 d
ej        v rdZnd dlm Z  dZn# e!$ r dZY nw xY w	 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 dl"m,Z, dZ-n# e!$ r dZ-Y nw xY w	 d dl.Z.dZ/n# e!$ r dZ/Y nw xY wd dl0m1Z1 d dl2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8  e            Z9 ej:        dej;                  Z< ej:        dej=                  Z>dZ? e@edd          ZA e@edd          ZB e jC        eD          ZE eF            ZGe-r7e,jH        I                                D ]\  ZJZK G d deK          ZLeLe,jH        eJ<   d  ZMd! ZN G d" d#e          ZOd$ ZPdS )%    N)List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
    )
8000&RUNSERVERPLUS_POLLER_RELOADER_INTERVAL   "RUNSERVERPLUS_POLLER_RELOADER_TYPEautoc                   T     e Zd Z fdZed             Zej        d             Z xZS )WrappedReloaderLoopc                 R     t                      j        |i | | j        | _        d S N)super__init__extra_files_extra_files)selfargskwargs	__class__s      l/srv/django_bis/venv311/lib/python3.11/site-packages/django_extensions/management/commands/runserver_plus.pyr&   zWrappedReloaderLoop.__init__S   s0      $1&111$($4!!!    c                 @    | j                             t                    S r$   )r(   union_error_files)r)   s    r-   r'   zWrappedReloaderLoop.extra_filesW   s    (..|<<<r.   c                     || _         d S r$   )r(   )r)   r'   s     r-   r'   zWrappedReloaderLoop.extra_files[   s    $/!!!r.   )__name__
__module____qualname__r&   propertyr'   setter__classcell__r,   s   @r-   r"   r"   R   sr        5 5 5 5 5 = = X= 0 0  0 0 0 0 0r.   r"   c                  B    t                                                      S r$   )r   watched_files r.   r-   gen_filenamesr=   b   s    >>'')))r.   c                 F     t          j                    fd            }|S )Nc                     	  | i |S # t           $ rw t          j                    }|\  }}}t          |dd           !t	          j        |          d         d         }n|j        }|t          vrt                              |            w xY w)Nfilenamer   )		Exceptionsysexc_infogetattr	traceback
extract_tbr@   r1   add)r*   r+   
_exception_evtbr@   fns          r-   wrapperzcheck_errors.<locals>.wrapperh   s    	2t&v&&& 	 	 	J"IAr2r:t,,4$/33B7:;|++  ***	s
    BB)	functoolswraps)rM   rN   s   ` r-   check_errorsrQ   f   s8    _R    & Nr.   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                                          |           |                    ddd           |                    ddddd	d
           |                    ddddd           |                    dddd           |                    dddd           |                    dddd           |                    ddd d           |                    ddd	d            |                    d!d"t          d#$           |                    d%dd	d&            |                                }|                    d'd(d"t
          d)*           |                    d+d(d"t
          d,*           |                    d-d.d"t
          d/*           |                    d0d1d2t
          g d34           |                    d5d6d2t
          g d74           |                    d8d9d"t          t          d:t          z  4           |                    d;d<d"t
          t          d=t          z  4           |                    d>dd?d	d@           |                    dAddBd	dC           |                    dDddEd	dF           |                    dGdHd"dIdJK           |                    dLdMdd	dNK           |                    dOdPdd	dQK           t          r6|                    dRddSddT           |                    dUddVd	dW           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defaultrY   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]   rY   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^   rY   z--print-sqlz%Print SQL queries as they're executed)r\   r^   rY   z--truncate-sqlstorez/Truncate SQL queries to a number of characters.)r\   typerY   z--print-sql-locationz4Show location in code where SQL query generated fromz--cert	cert_pathz(Deprecated alias for --cert-file option.)r]   r\   re   rY   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\   re   r^   rY   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^   rY   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_groupstr DEFAULT_POLLER_RELOADER_INTERVALDEFAULT_POLLER_RELOADER_TYPEUSE_STATICFILES)r)   parser
cert_groupr,   s      r-   ru   zCommand.add_arguments   s   f%%%Jc!G 	 	I 	I 	IHd<jZ_!F 	 	H 	H 	HL^]a!M 	 	O 	O 	OK>!B 	 	D 	D 	DOM
!D 	 	F 	F 	FLJ!= 	 	? 	? 	?J]D!u 	 	w 	w 	wM,!H 	 	J 	J 	J,W3!R 	 	T 	T 	T2<QV!W 	 	Y 	Y 	Y88::
{7QT%O 	  	Q 	Q 	QKVY&e 	  	f 	f 	f 	LwUX"a 	 	b 	b 	b 	NxVYce!t 	 	v 	v 	v/6HQY`cmo!| 	 	~ 	~ 	~18KT[be  pP!y  }]  "] 	 	^ 	^ 	^-OGZ]  hD!k  oK  "K 	 	L 	L 	LGLue!P 	 	R 	R 	RH\PU!Q 	 	S 	S 	SF<dE!^ 	 	` 	` 	`07IRYck!h 	 	j 	j 	j29R[gqv"8 	 	9 	9 	9 	IGLRW!N 	 	P 	P 	P  	\]I]gk%j   l l l\HZdi%Z   \ \ \ \ \	\ 	\r.   c                 J   |d         }|d         }|dk    r%t           j                            d          | _        nA|dk    r&t           j                            d           | _        n|dk    rd| _        nd| _        d	t           j        d<   t	          t
          | j        |d
                    t          t                    }t          j
        d          }|                    t          j                   |                    |           d|_        |d         }|d         }|d         }		 ddlm}
 |s|st"          j        rJd}t'          t"          dd           pt"          j        }||vr"t+          |t,                    r||fz  }n||gz  }|rd|
_        n	|rd|
_        d }n'# t0          $ r |s|s|	rt3          d          d}	Y nw xY w|	r|nt4          t6          _        |d         | _        | j        rt<          j        st3          d          d| _         |s	 t"          j!        }n# tD          $ r Y nw xY w|sd| _#        tH          | _%        ntM          j'        tP          |          }|t3          d|z            |)                                \  | _#        }}}| _%        | j%        *                                st3          d| j%        z            | j#        rE|r#| j#        dd         | _#        d| _        d| _         n | j        r|st3          d| j#        z            | j#        s| j        rdnd| _#        d| _         |d          dk    rd n|d          }tW          |d!         |d"         |t
          j,        d#$          5  | -                    |           d d d            d S # 1 swxY w Y   d S )%NrV   ro   rp   RUNSERVER_PLUS_SHOW_MESSAGESonceneverFT1rc   r@   werkzeugrl   rm   rn   r   )PdbMiddlewarez#django_pdb.middleware.PdbMiddleware
MIDDLEWAREc                     t                      rdd l}|}ndd l}|}t          d|d|t          j                   |                    |           d S )Nr   zException occured: z, )file)r   rm   rl   printrC   stderrpost_mortem)requestexc_type	exc_valuerL   rm   prl   s          r-   
postmortemz"Command.handle.<locals>.postmortem   sh    :: KKKAAJJJAXXXyyIPSPZ[[[[b!!!!!r.   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   rA   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).osenvirongetshow_startup_messagesr   r   r   r   r3   logging	getLoggersetLevelINFO
addHandler	propagatedjango_pdb.middlewarer   r   DEBUGrE   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   info	inner_run)r)   r*   optionsrV   ro   logredirect
werklogger
pdb_optionipdb_optionrn   r   
middlewaresettings_middlewarer   m_ipv4_ipv6_fqdnr   s                      r-   handlezCommand.handle   s   :&"#56x'')+8V)W)WD&&''-/Z^^<Z-[-[)[D&&(().D&&)-D&58
12VT[7=3IJJJJ%h// &z22
GL)))k***$
U^
foT]!	";;;;;;  <k <X^ <B
&-hd&K&K&jxOj#%888!"5u== <+
}<+++
|;+  4-2** 4-3*" " " "/  	 	 	 C[ CB C"  $B  C  C  CBBB	D CE4eJJJe1
+= 	E 	ECDDD 	#E!    	4DI$DIIX..Ay" $;=E$F G G G89

5DIueUDI9$$&& ."#C#'9$- . . .y 4 4 $	!B$DI$(DM%)DNN] 45 4&'J)-(3 4 4 4y 	"!%?KDI!DN">2a7744W^=T,w{7K`gh|`}  IQ  Z`  Ze  rB  C  C  C 	$ 	$NN7###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s6   *F! !!GGH# #
H0/H05NNNc                     t                      S )z/Return the default WSGI handler for the runner.r
   )r)   r*   r   s      r-   get_handlerzCommand.get_handler*  s    ,...r.   c                     fd}|S )Nc                     t          t                    r7t                              dt	                              }t          |          )Nr   )r   r   ansi_escapesubry   )envstart_responseerror_messageexcs      r-   applicationz.Command.get_error_handler.<locals>.application/  sB    #/00 6 +CHH = =&}555Ir.   r<   )r)   r   r   r   s    `  r-   get_error_handlerzCommand.get_error_handler.  s$    	 	 	 	 	 r.   c                 	   t           st          d          t          j        r6	 t	                       n&# t
          $ r | j        rt          d           Y nw xY w G f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           	  t          | j                  | j                    t          | j                                t          | j                  d3i }
nD# t
          $ r7}| j                            d|z  d            | j        |fi }
Y d }~nd }~ww xY wt*          r/d         }d         }|rt          j        s|rt-          |
          }
d         s	d         rt.          st          d          |                               \  }}t2          j                            |          \  }}t2          j                            |          \  }}	 t2          j                            |          r$t2          j                            |          r||f}n/t=          t2          j                            ||          d          }n*# t@          $ r | j        rt          d           d}Y nw xY wd }|rdndd | j!        s| j"        n	d!| j"        z  d"| j#        d#}| j        rct          d$tI          j%                    d%t          j&                   t          d&|           t          d'           t          d(|z             |rtO          j(        |           |rDt          j)        r8| xj        t          tU          d) tW                                          z  c_        tY          t          d*g           r'| xj        t          t          j-                  z  c_        |	t          tY          t          d+g                     z  }	|sd,t2          j.        d-<   t2          j.        /                    d-          d,k    r&| j        rd.t2          j.        d/<   ta          |
d0          }
tb          2                    | 1           tg          | j"        ti          | j#                  |
|d0| j        |	|||||2           d S )4Nz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                   "     e Zd Z fdZ xZS )-Command.inner_run.<locals>.WSGIRequestHandlerc                 f    t                                                      }d         sd|v r|d= |S )Nrq   zwerkzeug.server.shutdown)r%   make_environ)r)   r   r,   r   s     r-   r   z:Command.inner_run.<locals>.WSGIRequestHandler.make_environE  s@    ''..0089 <>X\c>c>c :;r.   )r3   r4   r5   r   r8   )r,   r   s   @r-   r   r   D  s>                 r.   r   rb   r`   ra   win32z	CONTROL-Cz
CTRL-BREAKrj   rk   r'   ri   rr   zPerforming system checks...
)display_num_errorsz Error occurred during checks: %rz

)endingrs   rt   rf   rg   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 z8Using the Werkzeug debugger (http://werkzeug.pocoo.org/)zQuit the server with %s.c                 F    t          |                               d          S )Nz.mo)ry   endswithr   s    r-   <lambda>z#Command.inner_run.<locals>.<lambda>  s    CMM<R<RSX<Y<Y r.   RUNSERVER_PLUS_EXTRA_FILESRUNSERVER_PLUS_EXCLUDE_PATTERNStrueWERKZEUG_RUN_MAINoffWERKZEUG_DEBUG_PINT)sender)	r`   use_debuggerr'   ri   rj   rk   rb   request_handlerssl_contextr<   )5HAS_WERKZEUGr   r   r   set_werkzeug_log_colorrB   r   r   _WSGIRequestHandlerrC   platformsetr'   rr   rQ   checkcheck_migrationsr   r   writer   r|   r   HAS_OPENSSLdetermine_ssl_files_pathsr   pathsplitsplitextexistsr   joinr   r   r   r   djangoget_versionSETTINGS_MODULE
webbrowseropenUSE_I18Nfilterr=   rE   r   r   r   r   runserver_plus_startedsendr   rw   )r)   r   r   rb   r`   ra   quit_commandrj   rk   ri   handlerr   rs   rt   certfilekeyfiledir_pathrootrJ   r   bind_urls    `                   r-   r   zCommand.inner_run8  s    	b   a  b  b  b > 	bb&(((( b b b- b`aaab	 	 	 	 	 	 	!4 	 	 	 :&~.~.&)lg&=&={{<#$780w}566w'9:;;W%
% 	31222	=$L$$8RSSSS/L.//1114l4#344??w??GG 	= 	= 	=K@3FvVVV,d,S<<G<<GGGGGG	=  	6!()=!>&'9:! 6x~ 69I 6,W55; 	7?#; 	 O" $N O O O !% > >w G GHgW]]844NHdg&&t,,GD!&7>>(++ cw0G0G c#+W"5KK"227<<$3O3OVa"b"b"bK & & &- ZXYYY%&
 K #.GG..0g		U[^b^gUg0g0gimiririrt % 	=Ef>P>R>R>R>RT\TlTlmnnnE88EFFFLMMM,|;<<< 	&OH%%% 	mH- 	mF+Y+Y[h[j[j$k$k l ll892>> 	IH$G H HHC2SUW X XYYY
  	5.4BJ*+ :>>-..&88z 938
/0)'488G##4#000I	NN%(-/'.#	
 	
 	
 	
 	
 	
s;   4  AA>AE 
F"-FFA2K	 	"K.-K.c                     |                     d          pd}|                     d          pd}|                     ||| j                  }|                     ||| j                  }||fS )Nrg   r   rf   )r   _determine_path_for_fileDEFAULT_CRT_EXTENSIONDEFAULT_KEY_EXTENSION)clsr   rg   rf   	cert_filekey_files         r-   r   z!Command.determine_ssl_files_paths  sm    O44:KK,,2	00M3Kdee	//y#Jcdd(""r.   c                     |                      ||          }|                     |          p|                     |          }|                     |          p|}t          j                            |||z             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	extensions          r-   r  z Command._determine_path_for_file  su    ;;<M__	&&'899`S=O=OP_=`=`	&&'899O=O	w||Iy9'<===r.   c                 |    |                      |          p'|                      |          pt          j                    S r$   )_get_directoryr   getcwd)r  r  r  s      r-   r  z+Command._get_directory_basing_on_file_paths  s9    !!"344j8J8J?8[8[j_a_h_j_jjr.   c                 L    t           j                            |          d         S )Nr   )r   r   r   r  	file_paths     r-   r!  zCommand._get_directory  s    w}}Y''**r.   c                     t           j                            t           j                            |          d                   d         S )Nr   r   )r   r   r   r   r$  s     r-   r  zCommand._get_file_name  s0    wi 8 8 ;<<Q??r.   c                 L    t           j                            |          d         S )Nr   )r   r   r   r$  s     r-   r  zCommand._get_extension  s    w	**1--r.   )r3   r4   r5   rY   rT   r   ry   __annotations__r  r  ru   r   r   r   r   r   classmethodr   r  r  r!  r  r  r8   r9   s   @r-   rS   rS      s`        =D )+DI***"":\ :\ :\ :\ :\x d$ d$ ]d$L/ / /  s
 s
 s
j # # [# > > [> k k [k + + [+ @ @ [@ . . [. . . . .r.   rS   c                  b    t                      t          j        fd} | t          _        dS )z%Try to set color to the werkzeug log.c                    	 |                                  d|                                 d||z  }t          |d                   }n# t          $ r  ||g|R  cY S w xY w|d         dk    r                    |          }n|d         dk    r                    |          }n|dk    r                    |          }nu|d         dk    r                    |          }nS|d	k    r                    |          }n7|d         d
k    r	                    |          }n
                    |          }t          ||           d S )Nz - - [z] r   r   2r   30434044)address_stringlog_date_time_stringry   rB   HTTP_SUCCESS	HTTP_INFOHTTP_NOT_MODIFIEDHTTP_REDIRECTHTTP_NOT_FOUNDHTTP_BAD_REQUESTHTTP_SERVER_ERRORr   )r)   re   messager*   msg	http_code	_orig_log_styles         r-   werk_logz(set_werkzeug_log_color.<locals>.werk_log  s   	3##%%%%))++++$C
 DGII 	3 	3 	39T72T222222	3 Q<3%%c**CCq\S  ""3''CC%**3//CCq\S  &&s++CC%'',,CCq\S  ))#..CC **3//CT3s   AA
 
A! A!N)r	   r   log)r?  r=  r>  s    @@r-   r   r     sD    ]]F#'I     > 'r.   )Qr   r   r   r   rC   rF   r  rO   typingr   r   r   django.confr   django.core.management.baser   r   r   django.core.management.colorr	   django.core.servers.basehttpr   django.dispatchr   django.utils.autoreloadr   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   rE   rz   r{   r   r3   r   r   r1   reloader_loopsitemsnamereloader_loop_klassr"   r=   rQ   rS   r   r<   r.   r-   <module>rY     s    				 				  



                                  S S S S S S S S S S 4 4 4 4 4 4 F F F F F F " " " " " " 0 0 0 0 0 0 4 4 4 4 4 4&(*AAAJJJJJJ   OOO	######222222JJJJJJ111111''''''""""""LL   LLLNNNKK   KKK X W W W W W e e e e e e e e e e e e U U U U U U   RZ 
 t 
 bj 
 Z
 
 #*785]_`#a#a  &wx1UW]^^ 		8	$	$suu  =%.%=%C%C%E%E = =!!	0 	0 	0 	0 	0"5 	0 	0 	0 *=	 &&* * *  2K. K. K. K. K.k K. K. K.\
$' $' $' $' $'s6   A1 1A;:A;?&B& &B0/B04B; ;CC