o
    Cik1                     @   sj  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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 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&e'f Z(ej)e( Z*ej+e( Z,ej%e,e*f Z-G dd de Z.G dd de Z/dS )    N)datetime)format_datetime
formatdate)partial)
guess_type)quote)md5_hexdigest)BackgroundTask)iterate_in_threadpool)URLMutableHeaders)ReceiveScopeSendc                   @   sx  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jd  d	dfd d!Z					d,de
de
deje
 dededejej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
backgroundreturnc                 C   s4   || _ |d ur
|| _|| _| || _| | d S N)r   r   r   renderbodyinit_headersselfr   r   r   r   r    r   k/var/www/html/fyndo/python/python_agents/rag_suite/venv/lib/python3.10/site-packages/starlette/responses.py__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)lowerr%   ).0kvr   r   r    
<listcomp>9   s    z)Response.init_headers.<locals>.<listcomp>c                 S   s   g | ]}|d  qS )r   r   )r*   hr   r   r    r-   =   s    s   content-lengths   content-typer   r   )   i0  r(   ztext/z
; charset=)itemsgetattrr   strlenappendr%   r   
startswithr&   raw_headers)	r   r   r6   populate_content_lengthpopulate_content_typekeysr   content_lengthcontent_typer   r   r    r   1   s.   

zResponse.init_headersc                 C   s   t | dst| jd| _| jS )N_headers)raw)hasattrr   r6   r<   )r   r   r   r    r   R   s   
zResponse.headers /Flaxkeyvaluemax_ageexpirespathdomainsecurehttponlysamesite)rA   strict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usegmtrE   rF   rG   rH   rI   )rK   rA   rL   z1samesite must be either 'strict', 'lax' or 'none'rJ   r?   )headers
   set-cookier(   )httpcookiesSimpleCookier#   r   r   r)   outputstripr6   r4   r%   )r   rB   rC   rD   rE   rF   rG   rH   rI   rJ   cookie
cookie_valr   r   r    
set_cookieX   s.   

zResponse.set_cookiec              
   C   s   | j |dd|||||d d S )Nr   )rD   rE   rF   rG   rH   rI   rJ   )rW   )r   rB   rF   rG   rH   rI   rJ   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)r^   r   )r   r6   r   r   )r   rY   rZ   r[   r   r   r    __call__   s   

zResponse.__call__)Nr   NNNr   )r?   NNr@   NFFrA   )r@   NFFrA   )__name__
__module____qualname__r   r&   typingAnyintOptionalMappingr2   r	   r!   r$   r   r   propertyr   r   Unionr   boolLiteralrW   rX   r   r   r   ra   r   r   r   r    r      s    

!	

*
r   c                   @      e Zd ZdZdS )HTMLResponsez	text/htmlNrb   rc   rd   r   r   r   r   r    ro          ro   c                   @   rn   )PlainTextResponse
text/plainNrp   r   r   r   r    rr      rq   rr   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dumpsr%   r'   r   r   r    r      s   zJSONResponse.renderr   NNN)rb   rc   rd   r   re   rf   rg   rh   ri   r2   r	   r!   r$   r   __classcell__r   r   rv   r    rt      s(    
rt   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 )RedirectResponse3  Nurlr   r   r   r   c                    s.   t  jd|||d tt|dd| jd< d S )Nr"   )r   r   r   r   z:/%#?=@[]!$&'()*+,;)safelocation)ru   r!   r   r2   r   )r   r   r   r   r   rv   r   r    r!      s   zRedirectResponse.__init__)r   NN)rb   rc   rd   re   rk   r2   r   rg   rh   ri   r	   r!   r   r   r   rv   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   )	r#   re   AsyncIterabler   r
   r   r   r   r   r   r   r   r    r!      s   
zStreamingResponse.__init__rZ   c                    s"   	 | I d H }|d dkrd S q)NTr^   zhttp.disconnectr   )r   rZ   messager   r   r    listen_for_disconnect   s   z'StreamingResponse.listen_for_disconnectr[   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 )Nr\   r]   r`   Tr^   r   	more_bodyr"   F)r   r6   r   r#   r$   r%   r&   )r   r[   chunkr   r   r    stream_response   s   

z!StreamingResponse.stream_responserY   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   rY   rZ   r[   r   r   r   r    ra      s   (
	zStreamingResponse.__call__r   )rb   rc   rd   AsyncContentStream__annotations__ContentStreamrg   re   rh   ri   r2   r	   r!   r   r   r   r   r   ra   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
attachmentrF   zos.PathLike[str]r   r   r   r   filenamestat_resultmethodcontent_disposition_typer   c
                 C   s   || _ || _|| _|d urtdt |d u r!t|p|d p d}|| _|| _| 	| | jd urPt
| j}
|
| jkrBd|	|
}nd|	| j}| jd| || _|d ur^| | d S d S )Nz;The 'method' parameter is not used, and it will be removed.r   rs   z{}; filename*=utf-8''{}z{}; filename="{}"zcontent-disposition)rF   r   r   warningswarnDeprecationWarningr   r   r   r   r   formatr   
setdefaultr   set_stat_headers)r   rF   r   r   r   r   r   r   r   r   content_disposition_filenamecontent_dispositionr   r   r    r!     s6   



zFileResponse.__init__c                 C   sv   t |j}t|jdd}t |jd t |j }dt| dd d}| jd| | jd| | jd	| d S )
NTrM   -"F)usedforsecurityzcontent-lengthzlast-modifiedetag)r2   st_sizer   st_mtimer   r%   r   r   )r   r   r:   last_modified	etag_baser   r   r   r    r   6  s   
zFileResponse.set_stat_headersrY   rZ   r[   c           	   	      sd  | 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  |d  dkr\|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  |spW d   I d H  n1 I d H sw   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.r\   r]   r   HEADr`   r"   Fr   rb)modeT)r   r   	to_threadrun_syncosstatrF   r   FileNotFoundErrorRuntimeErrorst_modeS_ISREGr   r6   upper	open_fileread
chunk_sizer3   r   )	r   rY   rZ   r[   r   r   filer   r   r   r   r    ra   @  sF   


 
(
zFileResponse.__call__)r   NNNNNNr   )rb   rc   rd   r   re   rk   r2   rg   rh   ri   r	   r   r   r!   r   r   r   r   ra   r   r   r   r    r     sB    
	

(
r   )0http.cookiesrP   r~   r   r   re   r   r   email.utilsr   r   	functoolsr   	mimetypesr   urllib.parser   r   anyio.to_threadstarlette._compatr   starlette.backgroundr	   starlette.concurrencyr
   starlette.datastructuresr   r   starlette.typesr   r   r   r   ro   rr   rt   r   rk   r2   r$   ContentIterableSyncContentStreamr   r   r   r   r   r   r   r   r    <module>   s<     

7