
 X*                 @   s  d  d l  m 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 m Z d  d l m Z 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 m Z e j d  Z Gd d   d e   Z! d S)    )unicode_literalsN)settings)signals)ImproperlyConfiguredMiddlewareNotUsed)connectionstransaction)get_resolverget_urlconfset_urlconf)six)RemovedInDjango20Warning)import_string   )convert_exception_to_responseget_exception_responsehandle_uncaught_exceptionzdjango.requestc               @   s|   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d d   Z
 d d   Z d S)BaseHandlerc             C   s:   d  |  _  d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  S)N)_request_middleware_view_middleware_template_response_middleware_response_middleware_exception_middleware_middleware_chain)self r   G/home/ubuntu/projects/ifolica/build/django/django/core/handlers/base.py__init__   s    					zBaseHandler.__init__c             C   s  g  |  _  g  |  _ g  |  _ g  |  _ g  |  _ t j d k rt j d t	  t
 |  j  } xt j D]M} t |  } y |   } Wni t k
 r } zI t j r t j |  r t j d | |  q t j d |  n  we WYd d } ~ Xn Xt | d  r|  j  j | j  n  t | d  r:|  j j | j  n  t | d  rb|  j j d | j  n  t | d	  r|  j j d | j  n  t | d
  re |  j j d | j  qe qe WnNt
 |  j  } x<t t j  D]+} t |  } y | |  } Wni t k
 re} zI t j rPt j |  r=t j d | |  qPt j d |  n  wWYd d } ~ Xn X| d k rt d |   n  t | d  r|  j j d | j  n  t | d  r|  j j | j  n  t | d
  r|  j j | j  n  t
 |  } qW| |  _ d S)z
        Populate middleware lists from settings.MIDDLEWARE (or the deprecated
        MIDDLEWARE_CLASSES).

        Must be called after the environment is fixed (see __call__ in subclasses).
        NzOld-style middleware using settings.MIDDLEWARE_CLASSES is deprecated. Update your middleware and use settings.MIDDLEWARE instead.zMiddlewareNotUsed(%r): %szMiddlewareNotUsed: %rprocess_requestprocess_viewprocess_template_responser   process_responseprocess_exceptionz$Middleware factory %s returned None.) r   r   r   r   r   r   Z
MIDDLEWAREwarningswarnr   r   _legacy_get_responseZMIDDLEWARE_CLASSESr   r   DEBUGr   	text_typeloggerdebughasattrappendr   r   insertr    r!   r"   _get_responsereversedr   r   )r   handlerZmiddleware_pathZmw_classZmw_instanceexcZ
middlewarer   r   r   load_middleware#   sh    						 	zBaseHandler.load_middlewarec             C   sj   t  | d t    } xN t j   D]@ } | j d r" | j | k r" t j d | j  |  } q" q" W| S)NZ_non_atomic_requestsZATOMIC_REQUESTSZusing)getattrsetr   allZsettings_dictaliasr   Zatomic)r   ZviewZnon_atomic_requestsdbr   r   r   make_view_atomicm   s
    "zBaseHandler.make_view_atomicc             C   s   t  | | | | |  j  S)N)r   	__class__)r   requestresolverstatus_code	exceptionr   r   r   r   t   s    z"BaseHandler.get_exception_responsec             C   sG  t  t j  |  j |  } yO xH |  j D]= } | | |  } | d k r) t d | j j j   q) q) WWnR t	 k
 r t
 j j d |  j d |  |  j | t t    t j    } Yn X| j j |  t | d d  r
t t | d d   r
| j   } n  | j d k rCt j d	 | j d
 i d d 6| d 6n  | S)z8Return an HttpResponse object for the given HttpRequest.NzS%s.process_response didn't return an HttpResponse object. It returned None instead.Zsenderr9   Zis_renderedTrenderi  zNot Found: %sextrar;   )r   r   ZROOT_URLCONFr   r   
ValueError__self__r8   __name__	Exceptionr   Zgot_request_exceptionsendr   r	   r
   sysexc_infoZ_closable_objectsr+   r2   callabler=   r;   r(   warningpath)r   r9   responsemiddleware_methodr   r   r   get_responsew   s(    )+zBaseHandler.get_responsec             C   s  d } t  | d  r7 | j } t |  t |  } n	 t   } | j | j  } | \ } } } | | _ x0 |  j D]% }	 |	 | | | |  } | rt Pqt qt W| d k r|  j |  }
 y |
 | | |  } Wqt	 k
 r} z |  j
 | |  } WYd d } ~ XqXn  | d k rat | t j  r5| j } n | j j d } t d | j | f   n t  | d  rt | j  rxH |  j D]= }	 |	 | |  } | d k rt d |	 j j j   qqWy | j   } Wqt	 k
 r} z |  j
 | |  } WYd d } ~ XqXn  | S)z
        Resolve and call the view, then apply view, exception, and
        template_response middleware. This method is everything that happens
        inside the request/response middleware.
        Nurlconfz	.__call__zNThe view %s.%s didn't return an HttpResponse object. It returned None instead.r=   z\%s.process_template_response didn't return an HttpResponse object. It returned None instead.)r*   rL   r   r	   resolveZ	path_inforesolver_matchr   r7   rB   process_exception_by_middleware
isinstancetypesFunctionTyperA   r8   r?   
__module__rF   r=   r   r@   )r   r9   rI   rL   r:   rN   callbackcallback_argscallback_kwargsrJ   Zwrapped_callbackeZ	view_namer   r   r   r-      sL    	
		((zBaseHandler._get_responsec             C   s4   x* |  j  D] } | | |  } | r
 | Sq
 W  d S)z
        Pass the exception to the exception middleware. If no middleware
        return a response for this exception, raise it.
        N)r   )r   r<   r9   rJ   rI   r   r   r   rO      s
    z+BaseHandler.process_exception_by_middlewarec             C   s   t  | | |  S)z9Allow subclasses to override uncaught exception handling.)r   )r   r9   r:   rE   r   r   r   r      s    z%BaseHandler.handle_uncaught_exceptionc             C   sR   d } x' |  j  D] } | |  } | r Pq q W| d k rN |  j |  } n  | S)z
        Apply process_request() middleware and call the main _get_response(),
        if needed. Used only for legacy MIDDLEWARE_CLASSES.
        N)r   r-   )r   r9   rI   rJ   r   r   r   r%      s    z BaseHandler._legacy_get_responseN)rA   rS   __qualname__r   r1   r7   r   rK   r-   rO   r   r%   r   r   r   r   r      s   J&@r   )"
__future__r   loggingrD   rQ   r#   Zdjango.confr   Zdjango.corer   Zdjango.core.exceptionsr   r   Z	django.dbr   r   Zdjango.urlsr	   r
   r   Zdjango.utilsr   Zdjango.utils.deprecationr   Zdjango.utils.module_loadingr   r<   r   r   r   	getLoggerr(   objectr   r   r   r   r   <module>   s   