3
g_                 @   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" y$dej#krdZ$nd dl%m&Z& dZ$W n e'k
r   dZ$Y nX yPd 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'k
r~   dZ3Y nX yd dl4Z4dZ5W n e'k
r   dZ5Y nX d dl6m7Z7 d dl8m9Z9m:Z:m;Z;m<Z< d dl=m>Z> e Z?ej@dejAZBej@dejCZDdZEeFeddZGeFeddZHe jIeJZKeL ZMeeN d d!d"ZOe3rvx2e2jPjQ D ]$\ZRZSG d#d$ d$eSZTeTe2jPeR< qNW 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
    )
Z8000Z&RUNSERVERPLUS_POLLER_RELOADER_INTERVAL   Z"RUNSERVERPLUS_POLLER_RELOADER_TYPEauto)returnc              C   sV   t  } xJt D ]@}x:tj|D ],\}}}x |D ]}| jtjj|| q.W qW qW | S )N)setr   oswalkaddpathjoin)Ztemplate_listZtemplate_dirbase_dir_	filenamesfilename r+   r/var/www/tester-filtro-web/env/lib/python3.6/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|| | j| _d S )N)r-   _template_filessuper__init__extra_files_extra_files)selfargskwargs)	__class__r+   r,   r1   `   s    zWrappedReloaderLoop.__init__c             C   sh   t  }t| jt|krT|j| j}x(|D ] }tdd| d | j| q*W t  || _| jjt	|S )Ninfoz * New file z added, reset template loaders)
r-   lenr/   
differencer   register_file_changedr   r3   union_error_files)r4   Ztemplate_fileschangedr*   r+   r+   r,   r2   e   s    
zWrappedReloaderLoop.extra_filesc             C   s
   || _ d S )N)r3   )r4   r2   r+   r+   r,   r2   w   s    N)r*   r    c                sV   t |}tj| |d}tdd |D s6t j| ntdd|d | j| d S )N)sender	file_pathc             s   s   | ]}|d  V  qdS )r   Nr+   ).0resr+   r+   r,   	<genexpr>~   s    z5WrappedReloaderLoop.trigger_reload.<locals>.<genexpr>r8   z * Detected change in z, reset template loaders)r   r   sendanyr0   trigger_reloadr   r;   )r4   r*   r%   results)r7   r+   r,   rF   {   s    z"WrappedReloaderLoop.trigger_reloadc             C   s$   t | dr tj|j}|| j|< d S )Nmtimes)hasattrr"   statst_mtimerH   )r4   r*   mtimer+   r+   r,   r;      s    
z)WrappedReloaderLoop.register_file_changed)__name__
__module____qualname__r1   propertyr2   setterstrrF   r;   __classcell__r+   r+   )r7   r,   r.   _   s
   	r.   c               C   s
   t  j S )N)r   Zwatched_filesr+   r+   r+   r,   gen_filenames   s    rT   c                s   t j  fdd}|S )Nc                 st   y
 | |S  t k
rn   tj }|\}}}t|dd d krPtj|d d }n|j}|tkrhtj|  Y nX d S )Nr*   r   r   )		Exceptionsysexc_infogetattr	traceback
extract_tbr*   r=   r$   )r5   r6   
_exceptionr(   Zevtbr*   )fnr+   r,   wrapper   s    


zcheck_errors.<locals>.wrapper)	functoolswraps)r^   r_   r+   )r^   r,   check_errors   s    rb   c                   s   e Zd ZU dZg Zee 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.z.crtz.keyc                s  t  j| |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 }|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defaultrg   z
--noreloadstore_falseuse_reloaderTz*Tells Django to NOT use the auto-reloader.z	--browseropen_browserzTells Django to open a browser.)rj   rk   rg   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).)rk   rl   rg   z--print-sqlz%Print SQL queries as they're executed)rj   rl   rg   z--truncate-sqlstorez/Truncate SQL queries to a number of characters.)rj   typerg   z--print-sql-locationz4Show location in code where SQL query generated fromz--cert	cert_pathz(Deprecated alias for --cert-file option.)rk   rj   rs   rg   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-filer2   appendzQauto-reload whenever the given file changes too (can be specified multiple times))rk   rj   rs   rl   rg   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.)rk   rj   rl   rg   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.)	r0   add_argumentsadd_argumentintadd_mutually_exclusive_grouprR    DEFAULT_POLLER_RELOADER_INTERVALDEFAULT_POLLER_RELOADER_TYPEUSE_STATICFILES)r4   parserZ
cert_group)r7   r+   r,   r      sj    






zCommand.add_argumentsc             O   s  |d }|d }|dkr(t jjd| _n0|dkrBt jjd | _n|dkrRd| _nd| _d	t jd< tt| j|d
 d tt}t	j
d}|jt	j |j| d|_|d }|d }|d }	yddlm}
 W n, tk
r   |s|s|	rtdd}	Y n|X |s|stjrRd}ttdd p$tj}||krRt|trH||f7 }n
||g7 }|r`d|
_n|rld|
_dd }|	r~|ntt_|d | _| jrtj rtdd| _ |sy
tj!}W n t"k
r   Y nX |sd| _#t$| _%nt&j't(|}|d krtd| |j) \| _#}}}| _%| j%j* s<td| j% | j#r|rh| j#dd% | _#d| _d| _ n| jr| rtd| j# | j#s| jrdnd| _#d| _ |d  dkrd n|d  }t+|d! |d" |tj,d#d$ | j-| W d Q R X d S )&Nrd   r}   r~   ZRUNSERVER_PLUS_SHOW_MESSAGESonceZneverFT1rq   )r*   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 |j| d S )Nr   zException occured: %s, %s)file)r   r{   rz   printrW   stderrZpost_mortem)requestexc_type	exc_valuer]   r{   prz   r+   r+   r,   
postmortem!  s    z"Command.handle.<locals>.postmortemri   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   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
confprefixrU   ).r"   environgetshow_startup_messagesr   r   r   r   rM   logging	getLoggersetLevelINFO
addHandler	propagateZdjango_pdb.middlewarer   ImportErrorr   r   DEBUGrY   ZMIDDLEWARE_CLASSES
isinstancetupleZalways_breakr   django_views_debugZtechnical_500_responseri   sockethas_ipv6	_raw_ipv6Z!RUNSERVERPLUS_SERVER_ADDRESS_PORTAttributeErroraddrDEFAULT_PORTportrematch
naiveip_regroupsisdigitr   r8   	inner_run)r4   r5   optionsrd   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
   )r4   r5   r   r+   r+   r,   get_handlerT  s    zCommand.get_handlerc                s    fdd}|S )Nc                s*   t  tr"tjdt }t| d S )Nr   )r   r   ansi_escapesubrR   )envZstart_responseerror_message)excr+   r,   applicationY  s    
z.Command.get_error_handler.<locals>.applicationr+   )r4   r   r   r   r+   )r   r,   get_error_handlerX  s    zCommand.get_error_handlerc          ,      s  t stdtjr@y
t  W n" tk
r>   | jr:td Y nX G  fdddt} d } d } d }t	j
dkrzd	nd
} d } d }t d | _t d }	 d | _| jrtd y2t| j| jd t| j  t| jf  }
W nF tk
r8 } z(| jjd| dd | j|f }
W Y d d }~X nX trl d } d }|rltjsd|rlt|
}
 d s d r*tstd| j \}}tjj|\}}tjj|\}}y@tjj|rtjj|r||f}nttjj||dd}W n* t k
r&   | jrtd d}Y nX nd }d|r:dnd | j!sJ| j"nd!| j" | j#f }| jrtd"t$j% tj&f  td#|f  td$ td%|  |rt'j(| |rt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.j/d+d*krL| jrBd,tj.d-< t0|
d.}
t1j2| d/ t3| j"t4| j#|
|d.| j|	|||||d0 d S )1NzWerkzeug 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  j }d  r"d|kr"|d= tjd}|d k	r<||d< |S )Nr   zwerkzeug.server.shutdownZREMOTE_USER)r0   make_environr"   getenv)r4   r   Zremote_user)r7   r   r+   r,   r   o  s    

z:Command.inner_run.<locals>.WSGIRequestHandler.make_environ)rM   rN   rO   r   rS   r+   )r   )r7   r,   r   n  s   r   rp   rn   ro   win32z	CONTROL-Cz
CTRL-BREAKrx   ry   r2   rw   r   zPerforming system checks...
)Zdisplay_num_errorsz Error occurred during checks: %rz

)endingr   r   rt   ru   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 | jdS )Nz.mo)rR   endswith)r*   r+   r+   r,   <lambda>  s    z#Command.inner_run.<locals>.<lambda>RUNSERVER_PLUS_EXTRA_FILESZRUNSERVER_PLUS_EXCLUDE_PATTERNStrueZWERKZEUG_RUN_MAINoffZWERKZEUG_DEBUG_PINT)r?   )	rn   Zuse_debuggerr2   rw   rx   ry   rp   Zrequest_handlerssl_context)5HAS_WERKZEUGr   r   r   set_werkzeug_log_colorrV   r   r   _WSGIRequestHandlerrW   platformr!   r2   r   rb   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filterrT   rY   r   r   r   r   runserver_plus_startedrD   r   r   )r4   r   r   rp   rn   ro   Zquit_commandrx   ry   rw   handlerr   r   r   certfilekeyfileZdir_pathrootr(   r   Zbind_urlr+   )r   r,   r   b  s    


 
,



zCommand.inner_runc             C   sD   |j dpd}|j dpd}| j||| j}| j||| j}||fS )Nru   r   rt   )r   _determine_path_for_fileDEFAULT_CRT_EXTENSIONDEFAULT_KEY_EXTENSION)clsr   ru   rt   	cert_filekey_filer+   r+   r,   r     s
    z!Command.determine_ssl_files_pathsc             C   s@   | j ||}| j|p| j|}| j|p,|}tjj||| S )N)#_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   | j |p| j |ptj S )N)_get_directoryr"   getcwd)r   r   r   r+   r+   r,   r     s    z+Command._get_directory_basing_on_file_pathsc             C   s   t jj|d S )Nr   )r"   r%   r   )r   r@   r+   r+   r,   r     s    zCommand._get_directoryc             C   s   t jjt jj|d d S )Nr   r   )r"   r%   r   r   )r   r@   r+   r+   r,   r     s    zCommand._get_file_namec             C   s   t jj|d S )Nr   )r"   r%   r   )r   r@   r+   r+   r,   r     s    zCommand._get_extension)rM   rN   rO   rg   Zrequires_system_checksr   rR   r   r   r   r   r   r   r   r   classmethodr   r   r   r   r   r   rS   r+   r+   )r7   r,   rc      s   
<g
xrc   c                 s$   t  tj  fdd} | t_dS )z%Try to set color to the werkzeug log.c                s   y*d| j  | j || f }t|d }W n  tk
rJ    ||f| S X |d dkrdj|}nz|d dkr|j|}nb|dkrj|}nN|d dkrj|}n6|dkrj|}n"|d d	krԈj	|}n
j
|}t|| d S )
Nz%s - - [%s] %sr   r   2r   Z3043Z4044)Zaddress_stringZlog_date_time_stringrR   rV   ZHTTP_SUCCESSZ	HTTP_INFOZHTTP_NOT_MODIFIEDZHTTP_REDIRECTZHTTP_NOT_FOUNDZHTTP_BAD_REQUESTZHTTP_SERVER_ERRORr   )r4   rs   messager5   msgZ	http_code)	_orig_log_styler+   r,   werk_log  s,    
z(set_werkzeug_log_color.<locals>.werk_logN)r	   r   log)r   r+   )r   r   r,   r     s    r   )Yr   r"   r   r   rW   rZ   r   r`   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   rY   r   r   r   rM   r   r!   r=   rR   r-   Zreloader_loopsitemsnameZreloader_loop_klassr.   rT   rb   rc   r   r+   r+   r+   r,   <module>   s   







*  S