a
    ÆZEgÛ_  ã                   @   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 ræd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l0m1Z1 d dl(m2Z2 dZ3W n e'�yz   dZ3Y n0 zd dl4Z4dZ5W n e'�y¤   dZ5Y n0 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ƒ ZMeeN d œd!d"„ZOe3�rle2jP Q¡ D ]$\ZRZSG d#d$„ d$eSƒZTeTe2jPeR< �qFd%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
    )
Z8000Z&RUNSERVERPLUS_POLLER_RELOADER_INTERVALé   Z"RUNSERVERPLUS_POLLER_RELOADER_TYPEÚauto)Úreturnc               	   C   sJ   t ƒ } tƒ D ]8}t |¡D ](\}}}|D ]}|  tj ||¡¡ q(qq| S ©N)Úsetr   ÚosÚwalkÚaddÚpathÚjoin)Ztemplate_listZtemplate_dirÚbase_dirÚ_Ú	filenamesÚfilename© r-   úm/var/www/sistema_ama/venv/lib/python3.9/site-packages/django_extensions/management/commands/runserver_plus.pyÚget_all_template_filesQ   s    
r/   c                       sR   e Zd Z‡ fdd„Zedd„ ƒZejdd„ ƒZeddœ‡ fdd	„Zd
d„ Z	‡  Z
S )ÚWrappedReloaderLoopc                    s&   t ƒ | _tƒ j|i |¤Ž | j| _d S r"   )r/   Ú_template_filesÚsuperÚ__init__Úextra_filesÚ_extra_files)ÚselfÚargsÚkwargs©Ú	__class__r-   r.   r3   `   s    zWrappedReloaderLoop.__init__c                 C   sd   t ƒ }t| jƒt|ƒkrP| | j¡}|D ] }tdd|› d�ƒ |  |¡ q(tƒ  || _| j t	|¡S )NÚinfoz * New file z added, reset template loaders)
r/   Úlenr1   Ú
differencer   Úregister_file_changedr   r5   ÚunionÚ_error_files)r6   Ztemplate_filesÚchangedr,   r-   r-   r.   r4   e   s    zWrappedReloaderLoop.extra_filesc                 C   s
   || _ d S r"   )r5   )r6   r4   r-   r-   r.   r4   w   s    N)r,   r!   c                    sV   t |ƒ}tj| |d�}tdd„ |D ƒƒs6tƒ  |¡ ntdd|›d�ƒ |  |¡ d S )N)ÚsenderÚ	file_pathc                 s   s   | ]}|d  V  qdS )r   Nr-   )Ú.0Úresr-   r-   r.   Ú	<genexpr>~   ó    z5WrappedReloaderLoop.trigger_reload.<locals>.<genexpr>r;   z * Detected change in z, reset template loaders)r   r   ÚsendÚanyr2   Útrigger_reloadr   r>   )r6   r,   r'   Úresultsr9   r-   r.   rJ   {   s    z"WrappedReloaderLoop.trigger_reloadc                 C   s$   t | dƒr t |¡j}|| j|< d S )NÚmtimes)Úhasattrr$   ÚstatÚst_mtimerL   )r6   r,   Úmtimer-   r-   r.   r>   „   s    
z)WrappedReloaderLoop.register_file_changed)Ú__name__Ú
__module__Ú__qualname__r3   Úpropertyr4   ÚsetterÚstrrJ   r>   Ú__classcell__r-   r-   r9   r.   r0   _   s   

	r0   c                   C   s
   t ƒ  ¡ S r"   )r   Zwatched_filesr-   r-   r-   r.   Úgen_filenamesŒ   s    rX   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 )Nr,   éÿÿÿÿr   )	Ú	ExceptionÚsysÚexc_infoÚgetattrÚ	tracebackÚ
extract_tbr,   r@   r&   )r7   r8   Ú
_exceptionr*   ZevÚtbr,   ©Úfnr-   r.   Úwrapper’   s    

zcheck_errors.<locals>.wrapper)Ú	functoolsÚwraps)rc   rd   r-   rb   r.   Úcheck_errors�   s    rg   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 )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Údefaultrm   z
--noreloadÚstore_falseÚuse_reloaderTz*Tells Django to NOT use the auto-reloader.z	--browserÚopen_browserzTells Django to open a browser.)rp   rq   rm   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).)rq   rr   rm   z--print-sqlz%Print SQL queries as they're executed)rp   rr   rm   z--truncate-sqlÚstorez/Truncate SQL queries to a number of characters.)rp   Útyperm   z--print-sql-locationz4Show location in code where SQL query generated fromz--certÚ	cert_pathz(Deprecated alias for --cert-file option.)rq   rp   ry   rm   z--cert-filezˆSSL .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_pathz‰SSL .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-filer4   ÚappendzQauto-reload whenever the given file changes too (can be specified multiple times))rq   rp   ry   rr   rm   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.)rq   rp   rr   rm   z--keep-meta-shutdownÚkeep_meta_shutdown_funcz¿Keep 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.)	r2   Úadd_argumentsÚadd_argumentÚintÚadd_mutually_exclusive_grouprV   Ú DEFAULT_POLLER_RELOADER_INTERVALÚDEFAULT_POLLER_RELOADER_TYPEÚUSE_STATICFILES)r6   ÚparserZ
cert_groupr9   r-   r.   r‰   ±   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æ|	rît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�r¤tj�s¤tdƒ‚d| _ |�sÐz
tj!}W n t"�yÎ   Y n0 |�säd| _#t$| _%nšt& '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�r’dnd | _#d| _ |d! dk�r°d n|d! }t+|d" |d# |tj,d$d%�� |  -|¡ W d   ƒ n1 �sö0    Y  d S )&Nrj   rƒ   r„   ZRUNSERVER_PLUS_SHOW_MESSAGESÚonceÚneverFTÚ1rw   ©r,   Úwerkzeugr€   r�   r‚   r   )ÚPdbMiddlewarezœdjango-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�   r€   Úprintr[   ÚstderrZpost_mortem)ÚrequestÚexc_typeÚ	exc_valuera   r�   Úpr€   r-   r-   r.   Ú
postmortem!  s    z"Command.handle.<locals>.postmortemro   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   rY   z!"%s" is not a valid IPv6 address.z::1z	127.0.0.1Ztruncate_sqlÚ	print_sqlÚprint_sql_locationZRUNSERVER_PLUS)r    r¡   ÚtruncateÚloggerZ
confprefix).r$   ÚenvironÚgetÚshow_startup_messagesr   r£   r™   r   rQ   ÚloggingÚ	getLoggerÚsetLevelÚINFOÚ
addHandlerÚ	propagateZdjango_pdb.middlewarer–   ÚImportErrorr   r   ÚDEBUGr]   ZMIDDLEWARE_CLASSESÚ
isinstanceÚtupleZalways_breakr   Údjango_views_debugZtechnical_500_responsero   ÚsocketÚhas_ipv6Ú	_raw_ipv6Z!RUNSERVERPLUS_SERVER_ADDRESS_PORTÚAttributeErrorÚaddrÚDEFAULT_PORTÚportÚreÚmatchÚ
naiveip_reÚgroupsÚisdigitr   r;   Ú	inner_run)r6   r7   Úoptionsrj   rƒ   ZlogredirectZ
werkloggerZ
pdb_optionZipdb_optionr‚   r–   Z
middlewareZsettings_middlewarerž   ÚmZ_ipv4Z_ipv6Z_fqdnr¢   r-   r-   r.   Úhandleí   s–    








ÿÿÿzCommand.handlec                 O   s   t ƒ S )z/Return the default WSGI handler for the runner.r
   )r6   r7   r¿   r-   r-   r.   Úget_handlerT  s    zCommand.get_handlerc                    s   ‡ fdd„}|S )Nc                    s*   t ˆ tƒr"t dtˆ ƒ¡}t|ƒ‚ˆ ‚d S )NrŸ   )r¯   r   Úansi_escapeÚsubrV   )ÚenvZstart_responseÚerror_message©Úexcr-   r.   ÚapplicationY  s    
z.Command.get_error_handler.<locals>.applicationr-   )r6   rÈ   r¿   rÉ   r-   rÇ   r.   Úget_error_handlerX  s    zCommand.get_error_handlerc                    sŒ  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 ƒ| _tˆ d ƒ}	ˆ d | _| jr¾tdƒ z6t| jƒ| jd� t| jƒƒ  t| jƒf i ˆ ¤Ž}
W nL t�y@ } z2| jjd| dd� | j|fi ˆ ¤Ž}
W Y d }~n
d }~0 0 t�rtˆ d }ˆ d }|�rttj�sl|�rtt|
ƒ}
ˆ d �sˆˆ d �r0t�s–tdƒ‚|  ˆ ¡\}}tj |¡\}}tj |¡\}}z@tj |¡�rìtj |¡�rì||f}nttj ||¡dd�}W n( t �y,   | j�r$tdƒ d}Y n0 nd }d|�r@dnd | j!�sP| j"nd!| j" | j#f }| j�r¢td"t$ %¡ tj&f ƒ td#|f ƒ td$ƒ td%| ƒ |�r²t' (|¡ |�rÞtj)�rÞ|  jtt*d&d'„ t+ƒ ƒƒO  _t,td(g ƒ�r |  jttj-ƒO  _|	tt,td)g ƒƒO }	|�s$d*tj.d+< tj. /d+¡d*k�rR| j�rHd,tj.d-< t0|
d.ƒ}
t1j2| d/� t3| j"t4| j#ƒ|
|d.| j|	|||||d0� d S )1Nz‰Werkzeug 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.shutdownZREMOTE_USER)r2   Úmake_environr$   Úgetenv)r6   r¤   Zremote_user)r:   r¿   r-   r.   rË   o  s    

z:Command.inner_run.<locals>.WSGIRequestHandler.make_environ)rQ   rR   rS   rË   rW   r-   ©r¿   r9   r.   r   n  s   r   rv   rt   ru   Úwin32z	CONTROL-Cz
CTRL-BREAKr~   r   r4   r}   r†   zPerforming system checks...
)Zdisplay_num_errorsz Error occurred during checks: %rz

)Úendingr‡   rˆ   rz   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.Z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)rV   Úendswithr”   r-   r-   r.   Ú<lambda>¶  rG   z#Command.inner_run.<locals>.<lambda>ÚRUNSERVER_PLUS_EXTRA_FILESZRUNSERVER_PLUS_EXCLUDE_PATTERNSÚtrueZWERKZEUG_RUN_MAINÚoffZWERKZEUG_DEBUG_PINT)rB   )	rt   Zuse_debuggerr4   r}   r~   r   rv   Zrequest_handlerÚssl_context)5ÚHAS_WERKZEUGr   r   r®   Úset_werkzeug_log_colorrZ   r¦   r˜   Ú_WSGIRequestHandlerr[   Úplatformr#   r4   r†   rg   ÚcheckZcheck_migrationsrÂ   r™   ÚwriterÊ   r�   r   ÚHAS_OPENSSLÚdetermine_ssl_files_pathsr$   r'   ÚsplitÚsplitextÚexistsr   r(   r­   r´   r¶   r¸   ÚdjangoÚget_versionZSETTINGS_MODULEÚ
webbrowserÚopenZUSE_I18NÚfilterrX   r]   rÖ   r¤   r¥   r   Úrunserver_plus_startedrH   r   r‹   )r6   r¿   r   rv   rt   ru   Zquit_commandr~   r   r}   ÚhandlerrÈ   r‡   rˆ   ÚcertfileÚkeyfileZdir_pathÚrootr*   rÙ   Zbind_urlr-   rÍ   r.   r¾   b  s¦    


(
&ÿ



ôzCommand.inner_runc                 C   sD   |  d¡pd}|  d¡pd}|  ||| j¡}|  ||| j¡}||fS )Nr{   rŸ   rz   )r¥   Ú_determine_path_for_fileÚDEFAULT_CRT_EXTENSIONÚDEFAULT_KEY_EXTENSION)Úclsr¿   r{   rz   Ú	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ò   rC   r-   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)rQ   rR   rS   rm   ri   r   rV   Ú__annotations__rð   rñ   r‰   r   rÁ   rÂ   rÊ   r¾   Úclassmethodrá   rï   rõ   rý   rö   r÷   rW   r-   r-   r9   r.   rh   ©   s,   
<
f
x




rh   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   Ú2r“   Z304Ú3Z404Ú4)Zaddress_stringZlog_date_time_stringrV   rZ   ZHTTP_SUCCESSZ	HTTP_INFOZHTTP_NOT_MODIFIEDZHTTP_REDIRECTZHTTP_NOT_FOUNDZHTTP_BAD_REQUESTZHTTP_SERVER_ERRORr   )r6   ry   Úmessager7   Ú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Û   )Yr§   r$   r¹   r²   r[   r^   rç   re   Úpathlibr   Útypingr   r   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.template.autoreloadr   r   Zdjango.utils.autoreloadr   r   Zdjango.viewsr   r±   ZINSTALLED_APPSr�   Z#django.contrib.staticfiles.handlersr   r­   r•   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·   r]   r�   rŽ   r¨   rQ   r£   r#   r@   rV   r/   Zreloader_loopsÚitemsÚnameZreloader_loop_klassr0   rX   rg   rh   rÛ   r-   r-   r-   r.   Ú<module>   s„   



û
ö
*  S