
    >ȋhce                     &   d dl Z d dlZd dlZd dlZd dl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mZ d dlmZ d dlmZ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$ d dl%m&Z&m'Z' d dl(m)Z)  e)dej*                  Z+ G d de           Z, G d de-          Z. G d d          Z/ G d de/          Z0 G d de/          Z1 G d de1          Z2 G d de0          Z3 G d  d!e3          Z4 G d" d#e3          Z5 G d$ d%e0          Z6 G d& d'e0          Z7 G d( d)e0          Z8 G d* d+e0          Z9 G d, d-e0          Z: G d. d/e0          Z; G d0 d1e0          Z< G d2 d3e=          Z> G d4 d5e0          Z?dS )6    N)Header)	responses)urlsplit)async_to_syncsync_to_async)settings)signalssigning)DisallowedRedirect)DjangoJSONEncoder)SimpleCookie)timezone)CaseInsensitiveMapping)
iri_to_uri)cached_property)content_disposition_header	http_date)_lazy_re_compilez ;\s*charset=(?P<charset>[^\s;]+)c                   6    e Zd Zd Zd	dZd Zd Zd
dZd ZdS )ResponseHeadersc                 \    i | _         |r |                     |          D ]\  }}|| |<   dS dS )zm
        Populate the initial data using __setitem__ to ensure values are
        correctly encoded.
        N)_store_unpack_items)selfdataheadervalues       Q/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/http/response.py__init__zResponseHeaders.__init__"   sS    
  	%!%!3!3D!9!9 % %$V	% 	%% %    Fc                    	 t          |t                    r|                    |           nOt          |t                    r|                    |          }n$t          |          }|                    |           d|v sd|v rt          d|d          n# t          $ r}t          |t                    rd|v s!d|v st          |t                    rd|v sd|v rt          d|d          ||r/t          |dt          j	                                                  }n|xj
        d	|z  z  c_
         Y d
}~nd
}~ww xY w|S )z
        Convert headers key/value to ascii/latin-1 native strings.
        `charset` must be 'ascii' or 'latin-1'. If `mime_encode` is True and
        `value` can't be represented in the given charset, apply MIME-encoding.
        
z*Header values can't contain newlines (got )   
   utf-8)
maxlinelenz,, HTTP response headers must be in %s formatN)
isinstancestrencodebytesdecodeBadHeaderErrorUnicodeErrorr   sysmaxsizereason)r   r   charsetmime_encodees        r   _convert_to_charsetz#ResponseHeaders._convert_to_charset,   s   	%%% 	&W%%%%E5)) &W--E

W%%%u}}$KKKK   !.  	 	 	
 5%(( eunn5#&& AO,0EMMTU]]$KKKK   ug#+FFFMMOOJWTT 	  s   BB 
D?"BD::D?c                 0    |                      |           d S N)pop)r   keys     r   __delitem__zResponseHeaders.__delitem__S   s    r    c                     |                      |d          }|                      |dd          }||f| j        |                                <   d S )Nasciilatin-1T)r4   )r6   r   lowerr   r:   r   s      r   __setitem__zResponseHeaders.__setitem__V   sO    &&sG44((	t(LL$'<CIIKK   r    Nc                 \    | j                             |                                |          S r8   )r   r9   r?   )r   r:   defaults      r   r9   zResponseHeaders.pop[   s     {syy{{G444r    c                     || vr|| |<   d S d S r8    r@   s      r   
setdefaultzResponseHeaders.setdefault^   s    d??DIII ?r    Fr8   )	__name__
__module____qualname__r   r6   r;   rA   r9   rF   rE   r    r   r   r   !   sy        % % %% % % %N  0 0 0
5 5 5 5    r    r   c                       e Zd ZdS )r.   NrH   rI   rJ   rE   r    r   r.   r.   c           Dr    r.   c                   :   e Zd ZdZdZ	 d!dZed             Zej        d             Zed             Z	e	j        d             Z	d	 Z
e
Zed
             Zd Zd Zd Zd ZeZd Zd"dZ	 	 	 	 	 	 	 	 d#dZd Zd$dZd%dZd Zd Zd Zd Zd Zd Zd Zd Zd  Z dS )&HttpResponseBasez
    An HTTP response base class with dictionary-accessed headers.

    This class doesn't handle content. It should not be used directly.
    Use the HttpResponse and StreamingHttpResponse subclasses instead.
       Nc                    t          |          | _        || _        d| j        vr|
d| j         }|| j        d<   n|rt	          d          g | _        d | _        t                      | _        d| _	        |]	 t          |          | _        n$# t          t          f$ r t          d          w xY wd| j        cxk    rdk    sn t	          d          || _        d S )	NContent-Typeztext/html; charset=zX'headers' must not contain 'Content-Type' when the 'content_type' parameter is provided.Fz$HTTP status code must be an integer.d   iW  z4HTTP status code must be an integer from 100 to 599.)r   headers_charsetr3   
ValueError_resource_closers_handler_classr   cookiesclosedintstatus_code	TypeError_reason_phrase)r   content_typestatusr2   r3   rT   s         r   r   zHttpResponseBase.__init__q   s!    'w//--#CT\CC+7DL(( 	8   "$ ##~~H#&v;;  	* H H H FGGGH $*1111c1111 !WXXX$s   8B !B.c                 R    | j         | j         S t          j        | j        d          S )NzUnknown Status Code)r^   r   getr\   r   s    r   reason_phrasezHttpResponseBase.reason_phrase   s,    *&& }T-/DEEEr    c                     || _         d S r8   )r^   r   r   s     r   rd   zHttpResponseBase.reason_phrase   s    #r    c                     | j         | j         S | j                            d          x}r8t                              |          x}r|d                             dd          S t          j        S )NrR   r3   " )rU   rT   rb   _charset_from_content_type_researchreplacer   DEFAULT_CHARSET)r   r_   matcheds      r   r3   zHttpResponseBase.charset   sr    =$=   <++N;;;< 	;7>>|LLLw ;
 y)11#r:::''r    c                     || _         d S r8   )rU   rf   s     r   r3   zHttpResponseBase.charset   s    r    c                 n    d                     d | j                                        D                       S )zHTTP headers as a bytestring.s   
c                 p    g | ]3\  }}|                     d           dz   |                     d          z   4S )r=   s   : r>   )r+   ).0r:   r   s      r   
<listcomp>z6HttpResponseBase.serialize_headers.<locals>.<listcomp>   sN       C 

7##e+ell9.E.EE  r    )joinrT   itemsrc   s    r   serialize_headersz"HttpResponseBase.serialize_headers   sB    || "&,"4"4"6"6  
 
 	
r    c                 8    d| j         v rd| j         d         z  ndS )NrR   z, "%s"ri   rT   rc   s    r   _content_type_for_reprz'HttpResponseBase._content_type_for_repr   s-     -- t|N333	
r    c                     || j         |<   d S r8   rx   )r   r   r   s      r   rA   zHttpResponseBase.__setitem__   s    $Vr    c                     | j         |= d S r8   rx   r   r   s     r   r;   zHttpResponseBase.__delitem__   s    L   r    c                     | j         |         S r8   rx   r|   s     r   __getitem__zHttpResponseBase.__getitem__   s    |F##r    c                     || j         v S )z$Case-insensitive check for a header.rx   r|   s     r   
has_headerzHttpResponseBase.has_header   s    %%r    c                 4    | j                                         S r8   )rT   ru   rc   s    r   ru   zHttpResponseBase.items   s    |!!###r    c                 8    | j                             ||          S r8   )rT   rb   )r   r   	alternates      r   rb   zHttpResponseBase.get   s    |	222r    ri   /Fc
                    || j         |<   |t          |t          j                  rt          j        |          r$t          j        |t          j        j                  }|t          j                            t          j        j                  z
  }
|
t          j        d          z  }
d}|t          d          t          d|
j        dz  |
j        z             }n!|| j         |         d<   nd	| j         |         d<   |~t          |t          j                  r|                                }t          |          | j         |         d
<   |s1t          t!          j                    |z             | j         |         d<   ||| j         |         d<   ||| j         |         d<   |rd| j         |         d<   |rd| j         |         d<   |	r7|	                                dvrt          d          |	| j         |         d<   dS dS )a  
        Set a cookie.

        ``expires`` can be:
        - a string in the correct format,
        - a naive ``datetime.datetime`` object in UTC,
        - an aware ``datetime.datetime`` object in any time zone.
        If it is a ``datetime.datetime`` object then calculate ``max_age``.

        ``max_age`` can be:
        - int/float specifying seconds,
        - ``datetime.timedelta`` object.
        N)tz   )secondsz/'expires' and 'max_age' can't be used together.r   iQ expiresri   zmax-agepathdomainTsecurehttponly)laxnonestrictz,samesite must be "lax", "none", or "strict".samesite)rY   r)   datetimer   is_naive
make_awareutcnow	timedeltarV   maxdaysr   total_secondsr[   r   timer?   )r   r:   r   max_ager   r   r   r   r   r   deltas              r   
set_cookiezHttpResponseBase.set_cookie   s   2 "S'8#455 7$W-- R&1'8;L;PQQG("3"7"78;L;P"7"Q"QQ +A6666&$%VWWWae!3em!CDD/6S!),,+-DLi('8#566 2!//11+.w<<DLi( P/8w9N/O/OS!),(,DLf%*0DLh' 	/*.DLh' 	1,0DLj) 	5~~'@@@ !OPPP,4DLj)))	5 	5r    c                 <    | j                             ||           dS )z,Set a header unless it has already been set.N)rT   rF   r@   s      r   rF   zHttpResponseBase.setdefault  s     U+++++r    c                 v    t          j        ||z                                 |          } | j        ||fi |S )N)salt)r
   get_cookie_signersignr   )r   r:   r   r   kwargss        r   set_signed_cookiez"HttpResponseBase.set_signed_cookie  sC    )sTz:::??FFtsE44V444r    c           	          |                     d          p|o|                                dk    }|                     |d|||d|           d S )N)z	__Secure-z__Host-r   r   zThu, 01 Jan 1970 00:00:00 GMT)r   r   r   r   r   r   )
startswithr?   r   )r   r:   r   r   r   r   s         r   delete_cookiezHttpResponseBase.delete_cookie  sq    
  899 
3))V3 	 	3 	 	
 	
 	
 	
 	
r    c                    t          |t          t          f          rt          |          S t          |t                    r't          |                    | j                            S t          |                              | j                  S )z=Turn a value into a bytestring encoded in the output charset.)r)   r,   
memoryviewr*   r+   r3   rf   s     r   
make_byteszHttpResponseBase.make_bytes2  sq     eeZ011 	 <<eS!! 	5dl334445zz  ...r    c                     | j         D ]}	  |             # t          $ r Y w xY w| j                                          d| _        t          j                            | j                   d S )NT)sender)rW   	ExceptionclearrZ   r	   request_finishedsendrX   )r   closers     r   closezHttpResponseBase.closeG  s    , 	 	F    	$$&&& %%T-@%AAAAAs   

##c                 :    t          d| j        j        z            Nz This %s instance is not writableOSError	__class__rH   r   contents     r   writezHttpResponseBase.writeR      84>;RRSSSr    c                     d S r8   rE   rc   s    r   flushzHttpResponseBase.flushU  s    r    c                 :    t          d| j        j        z            )Nz)This %s instance cannot tell its positionr   rc   s    r   tellzHttpResponseBase.tellX  s!    7$.:QQ
 
 	
r    c                     dS NFrE   rc   s    r   readablezHttpResponseBase.readable`      ur    c                     dS r   rE   rc   s    r   seekablezHttpResponseBase.seekablec  r   r    c                     dS r   rE   rc   s    r   writablezHttpResponseBase.writablef  r   r    c                 :    t          d| j        j        z            r   r   )r   liness     r   
writelineszHttpResponseBase.writelinesi  r   r    )NNNNNr8   )ri   NNr   NFFN)ri   )r   NN)!rH   rI   rJ   __doc__r\   r   propertyrd   setterr3   rv   	__bytes__ry   rA   r;   r~   r   __contains__ru   rb   r   rF   r   r   r   r   r   r   r   r   r   r   r   rE   r    r   rO   rO   g   sB         K RV% % % %< F F XF $ $ $ ( ( X( ^  ^
 
 
 "I
 
 X
% % %! ! !$ $ $& & & L$ $ $3 3 3 3 >5 >5 >5 >5@, , ,5 5 5 5
 
 
 
(/ / /*	B 	B 	BT T T  
 
 
      T T T T Tr    rO   c                        e Zd ZdZdZd fd	Zd Zd ZeZe	d             Z
e
j        d             Z
ed	             Zd
 Zd Zd Zd Zd Zd Z xZS )HttpResponsezs
    An HTTP response class with a string as content.

    This content can be read, appended to, or replaced.
    Fr    c                 H     t                      j        |i | || _        d S r8   )superr   r   )r   r   argsr   r   s       r   r   zHttpResponse.__init__v  s*    $)&)))r    c                 <    d| j         j        | j        | j        dz  S Nz5<%(cls)s status_code=%(status_code)d%(content_type)s>)clsr\   r_   r   rH   r\   ry   rc   s    r   __repr__zHttpResponse.__repr__{  s/    F>*+ 7J
 J
 
 	
r    c                 @    |                                  dz   | j        z   S )z6Full HTTP message, including headers, as a bytestring.s   

)rv   r   rc   s    r   	serializezHttpResponse.serialize  s     %%''+5DDr    c                 6    d                     | j                  S Nr    )rt   
_containerrc   s    r   r   zHttpResponse.content  s    xx(((r    c                     t          |d          rzt          |t          t          t          f          sXd                     fd|D                       }t          |d          r&	 |                                 n&# t          $ r Y nw xY wn                     |          }|g _	         j
                            dd            d S )N__iter__r    c              3   B   K   | ]}                     |          V  d S r8   r   )rr   chunkr   s     r   	<genexpr>z'HttpResponse.content.<locals>.<genexpr>  s/      II%tu55IIIIIIr    r   text)hasattrr)   r,   r   r*   rt   r   r   r   r   __dict__r9   )r   r   r   s   `  r   r   zHttpResponse.content  s     5*%% 
	-jE:s+/
 /
 
	- hhIIII5IIIIIGug&& KKMMMM    D ooe,,G")&$'''''s   &A; ;
BBc                 D    | j                             | j        pd          S )Nr'   )r   r-   r3   rc   s    r   r   zHttpResponse.text  s    |""4<#:7;;;r    c                 *    t          | j                  S r8   )iterr   rc   s    r   r   zHttpResponse.__iter__  s    DO$$$r    c                 `    | j                             |                     |                     d S r8   )r   appendr   r   s     r   r   zHttpResponse.write  s*    tw7788888r    c                 *    t          | j                  S r8   )lenr   rc   s    r   r   zHttpResponse.tell  s    4<   r    c                     | j         S r8   )r   rc   s    r   getvaluezHttpResponse.getvalue  s
    |r    c                     dS )NTrE   rc   s    r   r   zHttpResponse.writable  s    tr    c                 :    |D ]}|                      |           d S r8   )r   )r   r   lines      r   r   zHttpResponse.writelines  s0     	 	DJJt	 	r    )r    )rH   rI   rJ   r   	streamingr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r   s   @r   r   r   m  s!         I     

 
 
E E E I) ) X) ^( ( ^(" < < _<% % %9 9 9! ! !          r    r   c                        e Zd ZdZdZd fd	Zd Zed             Zed             Z	ed             Z
e
j        d	             Z
d
 Zd Zd Zd Z xZS )StreamingHttpResponsea$  
    A streaming HTTP response class with an iterator as content.

    This should only be iterated once, when the response is streamed to the
    client. However, it can be appended to or replaced with a new iterator
    that wraps the original content (or yields entirely new content).
    TrE   c                 H     t                      j        |i | || _        d S r8   )r   r   streaming_content)r   r   r   r   r   s       r   r   zStreamingHttpResponse.__init__  s/    $)&))) "3r    c                 <    d| j         j        | j        | j        dz  S r   )r   rJ   r\   ry   rc   s    r   r   zStreamingHttpResponse.__repr__  s/    F>.+ 7J
 J
 
 	
r    c                 :    t          d| j        j        z            )NzMThis %s instance has no `content` attribute. Use `streaming_content` instead.AttributeErrorr   rH   rc   s    r   r   zStreamingHttpResponse.content  s'    +-1^-DE
 
 	
r    c                 :    t          d| j        j        z            )Nz)This %s instance has no `text` attribute.r   rc   s    r   r   zStreamingHttpResponse.text  s!    7$.:QQ
 
 	
r    c                 v      j         r j         fd} |            S t           j         j                  S )Nc                 R   K   2 3 d {V }                      |           W V   6 d S r8   r   )part	_iteratorr   s    r   awrapperz9StreamingHttpResponse.streaming_content.<locals>.awrapper  sV      "+ 0 0 0 0 0 0 0$//$/////// #,))s   &)is_asyncr  mapr   )r   r  r  s   ` @r   r   z'StreamingHttpResponse.streaming_content  sW    = 	8 I0 0 0 0 0 0 8::t777r    c                 0    |                      |           d S r8   )_set_streaming_contentrf   s     r   r   z'StreamingHttpResponse.streaming_content  s    ##E*****r    c                     	 t          |          | _        d| _        n+# t          $ r t	          |          | _        d| _        Y nw xY wt          |d          r!| j                            |j                   d S d S )NFTr   )	r   r  r  r]   aiterr   rW   r   r   rf   s     r   r	  z,StreamingHttpResponse._set_streaming_content  s    	!!%[[DN!DMM 	! 	! 	!"5\\DN DMMM	! 5'"" 	7"))%+66666	7 	7s    %AAc           
         	 t          | j                  S # t          $ r_ t          j        dt
          d           d }t          | j        t           t          |          | j	                                      cY S w xY w)NzStreamingHttpResponse must consume asynchronous iterators in order to serve them synchronously. Use a synchronous iterator instead.   
stacklevelc                 N   K   g }| 2 3 d {V }|                     |           6 |S r8   )r   )r  as_listr   s      r   to_listz/StreamingHttpResponse.__iter__.<locals>.to_list  sR      #, * * * * * * *%NN5)))) $-s   $)
r   r   r]   warningswarnWarningr  r   r   r  )r   r  s     r   r   zStreamingHttpResponse.__iter__  s    	V./// 	V 	V 	VMP	      t-C]7-C-CDN-S-S(T(TUUUUU	Vs    A&A?>A?c                   K   	 | j         2 3 d {V }|W V  6 d S # t          $ rP t          j        dt          d            t          t                    | j                    d {V D ]}|W V  Y d S w xY w)NzStreamingHttpResponse must consume synchronous iterators in order to serve them asynchronously. Use an asynchronous iterator instead.r  r  )r   r]   r  r  r  r   list)r   r  s     r   	__aiter__zStreamingHttpResponse.__aiter__  s      	"4       d




 544 
	 
	 
	MS	    2mD11$2HIIIIIIII  




  
	s     AA54A5c                 6    d                     | j                  S r   )rt   r   rc   s    r   r   zStreamingHttpResponse.getvalue  s    xx.///r    )rE   )rH   rI   rJ   r   r   r   r   r   r   r   r   r   r	  r   r  r   r   r   s   @r   r   r     s         I3 3 3 3 3 3
 
 
 
 
 X
 
 
 X

 8 8 X8 + + +	7 	7 	7V V V(   0 0 0 0 0 0 0r    r   c                   >     e Zd ZdZdZddd fd
Z fdZd Z xZS )	FileResponsez>
    A streaming HTTP response class optimized for files.
    i   Fri   )as_attachmentfilenamec                |    || _         || _        d|vp	|d         d u | _         t                      j        |i | d S )Nr_   )r  r  _no_explicit_content_typer   r   )r   r  r  r   r   r   s        r   r   zFileResponse.__init__(  sU    * &(JF>,Bd,J 	& 	$)&)))))r    c                     t          |d          s(d  _        t                                          |          S |x _        t          d          r j                            j                   t           fdd          }                                t                                          |           d S )Nreadr   c                  8                          j                  S r8   )r!  
block_sizefileliker   s   r   <lambda>z5FileResponse._set_streaming_content.<locals>.<lambda>8  s    X]]4?;; r    r    )	r   file_to_streamr   r	  rW   r   r   r   set_headers)r   r   r%  r   s   ` @r   r	  z#FileResponse._set_streaming_content0  s    uf%% 	9"&D7711%888)..h8W%% 	:"))(.999;;;;;SAA"""&&u-----r    c                     t          dd          }t          |t                    r|nd}t          d          o$t          d           p                                }t          d          r|rj                                }                    dt          j                                                   |z
   j	        d<                       |           nt          d          r7
                                j                                        z
   j	        d<   nt          j                            |          r<t          j                            |                                          z
   j	        d<   nd|rbt!          t#           fd	d                     j	        d<                       t%           j	        d                    t          j                   t          j                             j        p|          } j        rL|r@t-          j        |          \  }}d
ddddd                    ||          }|pd j	        d<   n
d j	        d<   t3           j        |          x}r| j	        d<   dS dS )z
        Set some common response headers (Content-Length, Content-Type, and
        Content-Disposition) based on the `filelike` response content.
        nameri   seekr   r   r   zContent-Length	getbufferc                  R    t                               j                            S r8   )r   r!  r#  r$  s   r   r&  z*FileResponse.set_headers.<locals>.<lambda>V  s    St!?!?@@ r    zapplication/x-brotlizapplication/x-bzipzapplication/x-compresszapplication/gzipzapplication/x-xz)brbzip2compressgzipxzzapplication/octet-streamrR   zContent-DispositionN)getattrr)   r*   r   r   r   r+  ioSEEK_ENDrT   r,  nbytesosr   existsgetsizesumr   r[   basenamer  r  	mimetypes
guess_typerb   r   r  )r   r%  r  r   initial_positionr_   encodingcontent_dispositions   ``      r   r(  zFileResponse.set_headers<  s   
 8VR00)(C88@88b8V,, 
*---D1B1B1D1D 	 8V$$ 	M #+==?? a---19CS1S-..////;// &&((/(--//A -.. )) GOOH--? -.  	M-0@@@@@!DD. .DL)* MM3t|,<=>>>LLL7##DM$=X>>) 	J J)2)=h)G)G&h 11 8.,    #h--  !>$> ^,, 0J^,"<#
 #
 
 	F 3FDL.///	F 	Fr    )	rH   rI   rJ   r   r#  r   r	  r(  r   r   s   @r   r  r  !  s          J,1B * * * * * * *
. 
. 
. 
. 
.4F 4F 4F 4F 4F 4F 4Fr    r  c                   F     e Zd Zg dZd fd	Z ed           Zd Z xZS )HttpResponseRedirectBase)httphttpsftpFc                     t                      j        |i | t          |          | d<   t          t	          |                    }|r| j        | _        |j        r%|j        | j        vrt          d|j        z            d S d S )NLocationz)Unsafe redirect to URL with protocol '%s')
r   r   r   r   r*   status_code_preserve_requestr\   schemeallowed_schemesr   )r   redirect_topreserve_requestr   r   parsedr   s         r   r   z!HttpResponseRedirectBase.__init__v  s    $)&)))%k22Z#k**++ 	A#@D= 	V]$2FFF$;fmK  	 	FFr    c                     | d         S )NrG  rE   rc   s    r   r&  z!HttpResponseRedirectBase.<lambda>  s    Z 0 r    c                 H    d| j         j        | j        | j        | j        dz  S )NzD<%(cls)s status_code=%(status_code)d%(content_type)s, url="%(url)s">)r   r\   r_   url)r   rH   r\   ry   rP  rc   s    r   r   z!HttpResponseRedirectBase.__repr__  s2    R~.#/ $ ;x	 	
r    rG   )	rH   rI   rJ   rJ  r   r   rP  r   r   r   s   @r   rB  rB  s  sl        ...O	 	 	 	 	 	 (00
1
1C	
 	
 	
 	
 	
 	
 	
r    rB  c                       e Zd ZdZdZdS )HttpResponseRedirecti.  i3  NrH   rI   rJ   r\   rH  rE   r    r   rR  rR            K#&   r    rR  c                       e Zd ZdZdZdS )HttpResponsePermanentRedirecti-  i4  NrS  rE   r    r   rV  rV    rT  r    rV  c                   L     e Zd ZdZ fdZej        j        d             Z xZS )HttpResponseNotModifiedi0  c                 @     t                      j        |i | | d= d S )Nzcontent-type)r   r   )r   r   r   r   s      r   r   z HttpResponseNotModified.__init__  s-    $)&)))   r    c                 6    |rt          d          g | _        d S )Nz7You cannot set content to a 304 (Not Modified) response)r   r   rf   s     r   r   zHttpResponseNotModified.content  s,     	 I   r    )	rH   rI   rJ   r\   r   r   r   r   r   r   s   @r   rX  rX    s_        K! ! ! ! !    !     r    rX  c                       e Zd ZdZdS )HttpResponseBadRequesti  NrH   rI   rJ   r\   rE   r    r   r\  r\            KKKr    r\  c                       e Zd ZdZdS )HttpResponseNotFoundi  Nr]  rE   r    r   r`  r`    r^  r    r`  c                       e Zd ZdZdS )HttpResponseForbiddeni  Nr]  rE   r    r   rb  rb    r^  r    rb  c                   (     e Zd ZdZ fdZd Z xZS )HttpResponseNotAllowedi  c                 j     t                      j        |i | d                    |          | d<   d S )Nz, Allow)r   r   rt   )r   permitted_methodsr   r   r   s       r   r   zHttpResponseNotAllowed.__init__  s9    $)&)))		"344Wr    c                 J    d| j         j        | j        | j        | d         dz  S )NzC<%(cls)s [%(methods)s] status_code=%(status_code)d%(content_type)s>rf  )r   r\   r_   methodsr   rc   s    r   r   zHttpResponseNotAllowed.__repr__  s6    T>*+ 7G}	X
 X
 
 	
r    )rH   rI   rJ   r\   r   r   r   r   s   @r   rd  rd    sL        K5 5 5 5 5
 
 
 
 
 
 
r    rd  c                       e Zd ZdZdS )HttpResponseGonei  Nr]  rE   r    r   rk  rk    r^  r    rk  c                       e Zd ZdZdS )HttpResponseServerErrori  Nr]  rE   r    r   rm  rm    r^  r    rm  c                       e Zd ZdS )Http404NrL   rE   r    r   ro  ro    rM   r    ro  c                   *     e Zd ZdZeddf fd	Z xZS )JsonResponseaH  
    An HTTP response class that consumes data to be serialized to JSON.

    :param data: Data to be dumped into json. By default only ``dict`` objects
      are allowed to be passed due to a security flaw before ECMAScript 5. See
      the ``safe`` parameter for more information.
    :param encoder: Should be a json encoder class. Defaults to
      ``django.core.serializers.json.DjangoJSONEncoder``.
    :param safe: Controls if only ``dict`` objects may be serialized. Defaults
      to ``True``.
    :param json_dumps_params: A dictionary of kwargs passed to json.dumps().
    TNc                     |r$t          |t                    st          d          |i }|                    dd           t	          j        |fd|i|} t                      j        dd|i| d S )NzTIn order to allow non-dict objects to be serialized set the safe parameter to False.r_   zapplication/jsonr   r   rE   )r)   dictr]   rF   jsondumpsr   r   )r   r   encodersafejson_dumps_paramsr   r   s         r   r   zJsonResponse.__init__  s      	
4.. 	+   $ ".*<===z$AAGA/@AA00000000r    )rH   rI   rJ   r   r   r   r   r   s   @r   rq  rq    sR           "1 1 1 1 1 1 1 1 1 1r    rq  )@r   r4  rt  r<  r7  rer0   r   r  email.headerr   http.clientr   urllib.parser   asgiref.syncr   r   django.confr   django.corer	   r
   django.core.exceptionsr   django.core.serializers.jsonr   django.http.cookier   django.utilsr   django.utils.datastructuresr   django.utils.encodingr   django.utils.functionalr   django.utils.httpr   r   django.utils.regex_helperr   Irj   r   rV   r.   rO   r   r   r  rB  rR  rV  rX  r\  r`  rb  rd  rk  rm  r   ro  rq  rE   r    r   <module>r     s    				      				 				 



         ! ! ! ! ! ! ! ! ! ! ! ! 5 5 5 5 5 5 5 5             ( ( ( ( ( ( ( ( 5 5 5 5 5 5 : : : : : : + + + + + + ! ! ! ! ! ! > > > > > > , , , , , , 3 3 3 3 3 3 C C C C C C C C 6 6 6 6 6 6 0 0'! ! 
? ? ? ? ?, ? ? ?D	 	 	 	 	Z 	 	 	CT CT CT CT CT CT CT CTLF F F F F# F F FRh0 h0 h0 h0 h0, h0 h0 h0VOF OF OF OF OF( OF OF OFd
 
 
 
 
| 
 
 
8' ' ' ' '3 ' ' '
' ' ' ' '$< ' ' '
    l        \       <       L   
 
 
 
 
\ 
 
 
     |       l   	 	 	 	 	i 	 	 	1 1 1 1 1< 1 1 1 1 1r    