Ë
    ¹ûàgc  ã                   ó°  — 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$m%Z% d dl&m'Z'  e'dejP                  «      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/«      Z0 G d„ de.«      Z1 G d„ d e1«      Z2 G d!„ d"e1«      Z3 G d#„ d$e.«      Z4 G d%„ d&e.«      Z5 G d'„ d(e.«      Z6 G d)„ d*e.«      Z7 G d+„ d,e.«      Z8 G d-„ d.e.«      Z9 G d/„ d0e.«      Z: G d1„ d2e;«      Z< G d3„ d4e.«      Z=y)5é    N)ÚHeader)Ú	responses)Úurlparse)Úasync_to_syncÚsync_to_async)Úsettings)ÚsignalsÚsigning)ÚDisallowedRedirect)ÚDjangoJSONEncoder)ÚSimpleCookie)Útimezone)ÚCaseInsensitiveMapping)Ú
iri_to_uri)Úcontent_disposition_headerÚ	http_date)Ú_lazy_re_compilez ;\s*charset=(?P<charset>[^\s;]+)c                   ó4   — e Zd Zd„ Zdd„Zd„ Zd„ Zd	d„Zd„ Zy)
ÚResponseHeadersc                 óT   — i | _         |r| j                  |«      D ]
  \  }}|| |<   Œ yy)zm
        Populate the initial data using __setitem__ to ensure values are
        correctly encoded.
        N)Ú_storeÚ_unpack_items)ÚselfÚdataÚheaderÚvalues       úR/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/django/http/response.pyÚ__init__zResponseHeaders.__init__!   s:   € ð
 ˆŒÙØ!%×!3Ñ!3°DÓ!9ò %‘�˜Ø$��V’ñ%ð ó    c                 ó2  — 	 t        |t        «      r|j                  |«       n>t        |t        «      r|j	                  |«      }nt        |«      }|j                  |«       d|v sd|v rt        d|›d�«      ‚	 |S # 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                  ¬«      j                  «       }n|xj                  d	|z  z  c_
        ‚ Y d
}~|S d
}~ww xY w)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Õ%Ü˜E¤5Ô)àŸ™ WÓ-‘ä˜E›
�à—‘˜WÔ%Ø�u‰} ¨¡Ü$Ø@ÀÀ	ÈÐKóð ð !.ð( ˆøô! ò 	ô
 ˜5¤%Ô(¨e°u©nÀÈÁÜ˜5¤#Ô&¨D°E©M¸TÀU¹]ä$Ø@ÀÀ	ÈÐKóàðñ Ü˜u g¼#¿+¹+ÔF×MÑMÓO‘à—’ÐJÈWÑTÑT•Øó ð ˆûð!	ús   ‚A7A< Á<	DÂBDÄDc                 ó&   — | j                  |«       y ©N)Úpop)r   Úkeys     r   Ú__delitem__zResponseHeaders.__delitem__R   s   € Ø�‰��r   c                 óŽ   — | j                  |d«      }| j                  |dd¬«      }||f| j                  |j                  «       <   y )NÚasciiúlatin-1T)r2   )r4   r   Úlower©r   r8   r   s      r   Ú__setitem__zResponseHeaders.__setitem__U   sC   € Ø×&Ñ& s¨GÓ4ˆØ×(Ñ(¨°	ÀtÐ(ÓLˆØ$'¨ <ˆ�‰�C—I‘I“KÒ r   Nc                 óV   — | j                   j                  |j                  «       |«      S r6   )r   r7   r=   )r   r8   Údefaults      r   r7   zResponseHeaders.popZ   s   € Ø�{‰{�‰˜sŸy™y›{¨GÓ4Ð4r   c                 ó   — || vr|| |<   y y r6   © r>   s      r   Ú
setdefaultzResponseHeaders.setdefault]   s   € Ø�d‰?ØˆD�ŠIð r   )Fr6   )	Ú__name__Ú
__module__Ú__qualname__r   r4   r9   r?   r7   rD   rC   r   r   r   r       s!   „ ò%ó%òNò0ó
5ór   r   c                   ó   — e Zd Zy)r,   N©rE   rF   rG   rC   r   r   r,   r,   b   ó   „ Ør   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 y)#Ú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        |«      | _        d| j                  cxk  rdk  st	        d«      ‚ t	        d«      ‚|| _        y # t        t        f$ r t        d«      ‚w xY w)	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Ú_charsetr1   Ú
ValueErrorÚ_resource_closersÚ_handler_classr   ÚcookiesÚclosedÚintÚstatus_codeÚ	TypeErrorÚ_reason_phrase)r   Úcontent_typeÚstatusr0   r1   rQ   s         r   r   zHttpResponseBase.__init__p   sö   € ô ' wÓ/ˆŒØˆŒØ §¡Ñ-ØÐ#Ø!4°T·\±\°NÐC�Ø+7ˆD�L‰L˜Ò(ÙÜð8óð ð "$ˆÔð #ˆÔÜ#“~ˆŒØˆŒØÐðHÜ#& v£;�Ô ð ˜$×*Ñ*Ô1¨cÒ1Ü Ð!WÓXÐXð 2Ü Ð!WÓXÐXØ$ˆÕøô ¤	Ð*ò HÜÐ FÓGÐGðHús   Á;B? Â?Cc                 ór   — | j                   �| j                   S t        j                  | j                  d«      S )NzUnknown Status Code)r[   r   ÚgetrY   ©r   s    r   Úreason_phrasezHttpResponseBase.reason_phraseŽ   s4   € à×ÑÐ*Ø×&Ñ&Ð&ô �}‰}˜T×-Ñ-Ð/DÓEÐEr   c                 ó   — || _         y r6   )r[   ©r   r   s     r   ra   zHttpResponseBase.reason_phrase–   s
   € à#ˆÕr   c                 óä   — | j                   �| j                   S | j                  j                  d«      x}r,t        j	                  |«      x}r|d   j                  dd«      S t        j                  S )NrO   r1   ú"Ú )rR   rQ   r_   Ú_charset_from_content_type_reÚsearchÚreplacer   ÚDEFAULT_CHARSET)r   r\   Úmatcheds      r   r1   zHttpResponseBase.charsetš   sn   € à�=‰=Ð$Ø—=‘=Ð ð  Ÿ<™<×+Ñ+¨NÓ;Ð;ˆ<Ð;Ü7×>Ñ>¸|ÓLÐLˆwÐLð
 ˜yÑ)×1Ñ1°#°rÓ:Ð:Ü×'Ñ'Ð'r   c                 ó   — || _         y r6   )rR   rc   s     r   r1   zHttpResponseBase.charset©   s	   € àˆ�r   c           
      óÎ   — dj                  | j                  j                  «       D ��cg c]+  \  }}|j                  d«      dz   |j                  d«      z   ‘Œ- c}}«      S c c}}w )zHTTP headers as a bytestring.s   
r;   s   : r<   )ÚjoinrQ   Úitemsr)   r>   s      r   Úserialize_headersz"HttpResponseBase.serialize_headers­   s]   € à�|‰|ð #'§,¡,×"4Ñ"4Ó"6÷á�C˜ð —
‘
˜7Ó# eÑ+¨e¯l©l¸9Ó.EÓEóó
ð 	
ùós   ©0A!
c                 óF   — d| j                   v rd| j                   d   z  S dS )NrO   z, "%s"rf   ©rQ   r`   s    r   Ú_content_type_for_reprz'HttpResponseBase._content_type_for_repr¸   s2   € ð  §¡Ñ-ð �t—|‘| NÑ3Ñ3ð	
ð ð	
r   c                 ó"   — || j                   |<   y r6   rr   )r   r   r   s      r   r?   zHttpResponseBase.__setitem__À   s   € Ø$ˆ�‰�VÒr   c                 ó   — | j                   |= y r6   rr   ©r   r   s     r   r9   zHttpResponseBase.__delitem__Ã   s   € Ø�L‰L˜Ñ r   c                 ó    — | j                   |   S r6   rr   rv   s     r   Ú__getitem__zHttpResponseBase.__getitem__Æ   s   € Ø�|‰|˜FÑ#Ð#r   c                 ó   — || j                   v S )z$Case-insensitive check for a header.rr   rv   s     r   Ú
has_headerzHttpResponseBase.has_headerÉ   s   € à˜Ÿ™Ð%Ð%r   c                 ó6   — | j                   j                  «       S r6   )rQ   ro   r`   s    r   ro   zHttpResponseBase.itemsÏ   s   € Ø�|‰|×!Ñ!Ó#Ð#r   c                 ó:   — | j                   j                  ||«      S r6   )rQ   r_   )r   r   Ú	alternates      r   r_   zHttpResponseBase.getÒ   s   € Ø�|‰|×Ñ ¨	Ó2Ð2r   c
                 ó4  — || j                   |<   |�út        |t        j                  «      rÍt        j                  |«      r.t        j
                  |t        j                  j                  «      }|t        j                  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<   |�wt        |t        j                  «      r|j                  «       }t        |«      | j                   |   d
<   |s0t        t!        j                   «       |z   «      | j                   |   d<   |�|| j                   |   d<   |�|| j                   |   d<   |rd| j                   |   d<   |rd| j                   |   d<   |	r0|	j#                  «       dvrt        d«      ‚|	| j                   |   d<   yy)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   i€Q Úexpiresrf   zmax-ageÚpathÚdomainTÚsecureÚhttponly)ÚlaxÚnoneÚstrictz,samesite must be "lax", "none", or "strict".Úsamesite)rV   r'   Údatetimer   Úis_naiveÚ
make_awareÚutcÚnowÚ	timedeltarS   ÚmaxÚdaysr�   Útotal_secondsrX   r   Útimer=   )r   r8   r   Úmax_ager‚   rƒ   r„   r…   r†   rŠ   Údeltas              r   Ú
set_cookiezHttpResponseBase.set_cookieÕ   sæ  € ð2 "ˆ�‰�SÑØÐÜ˜'¤8×#4Ñ#4Ô5Ü×$Ñ$ WÔ-Ü&×1Ñ1°'¼8×;LÑ;L×;PÑ;PÓQ�GØ¤(×"3Ñ"3×"7Ñ"7¼8×;LÑ;L×;PÑ;PÐ"7Ó"QÑQ�ð œ×+Ñ+°AÔ6Ñ6�à�ØÐ&Ü$Ð%VÓWÐWÜ˜a §¡¨eÑ!3°e·m±mÑ!CÓD‘à/6�—‘˜SÑ! )Ò,à+-ˆD�L‰L˜Ñ˜iÑ(ØÐÜ˜'¤8×#5Ñ#5Ô6Ø!×/Ñ/Ó1�Ü+.¨w«<ˆD�L‰L˜Ñ˜iÑ(áÜ/8¼¿¹»ÀwÑ9NÓ/O�—‘˜SÑ! )Ñ,ØÐØ(,ˆD�L‰L˜Ñ˜fÑ%ØÐØ*0ˆD�L‰L˜Ñ˜hÑ'ÙØ*.ˆD�L‰L˜Ñ˜hÑ'ÙØ,0ˆD�L‰L˜Ñ˜jÑ)ÙØ�~‰~ÓÐ'@Ñ@Ü Ð!OÓPÐPØ,4ˆD�L‰L˜Ñ˜jÒ)ð r   c                 ó<   — | j                   j                  ||«       y)z,Set a header unless it has already been set.N)rQ   rD   r>   s      r   rD   zHttpResponseBase.setdefault  s   € à�‰×Ñ  UÕ+r   c                 óz   — t        j                  ||z   ¬«      j                  |«      } | j                  ||fi |¤ŽS )N)Úsalt)r
   Úget_cookie_signerÚsignr—   )r   r8   r   rš   Úkwargss        r   Úset_signed_cookiez"HttpResponseBase.set_signed_cookie  s9   € Ü×)Ñ)¨s°T©zÔ:×?Ñ?ÀÓFˆØˆt�‰˜s EÑ4¨VÑ4Ð4r   c           	      óˆ   — |j                  d«      xs |xr |j                  «       dk(  }| j                  |d|||d|¬«       y )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   r8   rƒ   r„   rŠ   r…   s         r   Údelete_cookiezHttpResponseBase.delete_cookie  sW   € ð
 —‘Ð 8Ó9ò 
ØÒ3˜Ÿ™Ó)¨VÑ3ð 	ð 	�‰ØØØØØØ3Øð 	õ 	
r   c                 óô   — t        |t        t        f«      rt        |«      S t        |t        «      r$t        |j	                  | j
                  «      «      S t        |«      j	                  | j
                  «      S )z=Turn a value into a bytestring encoded in the output charset.)r'   r*   Ú
memoryviewr(   r)   r1   rc   s     r   Ú
make_byteszHttpResponseBase.make_bytes1  sX   € ô �eœe¤ZÐ0Ô1Ü˜“<ÐÜ�eœSÔ!Ü˜Ÿ™ d§l¡lÓ3Ó4Ð4ä�5‹z× Ñ  §¡Ó.Ð.r   c                 óê   — | j                   D ]
  }	  |«        Œ | j                   j                  «        d| _        t        j
                  j                  | j                  ¬«       y # t        $ r Y Œdw xY w)NT)Úsender)rT   Ú	ExceptionÚclearrW   r	   Úrequest_finishedÚsendrU   )r   Úclosers     r   ÚclosezHttpResponseBase.closeF  sm   € Ø×,Ñ,ò 	ˆFðÙ•ð	ð 	×Ñ×$Ñ$Ô&ØˆŒÜ× Ñ ×%Ñ%¨T×-@Ñ-@Ð%ÕAøô ò Ùðús   ‘A&Á&	A2Á1A2c                 óF   — t        d| j                  j                  z  «      ‚©Nz This %s instance is not writable©ÚOSErrorÚ	__class__rE   ©r   Úcontents     r   ÚwritezHttpResponseBase.writeQ  ó   € ÜÐ8¸4¿>¹>×;RÑ;RÑRÓSÐSr   c                  ó   — y r6   rC   r`   s    r   ÚflushzHttpResponseBase.flushT  s   € Ør   c                 óF   — t        d| j                  j                  z  «      ‚)Nz)This %s instance cannot tell its positionr¯   r`   s    r   ÚtellzHttpResponseBase.tellW  s!   € ÜØ7¸$¿.¹.×:QÑ:QÑQó
ð 	
r   c                  ó   — y©NFrC   r`   s    r   ÚreadablezHttpResponseBase.readable_  ó   € Ør   c                  ó   — yr»   rC   r`   s    r   ÚseekablezHttpResponseBase.seekableb  r½   r   c                  ó   — yr»   rC   r`   s    r   ÚwritablezHttpResponseBase.writablee  r½   r   c                 óF   — t        d| j                  j                  z  «      ‚r®   r¯   )r   Úliness     r   Ú
writelineszHttpResponseBase.writelinesh  rµ   r   )NNNNNr6   )rf   NNú/NFFN)rf   )rÅ   NN)!rE   rF   rG   Ú__doc__rY   r   Úpropertyra   Úsetterr1   rp   Ú	__bytes__rs   r?   r9   rx   rz   Ú__contains__ro   r_   r—   rD   rž   r¡   r¤   r¬   r´   r·   r¹   r¼   r¿   rÁ   rÄ   rC   r   r   rL   rL   f   s  „ ñð €Kð RVó%ð< ñFó ðFð ×Ññ$ó ð$ð ñ(ó ð(ð ‡^�^ñó ðò
ð "€Iàñ
ó ð
ò%ò!ò$ò&ð €Lò$ó3ð ØØØØØØØó>5ò@,ó5ó
ò(/ò*	BòTòò
òòòóTr   rL   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.
    Fc                 ó2   •— t        ‰| �  |i |¤Ž || _        y r6   )Úsuperr   r³   )r   r³   Úargsr�   r±   s       €r   r   zHttpResponse.__init__u  s   ø€ Ü‰Ñ˜$Ð) &Ò)àˆ�r   c                 ód   — d| j                   j                  | j                  | j                  dœz  S ©Nz5<%(cls)s status_code=%(status_code)d%(content_type)s>)ÚclsrY   r\   ©r±   rE   rY   rs   r`   s    r   Ú__repr__zHttpResponse.__repr__z  s4   € ØFØ—>‘>×*Ñ*Ø×+Ñ+Ø ×7Ñ7ñJ
ñ 
ð 	
r   c                 óB   — | j                  «       dz   | j                  z   S )z6Full HTTP message, including headers, as a bytestring.s   

)rp   r³   r`   s    r   Ú	serializezHttpResponse.serialize�  s   € à×%Ñ%Ó'¨+Ñ5¸¿¹ÑDÐDr   c                 ó8   — dj                  | j                  «      S ©Nr   )rn   Ú
_containerr`   s    r   r³   zHttpResponse.content‡  s   € à�x‰x˜Ÿ™Ó(Ð(r   c                 ó  ‡ — t        |d«      rSt        |t        t        t        f«      s8dj                  ˆ fd„|D «       «      }t        |d«      r#	 |j                  «        n‰ j                  |«      }|g‰ _	        y # t        $ r Y Œw xY w)NÚ__iter__r   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr6   ©r¤   )Ú.0Úchunkr   s     €r   ú	<genexpr>z'HttpResponse.content.<locals>.<genexpr>‘  s   øè ø€ ÒI¸%˜tŸ™¨u×5ÑIùs   ƒr¬   )
Úhasattrr'   r*   r£   r(   rn   r¬   r§   r¤   rÙ   )r   r   r³   s   `  r   r³   zHttpResponse.content‹  s}   ø€ ô �5˜*Ô%¬jØ”Eœ:¤sÐ+ô/
ð —h‘hÓIÀ5ÔIÓIˆGÜ�u˜gÔ&ðØ—K‘K•Mð —o‘o eÓ,ˆGà"˜)ˆ�øô !ò Ùðús   ÁA; Á;	BÂBc                 ó,   — t        | j                  «      S r6   )ÚiterrÙ   r`   s    r   rÛ   zHttpResponse.__iter__œ  s   € Ü�D—O‘OÓ$Ð$r   c                 óX   — | j                   j                  | j                  |«      «       y r6   )rÙ   Úappendr¤   r²   s     r   r´   zHttpResponse.writeŸ  s   € Ø�‰×Ñ˜tŸ™¨wÓ7Õ8r   c                 ó,   — t        | j                  «      S r6   )Úlenr³   r`   s    r   r¹   zHttpResponse.tell¢  s   € Ü�4—<‘<Ó Ð r   c                 ó   — | j                   S r6   )r³   r`   s    r   ÚgetvaluezHttpResponse.getvalue¥  s   € Ø�|‰|Ðr   c                  ó   — y)NTrC   r`   s    r   rÁ   zHttpResponse.writable¨  s   € Ør   c                 ó4   — |D ]  }| j                  |«       Œ y r6   )r´   )r   rÃ   Úlines      r   rÄ   zHttpResponse.writelines«  s   € Øò 	ˆDØ�J‰J�tÕñ	r   )r   )rE   rF   rG   rÆ   Ú	streamingr   rÔ   rÖ   rÉ   rÇ   r³   rÈ   rÛ   r´   r¹   ré   rÁ   rÄ   Ú__classcell__©r±   s   @r   rÌ   rÌ   l  sn   ø„ ñð €Iõò

òEð €Iàñ)ó ð)ð ‡^�^ñ$ó ð$ò %ò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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).
    Tc                 ó2   •— t        ‰| �  |i |¤Ž || _        y r6   )rÎ   r   Ústreaming_content)r   ró   rÏ   r�   r±   s       €r   r   zStreamingHttpResponse.__init__»  s   ø€ Ü‰Ñ˜$Ð) &Ò)ð "3ˆÕr   c                 ód   — d| j                   j                  | j                  | j                  dœz  S rÑ   )r±   rG   rY   rs   r`   s    r   rÔ   zStreamingHttpResponse.__repr__Á  s4   € ØFØ—>‘>×.Ñ.Ø×+Ñ+Ø ×7Ñ7ñJ
ñ 
ð 	
r   c                 óF   — t        d| j                  j                  z  «      ‚)NzMThis %s instance has no `content` attribute. Use `streaming_content` instead.)ÚAttributeErrorr±   rE   r`   s    r   r³   zStreamingHttpResponse.contentÈ  s'   € äð+Ø-1¯^©^×-DÑ-DñEó
ð 	
r   c                 ó�   ‡ ‡— ‰ j                   r‰ j                  Šˆˆ fd„} |«       S t        ‰ j                  ‰ j                  «      S )Nc                 óT   •K  — ‰2 3 d {  –—† } ‰j                  | «      ­–— Œ7 Œ6 y ­wr6   rÝ   )ÚpartÚ	_iteratorr   s    €€r   Úawrapperz9StreamingHttpResponse.streaming_content.<locals>.awrapperÖ  s-   øè ø€ Ø"+÷ 0ð 0˜$ØŸ/™/¨$Ó/Ô/ð0ø¡)ùs   ƒ(†&Š$‹&Ž(¤&¦()Úis_asyncrú   Úmapr¤   )r   rû   rú   s   ` @r   ró   z'StreamingHttpResponse.streaming_contentÏ  s9   ù€ à�=Š=ð Ÿ™ˆIõ0ñ “:Ðä�t—‘¨¯©Ó7Ð7r   c                 ó&   — | j                  |«       y r6   )Ú_set_streaming_contentrc   s     r   ró   z'StreamingHttpResponse.streaming_contentÞ  s   € à×#Ñ# EÕ*r   c                 óä   — 	 t        |«      | _        d| _        t        |d«      r&| j                  j                  |j                  «       y y # t        $ r t	        |«      | _        d| _        Y ŒUw xY w)NFTr¬   )	rã   rú   rü   rZ   Úaiterrá   rT   rå   r¬   rc   s     r   rÿ   z,StreamingHttpResponse._set_streaming_contentâ  se   € ð	!Ü! %›[ˆDŒNØ!ˆDŒMô �5˜'Ô"Ø×"Ñ"×)Ñ)¨%¯+©+Õ6ð #øô ò 	!Ü" 5›\ˆDŒNØ ˆDŽMð	!ús   ‚A Á A/Á.A/c           
      óö   — 	 t        | j                  «      S # t        $ rX t        j                  dt
        «       d„ }t        | j                  t         t        |«      | j                  «      «      «      cY S w xY w)NzƒStreamingHttpResponse must consume asynchronous iterators in order to serve them synchronously. Use a synchronous iterator instead.c              “   óR   K  — g }| 2 3 d {  –—† }|j                  |«       Œ7 Œ6 |S ­wr6   )rå   )rú   Úas_listrß   s      r   Úto_listz/StreamingHttpResponse.__iter__.<locals>.to_listø  s3   è ø€ Ø�Ø#,÷ *ð *˜%Ø—N‘N 5Õ)ð*ø 9à�ùs   ‚'‡$‹"Œ$�'¢$¤')
rã   ró   rZ   ÚwarningsÚwarnÚWarningrý   r¤   r   rú   )r   r  s     r   rÛ   zStreamingHttpResponse.__iter__í  sm   € ð	VÜ˜×.Ñ.Ó/Ð/øÜò 	VÜ�M‰MðPäôòô �t—‘¬Ð-C¬]¸7Ó-CÀDÇNÁNÓ-SÓ(TÓUÒUð	Vús   ‚ —AA8Á7A8c                ó   K  — 	 | j                   2 3 d {  –—† }|­–— Œ7 Œ
6 y # t        $ rO t        j                  dt        «        t        t        «      | j                   «      ƒ d {  –—†7  D ]  }|­–— Œ	 Y y w xY w­w)Nz…StreamingHttpResponse must consume synchronous iterators in order to serve them asynchronously. Use an asynchronous iterator instead.)ró   rZ   r  r  r  r   Úlist)r   rù   s     r   Ú	__aiter__zStreamingHttpResponse.__aiter__   s   è ø€ ð	Ø"×4Ñ4÷ ð �dØ”
ðøÑ4øäò 		Ü�M‰MðSäôð 2œm¬DÓ1°$×2HÑ2HÓI×IÐIò �Ø”
òð		üsJ   ‚A>„# �!”•!˜# Ÿ!¡# ¢A>£AA;Á(A+Á)A;Á8A>Á:A;Á;A>c                 ó8   — dj                  | j                  «      S rØ   )rn   ró   r`   s    r   ré   zStreamingHttpResponse.getvalue  s   € Ø�x‰x˜×.Ñ.Ó/Ð/r   )rC   )rE   rF   rG   rÆ   rí   r   rÔ   rÇ   r³   ró   rÈ   rÿ   rÛ   r  ré   rî   rï   s   @r   rñ   rñ   °  sp   ø„ ñð €Iõ3ò
ð ñ
ó ð
ð ñ8ó ð8ð ×Ññ+ó ð+ò	7òVò&ö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   Frf   )Úas_attachmentÚfilenamec                ód   •— || _         || _        d|vxs |d   d u | _        t        ‰| �  |i |¤Ž y )Nr\   )r  r  Ú_no_explicit_content_typerÎ   r   )r   r  r  rÏ   r�   r±   s        €r   r   zFileResponse.__init__  sE   ø€ Ø*ˆÔØ ˆŒà &Ð(ÒJ¨F°>Ñ,BÀdÐ,Jð 	Ô&ô 	‰Ñ˜$Ð) &Ó)r   c                 ó"  •‡ ‡— t        |d«      sd ‰ _        t        ‰‰ �  |«      S |x‰ _        Št        ‰d«      r%‰ j                  j                  ‰j                  «       t        ˆˆ fd„d«      }‰ j                  ‰«       t        ‰‰ �  |«       y )NÚreadr¬   c                  ó:   •— ‰ j                  ‰j                  «      S r6   )r  Ú
block_size©Úfileliker   s   €€r   ú<lambda>z5FileResponse._set_streaming_content.<locals>.<lambda>*  s   ø€ ˜XŸ]™]¨4¯?©?Ó;€ r   r   )	rá   Úfile_to_streamrÎ   rÿ   rT   rå   r¬   rã   Úset_headers)r   r   r  r±   s   ` @€r   rÿ   z#FileResponse._set_streaming_content"  s|   ú€ Ü�u˜fÔ%Ø"&ˆDÔÜ‘7Ñ1°%Ó8Ð8à).Ð.ˆÔ˜hÜ�8˜WÔ%Ø×"Ñ"×)Ñ)¨(¯.©.Ô9ÜÔ;¸SÓAˆØ×Ñ˜Ô"Ü‰Ñ& uÕ-r   c                 óö  ‡ ‡— t        ‰dd«      }t        |t        «      r|nd}t        ‰d«      xr t        ‰d«       xs ‰j	                  «       }t        ‰d«      �r|rc‰j                  «       }‰j                  dt        j                  «       ‰j                  «       |z
  ‰ j                  d<   ‰j                  |«       �nt        ‰d«      r9‰j                  «       j                  ‰j                  «       z
  ‰ j                  d<   n¼t        j                  j                  |«      r�t        j                  j                  |«      ‰j                  «       z
  ‰ j                  d<   n_|r]t!        t#        ˆˆ fd	„d«      «      ‰ j                  d<   ‰j                  t%        ‰ j                  d   «       t        j                  «       t        j                  j'                  ‰ j(                  xs |«      }‰ j*                  rU|rDt-        j.                  |«      \  }}d
dddddœj1                  ||«      }|xs d‰ j                  d<   nd‰ j                  d<   t3        ‰ j4                  |«      x}r|‰ j                  d<   yy)zœ
        Set some common response headers (Content-Length, Content-Type, and
        Content-Disposition) based on the `filelike` response content.
        Únamerf   Úseekr¿   r¹   r   zContent-LengthÚ	getbufferc                  óL   •— t        ‰ j                  ‰j                  «      «      S r6   )rç   r  r  r  s   €€r   r  z*FileResponse.set_headers.<locals>.<lambda>H  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-streamrO   zContent-DispositionN)Úgetattrr'   r(   rá   r¿   r¹   r  ÚioÚSEEK_ENDrQ   r  ÚnbytesÚosrƒ   ÚexistsÚgetsizeÚsumrã   rX   Úbasenamer  r  Ú	mimetypesÚ
guess_typer_   r   r  )r   r  r  r¿   Úinitial_positionr\   ÚencodingÚcontent_dispositions   ``      r   r  zFileResponse.set_headers.  s+  ù€ ô
 ˜8 V¨RÓ0ˆÜ)¨(´CÔ8‘8¸bˆÜ˜8 VÓ,ò 
Ü˜ *Ó-Ð-ÒD°×1BÑ1BÓ1Dð 	ô �8˜VÕ$ÙØ#+§=¡=£?Ð Ø—‘˜a¤§¡Ô-Ø19·±³ÐCSÑ1S�—‘Ð-Ñ.Ø—‘Ð.Ö/Ü˜ ;Ô/à×&Ñ&Ó(×/Ñ/°(·-±-³/ÑAð —‘Ð-Ò.ô —‘—‘ Ô)ä—G‘G—O‘O HÓ-°·±³Ñ?ð —‘Ð-Ò.ñ Ü-0ÜÔ@À!ÓDó.ˆD�L‰LÐ)Ñ*ð �M‰Mœ3˜tŸ|™|Ð,<Ñ=Ó>Ð>ÄÇÁÔLä—7‘7×#Ñ# D§M¡MÒ$=°XÓ>ˆØ×)Ò)ÙÜ)2×)=Ñ)=¸hÓ)GÑ&�˜hð 1Ø1Ø 8Ø.Ø,ñ ÷ ‘#�h Ó-ð ð !Ò>Ð$>ð —‘˜^Ò,ð 0J�—‘˜^Ñ,ä"<Ø×Ñ ó#
ð 
Ðð 
ð 3FˆD�L‰LÐ.Ò/ð
r   )	rE   rF   rG   rÆ   r  r   rÿ   r  rî   rï   s   @r   r  r    s$   ø„ ñð €Jà,1¸Bö *ô
.ö4Fr   r  c                   ó>   ‡ — e Zd Zg d¢Zˆ fd„Z ed„ «      Zd„ Zˆ xZS )ÚHttpResponseRedirectBase)ÚhttpÚhttpsÚftpc                 óâ   •— t        ‰| �  |i |¤Ž t        |«      | d<   t        t	        |«      «      }|j
                  r1|j
                  | j                  vrt        d|j
                  z  «      ‚y y )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__h  sl   ø€ Ü‰Ñ˜$Ð) &Ò)Ü% kÓ2ˆˆZÑÜœ#˜kÓ*Ó+ˆØ�=Š=˜VŸ]™]°$×2FÑ2FÑFÜ$Ø;¸f¿m¹mÑKóð ð Gˆ=r   c                 ó   — | d   S )Nr:  rC   r`   s    r   r  z!HttpResponseRedirectBase.<lambda>q  s   €   ZÑ 0€ r   c                 óz   — d| j                   j                  | j                  | j                  | j                  dœz  S )NzD<%(cls)s status_code=%(status_code)d%(content_type)s, url="%(url)s">)rÒ   rY   r\   Úurl)r±   rE   rY   rs   rA  r`   s    r   rÔ   z!HttpResponseRedirectBase.__repr__s  s:   € àRà—~‘~×.Ñ.Ø#×/Ñ/Ø $× ;Ñ ;Ø—x‘xñ	ñð	
r   )	rE   rF   rG   r<  r   rÇ   rA  rÔ   rî   rï   s   @r   r5  r5  e  s   ø„ Ú.€Oôñ Ñ0Ó
1€Cö	
r   r5  c                   ó   — e Zd ZdZy)ÚHttpResponseRedirecti.  N©rE   rF   rG   rY   rC   r   r   rC  rC    ó   „ Ø�Kr   rC  c                   ó   — e Zd ZdZy)ÚHttpResponsePermanentRedirecti-  NrD  rC   r   r   rG  rG  ƒ  rE  r   rG  c                   óZ   ‡ — e Zd ZdZˆ fd„Zej                  j                  d„ «       Zˆ xZS )ÚHttpResponseNotModifiedi0  c                 ó*   •— t        ‰| �  |i |¤Ž | d= y )Nzcontent-type)rÎ   r   )r   rÏ   r�   r±   s      €r   r   z HttpResponseNotModified.__init__Š  s   ø€ Ü‰Ñ˜$Ð) &Ò)Ø�Ñ r   c                 ó,   — |rt        d«      ‚g | _        y )Nz7You cannot set content to a 304 (Not Modified) response)rö   rÙ   rc   s     r   r³   zHttpResponseNotModified.contentŽ  s   € áÜ ØIóð ð ˆ�r   )	rE   rF   rG   rY   r   rÌ   r³   rÈ   rî   rï   s   @r   rI  rI  ‡  s-   ø„ Ø€Kô!ð ×Ñ× Ñ ñó !ôr   rI  c                   ó   — e Zd ZdZy)ÚHttpResponseBadRequesti�  NrD  rC   r   r   rM  rM  —  rE  r   rM  c                   ó   — e Zd ZdZy)ÚHttpResponseNotFoundi”  NrD  rC   r   r   rO  rO  ›  rE  r   rO  c                   ó   — e Zd ZdZy)ÚHttpResponseForbiddeni“  NrD  rC   r   r   rQ  rQ  Ÿ  rE  r   rQ  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚHttpResponseNotAllowedi•  c                 óL   •— t        ‰| �  |i |¤Ž dj                  |«      | d<   y )Nz, ÚAllow)rÎ   r   rn   )r   Úpermitted_methodsrÏ   r�   r±   s       €r   r   zHttpResponseNotAllowed.__init__¦  s(   ø€ Ü‰Ñ˜$Ð) &Ò)ØŸ	™	Ð"3Ó4ˆˆWŠr   c                 ól   — d| j                   j                  | j                  | j                  | d   dœz  S )NzC<%(cls)s [%(methods)s] status_code=%(status_code)d%(content_type)s>rU  )rÒ   rY   r\   ÚmethodsrÓ   r`   s    r   rÔ   zHttpResponseNotAllowed.__repr__ª  s;   € ØTØ—>‘>×*Ñ*Ø×+Ñ+Ø ×7Ñ7Ø˜G‘}ñ	X
ñ 
ð 	
r   )rE   rF   rG   rY   r   rÔ   rî   rï   s   @r   rS  rS  £  s   ø„ Ø€Kô5ö
r   rS  c                   ó   — e Zd ZdZy)ÚHttpResponseGoneiš  NrD  rC   r   r   rZ  rZ  ³  rE  r   rZ  c                   ó   — e Zd ZdZy)ÚHttpResponseServerErroriô  NrD  rC   r   r   r\  r\  ·  rE  r   r\  c                   ó   — e Zd Zy)ÚHttp404NrI   rC   r   r   r^  r^  »  rJ   r   r^  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 }|j                  dd«       t	        j
                  |fd|i|¤Ž}t        ‰| �  dd|i|¤Ž y )NzTIn order to allow non-dict objects to be serialized set the safe parameter to False.r\   zapplication/jsonrÒ   r³   rC   )r'   ÚdictrZ   rD   ÚjsonÚdumpsrÎ   r   )r   r   ÚencoderÚsafeÚjson_dumps_paramsr�   r±   s         €r   r   zJsonResponse.__init__Í  sp   ø€ ñ œ
 4¬Ô.Üð+óð ð Ð$Ø "ÐØ×Ñ˜.Ð*<Ô=Ü�z‰z˜$ÑA GÐAÐ/@ÑAˆÜ‰ÑÑ0 Ð0¨Ó0r   )rE   rF   rG   rÆ   r   r   rî   rï   s   @r   r`  r`  ¿  s   ø„ ñð  "ØØ÷1ñ 1r   r`  )>r‹   r'  rc  r/  r*  Úrer.   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.httpr   r   Údjango.utils.regex_helperr   ÚIrg   r   rS   r,   rL   rÌ   rñ   r  r5  rC  rG  rI  rM  rO  rQ  rS  rZ  r\  r§   r^  r`  rC   r   r   ú<module>rx     sK  ðÛ Û 	Û Û Û 	Û 	Û 
Û Û Ý Ý !Ý !ç 5å  ß (Ý 5Ý :Ý +Ý !Ý >Ý ,ß CÝ 6á 0Ø'¨¯©ó!Ð ô
?Ð,ô ?ôD	�Zô 	÷CTñ CTôLAÐ#ô AôH`0Ð,ô `0ôFOFÐ(ô OFôd
˜|ô 
ô4Ð3ô ôÐ$<ô ô˜lô ô ˜\ô ô˜<ô ô˜Lô ô
˜\ô 
ô �|ô ô˜lô ô	ˆiô 	ô1�<õ 1r   