3
g"                 @   s   d 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 ddl	m
Z
 ddlmZ ddlmZ dZejd
Zdd Zdd ZG dd dejZG dd dejeZG dd dejZG dd	 d	ejZddefddZdS )a0  
HTTP server that implements the Python WSGI protocol (PEP 333, rev 1.21).

Based on wsgiref.simple_server which is part of the standard library since 2.5.

This is a simple server for use in testing or debugging Django apps. It hasn't
been reviewed for security issues. DON'T USE IT FOR PRODUCTION USE!
    N)simple_server)ImproperlyConfigured)LimitedStream)get_wsgi_application)import_string
WSGIServerWSGIRequestHandlerzdjango.serverc              C   sb   ddl m}  t| d}|dkr$t S yt|S  tk
r\ } ztd| |W Y dd}~X nX dS )aK  
    Load and return the WSGI application as configured by the user in
    ``settings.WSGI_APPLICATION``. With the default ``startproject`` layout,
    this will be the ``application`` object in ``projectname/wsgi.py``.

    This function, and the ``WSGI_APPLICATION`` setting itself, are only useful
    for Django's internal server (runserver); external WSGI servers should just
    be configured to point to the correct application object directly.

    If settings.WSGI_APPLICATION is not set (is ``None``), return
    whatever ``django.core.wsgi.get_wsgi_application`` returns.
    r   )settingsZWSGI_APPLICATIONNzBWSGI application '%s' could not be loaded; Error importing module.)Zdjango.confr	   getattrr   r   ImportErrorr   )r	   Zapp_patherr r   Z/var/www/tester-filtro-web/env/lib/python3.6/site-packages/django/core/servers/basehttp.pyget_internal_wsgi_application   s    
r   c              C   s   t j \} }}t| tttfS )N)sysexc_info
issubclassBrokenPipeErrorConnectionAbortedErrorConnectionResetError)exc_type_r   r   r   is_broken_pipe_error5   s
    r   c                   s8   e Zd ZdZdZddd fdd
Z fdd	Z  ZS )
r   z7BaseHTTPServer that implements the Python WSGI protocol
   FT)ipv6allow_reuse_addressc               s$   |rt j| _|| _t j|| d S )N)socketAF_INET6address_familyr   super__init__)selfr   r   argskwargs)	__class__r   r   r    C   s    zWSGIServer.__init__c                s&   t  rtjd| nt j|| d S )Nz- Broken pipe from %s
)r   loggerinfor   handle_error)r!   requestclient_address)r$   r   r   r'   I   s    zWSGIServer.handle_error)__name__
__module____qualname____doc__request_queue_sizer    r'   __classcell__r   r   )r$   r   r   >   s   c               @   s   e Zd ZdZdZdS )ThreadedWSGIServerz$A threaded version of the WSGIServerTN)r*   r+   r,   r-   daemon_threadsr   r   r   r   r0   P   s   r0   c                   sD   e Zd ZdZ fddZ fddZ fddZ fdd	Z  ZS )
ServerHandlerz1.1c                sP   yt |jd}W n ttfk
r.   d}Y nX t jt|||||f| dS )a#  
        Use a LimitedStream so that unread request data will be ignored at
        the end of the request. WSGIRequest uses a LimitedStream but it
        shouldn't discard the data since the upstream servers usually do this.
        This fix applies only for testserver/runserver.
        CONTENT_LENGTHr   N)intget
ValueError	TypeErrorr   r    r   )r!   stdinstdoutstderrenvironr#   content_length)r$   r   r   r    X   s
    
zServerHandler.__init__c                sV   t  j  d| jkr d| jd< nt| jjtjs:d| jd< | jjddkrRd| j_	d S )NzContent-Lengthclose
ConnectionT)
r   cleanup_headersheaders
isinstancerequest_handlerserversocketserverThreadingMixInr5   close_connection)r!   )r$   r   r   r?   e   s    


zServerHandler.cleanup_headersc                s   | j  j  t j  d S )N)Z	get_stdinZ_read_limitedr   r=   )r!   )r$   r   r   r=   t   s    zServerHandler.closec                s   t  st j  d S )N)r   r   r'   )r!   )r$   r   r   r'   x   s    zServerHandler.handle_error)	r*   r+   r,   http_versionr    r?   r=   r'   r/   r   r   )r$   r   r2   U   s
   r2   c                   s@   e Zd ZdZdd Zdd Z fddZdd	 Zd
d Z  Z	S )r   zHTTP/1.1c             C   s
   | j d S )Nr   )r)   )r!   r   r   r   address_string   s    z!WSGIRequestHandler.address_stringc             G   s   | j | j d}|d d dkrH|d jdrHd|d< tjd|d	 d S |d j rt|d d
krt|d }||d< |dkrtj}q|dkrtj}qtj	}ntj	}||f|d|i d S )N)r(   Zserver_time   r   4zi  status_codezOYou're accessing the development server over HTTPS, but it only supports HTTP.
)extra   i  rL   )
r(   Zlog_date_time_string
startswithr%   errorisdigitlenr4   warningr&   )r!   formatr"   rL   rK   levelr   r   r   log_message   s&    zWSGIRequestHandler.log_messagec                s*   x| j D ]}d|kr| j |= qW t j S )Nr   )r@   r   get_environ)r!   k)r$   r   r   rV      s    zWSGIRequestHandler.get_environc             C   sR   d| _ | j  x| j s | j  qW y| jjtj W n ttfk
rL   Y nX d S )NT)rF   handle_one_request
connectionshutdownr   SHUT_WRAttributeErrorOSError)r!   r   r   r   handle   s    zWSGIRequestHandler.handlec             C   s|   | j jd| _t| jdkr<d| _d| _d| _| jd dS | j sHdS t	| j | j
| j | j }| |_|j| jj  dS )zDCopy of WSGIRequestHandler.handle() but with different ServerHandleri  i    i  N)rfilereadlineZraw_requestlinerQ   ZrequestlineZrequest_versioncommandZ
send_errorZparse_requestr2   wfileZ
get_stderrrV   rB   runrC   Zget_app)r!   handlerr   r   r   rX      s    
z%WSGIRequestHandler.handle_one_request)
r*   r+   r,   Zprotocol_versionrH   rU   rV   r^   rX   r/   r   r   )r$   r   r   ~   s   
Fc       	      C   sR   | |f}|r t dtj|fi }n|}||t|d}|r<d|_|j| |j  d S )Nr   )r   T)typerD   rE   r   r1   Zset_appserve_forever)	addrportZwsgi_handlerr   	threadingZ
server_clsserver_addressZ	httpd_clsZhttpdr   r   r   rd      s    
rd   )r   r   )r-   loggingr   rD   r   wsgirefr   Zdjango.core.exceptionsr   Zdjango.core.handlers.wsgir   Zdjango.core.wsgir   Zdjango.utils.module_loadingr   __all__	getLoggerr%   r   r   r   rE   r0   r2   r   rd   r   r   r   r   <module>   s$   
	)N