
TQc           @  s  d  d l  m 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  d l m Z d  d	 l m Z d  d
 l m Z m Z m Z e j d  Z i5 d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d  d! 6d" d# 6d$ d% 6d& d' 6d( d) 6d* d+ 6d, d- 6d. d/ 6d0 d1 6d2 d3 6d4 d5 6d6 d7 6d8 d9 6d: d; 6d< d= 6d> d? 6d@ dA 6dB dC 6dD dE 6dF dG 6dH dI 6dJ dK 6dL dM 6dN dO 6dP dQ 6dR dS 6dT dU 6dV dW 6dX dY 6dZ d[ 6d\ d] 6d^ d_ 6d` da 6db dc 6dd de 6df dg 6dh di 6dj dk 6dl dm 6dn do 6dp dq 6dr ds 6dt du 6Z dv e f dw     YZ dx e
 j f dy     YZ dz e j f d{     YZ d S(|   i(   t   unicode_literalsN(   t   BytesIO(   t   Lock(   t   http(   t   signals(   t   base(   t   set_script_prefix(   t   datastructures(   t	   force_strt
   force_textt
   iri_to_uriu   django.requestu   CONTINUEid   u   SWITCHING PROTOCOLSie   u
   PROCESSINGif   u   OKi   u   CREATEDi   u   ACCEPTEDi   u   NON-AUTHORITATIVE INFORMATIONi   u
   NO CONTENTi   u   RESET CONTENTi   u   PARTIAL CONTENTi   u   MULTI-STATUSi   u   ALREADY REPORTEDi   u   IM USEDi   u   MULTIPLE CHOICESi,  u   MOVED PERMANENTLYi-  u   FOUNDi.  u	   SEE OTHERi/  u   NOT MODIFIEDi0  u	   USE PROXYi1  u   RESERVEDi2  u   TEMPORARY REDIRECTi3  u   BAD REQUESTi  u   UNAUTHORIZEDi  u   PAYMENT REQUIREDi  u	   FORBIDDENi  u	   NOT FOUNDi  u   METHOD NOT ALLOWEDi  u   NOT ACCEPTABLEi  u   PROXY AUTHENTICATION REQUIREDi  u   REQUEST TIMEOUTi  u   CONFLICTi  u   GONEi  u   LENGTH REQUIREDi  u   PRECONDITION FAILEDi  u   REQUEST ENTITY TOO LARGEi  u   REQUEST-URI TOO LONGi  u   UNSUPPORTED MEDIA TYPEi  u   REQUESTED RANGE NOT SATISFIABLEi  u   EXPECTATION FAILEDi  u   UNPROCESSABLE ENTITYi  u   LOCKEDi  u   FAILED DEPENDENCYi  u   UPGRADE REQUIREDi  u   INTERNAL SERVER ERRORi  u   NOT IMPLEMENTEDi  u   BAD GATEWAYi  u   SERVICE UNAVAILABLEi  u   GATEWAY TIMEOUTi  u   HTTP VERSION NOT SUPPORTEDi  u   VARIANT ALSO NEGOTIATESi  u   INSUFFICIENT STORAGEi  u   LOOP DETECTEDi  u   NOT EXTENDEDi  t   LimitedStreamc           B  s>   e  Z d  Z d d  Z d	 d  Z d	 d  Z d	 d  Z RS(
   uv   
    LimitedStream wraps another stream in order to not allow reading from it
    past specified amount of bytes.
    i@   i   c         C  s(   | |  _  | |  _ d |  _ | |  _ d  S(   Nt    (   t   streamt	   remainingt   buffert   buf_size(   t   selfR   t   limitR   (    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyt   __init__Q   s    			c         C  sb   | d  k s | |  j k r' |  j } n  | d k r7 d S|  j j |  } |  j t |  8_ | S(   Ni    R   (   t   NoneR   R   t   readt   len(   R   t   sizet   result(    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyt   _read_limitedW   s    c         C  s   | d  k r+ |  j |  j   } d |  _ na | t |  j  k  r` |  j |  } |  j | |  _ n, |  j |  j | t |  j   } d |  _ | S(   NR   (   R   R   R   R   (   R   R   R   (    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyR   `   s    #	c         C  s   x~ d |  j  k r | d  k s3 t |  j   | k  r | rX |  j | t |  j    } n |  j   } | sn Pn  |  j  | 7_  q Wt |  j   } | r | j |  } n | j   } | j   |  _  | S(   Ns   
(   R   R   R   R   R   t   readlineR   (   R   R   t   chunkt   siot   line(    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyR   l   s    !i   i   N(   t   __name__t
   __module__t   __doc__R   R   R   R   R   (    (    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyR   L   s
   	t   WSGIRequestc           B  s   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z e e e  Z e e e	  Z e e
 e  Z e e  Z e e  Z RS(   c         C  si  t  j |  } t  j |  } | s1 | | k r: d } n  | |  _ | |  _ d | | f |  _ | |  _ | |  j d <| |  j d <| d j   |  _ |  j	 |  j j
 d d   \ } } d | k r y t j | d  Wn t k
 r q X| d |  _ n  t |  _ y t |  j j
 d	   } Wn t t f k
 rBd
 } n Xt |  j d |  |  _ t |  _ d  S(   Nu   /u   %s%su	   PATH_INFOu   SCRIPT_NAMEu   REQUEST_METHODu   CONTENT_TYPEu    u   charsetu   CONTENT_LENGTHi    u
   wsgi.input(   R   t   get_script_namet   get_path_infot   environt	   path_infot   patht   METAt   uppert   methodt   _parse_content_typet   gett   codecst   lookupt   LookupErrort   encodingt   Falset   _post_parse_errort   intt
   ValueErrort	   TypeErrorR   t   _streamt   _read_started(   R   R$   t   script_nameR%   t   _t   content_paramst   content_length(    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyR      s2    				$	
c         C  s    d |  j  k o |  j  d d k S(   Nu   wsgi.url_schemeu   https(   R$   (   R   (    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyt
   _is_secure   s    c   	      C  sj   | j  d  \ } } } i  } x? | j d  D]. } | j   j  d  \ } } } | | | <q. W| | f S(   u   
        Media Types parsing according to RFC 2616, section 3.7.

        Returns the data type and parameters. For example:
        Input: "text/plain; charset=iso-8859-1"
        Output: ('text/plain', {'charset': 'iso-8859-1'})
        u   ;u   =(   t	   partitiont   splitt   strip(	   R   t   ctypet   content_typeR8   t   paramsR9   t	   parametert   kt   v(    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyR*      s    c         C  s4   t  |  d  s- t j |  j |  j  |  _ n  |  j S(   Nu   _request(   t   hasattrR   t	   MergeDictt   POSTt   GETt   _request(   R   (    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyt   _get_request   s    c         C  sC   t  |  d  s< t j |  j j d d  d |  j |  _ n  |  j S(   Nu   _getu   QUERY_STRINGu    R/   (   RE   R   t	   QueryDictR$   R+   t	   _encodingt   _get(   R   (    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyt   _get_get   s    -c         C  s   | |  _  d  S(   N(   RM   (   R   R+   (    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyt   _set_get   s    c         C  s#   t  |  d  s |  j   n  |  j S(   Nu   _post(   RE   t   _load_post_and_filest   _post(   R   (    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyt	   _get_post   s    c         C  s   | |  _  d  S(   N(   RQ   (   R   t   post(    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyt	   _set_post   s    c         C  s:   t  |  d  s3 t j |  j j d d   |  _ n  |  j S(   Nu   _cookiesu   HTTP_COOKIEu    (   RE   R   t   parse_cookieR$   R+   t   _cookies(   R   (    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyt   _get_cookies   s    $c         C  s   | |  _  d  S(   N(   RV   (   R   t   cookies(    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyt   _set_cookies   s    c         C  s#   t  |  d  s |  j   n  |  j S(   Nu   _files(   RE   RP   t   _files(   R   (    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyt
   _get_files   s    (   R   R   R   R;   R*   RJ   RN   RO   RR   RT   RW   RY   R[   t   propertyRH   RG   t   COOKIESt   FILESt   REQUEST(    (    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyR!      s    	#										t   WSGIHandlerc           B  s    e  Z e   Z e Z d    Z RS(   c      	   C  s  |  j  d  k rX |  j ; y  |  j  d  k r8 |  j   n  Wn d  |  _    n XWd  QXn  t t j |   t j j	 d |  j
  y |  j |  } WnC t k
 r t j d d t j   d i d d 6t j   } n X|  j |  } |  j
 | _ y t | j } Wn t k
 rd } n Xd | j | f } g  | j   D]$ \ } } t |  t |  f ^ q@}	 xB | j j   D]1 }
 |	 j t d	  t |
 j d
 d   f  qzW| t |  |	  | S(   Nt   senderu    Bad Request (UnicodeDecodeError)t   exc_infot   extrai  u   status_codeu   UNKNOWN STATUS CODEu   %s %su
   Set-Cookiet   headeru    (   t   _request_middlewareR   t   initLockt   load_middlewareR   R   R"   R   t   request_startedt   sendt	   __class__t   request_classt   UnicodeDecodeErrort   loggert   warningt   sysRb   R   t   HttpResponseBadRequestt   get_responset   _handler_classt   STATUS_CODE_TEXTt   status_codet   KeyErrort   itemst   strRX   t   valuest   appendt   outputR   (   R   R$   t   start_responset   requestt   responset   status_textt   statusRC   RD   t   response_headerst   c(    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyt   __call__   s<    
	
7/(   R   R   R   Rf   R!   Rk   R   (    (    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyR`      s   	(    t
   __future__R    R,   t   loggingRo   t   ioR   t	   threadingR   t   djangoR   t   django.coreR   t   django.core.handlersR   t   django.core.urlresolversR   t   django.utilsR   t   django.utils.encodingR   R	   R
   t	   getLoggerRm   Rs   t   objectR   t   HttpRequestR!   t   BaseHandlerR`   (    (    (    s2   ../Django//lib/python/django/core/handlers/wsgi.pyt   <module>   s   
4`