o
    $6d[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   jC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\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   Zpopulate_content_lengthZ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   rH   )r.   r   r   r    r&   b   s   
zResponse.headers /Flaxkeyvaluemax_ageexpirespathdomainsecurehttponlyr   )rM   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usegmtrQ   rR   rS   rT   rU   )r   rM   rV   z1samesite must be either 'strict', 'lax' or 'none'r   rK   )headers
   set-cookier6   )httpcookiesSimpleCookier1   r   r   r7   outputstriprD   rB   r3   )r.   rN   rO   rP   rQ   rR   rS   rT   rU   r   cookieZ
cookie_valr   r   r    
set_cookieh   s.   

zResponse.set_cookiec              
   C   s   | j |dd|||||d d S )Nr   )rP   rQ   rR   rS   rT   rU   r   )r`   )r.   rN   rR   rS   rT   rU   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)rg   r+   )r%   rD   r+   r(   )r.   rb   rc   rd   r   r   r    __call__   s   

zResponse.__call__)Nr#   NNNr)   )rK   NNrL   NFFrM   )rL   NFFrM   )__name__
__module____qualname__r'   r4   typingAnyintOptionalMappingr@   r	   r/   r2   r*   r,   propertyr   r&   Unionr   boolr   r`   ra   r   r   r   rj   r   r   r   r    r!   '   s    

!	

*
r!   c                   @      e Zd ZdZdS )HTMLResponsez	text/htmlNrk   rl   rm   r'   r   r   r   r    rw          rw   c                   @   rv   )PlainTextResponse
text/plainNrx   r   r   r   r    rz      ry   rz   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)rk   rl   rm   r'   rn   ro   rp   rq   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 )RedirectResponse3  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)rk   rl   rm   rn   rt   r@   r   rp   rq   rr   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   rn   AsyncIterabler   r
   r%   r'   r(   r,   r-   r   r   r    r/      s   
zStreamingResponse.__init__rc   c                    s"   	 | I d H }|d dkrd S q)NTrg   zhttp.disconnectr   )r.   rc   messager   r   r    listen_for_disconnect   s   z'StreamingResponse.listen_for_disconnectrd   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 )Nre   rf   ri   Trg   r+   	more_bodyr0   F)r%   rD   r   r1   r2   r3   r4   )r.   rd   chunkr   r   r    stream_response   s   

z!StreamingResponse.stream_responserb   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)   )Zcancel_scopecancel)r   Z
task_groupr   r    wrap  s   z(StreamingResponse.__call__.<locals>.wrap)r   r   r   N)anyioZcreate_task_groupZ
start_soonr   r   r   r(   )r.   rb   rc   rd   r   r   r   r    rj     s   (
	zStreamingResponse.__call__r   )rk   rl   rm   AsyncContentStream__annotations__ContentStreamrp   rn   rq   rr   r@   r	   r/   r   r   r   r   r   rj   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
attachmentrR   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)rR   r%   r   uppersend_header_onlyr   r'   r(   r,   r   formatr&   
setdefaultr   set_stat_headers)r.   rR   r%   r&   r'   r(   r   r   r   r   Z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 )	NTrW   -F)usedforsecurityzcontent-lengthzlast-modifiedetag)r@   st_sizer   st_mtimer   r3   r&   r   )r.   r   rF   Zlast_modifiedZ	etag_baser   r   r   r    r   B  s   
zFileResponse.set_stat_headersrb   rc   rd   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 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.re   rf   ri   r0   Fr   rb)modeT)r   r   	to_threadZrun_syncr   statrR   r   FileNotFoundErrorRuntimeErrorst_modeS_ISREGr%   rD   r   	open_fileread
chunk_sizerA   r(   )	r.   rb   rc   rd   r   r   filer   r   r   r   r    rj   L  sF   


 
(
zFileResponse.__call__)r#   NNNNNNr   )rk   rl   rm   r   rn   rt   r@   rp   rq   rr   r	   r   r   r/   r   r   r   r   rj   r   r   r   r    r     sB    
	

$
r   )T)9http.cookiesrZ   r   r   r   r   rn   r   email.utilsr   r   	functoolsr   	mimetypesr   r   urllib.parser   r   Zstarlette._compatr   Zstarlette.backgroundr	   Zstarlette.concurrencyr
   Zstarlette.datastructuresr   r   Zstarlette.typesr   r   r   r   r   Ztyping_extensionsr[   Morsel	_reservedrt   r@   ru   Tuplerq   r!   rw   rz   r|   r   r2   ZContentIteratorZSyncContentStreamr   r   r   r   r   r   r   r   r    <module>   sR    

 

7