
     h.]                        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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#  e#dej$                  Z% G d de          Z& G d de'          Z( G d d          Z) G d de)          Z* G d de)          Z+ G d de+          Z, G d de*          Z- G d de-          Z. G d  d!e-          Z/ G d" d#e*          Z0 G d$ d%e*          Z1 G d& d'e*          Z2 G d( d)e*          Z3 G d* d+e*          Z4 G d, d-e*          Z5 G d. d/e*          Z6 G d0 d1e7          Z8 G d2 d3e*          Z9dS )4    N)Header)	responses)quoteurlparse)settings)signalssigning)DisallowedRedirect)DjangoJSONEncoder)SimpleCookie)timezone)CaseInsensitiveMapping)
iri_to_uri)	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       P/var/www/html/Sam_Eipo/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 )   
   z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__O   s    r   c                     |                      |d          }|                      |dd          }||f| j        |                                <   d S )Nasciilatin-1T)r0   )r2   r   lowerr   r6   r   s      r   __setitem__zResponseHeaders.__setitem__R   sO    &&sG44((	t(LL$'<CIIKK   r   Nc                 \    | j                             |                                |          S r4   )r   r5   r;   )r   r6   defaults      r   r5   zResponseHeaders.popW   s     {syy{{G444r   c                     || vr|| |<   d S d S r4    r<   s      r   
setdefaultzResponseHeaders.setdefaultZ   s    d??DIII ?r   )Fr4   )	__name__
__module____qualname__r   r2   r7   r=   r5   rB   rA   r   r   r   r      sy        % % %% % % %N  0 0 0
5 5 5 5    r   r   c                       e Zd ZdS )r*   NrC   rD   rE   rA   r   r   r*   r*   _           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_charsetr/   
ValueError_resource_closers_handler_classr   cookiesclosedintstatus_code	TypeError_reason_phrase)r   content_typestatusr.   r/   rO   s         r   r   zHttpResponseBase.__init__m   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)rY   r   getrW   r   s    r   reason_phrasezHttpResponseBase.reason_phrase   s,    *&& }T-/DEEEr   c                     || _         d S r4   )rY   r   r   s     r   r_   zHttpResponseBase.reason_phrase   s    #r   c                     | j         | j         S | j                            d          x}r8t                              |          x}r|d                             dd          S t          j        S )NrM   r/   " )rP   rO   r]   _charset_from_content_type_researchreplacer   DEFAULT_CHARSET)r   rZ   matcheds      r   r/   zHttpResponseBase.charset   sr    =$=   <++N;;;< 	;7>>|LLLw ;
 y)11#r:::''r   c                     || _         d S r4   )rP   ra   s     r   r/   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 )r9   s   : r:   )r'   ).0r6   r   s      r   
<listcomp>z6HttpResponseBase.serialize_headers.<locals>.<listcomp>   sN       C 

7##e+ell9.E.EE  r   )joinrO   itemsr^   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 )NrM   z, "%s"rd   rO   r^   s    r   _content_type_for_reprz'HttpResponseBase._content_type_for_repr   s-     -- t|N333	
r   c                     || j         |<   d S r4   rs   )r   r   r   s      r   r=   zHttpResponseBase.__setitem__   s    $Vr   c                     | j         |= d S r4   rs   r   r   s     r   r7   zHttpResponseBase.__delitem__   s    L   r   c                     | j         |         S r4   rs   rw   s     r   __getitem__zHttpResponseBase.__getitem__   s    |F##r   c                     || j         v S )z$Case-insensitive check for a header.rs   rw   s     r   
has_headerzHttpResponseBase.has_header   s    %%r   c                 4    | j                                         S r4   )rO   rp   r^   s    r   rp   zHttpResponseBase.items   s    |!!###r   c                 8    | j                             ||          S r4   )rO   r]   )r   r   	alternates      r   r]   zHttpResponseBase.get   s    |	222r   rd   /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 expiresrd   zmax-agepathdomainTsecurehttponly)laxnonestrictz,samesite must be "lax", "none", or "strict".samesite)rT   r%   datetimer   is_naive
make_awareutcnow	timedeltarQ   maxdaysr   total_secondsrV   r   timer;   )r   r6   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  21 = = ==&$%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)rO   rB   r<   s      r   rB   zHttpResponseBase.setdefault  s     U+++++r   c                 v    t          j        ||z                                 |          } | j        ||fi |S )N)salt)r	   get_cookie_signersignr   )r   r6   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   r6   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'   r/   ra   s     r   
make_byteszHttpResponseBase.make_bytes.  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)rR   	ExceptionclearrU   r   request_finishedsendrS   )r   closers     r   closezHttpResponseBase.closeC  s    , 	 	F    	$$&&& %%T-@%AAAAAs   

##c                 :    t          d| j        j        z            Nz This %s instance is not writableOSError	__class__rC   r   contents     r   writezHttpResponseBase.writeN      84>;RRSSSr   c                     d S r4   rA   r^   s    r   flushzHttpResponseBase.flushQ  s    r   c                 :    t          d| j        j        z            )Nz)This %s instance cannot tell its positionr   r^   s    r   tellzHttpResponseBase.tellT  s!    7$.:QQ
 
 	
r   c                     dS NFrA   r^   s    r   readablezHttpResponseBase.readable\      ur   c                     dS r   rA   r^   s    r   seekablezHttpResponseBase.seekable_  r   r   c                     dS r   rA   r^   s    r   writablezHttpResponseBase.writableb  r   r   c                 :    t          d| j        j        z            r   r   )r   liness     r   
writelineszHttpResponseBase.writelinese  r   r   )NNNNNr4   )rd   NNr   NFFN)rd   )r   NN)!rC   rD   rE   __doc__rW   r   propertyr_   setterr/   rq   	__bytes__rt   r=   r7   ry   r{   __contains__rp   r]   r   rB   r   r   r   r   r   r   r   r   r   r   r   rA   r   r   rJ   rJ   c   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   rJ   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
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 r4   )superr   r   )r   r   argsr   r   s       r   r   zHttpResponse.__init__r  s*    $)&)))r   c                 <    d| j         j        | j        | j        dz  S Nz5<%(cls)s status_code=%(status_code)d%(content_type)s>)clsrW   rZ   r   rC   rW   rt   r^   s    r   __repr__zHttpResponse.__repr__w  s/    F>*+ 7J
 J
 
 	
r   c                 @    |                                  dz   | j        z   S )z6Full HTTP message, including headers, as a bytestring.s   

)rq   r   r^   s    r   	serializezHttpResponse.serialize~  s     %%''+5DDr   c                 6    d                     | j                  S Nr   )ro   
_containerr^   s    r   r   zHttpResponse.content  s    xx(((r   c                 V    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 _	        d S )N__iter__r   c              3   B   K   | ]}                     |          V  d S r4   )r   )rm   chunkr   s     r   	<genexpr>z'HttpResponse.content.<locals>.<genexpr>  s/      II%tu55IIIIIIr   r   )
hasattrr%   r(   r   r&   ro   r   r   r   r   )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                 *    t          | j                  S r4   )iterr   r^   s    r   r   zHttpResponse.__iter__  s    DO$$$r   c                 `    | j                             |                     |                     d S r4   )r   appendr   r   s     r   r   zHttpResponse.write  s*    tw7788888r   c                 *    t          | j                  S r4   )lenr   r^   s    r   r   zHttpResponse.tell  s    4<   r   c                     | j         S r4   )r   r^   s    r   getvaluezHttpResponse.getvalue  s
    |r   c                     dS )NTrA   r^   s    r   r   zHttpResponse.writable  s    tr   c                 :    |D ]}|                      |           d S r4   )r   )r   r   lines      r   r   zHttpResponse.writelines  s0     	 	DJJt	 	r   )r   )rC   rD   rE   r   	streamingr   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r   s   @r   r   r   i  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	j
        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).
    TrA   c                 H     t                      j        |i | || _        d S r4   )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   rE   rW   rt   r^   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   rC   r^   s    r   r   zStreamingHttpResponse.content  s'    +-1^-DE
 
 	
r   c                 6    t          | j        | j                  S r4   )mapr   	_iteratorr^   s    r   r   z'StreamingHttpResponse.streaming_content  s    4?DN333r   c                 0    |                      |           d S r4   )_set_streaming_contentra   s     r   r   z'StreamingHttpResponse.streaming_content  s    ##E*****r   c                     t          |          | _        t          |d          r!| j                            |j                   d S d S )Nr   )r   r   r   rR   r   r   ra   s     r   r   z,StreamingHttpResponse._set_streaming_content  sJ    e5'"" 	7"))%+66666	7 	7r   c                     | j         S r4   )r   r^   s    r   r   zStreamingHttpResponse.__iter__  s    %%r   c                 6    d                     | j                  S r   )ro   r   r^   s    r   r   zStreamingHttpResponse.getvalue  s    xx.///r   )rA   )rC   rD   rE   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
 4 4 X4 + + +7 7 7& & &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   Frd   )as_attachmentfilenamec                |    || _         || _        d|vp	|d         d u | _         t                      j        |i | d S )NrZ   )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 r4   )r  
block_sizefileliker   s   r   <lambda>z5FileResponse._set_streaming_content.<locals>.<lambda>  s    X]]4?;; r   r   )	r   file_to_streamr   r   rR   r   r   r   set_headers)r   r   r	  r   s   ` @r   r   z#FileResponse._set_streaming_content  s    uf%% 	9"&D7711%888)..h8W%% 	:"))(.999;;;;;SAA"""&&u-----r   c                 J    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        rJ|r>t-          j        |          \  }}d
ddd                    ||          }|pd j	        d<   n
d j	        d<   |r j        rdnd}	 |                    d           d                    |                    dd                              dd                    }n2# t:          $ r% d                    t=          |                    }Y nw xY wd                    ||           j	        d<   dS  j        rd 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.
        namerd   seekr   r   r   zContent-Length	getbufferc                  R    t                               j                            S r4   )r   r  r  r  s   r   r
  z*FileResponse.set_headers.<locals>.<lambda>  s    St!?!?@@ r   zapplication/x-bzipzapplication/gzipzapplication/x-xz)bzip2gzipxzzapplication/octet-streamrM   
attachmentinliner9   zfilename="{}"\z\\rc   z\"zfilename*=utf-8''{}z{}; {}zContent-DispositionN)getattrr%   r&   r   r   r   r  ioSEEK_ENDrO   r  nbytesosr   existsgetsizesumr   rV   basenamer  r  	mimetypes
guess_typer]   r   r'   formatrg   UnicodeEncodeErrorr   )	r   r	  r  r   initial_positionrZ   encodingdisposition	file_exprs	   ``       r   r  zFileResponse.set_headers  sX   
 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 2.,    #h--	  !>$> ^,, 0J^, 	?*.*<J,,(KJ(((+22$$T622::3FF 		 & J J J188xII			J2://Y3 3DL.///  	?2>DL.///	? 	?s   +AJ> >,K-,K-)	rC   rD   rE   r   r  r   r   r  r   r   s   @r   r   r     s          J,1B * * * * * * *
. 
. 
. 
. 
.<? <? <? <? <? <? <?r   r   c                   D     e Zd Zg dZ fdZ ed           Zd Z xZS )HttpResponseRedirectBase)httphttpsftpc                      t                      j        |i | t          |          | d<   t          t	          |                    }|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&   schemeallowed_schemesr
   )r   redirect_tor   r   parsedr   s        r   r   z!HttpResponseRedirectBase.__init__>  s    $)&)))%k22Z#k**++= 	V]$2FFF$;fmK  	 	FFr   c                     | d         S )Nr/  rA   r^   s    r   r
  z!HttpResponseRedirectBase.<lambda>G  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   rW   rZ   url)r   rC   rW   rt   r6  r^   s    r   r   z!HttpResponseRedirectBase.__repr__I  s2    R~.#/ $ ;x	 	
r   )	rC   rD   rE   r1  r   r   r6  r   r   r   s   @r   r*  r*  ;  sg        ...O     (00
1
1C	
 	
 	
 	
 	
 	
 	
r   r*  c                       e Zd ZdZdS )HttpResponseRedirecti.  NrC   rD   rE   rW   rA   r   r   r8  r8  U          KKKr   r8  c                       e Zd ZdZdS )HttpResponsePermanentRedirecti-  Nr9  rA   r   r   r<  r<  Y  r:  r   r<  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   ra   s     r   r   zHttpResponseNotModified.contentd  s,     	 I   r   )	rC   rD   rE   rW   r   r   r   r   r   r   s   @r   r>  r>  ]  s_        K! ! ! ! !    !     r   r>  c                       e Zd ZdZdS )HttpResponseBadRequesti  Nr9  rA   r   r   rB  rB  m  r:  r   rB  c                       e Zd ZdZdS )HttpResponseNotFoundi  Nr9  rA   r   r   rD  rD  q  r:  r   rD  c                       e Zd ZdZdS )HttpResponseForbiddeni  Nr9  rA   r   r   rF  rF  u  r:  r   rF  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   ro   )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>rJ  )r   rW   rZ   methodsr   r^   s    r   r   zHttpResponseNotAllowed.__repr__  s6    T>*+ 7G}	X
 X
 
 	
r   )rC   rD   rE   rW   r   r   r   r   s   @r   rH  rH  y  sL        K5 5 5 5 5
 
 
 
 
 
 
r   rH  c                       e Zd ZdZdS )HttpResponseGonei  Nr9  rA   r   r   rO  rO    r:  r   rO  c                       e Zd ZdZdS )HttpResponseServerErrori  Nr9  rA   r   r   rQ  rQ    r:  r   rQ  c                       e Zd ZdS )Http404NrG   rA   r   r   rS  rS    rH   r   rS  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.rZ   zapplication/jsonr   r   rA   )r%   dictrX   rB   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   )rC   rD   rE   r   r   r   r   r   s   @r   rU  rU    sR           "1 1 1 1 1 1 1 1 1 1r   rU  ):r   r  rX  r!  r  rer,   r   email.headerr   http.clientr   urllib.parser   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.httpr   django.utils.regex_helperr   Ire   r   rQ   r*   rJ   r   r   r   r*  r8  r<  r>  rB  rD  rF  rH  rO  rQ  r   rS  rU  rA   r   r   <module>rl     s    				      				 				 



        ! ! ! ! ! ! ( ( ( ( ( ( ( (             ( ( ( ( ( ( ( ( 5 5 5 5 5 5 : : : : : : + + + + + + ! ! ! ! ! ! > > > > > > , , , , , , ' ' ' ' ' ' 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A A A A A# A A AH10 10 10 10 10, 10 10 10hW? W? W? W? W?( W? W? W?t
 
 
 
 
| 
 
 
4    3       $<       l        \       <       L   
 
 
 
 
\ 
 
 
     |       l   	 	 	 	 	i 	 	 	1 1 1 1 1< 1 1 1 1 1r   