
TRNc           @   s(  d  d l  m Z d  d l m Z y d  d l m Z Wn! e k
 rW d  d l m Z n Xd  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 i) 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- 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[ 6Z de d^ d_  Z d` e j f da     YZ db e j f dc     YZ dd S(f   i(   t   Lock(   t   pformat(   t   StringIO(   t   http(   t   signals(   t   base(   t   set_script_prefix(   t   datastructures(   t   force_unicodet
   iri_to_urit   CONTINUEid   s   SWITCHING PROTOCOLSie   t   OKi   t   CREATEDi   t   ACCEPTEDi   s   NON-AUTHORITATIVE INFORMATIONi   s
   NO CONTENTi   s   RESET CONTENTi   s   PARTIAL CONTENTi   s   MULTIPLE CHOICESi,  s   MOVED PERMANENTLYi-  t   FOUNDi.  s	   SEE OTHERi/  s   NOT MODIFIEDi0  s	   USE PROXYi1  t   RESERVEDi2  s   TEMPORARY REDIRECTi3  s   BAD REQUESTi  t   UNAUTHORIZEDi  s   PAYMENT REQUIREDi  t	   FORBIDDENi  s	   NOT FOUNDi  s   METHOD NOT ALLOWEDi  s   NOT ACCEPTABLEi  s   PROXY AUTHENTICATION REQUIREDi  s   REQUEST TIMEOUTi  t   CONFLICTi  t   GONEi  s   LENGTH REQUIREDi  s   PRECONDITION FAILEDi  s   REQUEST ENTITY TOO LARGEi  s   REQUEST-URI TOO LONGi  s   UNSUPPORTED MEDIA TYPEi  s   REQUESTED RANGE NOT SATISFIABLEi  s   EXPECTATION FAILEDi  s   INTERNAL SERVER ERRORi  s   NOT IMPLEMENTEDi  s   BAD GATEWAYi  s   SERVICE UNAVAILABLEi  s   GATEWAY TIMEOUTi  s   HTTP VERSION NOT SUPPORTEDi  i   i   i    c         C   s`   | s
 d SxO | d k r[ |  j  t | |   } | s; Pn  | j |  | t |  8} q Wd S(   s   
    A version of shutil.copyfileobj that will not read more than 'size' bytes.
    This makes it safe from clients sending more than CONTENT_LENGTH bytes of
    data in the body.
    Ni    (   t   readt   mint   writet   len(   t   fsrct   fdstt   lengtht   sizet   buf(    (    sF   /home/panlixing/Python_Projects/gaeseries/django/core/handlers/wsgi.pyt   safe_copyfileobj<   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 d   Z d   Z d   Z e e e	  Z e e
 e  Z e e e  Z e e  Z e e  Z e e  Z RS(   c         C   s   t  j |  } t | j d d   } | s: | | k rC d } n  | |  _ | |  _ d | | f |  _ | |  _ | |  j d <| |  j d <| d j   |  _	 t
 |  _ d  S(   Nt	   PATH_INFOu   /s   %s%st   SCRIPT_NAMEt   REQUEST_METHOD(   R   t   get_script_nameR   t   gett   environt	   path_infot   patht   METAt   uppert   methodt   Falset   _post_parse_error(   t   selfR$   t   script_nameR%   (    (    sF   /home/panlixing/Python_Projects/gaeseries/django/core/handlers/wsgi.pyt   __init__L   s    				c         C   s   y t  |  j  } Wn d } n X|  j r5 d } n# y t  |  j  } Wn d } n Xy t  |  j  } Wn d } n Xy t  |  j  } Wn d } n Xd | | | | f S(   Ns   <could not parse>s2   <WSGIRequest
GET:%s,
POST:%s,
COOKIES:%s,
META:%s>(   R   t   GETR+   t   POSTt   COOKIESR'   (   R,   R#   t   postt   cookiest   meta(    (    sF   /home/panlixing/Python_Projects/gaeseries/django/core/handlers/wsgi.pyt   __repr__a   s(    
		


c         C   sE   d |  j  |  j j d d  r= d t |  j j d d   p@ d f S(   Ns   %s%st   QUERY_STRINGt    t   ?(   R&   R$   R#   R	   (   R,   (    (    sF   /home/panlixing/Python_Projects/gaeseries/django/core/handlers/wsgi.pyt   get_full_pathz   s    c         C   s    d |  j  k o |  j  d d k S(   Ns   wsgi.url_schemet   https(   R$   (   R,   (    (    sF   /home/panlixing/Python_Projects/gaeseries/django/core/handlers/wsgi.pyt	   is_secure   s    c         C   s   |  j  d k r |  j j d d  j d  r d |  _ y, |  j |  j |  j d  \ |  _ |  _ Wq t	 j
 d  |  _ t j   |  _ t |  _   q Xq t	 j
 |  j d |  j t j   |  _ |  _ n+ t	 j
 d d |  j t j   |  _ |  _ d  S(   NR0   t   CONTENT_TYPER7   t	   multiparts
   wsgi.inputt   encoding(   R)   R$   R#   t
   startswitht   _raw_post_datat   parse_file_uploadR'   t   _postt   _filesR   t	   QueryDictR   t   MultiValueDictt   TrueR+   t   raw_post_datat	   _encoding(   R,   (    (    sF   /home/panlixing/Python_Projects/gaeseries/django/core/handlers/wsgi.pyt   _load_post_and_files   s    	,	
1c         C   s4   t  |  d  s- t j |  j |  j  |  _ n  |  j S(   Nt   _request(   t   hasattrR   t	   MergeDictR0   R/   RJ   (   R,   (    (    sF   /home/panlixing/Python_Projects/gaeseries/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(   Nt   _getR6   R7   R>   (   RK   R   RD   R$   R#   RH   RN   (   R,   (    (    sF   /home/panlixing/Python_Projects/gaeseries/django/core/handlers/wsgi.pyt   _get_get   s    -c         C   s   | |  _  d  S(   N(   RN   (   R,   R#   (    (    sF   /home/panlixing/Python_Projects/gaeseries/django/core/handlers/wsgi.pyt   _set_get   s    c         C   s#   t  |  d  s |  j   n  |  j S(   NRB   (   RK   RI   RB   (   R,   (    (    sF   /home/panlixing/Python_Projects/gaeseries/django/core/handlers/wsgi.pyt	   _get_post   s    c         C   s   | |  _  d  S(   N(   RB   (   R,   R2   (    (    sF   /home/panlixing/Python_Projects/gaeseries/django/core/handlers/wsgi.pyt	   _set_post   s    c         C   s:   t  |  d  s3 t j |  j j d d   |  _ n  |  j S(   Nt   _cookiest   HTTP_COOKIER7   (   RK   R   t   parse_cookieR$   R#   RS   (   R,   (    (    sF   /home/panlixing/Python_Projects/gaeseries/django/core/handlers/wsgi.pyt   _get_cookies   s    $c         C   s   | |  _  d  S(   N(   RS   (   R,   R3   (    (    sF   /home/panlixing/Python_Projects/gaeseries/django/core/handlers/wsgi.pyt   _set_cookies   s    c         C   s#   t  |  d  s |  j   n  |  j S(   NRC   (   RK   RI   RC   (   R,   (    (    sF   /home/panlixing/Python_Projects/gaeseries/django/core/handlers/wsgi.pyt
   _get_files   s    c         C   s   y |  j  SWn t k
 r t   } y t |  j j d d   } Wn t t f k
 rb d } n X| d k r t |  j d | d | n  | j	   |  _  | j
   |  j  SXd  S(   Nt   CONTENT_LENGTHi    s
   wsgi.inputR   (   R@   t   AttributeErrorR   t   intR$   R#   t
   ValueErrort	   TypeErrorR   t   getvaluet   close(   R,   R   t   content_length(    (    sF   /home/panlixing/Python_Projects/gaeseries/django/core/handlers/wsgi.pyt   _get_raw_post_data   s    	


(   t   __name__t
   __module__R.   R5   R9   R;   RI   RM   RO   RP   RQ   RR   RV   RW   RX   Ra   t   propertyR/   R0   R1   t   FILESt   REQUESTRG   (    (    (    sF   /home/panlixing/Python_Projects/gaeseries/django/core/handlers/wsgi.pyR   K   s(   														t   WSGIHandlerc           B   s    e  Z e   Z e Z d    Z RS(   c         C   s  d d l  m } |  j d  k rX |  j j   |  j d  k rH |  j   n  |  j j   n  t t	 j
 |   t j j d |  j  z{ y |  j |  } Wn t k
 r t j   } nE X|  j |  } x  |  j D] } | | |  } q W|  j | |  } Wd  t j j d |  j  Xy t | j } Wn t k
 r@d } n Xd | j | f } g  | j   D]$ \ }	 }
 t |	  t |
  f ^ qa} x< | j j   D]+ } | j d t | j d d   f  qW| | |  | S(	   Ni(   t   settingst   senders   UNKNOWN STATUS CODEs   %s %ss
   Set-Cookiet   headerR7   (    t   django.confRh   t   _request_middlewaret   Nonet   initLockt   acquiret   load_middlewaret   releaseR   R   R"   R   t   request_startedt   sendt	   __class__t   request_classt   UnicodeDecodeErrorR   t   HttpResponseBadRequestt   get_responset   _response_middlewaret   apply_response_fixest   request_finishedt   STATUS_CODE_TEXTt   status_codet   KeyErrort   itemst   strR3   t   valuest   appendt   output(   R,   R$   t   start_responseRh   t   requestt   responset   middleware_methodt   status_textt   statust   kt   vt   response_headerst   c(    (    sF   /home/panlixing/Python_Projects/gaeseries/django/core/handlers/wsgi.pyt   __call__   s8    
7)(   Rb   Rc   R    Rn   R   Ru   R   (    (    (    sF   /home/panlixing/Python_Projects/gaeseries/django/core/handlers/wsgi.pyRg      s   	Ni @  (   t	   threadingR    t   pprintR   t	   cStringIOR   t   ImportErrort   djangoR   t   django.coreR   t   django.core.handlersR   t   django.core.urlresolversR   t   django.utilsR   t   django.utils.encodingR   R	   R|   R   t   HttpRequestR   t   BaseHandlerRg   (    (    (    sF   /home/panlixing/Python_Projects/gaeseries/django/core/handlers/wsgi.pyt   <module>   sp   
