
    >ȋhp                        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	m
Z
mZmZ d dlmZ d dlmZ d dlmZmZmZmZmZ d dlmZ d d	lmZmZmZ d d
lmZmZm Z  d dl!m"Z"m#Z# d dl$m%Z% d dl&m'Z'm(Z( d dl)m*Z*  e+            Z, e*d          Z- G d de.          Z/ G d de0          Z1 G d d          Z2 G d de          Z3 G d de           Z4 G d d          Z5d Z6d Z7d Z8dS )    N)BytesIO)chain)	parse_qslquote	urlencodeurljoinurlsplit)settings)signing)
BadRequestDisallowedHostImproperlyConfiguredRequestDataTooBigTooManyFieldsSent)uploadhandler)MultiPartParserMultiPartParserErrorTooManyFilesSent)CaseInsensitiveMappingImmutableListMultiValueDict)escape_uri_path
iri_to_uri)cached_property)is_same_domainparse_header_parameters)_lazy_re_compilez7^([a-z0-9.-]+|\[[a-f0-9]*:[a-f0-9.:]+\])(?::([0-9]+))?$c                       e Zd ZdS )UnreadablePostErrorN)__name__
__module____qualname__     P/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/http/request.pyr   r   '   s        Dr$   r   c                       e Zd ZdZdS )RawPostDataExceptionz
    You cannot access raw_post_data from a request that has
    multipart/* POST data if it has been accessed via POST,
    FILES, etc..
    N)r    r!   r"   __doc__r#   r$   r%   r'   r'   +   s          	Dr$   r'   c                      e Zd ZdZdZg Zd Zd Zed             Z	ed             Z
ed             Zd Zd	 Zd
 Zd Zd Zd Zd Zd(dZd(dZd ZeddfdZd)dZed             Zd Zed             Zd Zed             Zej        d             Zd Z ed             Z!e!j        d             Z!d Z"ed              Z#d! Z$d" Z%d# Z&d$ Z'd% Z(d& Z)d' Z*dS )*HttpRequestzA basic HTTP request.Nc                     t          d          | _        t          d          | _        i | _        i | _        t                      | _        d| _        d| _        d | _	        d | _
        d | _        d | _        d S )NT)mutable )	QueryDictGETPOSTCOOKIESMETAr   FILESpath	path_infomethodresolver_matchcontent_typecontent_paramsselfs    r%   __init__zHttpRequest.__init__<   sv    
 T***d+++		#%%
	" "r$   c                     | j         |                                 sd| j        j        z  S d| j        j        d| j         d|                                 dS )Nz<%s><:  >)r6   get_full_path	__class__r    r:   s    r%   __repr__zHttpRequest.__repr__N   sh    ;d&8&8&:&:DN333  N###KKK    
 	
r$   c                 *    t          | j                  S N)HttpHeadersr2   r:   s    r%   headerszHttpRequest.headersW   s    49%%%r$   c                     | j                             dd          }t          fd|                    d          D             t	          j        dd          d          S )	zGReturn a list of MediaType instances, in order of preference (quality).Acceptz*/*c              3   x   K   | ]4}|                                 rt          |          xj        d k    0V  5dS )r   N)strip	MediaTypequality).0token
media_types     r%   	<genexpr>z-HttpRequest.accepted_types.<locals>.<genexpr>`   s]        ;;== 5>e4D4D&Dj%MQR%R%R %R%R%R%R r$   ,rN   specificityTkeyreverse)rH   getsortedsplitoperator
attrgetter)r;   header_valuerQ   s     @r%   accepted_typeszHttpRequest.accepted_types[   s|     |''%88   )//44  
 #I}==
 
 
 	
r$   c                 V    t          | j        t          j        dd          d          S )z]
        Return a list of MediaType instances, in order of precedence (specificity).
        rT   rN   TrU   )rY   r^   r[   r\   r:   s    r%   accepted_types_by_precedencez(HttpRequest.accepted_types_by_precedencei   s4    
 #M9==
 
 
 	
r$   c                 d    t                    t          fd| j        D             d          S )zX
        Return the MediaType instance which best matches the given media type.
        c              3   F   K   | ]}                     |          |V  d S rF   )match)rO   accepted_typerQ   s     r%   rR   z,HttpRequest.accepted_type.<locals>.<genexpr>z   sK        !##M22     r$   N)rM   nextr`   r;   rQ   s    `r%   rd   zHttpRequest.accepted_typet   sR     z**
   %)%F  
 
 
 	
r$   c                 v     |r j         sdS  fd|D             }|sdS t          | fd          d         S )z:Select the preferred media type from the provided options.Nc                 F    g | ]}                     |          x|fS rF   rd   )rO   rQ   rd   r;   s     r%   
<listcomp>z2HttpRequest.get_preferred_type.<locals>.<listcomp>   sA     
 
 
!%!3!3J!?!??L J'LLLr$   c                 D    j                             | d                   S )Nr   )r^   index)tr;   s    r%   <lambda>z0HttpRequest.get_preferred_type.<locals>.<lambda>   s    0C0I0I!A$0O0O r$   )rV      )r^   min)r;   media_typesdesired_typesrd   s   `  @r%   get_preferred_typezHttpRequest.get_preferred_type   s|     	$"5 	4
 
 
 
 
)
 
 
  	4 =&O&O&O&OPPPQRSSr$   c                 0    |                      |          duS )z:Does the client accept a response in the given media type?Nri   rf   s     r%   acceptszHttpRequest.accepts   s    !!*--T99r$   c                    t          |                    dd                    \  | _        | _        d| j        v rE	 t	          j        | j        d                    | j        d         | _        dS # t          $ r Y dS w xY wdS )z/Set content_type, content_params, and encoding.CONTENT_TYPEr-   charsetN)r   rX   r8   r9   codecslookupencodingLookupError)r;   metas     r%   _set_content_type_paramsz$HttpRequest._set_content_type_params   s    1HHH^R((2
 2
.4. +++?d1)<=== !% 3I >     ,+s   A. .
A<;A<c                    t           j        rd| j        v r| j        d         }n[d| j        v r| j        d         }nD| j        d         }|                                 }||                                 rdndk    r|d|}|S )z
        Return the HTTP host using the environment or request headers. Skip
        allowed hosts protection, so may return an insecure host.
        HTTP_X_FORWARDED_HOST	HTTP_HOSTSERVER_NAME44380:)r
   USE_X_FORWARDED_HOSTr2   get_port	is_secure)r;   hostserver_ports      r%   _get_raw_hostzHttpRequest._get_raw_host   s     ( 		5.E.R.R945DDDI%%9[)DD 9]+D--//K(8(8BuudCC"&$$4r$   c                     |                                  }t          j        }t          j        r|sg d}t	          |          \  }}|rt          ||          r|S d|z  }|r	|d|z  z  }n|dz  }t          |          )z>Return the HTTP host using the environment or request headers.)z
.localhostz	127.0.0.1z[::1]zInvalid HTTP_HOST header: %r.z) You may need to add %r to ALLOWED_HOSTS.zB The domain name provided is not valid according to RFC 1034/1035.)r   r
   ALLOWED_HOSTSDEBUGsplit_domain_portvalidate_hostr   )r;   r   allowed_hostsdomainportmsgs         r%   get_hostzHttpRequest.get_host   s    !!## !.> 	A- 	A@@@M(.. 
	&mFM:: 
	&K1D8C BVKKX !%%%r$   c                     t           j        rd| j        v r| j        d         }n| j        d         }t          |          S )z3Return the port number for the request as a string.HTTP_X_FORWARDED_PORTSERVER_PORT)r
   USE_X_FORWARDED_PORTr2   str)r;   r   s     r%   r   zHttpRequest.get_port   sA    ( 	,-D	-Q-Q945DD9]+D4yyr$   Fc                 8    |                      | j        |          S rF   )_get_full_pathr4   r;   force_append_slashs     r%   rB   zHttpRequest.get_full_path   s    ""49.@AAAr$   c                 8    |                      | j        |          S rF   )r   r5   r   s     r%   get_full_path_infozHttpRequest.get_full_path_info   s    ""4>3EFFFr$   c           	          t          |          |r|                    d          sdnd| j                            dd          r+dt	          | j                            dd                    z   ndS )N/r-   QUERY_STRING?)r   endswithr2   rX   r   )r;   r4   r   s      r%   r   zHttpRequest._get_full_path   s     D!!!%HdmmC.@.@HCCbH 9==44z$)--"C"CDDDD	
 	
r$   r-   c                     	 | j         |         }n# t          $ r |t          ur|cY S  w xY w	 t          j        ||z                                 ||          }n!# t          j        $ r |t          ur|cY S  w xY w|S )z
        Attempt to return a signed cookie. If the signature fails or the
        cookie has expired, raise an exception, unless the `default` argument
        is provided,  in which case return that value.
        )salt)max_age)r1   KeyErrorRAISE_ERRORr   get_cookie_signerunsignBadSignature)r;   rV   defaultr   r   cookie_valuevalues          r%   get_signed_cookiezHttpRequest.get_signed_cookie   s    	<,LL 	 	 	k))		
	-3:>>>EEg F  EE # 	 	 	k))		
 s    ))-A A97A9c                    |d|                                  z  }nt          |          }t          |          }|j        r|j        su|j                            d          r>|j        s7|j        s0d|j        vr'd|j        vr| j        |                    d          z   }nt          | j        | j        z   |          }t          |          S )a  
        Build an absolute URI from the location and the variables available in
        this request. If no ``location`` is specified, build the absolute URI
        using request.get_full_path(). If the location is absolute, convert it
        to an RFC 3987 compliant URI and return it. If location is relative or
        is scheme-relative (i.e., ``//example.com/``), urljoin() it to a base
        URL constructed from the request variables.
        Nz//%sr   z/./z/../z//)rB   r   r	   schemenetlocr4   
startswith_current_scheme_hostremoveprefixr   r   )r;   locationbitss      r%   build_absolute_urizHttpRequest.build_absolute_uri   s       2 2 4 44HH 8}}H!! 	T 	T
 	$$S))TT T **$)++
  4x7L7LT7R7RR
 #4#<ty#H(SS(###r$   c                 \    d                     | j        |                                           S )Nz{}://{})formatr   r   r:   s    r%   r   z HttpRequest._current_scheme_host&  s"    T]]__===r$   c                     dS )zf
        Hook for subclasses like WSGIRequest to implement. Return 'http' by
        default.
        httpr#   r:   s    r%   _get_schemezHttpRequest._get_scheme*  s	    
 vr$   c                 >   t           j        r~	 t           j        \  }}n# t          $ r t          d          w xY w| j                            |          }|4|                    dd          ^}}|                                |k    rdndS |                                 S )NzJThe SECURE_PROXY_SSL_HEADER setting must be a tuple containing two values.rS   ro   httpsr   )	r
   SECURE_PROXY_SSL_HEADER
ValueErrorr   r2   rX   rZ   rL   r   )r;   headersecure_valuer]   _s        r%   r   zHttpRequest.scheme1  s    + 	S'/'G$   *"  
  9==00L'#/#5#5c1#=#= q"."4"4"6"6,"F"FwwFR!!!s    8c                     | j         dk    S )Nr   )r   r:   s    r%   r   zHttpRequest.is_secureA  s    {g%%r$   c                     | j         S rF   	_encodingr:   s    r%   r{   zHttpRequest.encodingD  s
    ~r$   c                 `    || _         t          | d          r| `t          | d          r| `dS dS )z
        Set the encoding used for GET/POST accesses. If the GET or POST
        dictionary has already been created, remove and recreate it on the
        next access (so that it is decoded correctly).
        r/   _postN)r   hasattrr/   r   )r;   vals     r%   r{   zHttpRequest.encodingH  sG     4 	4!! 	


	 	r$   c                 B      fdt           j        D              _        d S )Nc                 :    g | ]}t          j        |          S r#   )r   load_handler)rO   handlerr;   s     r%   rj   z4HttpRequest._initialize_handlers.<locals>.<listcomp>V  s6     !
 !
 !
 &w55!
 !
 !
r$   )r
   FILE_UPLOAD_HANDLERS_upload_handlersr:   s   `r%   _initialize_handlersz HttpRequest._initialize_handlersU  s7    !
 !
 !
 !
#8!
 !
 !
r$   c                 F    | j         s|                                  | j         S rF   )r   r   r:   s    r%   upload_handlerszHttpRequest.upload_handlers[  s(    $ 	(%%'''$$r$   c                 R    t          | d          rt          d          || _        d S )N_fileszGYou cannot set the upload handlers after the upload has been processed.)r   AttributeErrorr   )r;   r   s     r%   r   zHttpRequest.upload_handlersb  s;    4"" 	    !0r$   c                     t          | j        d          | _        t          ||| j        | j                  }|                                S )z9Return a tuple of (POST QueryDict, FILES MultiValueDict).zEYou cannot alter upload handlers after the upload has been processed.)warning)r   r   r   r{   parse)r;   r2   	post_dataparsers       r%   parse_file_uploadzHttpRequest.parse_file_uploadk  sL    ,  
  
  
 !y$2FVV||~~r$   c                    t          | d          s| j        rt          d          t          j        Ft          | j                            d          pd          t          j        k    rt          d          	 | 	                                | _
        n!# t          $ r}t          |j         |d }~ww xY w	 | j                                         n# | j                                         w xY wt!          | j
                  | _        | j
        S )N_bodyz?You cannot access body after reading from request's data streamCONTENT_LENGTHr   z;Request body exceeded settings.DATA_UPLOAD_MAX_MEMORY_SIZE.)r   _read_startedr'   r
   DATA_UPLOAD_MAX_MEMORY_SIZEintr2   rX   r   readr   OSErrorr   args_streamcloser   )r;   es     r%   bodyzHttpRequest.bodyw  s   tW%% 	/! *U   4@	&677<1==67 7 (Q  %!YY[[

 : : :)1629:  ""$$$$""$$$$"4:..DLzs*   :B C 
B2B--B22C C+c                 R    t                      | _        t                      | _        d S rF   )r.   r   r   r   r:   s    r%   _mark_post_parse_errorz"HttpRequest._mark_post_parse_error  s    [[
$&&r$   c                    | j         dk    r0t          | j                  t                      c| _        | _        dS | j        r&t          | d          s|                                  dS | j	        dk    r|t          | d          rt          | j                  }n| }	 |                     | j        |          \  | _        | _        dS # t          t          f$ r |                                   w xY w| j	        dk    rc| j        ,| j                                        dk    rt#          d          t          | j        d          | _        t                      | _        dS t          | j                  t                      c| _        | _        dS )	zFPopulate self._post and self._files if the content-type is a form typer0   )r{   Nr   zmultipart/form-dataz!application/x-www-form-urlencodedzutf-8z^HTTP requests with the 'application/x-www-form-urlencoded' content type must be UTF-8 encoded.)r6   r.   r   r   r   r   r   r   r   r8   r   r   r   r2   r   r   lowerr   r   )r;   datas     r%   _load_post_and_filesz HttpRequest._load_post_and_files  s   ;&  4>222   $DJ F 	gdG&<&< 	'')))F 555tW%% tz***.*@*@D*Q*Q'
DKKK(*:;   
 ++--- "EEE ~)dn.B.B.D.D.O.O :   #49w???DJ(**DKKK 4>222   $DJs   (C 'C-c                     t          | d          rLt          j        d | j                                        D                       D ]}|                                 d S d S )Nr   c              3   &   K   | ]}|d          V  dS )ro   Nr#   )rO   list_s     r%   rR   z$HttpRequest.close.<locals>.<genexpr>  s&      (S(Seq(S(S(S(S(S(Sr$   )r   r   from_iterabler   listsr   )r;   fs     r%   r   zHttpRequest.close  sn    4"" 	((S(St{?P?P?R?R(S(S(SSS  					 	 r$   c                 x    d| _         	  | j        j        |i |S # t          $ r}t	          |j         |d }~ww xY wNT)r   r   r   r   r   r   r;   r   kwargsr   s       r%   r   zHttpRequest.read  sW    !	6$4<$d5f555 	6 	6 	6%qv.A5	6    
949c                 x    d| _         	  | j        j        |i |S # t          $ r}t	          |j         |d }~ww xY wr   )r   r   readliner   r   r   r   s       r%   r   zHttpRequest.readline  sW    !	6(4<($9&999 	6 	6 	6%qv.A5	6r   c                 ,    t          | j        d          S )Nr$   )iterr   r:   s    r%   __iter__zHttpRequest.__iter__  s    DM3'''r$   c                      t          |           S rF   )listr:   s    r%   	readlineszHttpRequest.readlines  s    Dzzr$   )FrF   )+r    r!   r"   r(   r   r   r<   rD   r   rH   r^   r`   rd   rs   ru   r~   r   r   r   rB   r   r   r   r   r   r   r   propertyr   r   r{   setterr   r   r   r   r   r   r   r   r   r  r  r#   r$   r%   r*   r*   5   s        I# # #$
 
 
 & & _& 
 
 _
 
 
 _

 
 
T T T": : :? ? ?  $& & &,  B B B BG G G G
 
 
 .9r4    0%$ %$ %$ %$N > > _>   " " X"& & &   X _
 
 _

 
 
 % % X% 0 0 0
 
 
   X4' ' '* * *X  6 6 66 6 6( ( (    r$   r*   c                        e Zd ZdZddhZ fdZ fdZed             Zed             Z	ed             Z
ed	             Zed
             Z xZS )rG   HTTP_rw   r   c                     i }|                                 D ]!\  }}|                     |          }|r|||<   "t                                          |           d S rF   )itemsparse_header_namesuperr<   )r;   environrH   r   r   namerC   s         r%   r<   zHttpHeaders.__init__  sf    $]]__ 	& 	&MFE))&11D & %!!!!!r$   c                 n    t                                          |                    dd                    S )z:Allow header lookup using underscores in place of hyphens.r   -)r  __getitem__replacer;   rV   rC   s     r%   r  zHttpHeaders.__getitem__  s)    ww""3;;sC#8#8999r$   c                     |                     | j                  r|                    | j                  }n|| j        vrd S |                    dd                                          S )Nr   r  )r   HTTP_PREFIXr   UNPREFIXED_HEADERSr  titleclsr   s     r%   r  zHttpHeaders.parse_header_name  sd    S_-- 	((99FF31114~~c3''--///r$   c                 ~    |                     dd                                          }|| j        v r|S | j         | S Nr  r   )r  upperr  r  r  s     r%   to_wsgi_namezHttpHeaders.to_wsgi_name  sG    S))//11S+++M/+6+++r$   c                 R    |                     dd                                          S r  )r  r  r  s     r%   to_asgi_namezHttpHeaders.to_asgi_name  s"    ~~c3''--///r$   c                 D      fd|                                 D             S )Nc                 B    i | ]\  }}                     |          |S r#   )r  rO   header_namer   r  s      r%   
<dictcomp>z-HttpHeaders.to_wsgi_names.<locals>.<dictcomp>
  =     
 
 
"U [))5
 
 
r$   r  r  rH   s   ` r%   to_wsgi_nameszHttpHeaders.to_wsgi_names  6    
 
 
 
&-mmoo
 
 
 	
r$   c                 D      fd|                                 D             S )Nc                 B    i | ]\  }}                     |          |S r#   )r!  r$  s      r%   r&  z-HttpHeaders.to_asgi_names.<locals>.<dictcomp>  r'  r$   r(  r)  s   ` r%   to_asgi_nameszHttpHeaders.to_asgi_names  r+  r$   )r    r!   r"   r  r  r<   r  classmethodr  r  r!  r*  r.  __classcell__rC   s   @r%   rG   rG     s        K(*:;" " " " ": : : : : 0 0 [0 , , [, 0 0 [0 
 
 [
 
 
 [
 
 
 
 
r$   rG   c                        e Zd ZdZdZdZd fd	Zedd            Ze	d             Z
e
j        d	             Z
d
 Z fdZ fdZd Zd Z fdZd fd	Z fdZ fdZ fdZ fdZd fd	Zd ZddZ xZS )r.   a  
    A specialized MultiValueDict which represents a query string.

    A QueryDict can be used to represent GET or POST data. It subclasses
    MultiValueDict since keys in such data can be repeated, for instance
    in the data from a form with a <select multiple> field.

    By default QueryDicts are immutable, though the copy() method
    will always return a mutable copy.

    Both keys and values set on this class are converted from the given encoding
    (DEFAULT_CHARSET by default) to str.
    TNFc                    t                                                       |pt          j        | _        |pd}d| j        t          j        d}t          |t                    rA	 |                    | j                  }n%# t          $ r |                    d          }Y nw xY w	 t          |fi |D ]\  }}|                     ||           n"# t          $ r}t          d          |d }~ww xY w|| _        d S )Nr-   T)keep_blank_valuesr{   max_num_fieldsz
iso-8859-1zRThe number of GET/POST parameters exceeded settings.DATA_UPLOAD_MAX_NUMBER_FIELDS.)r  r<   r
   DEFAULT_CHARSETr{   DATA_UPLOAD_MAX_NUMBER_FIELDS
isinstancebytesdecodeUnicodeDecodeErrorr   
appendlistr   r   _mutable)	r;   query_stringr,   r{   parse_qsl_kwargsrV   r   r   rC   s	           r%   r<   zQueryDict.__init__+  sD    <H$<#)r!%&D
 

 lE** 	AA+224=AA% A A A+22<@@A	'II8HII , ,
UU++++, 	 	 	
 $:  	  s*   $A? ?B! B!%)C 
C.C))C.r-   c                 j     | dd|          }|D ]}|                     ||           |sd|_        |S )zt
        Return a new QueryDict with keys (may be repeated) from an iterable and
        values from value.
        r-   Tr,   r{   F)r<  r=  )r  iterabler   r,   r{   qrV   s          r%   fromkeyszQueryDict.fromkeysI  sT     CD8444 	% 	%CLLe$$$$ 	AJr$   c                 @    | j         t          j        | _         | j         S rF   )r   r
   r6  r:   s    r%   r{   zQueryDict.encodingV  s    >!%5DN~r$   c                     || _         d S rF   r   )r;   r   s     r%   r{   zQueryDict.encoding\  s    r$   c                 2    | j         st          d          d S )Nz$This QueryDict instance is immutable)r=  r   r:   s    r%   _assert_mutablezQueryDict._assert_mutable`  s(    } 	I !GHHH	I 	Ir$   c                     |                                   t          || j                  }t          || j                  }t                                          ||           d S rF   )rH  bytes_to_textr{   r  __setitem__r;   rV   r   rC   s      r%   rK  zQueryDict.__setitem__d  sW    C//eT]33C'''''r$   c                 r    |                                   t                                          |           d S rF   )rH  r  __delitem__r  s     r%   rN  zQueryDict.__delitem__j  s3    C     r$   c                     |                      dd| j                  }|                                 D ]\  }}|                    ||           |S Nr-   TrA  )rC   r{   r   setlist)r;   resultrV   r   s       r%   __copy__zQueryDict.__copy__n  sR    D4=II**,, 	' 	'JCNN3&&&&r$   c                    |                      dd| j                  }||t          |           <   |                                 D ]A\  }}|                    t          j        ||          t          j        ||                     B|S rP  )rC   r{   idr   rQ  copydeepcopy)r;   memorR  rV   r   s        r%   __deepcopy__zQueryDict.__deepcopy__t  s{    D4=IIRXX**,, 	Q 	QJCNN4=d33T]5$5O5OPPPPr$   c                                                         t          | j                  } fd|D             }t                                          ||           d S )Nc                 :    g | ]}t          |j                  S r#   )rJ  r{   )rO   eltr;   s     r%   rj   z%QueryDict.setlist.<locals>.<listcomp>~  s%    DDDssDM22DDDr$   )rH  rJ  r{   r  rQ  )r;   rV   r   rC   s   `  r%   rQ  zQueryDict.setlist{  s^    C//DDDDeDDDU#####r$   c                 p    |                                   t                                          ||          S rF   )rH  r  setlistdefault)r;   rV   default_listrC   s      r%   r^  zQueryDict.setlistdefault  s/    ww%%c<888r$   c                     |                                   t          || j                  }t          || j                  }t                                          ||           d S rF   )rH  rJ  r{   r  r<  rL  s      r%   r<  zQueryDict.appendlist  sW    C//eT]333&&&&&r$   c                 `    |                                    t                      j        |g|R  S rF   )rH  r  pop)r;   rV   r   rC   s      r%   rb  zQueryDict.pop  s3    uww{3&&&&&r$   c                 l    |                                   t                                                      S rF   )rH  r  popitemr;   rC   s    r%   rd  zQueryDict.popitem  s)    ww   r$   c                 p    |                                   t                                                       d S rF   )rH  r  clearre  s    r%   rg  zQueryDict.clear  s*    r$   c                     |                                   t          || j                  }t          || j                  }t                                          ||          S rF   )rH  rJ  r{   r  
setdefault)r;   rV   r   rC   s      r%   ri  zQueryDict.setdefault  sQ    C//77ww!!#w///r$   c                 ,    |                      i           S )z%Return a mutable copy of this object.)rY  r:   s    r%   rV  zQueryDict.copy  s      $$$r$   c                      g }r                       j                  fdnd                                  D ](\  }|                     fd|D                        )d                    |          S )ah  
        Return an encoded string of all query string arguments.

        `safe` specifies characters which don't require quoting, for example::

            >>> q = QueryDict(mutable=True)
            >>> q['next'] = '/a&b/'
            >>> q.urlencode()
            'next=%2Fa%26b%2F'
            >>> q.urlencode(safe='/')
            'next=/a%26b/'
        c                 J    t          |           dt          |          S )N=)r   )kvsafes     r%   encodez#QueryDict.urlencode.<locals>.encode  s$    #(D>>>>5D>>>CCr$   c                 $    t          | |i          S rF   )r   )rn  ro  s     r%   rq  z#QueryDict.urlencode.<locals>.encode  s     !Q(((r$   c              3      K   | ]M}                      j                  t          |                               j                            V  Nd S rF   )rq  r{   r   )rO   ro  rq  rn  r;   s     r%   rR   z&QueryDict.urlencode.<locals>.<genexpr>  se         qxx..Adm0L0LMM     r$   &)rq  r{   r   extendjoin)r;   rp  outputr   rq  rn  s   ``  @@r%   r   zQueryDict.urlencode  s      		);;t}--DD D D D D D
) ) ) 

 	 	HAuMM             xxr$   )NFN)r-   FNrF   )r    r!   r"   r(   r=  r   r<   r/  rD  r  r{   r  rH  rK  rN  rS  rY  rQ  r^  r<  rb  rd  rg  ri  rV  r   r0  r1  s   @r%   r.   r.     s          HI           < 
 
 
 [
   X
 _  _I I I( ( ( ( (! ! ! ! !    $ $ $ $ $9 9 9 9 9 9' ' ' ' '' ' ' ' '! ! ! ! !    0 0 0 0 0 0% % %               r$   r.   c                   h    e Zd Zd Zd Zd Zed             Zd Zed             Z	e
d             ZdS )	rM   c                     t          |r|nd          \  }| _        |                    d          \  | _        }| _        d S )Nr-   r   )r   params	partition	main_typesub_type)r;   media_type_raw_line	full_typer   s       r%   r<   zMediaType.__init__  sJ    !8#6>B"
 "
	4; ,5+>+>s+C+C(4===r$   c                     d                     d | j                                        D                       }| j        | j        r
d| j        z  nd|S )Nr-   c              3   ,   K   | ]\  }}d |d|V  dS )z; rm  Nr#   )rO   rn  ro  s      r%   rR   z$MediaType.__str__.<locals>.<genexpr>  s3      PPDAqq!!!QQ/PPPPPPr$   z/%s)rv  rz  r  r|  r}  )r;   
params_strs     r%   __str__zMediaType.__str__  s_    WWPPDK<M<M<O<OPPPPP
NN'+}<UT]"""<J
 	
r$   c                 (    d| j         j        d| dS )Nr>   r?   rA   )rC   r"   r:   s    r%   rD   zMediaType.__repr__  s     !^888$$$??r$   c                 d    | j                                         }|                    dd            |S )NrC  )rz  rV  rb  )r;   rz  s     r%   range_paramszMediaType.range_params  s.    !!##

3r$   c                    |sdS t          |t                    st          |          }| j        |j        g}| j        |j        g}t	          g ||R           sdS ||fD ]\  }}||k    r|dk    r	|dk    r dS t          | j                  t          |j                  k    r| j        |j        k    }nt          | j        p|j                   }|S )NF*)r8  rM   r|  r}  allboolr  )r;   other
main_types	sub_types	this_type
other_typerR  s          r%   rc   zMediaType.match  s    	5%++ 	%e$$Eneo6
]EN3	 ,Z,),,-- 	5 '1)%< 	 	!IzJ&&9+;+;
c@Q@Quu!""d5+=&>&>>>&%*<<FF $+E53E/EFFFr$   c                     	 t          | j                            dd                    }n# t          $ r Y dS w xY w|dk     s|dk    rdS t	          |d          S )NrC  ro   r      )floatrz  rX   r   round)r;   rN   s     r%   rN   zMediaType.quality  sp    	DKOOC3344GG 	 	 	11	
 Q;;'A++1Wa   s   (+ 
99c                 L    | j         dk    rdS | j        dk    rdS | j        sdS dS )zM
        Return a value from 0-3 for how specific the media type is.
        r  r   ro      r  )r|  r}  r  r:   s    r%   rT   zMediaType.specificity  s=    
 >S  1]c!!1" 	1qr$   N)r    r!   r"   r<   r  rD   r   r  rc   rN   r  rT   r#   r$   r%   rM   rM     s        D D D
 
 
@ @ @   _
  8 ! ! _! 
 
 X
 
 
r$   rM   c                 R    t          | t                    rt          | |d          S | S )u   
    Convert bytes objects to strings, using the given encoding. Illegally
    encoded input characters are replaced with Unicode "unknown" codepoint
    (�).

    Return any non-bytes objects without change.
    r  )r8  r9  r   )sr{   s     r%   rJ  rJ    s-     !U 1h	***r$   c                     t                               |                                           x}r0|                    d          \  }}|                    d          |fS dS )z
    Return a (domain, port) tuple from a given host.

    Returned domain is lowercased. If the host is invalid, the domain will be
    empty.
    r-   )r   .)r-   r-   )host_validation_re	fullmatchr   groupsremovesuffix)r   rc   r   r   s       r%   r   r   #  s\     #,,TZZ\\:::u .||B|//""3''--6r$   c                 :     t           fd|D                       S )a4  
    Validate the given host for this site.

    Check that the host looks valid and matches a host or host pattern in the
    given list of ``allowed_hosts``. Any pattern beginning with a period
    matches a domain and all its subdomains (e.g. ``.example.com`` matches
    ``example.com`` and any subdomain), ``*`` matches anything, and anything
    else must match exactly.

    Note: This function assumes that the given host is lowercased and has
    already had the port, if any, stripped off.

    Return ``True`` for a valid host, ``False`` otherwise.
    c              3   D   K   | ]}|d k    pt          |          V  dS )r  N)r   )rO   patternr   s     r%   rR   z validate_host.<locals>.<genexpr>@  sG        <C37.w77     r$   )any)r   r   s   ` r%   r   r   1  s=         GT     r$   )9ry   rV  r[   ior   	itertoolsr   urllib.parser   r   r   r   r	   django.confr
   django.corer   django.core.exceptionsr   r   r   r   r   django.core.filesr   django.http.multipartparserr   r   r   django.utils.datastructuresr   r   r   django.utils.encodingr   r   django.utils.functionalr   django.utils.httpr   r   django.utils.regex_helperr   objectr   r  r   r   	Exceptionr'   r*   rG   r.   rM   rJ  r   r   r#   r$   r%   <module>r     s                  G G G G G G G G G G G G G G                                , + + + + +         
         
 > = = = = = = = 3 3 3 3 3 3 E E E E E E E E 6 6 6 6 6 6fhh%%>  
	 	 	 	 	' 	 	 		 	 	 	 	9 	 	 	l l l l l l l l^0
 0
 0
 0
 0
( 0
 0
 0
fh  h  h  h  h  h  h  h VM M M M M M M Mf        r$   