o
    OÊÆh[3  ã                
   @   sÎ  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	m
Z
 d dlmZ d dlmZ d dlm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mZmZ ej dkrld dlm!Z! nd dl"m!Z! dej#j$j%d< 	d%dej&e'df de(dej)ej*e' ej*e' f fdd„ZG dd„ dƒZ+G dd„ de+ƒZ,G dd„ de+ƒZ-G dd„ de+ƒZ.G dd „ d e+ƒZ/ej&e'e0f Z1ej2e1 Z3ej4e1 Z5ej&e5e3f Z6G d!d"„ d"e+ƒZ7G d#d$„ d$e+ƒZ8dS )&é    N)Údatetime)Úformat_datetimeÚ
formatdate)Úpartial)Ú
guess_type)Úquote)Úmd5_hexdigest)ÚBackgroundTask)Úiterate_in_threadpool)ÚURLÚMutableHeaders)ÚReceiveÚScopeÚSend©é   é   )ÚLiteralÚSameSiteÚsamesiteTÚurlúos.PathLike[str]ÚstrictÚreturnc                 C   s   t jdk r
t | ¡} t| |ƒS )Nr   )ÚsysÚversion_infoÚosÚfspathÚmimetypes_guess_type)r   r   © r   ú`/var/www/html/HyperOracle/crypto_trader/venv/lib/python3.10/site-packages/starlette/responses.pyr      s   


r   c                   @   st  e Zd ZdZdZ					d)dejdedejej	e
e
f  deje
 deje d	dfd
d„Zdejd	efdd„Z	d*dejej	e
e
f  d	dfdd„Zed	efdd„ƒZ								d+de
de
deje dejejee
ef  de
deje
 dededejed  d	dfd d!„Z					d,de
de
deje
 dededejed  d	dfd"d#„Zd$ed%ed&ed	dfd'd(„ZdS )-ÚResponseNúutf-8éÈ   ÚcontentÚstatus_codeÚheadersÚ
media_typeÚ
backgroundr   c                 C   s4   || _ |d ur
|| _|| _|  |¡| _|  |¡ d S ©N)r%   r'   r(   ÚrenderÚbodyÚinit_headers©Úselfr$   r%   r&   r'   r(   r   r   r    Ú__init__+   s   zResponse.__init__c                 C   s&   |d u rdS t |tƒr|S | | j¡S )Nó    )Ú
isinstanceÚbytesÚencodeÚcharset©r.   r$   r   r   r    r*   :   s
   
zResponse.renderc           	      C   sÚ   |d u rg }d}d}ndd„ |  ¡ D ƒ}dd„ |D ƒ}d|v}d|v}t| dd ƒ}|d urI|rI| jdk sI| jd	v sItt|ƒƒ}| d| d
¡f¡ | j}|d urh|rh| d¡r^|d| j	 7 }| d| d
¡f¡ || _
d S )NTc                 S   s(   g | ]\}}|  ¡  d ¡| d ¡f‘qS )úlatin-1)Úlowerr3   )Ú.0ÚkÚvr   r   r    Ú
<listcomp>I   s    ÿÿz)Response.init_headers.<locals>.<listcomp>c                 S   s   g | ]}|d  ‘qS )r   r   )r8   Úhr   r   r    r;   M   s    s   content-lengths   content-typer+   r#   )éÌ   i0  r6   ztext/z
; charset=)ÚitemsÚgetattrr%   ÚstrÚlenÚappendr3   r'   Ú
startswithr4   Úraw_headers)	r.   r&   rD   Úpopulate_content_lengthÚpopulate_content_typeÚkeysr+   Úcontent_lengthÚcontent_typer   r   r    r,   A   s.   þÿ

zResponse.init_headersc                 C   s   t | dƒst| jd�| _| jS )NÚ_headers)Úraw)Úhasattrr   rD   rJ   )r.   r   r   r    r&   b   s   
zResponse.headersÚ ú/FÚlaxÚkeyÚvalueÚmax_ageÚexpiresÚpathÚdomainÚsecureÚhttponlyr   )rO   r   Únonec
                 C   sô   t j ¡ }
||
|< |d ur||
| d< |d ur-t|tƒr't|dd�|
| d< n||
| d< |d ur7||
| d< |d urA||
| d< |rId|
| d< |rQd|
| d< |	d ure|	 ¡ d	v s_J d
ƒ‚|	|
| d< |
jdd� ¡ }| j	 
d| d¡f¡ d S )Nzmax-ageT©ÚusegmtrS   rT   rU   rV   rW   )r   rO   rX   z1samesite must be either 'strict', 'lax' or 'none'r   rM   )Úheaders
   set-cookier6   )ÚhttpÚcookiesÚSimpleCookier1   r   r   r7   ÚoutputÚstriprD   rB   r3   )r.   rP   rQ   rR   rS   rT   rU   rV   rW   r   ÚcookieÚ
cookie_valr   r   r    Ú
set_cookieh   s.   

üzResponse.set_cookiec              
   C   s   | j |dd|||||d� d S )Nr   )rR   rS   rT   rU   rV   rW   r   )rc   )r.   rP   rT   rU   rV   rW   r   r   r   r    Údelete_cookie�   s   	
øzResponse.delete_cookieÚscopeÚreceiveÚsendc                 Ã   sR   �|d| j | jdœƒI d H  |d| jdœƒI d H  | jd ur'|  ¡ I d H  d S d S )Núhttp.response.start©ÚtypeÚstatusr&   úhttp.response.body)rj   r+   )r%   rD   r+   r(   )r.   re   rf   rg   r   r   r    Ú__call__£   s   €ý
ÿ
ÿzResponse.__call__)Nr#   NNNr)   )rM   NNrN   NFFrO   )rN   NFFrO   )Ú__name__Ú
__module__Ú__qualname__r'   r4   ÚtypingÚAnyÚintÚOptionalÚMappingr@   r	   r/   r2   r*   r,   Úpropertyr   r&   ÚUnionr   Úboolr   rc   rd   r   r   r   rm   r   r   r   r    r!   '   s     úþýüûú
ùÿÿ
þ!öþýüûúùø	÷
ö
õ*ùþýüûúù
ør!   c                   @   ó   e Zd ZdZdS )ÚHTMLResponsez	text/htmlN©rn   ro   rp   r'   r   r   r   r    rz   ±   ó    rz   c                   @   ry   )ÚPlainTextResponseú
text/plainNr{   r   r   r   r    r}   µ   r|   r}   c                       sv   e Zd ZdZ				ddejdedejeje	e	f  deje	 deje
 d	df‡ fd
d„Zdejd	efdd„Z‡  ZS )ÚJSONResponsezapplication/jsonr#   Nr$   r%   r&   r'   r(   r   c                    s   t ƒ  |||||¡ d S r)   )Úsuperr/   r-   ©Ú	__class__r   r    r/   ¼   s   zJSONResponse.__init__c                 C   s   t j|ddd dd� d¡S )NF)ú,ú:)Úensure_asciiÚ	allow_nanÚindentÚ
separatorsr"   )ÚjsonÚdumpsr3   r5   r   r   r    r*   Æ   s   ûúzJSONResponse.render©r#   NNN)rn   ro   rp   r'   rq   rr   rs   rt   ÚDictr@   r	   r/   r2   r*   Ú__classcell__r   r   r�   r    r   ¹   s(    úþýüûúù
r   c                       sZ   e Zd Z			d
dejeef dedejej	eef  deje
 ddf
‡ fdd	„Z‡  ZS )ÚRedirectResponseé3  Nr   r%   r&   r(   r   c                    s.   t ƒ jd|||d� tt|ƒdd�| jd< d S )Nr0   )r$   r%   r&   r(   z:/%#?=@[]!$&'()*+,;)ÚsafeÚlocation)r€   r/   r   r@   r&   )r.   r   r%   r&   r(   r�   r   r    r/   Ñ   s   ÿzRedirectResponse.__init__)r�   NN)rn   ro   rp   rq   rw   r@   r   rs   rt   ru   r	   r/   r�   r   r   r�   r    rŽ   Ð   s    ûþýüûúrŽ   c                   @   sœ   e Zd ZU eed< 				ddededejej	e
e
f  deje
 deje d	dfd
d„Zded	dfdd„Zded	dfdd„Zdededed	dfdd„ZdS )ÚStreamingResponseÚbody_iteratorr#   Nr$   r%   r&   r'   r(   r   c                 C   sL   t |tjƒr
|| _nt|ƒ| _|| _|d u r| jn|| _|| _|  |¡ d S r)   )	r1   rq   ÚAsyncIterabler“   r
   r%   r'   r(   r,   r-   r   r   r    r/   ç   s   
zStreamingResponse.__init__rf   c                 Ã   s"   �	 |ƒ I d H }|d dkrd S q)NTrj   zhttp.disconnectr   )r.   rf   Úmessager   r   r    Úlisten_for_disconnectø   s   €ýz'StreamingResponse.listen_for_disconnectrg   c                 Ã   sx   �|d| j | jdœƒI d H  | j2 z3 d H W }t|tƒs"| | j¡}|d|ddœƒI d H  q6 |ddddœƒI d H  d S )Nrh   ri   rl   T©rj   r+   Ú	more_bodyr0   F)r%   rD   r“   r1   r2   r3   r4   )r.   rg   Úchunkr   r   r    Ústream_responseþ   s   €ý
ÿ
ýz!StreamingResponse.stream_responsere   c              	   ƒ   s–   �t  ¡ 4 I d H š'‰ d‡ fdd„}ˆ  |t| j|ƒ¡ |t| j|ƒƒI d H  W d   ƒI d H  n1 I d H s6w   Y  | jd urI|  ¡ I d H  d S d S )NÚfuncú+typing.Callable[[], typing.Awaitable[None]]r   c                 “   s   �| ƒ I d H  ˆ j  ¡  d S r)   )Úcancel_scopeÚcancel)r›   ©Ú
task_groupr   r    Úwrap  s   €z(StreamingResponse.__call__.<locals>.wrap)r›   rœ   r   N)ÚanyioÚcreate_task_groupÚ
start_soonr   rš   r–   r(   )r.   re   rf   rg   r¡   r   rŸ   r    rm     s   €(ù
	ÿzStreamingResponse.__call__r‹   )rn   ro   rp   ÚAsyncContentStreamÚ__annotations__ÚContentStreamrs   rq   rt   ru   r@   r	   r/   r   r–   r   rš   r   rm   r   r   r   r    r’   ä   s,   
 úþýüûú
ùr’   c                   @   s¼   e Zd ZdZ								ddejedf dedejej	eef  d	eje d
eje
 deje dejej deje deddfdd„Zdejddfdd„Zdedededdfdd„ZdS )ÚFileResponsei   r#   NÚ
attachmentrT   r   r%   r&   r'   r(   ÚfilenameÚstat_resultÚmethodÚcontent_disposition_typer   c
                 C   sÂ   || _ || _|| _|d uo| ¡ dk| _|d u r"t|p|ƒd p!d}|| _|| _|  |¡ | jd urQt	| jƒ}
|
| jkrCd 
|	|
¡}nd 
|	| j¡}| j d|¡ || _|d ur_|  |¡ d S d S )NÚHEADr   r~   z{}; filename*=utf-8''{}z{}; filename="{}"zcontent-disposition)rT   r%   rª   ÚupperÚsend_header_onlyr   r'   r(   r,   r   Úformatr&   Ú
setdefaultr«   Úset_stat_headers)r.   rT   r%   r&   r'   r(   rª   r«   r¬   r­   Úcontent_disposition_filenameÚcontent_dispositionr   r   r    r/     s.   



ÿÿÿzFileResponse.__init__c                 C   sn   t |jƒ}t|jdd�}t |jƒd t |jƒ }t| ¡ dd�}| j d|¡ | j d|¡ | j d|¡ d S )	NTrY   ú-F)Úusedforsecurityzcontent-lengthzlast-modifiedÚetag)r@   Úst_sizer   Úst_mtimer   r3   r&   r²   )r.   r«   rH   Úlast_modifiedÚ	etag_baser¸   r   r   r    r³   B  s   
zFileResponse.set_stat_headersre   rf   rg   c           	   	   Ã   sZ  �| j d u r;ztj tj| j¡I d H }|  |¡ W n ty)   t	d| j› d�ƒ‚w |j
}t |¡s;t	d| j› d�ƒ‚|d| j| jdœƒI d H  | jrW|dddd	œƒI d H  nFtj| jd
d�I d H 4 I d H š,}d}|rˆ| | j¡I d H }t|ƒ| jk}|d||d	œƒI d H  |skW d   ƒI d H  n1 I d H s˜w   Y  | jd ur«|  ¡ I d H  d S d S )NzFile at path z does not exist.z is not a file.rh   ri   rl   r0   Fr—   Úrb)ÚmodeT)r«   r¢   Ú	to_threadÚrun_syncr   ÚstatrT   r³   ÚFileNotFoundErrorÚRuntimeErrorÚst_modeÚS_ISREGr%   rD   r°   Ú	open_fileÚreadÚ
chunk_sizerA   r(   )	r.   re   rf   rg   r«   r¾   Úfiler˜   r™   r   r   r    rm   L  sF   €
ÿ
ý
ÿ ý
ÿý(þ
ÿzFileResponse.__call__)r#   NNNNNNr©   )rn   ro   rp   rÈ   rq   rw   r@   rs   rt   ru   r	   r   r«   r/   r³   r   r   r   rm   r   r   r   r    r¨     sB    öþýüûúù
ø	÷
ö
õ$
r¨   )T)9Úhttp.cookiesr\   r‰   r   rÁ   r   rq   r   Úemail.utilsr   r   Ú	functoolsr   Ú	mimetypesr   r   Úurllib.parser   r¢   Ústarlette._compatr   Ústarlette.backgroundr	   Ústarlette.concurrencyr
   Ústarlette.datastructuresr   r   Ústarlette.typesr   r   r   r   r   Útyping_extensionsr]   ÚMorselÚ	_reservedrw   r@   rx   ÚTuplert   r!   rz   r}   r   rŽ   r2   ÚContentÚIteratorÚSyncContentStreamr”   r¥   r§   r’   r¨   r   r   r   r    Ú<module>   sR    
ÿÿÿ
þ 

7