o
    Þ­jµ1  ã                   @  sv  d dl m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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"ƒZ0G dd„ de"ƒZ1dS )é    )ÚannotationsN)Údatetime)Úformat_datetimeÚ
formatdate)Úpartial)Ú
guess_type)Úquote)Úmd5_hexdigest)ÚBackgroundTask)Úiterate_in_threadpool)ÚURLÚMutableHeaders)ÚReceiveÚScopeÚSendc                   @  sŠ   e Zd ZdZdZ					d8d9dd„Zd:dd„Zd;d<dd„Zed=dd„ƒZ									d>d?d,d-„Z
					d@dAd.d/„ZdBd6d7„ZdS )CÚResponseNúutf-8éÈ   Úcontentú
typing.AnyÚstatus_codeÚintÚheadersútyping.Mapping[str, str] | NoneÚ
media_typeú
str | NoneÚ
backgroundúBackgroundTask | NoneÚreturnÚNonec                 C  s4   || _ |d ur
|| _|| _|  |¡| _|  |¡ d S ©N)r   r   r   ÚrenderÚbodyÚinit_headers©Úselfr   r   r   r   r   © r&   úP/var/www/html/CropPilot/venv/lib/python3.10/site-packages/starlette/responses.pyÚ__init__   s   zResponse.__init__Úbytesc                 C  s&   |d u rdS t |tƒr|S | | j¡S )Nó    )Ú
isinstancer)   Ú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rn|rn| d¡rdd| 	¡ vrd|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&   )r1   Úhr&   r&   r'   r4   =   s    s   content-lengths   content-typer"   r   )éÌ   i0  r/   ztext/zcharset=z
; charset=)ÚitemsÚgetattrr   ÚstrÚlenÚappendr,   r   Ú
startswithr0   r-   Úraw_headers)	r%   r   r=   Úpopulate_content_lengthÚpopulate_content_typeÚkeysr"   Úcontent_lengthÚcontent_typer&   r&   r'   r#   3   s2   þÿÿ
zResponse.init_headersr   c                 C  s   t | dƒst| jd�| _| jS )NÚ_headers)Úraw)Úhasattrr   r=   rC   )r%   r&   r&   r'   r   U   s   
zResponse.headersÚ ú/FÚlaxÚkeyr9   ÚvalueÚmax_ageú
int | NoneÚexpiresúdatetime | str | int | NoneÚpathÚdomainÚsecureÚboolÚhttponlyÚsamesiteú.typing.Literal['lax', 'strict', 'none'] | 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©ÚusegmtrM   rO   rP   rQ   rS   )ÚstrictrH   Únonez1samesite must be either 'strict', 'lax' or 'none'rT   rF   )Úheaders
   set-cookier/   )ÚhttpÚcookiesÚSimpleCookier+   r   r   r0   ÚoutputÚstripr=   r;   r,   )r%   rI   rJ   rK   rM   rO   rP   rQ   rS   rT   ÚcookieÚ
cookie_valr&   r&   r'   Ú
set_cookie[   s.   

üzResponse.set_cookiec              
   C  s   | j |dd|||||d� d S )Nr   )rK   rM   rO   rP   rQ   rS   rT   )rb   )r%   rI   rO   rP   rQ   rS   rT   r&   r&   r'   Údelete_cookie‚   s   	
øzResponse.delete_cookieÚscoper   Úreceiver   Úsendr   c                 Ã  sn   �|d dkr	dnd}||d | j | jdœƒI d H  ||d | jdœƒI d H  | jd ur5|  ¡ I d H  d S d S )	NÚtypeÚ	websocketz
websocket.rF   úhttp.response.start©rg   Ústatusr   úhttp.response.body)rg   r"   )r   r=   r"   r   )r%   rd   re   rf   Úprefixr&   r&   r'   Ú__call__–   s   €ý
ÿ
ÿzResponse.__call__)Nr   NNN©r   r   r   r   r   r   r   r   r   r   r   r   ©r   r   r   r)   r    )r   r   r   r   )r   r   )rF   NNrG   NFFrH   )rI   r9   rJ   r9   rK   rL   rM   rN   rO   r9   rP   r   rQ   rR   rS   rR   rT   rU   r   r   )rG   NFFrH   )rI   r9   rO   r9   rP   r   rQ   rR   rS   rR   rT   rU   r   r   ©rd   r   re   r   rf   r   r   r   )Ú__name__Ú
__module__Ú__qualname__r   r-   r(   r!   r#   Úpropertyr   rb   rc   rn   r&   r&   r&   r'   r      s:    ú
"ö*ùr   c                   @  ó   e Zd ZdZdS )ÚHTMLResponsez	text/htmlN©rr   rs   rt   r   r&   r&   r&   r'   rw   ¥   ó    rw   c                   @  rv   )ÚPlainTextResponseú
text/plainNrx   r&   r&   r&   r'   rz   ©   ry   rz   c                      s6   e Zd ZdZ				dd‡ fdd„Zddd„Z‡  ZS )ÚJSONResponsezapplication/jsonr   Nr   r   r   r   r   r   r   r   r   r   r   r   c                   s   t ƒ  |||||¡ d S r    )Úsuperr(   r$   ©Ú	__class__r&   r'   r(   °   s   zJSONResponse.__init__r)   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   NNNro   rp   )rr   rs   rt   r   r(   r!   Ú__classcell__r&   r&   r~   r'   r|   ­   s    ú
r|   c                      s&   e Zd Z			dd‡ fdd„Z‡  ZS )ÚRedirectResponseé3  NÚurlú	str | URLr   r   r   r   r   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)r}   r(   r   r9   r   )r%   rŒ   r   r   r   r~   r&   r'   r(   Å   s   ÿzRedirectResponse.__init__)r‹   NN)
rŒ   r�   r   r   r   r   r   r   r   r   )rr   rs   rt   r(   r‰   r&   r&   r~   r'   rŠ   Ä   s
    ûrŠ   c                   @  sH   e Zd ZU ded< 				dd dd„Zd!dd„Zd"dd„Zd#dd„ZdS )$ÚStreamingResponseÚAsyncContentStreamÚbody_iteratorr   Nr   ÚContentStreamr   r   r   r   r   r   r   r   r   r   c                 C  sL   t |tjƒr
|| _nt|ƒ| _|| _|d u r| jn|| _|| _|  |¡ d S r    )	r+   ÚtypingÚAsyncIterabler’   r   r   r   r   r#   r$   r&   r&   r'   r(   Û   s   
zStreamingResponse.__init__re   r   c                 Ã  s"   �	 |ƒ I d H }|d dkrd S q)NTrg   zhttp.disconnectr&   )r%   re   Úmessager&   r&   r'   Úlisten_for_disconnectì   s   €ýz'StreamingResponse.listen_for_disconnectrf   r   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 )Nri   rj   rl   T©rg   r"   Ú	more_bodyr*   F)r   r=   r’   r+   r)   r,   r-   )r%   rf   Úchunkr&   r&   r'   Ústream_responseò   s   €ý
ÿ
ýz!StreamingResponse.stream_responserd   r   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   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   r   )ÚanyioÚcreate_task_groupÚ
start_soonr   r›   r—   r   )r%   rd   re   rf   r¢   r&   r    r'   rn     s   €(ù
	ÿzStreamingResponse.__call__rˆ   )r   r“   r   r   r   r   r   r   r   r   r   r   )re   r   r   r   )rf   r   r   r   rq   )rr   rs   rt   Ú__annotations__r(   r—   r›   rn   r&   r&   r&   r'   r�   Ø   s   
 ú

r�   c                   @  s@   e Zd ZdZ								d$d%dd„Zd&dd„Zd'd"d#„ZdS )(ÚFileResponsei   r   NÚ
attachmentrO   ústr | os.PathLike[str]r   r   r   r   r   r   r   r   ÚfilenameÚstat_resultúos.stat_result | NoneÚmethodÚcontent_disposition_typer9   r   r   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   r{   z{}; filename*=utf-8''{}z{}; filename="{}"zcontent-disposition)rO   r   rª   ÚwarningsÚwarnÚDeprecationWarningr   r   r   r#   r   Úformatr   Ú
setdefaultr«   Úset_stat_headers)r%   rO   r   r   r   r   rª   r«   r­   r®   Úcontent_disposition_filenameÚcontent_dispositionr&   r&   r'   r(     s6   þ



ÿÿÿzFileResponse.__init__úos.stat_resultc                 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 )
NTrV   ú-ú"F)Úusedforsecurityzcontent-lengthzlast-modifiedÚetag)r9   Úst_sizer   Úst_mtimer	   r,   r   r³   )r%   r«   rA   Úlast_modifiedÚ	etag_baser»   r&   r&   r'   r´   :  s   
zFileResponse.set_stat_headersrd   r   re   r   rf   r   c           	   	   Ã  s”  �| 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  n^d|v rtd|d v rt|dt| jƒ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  |sˆW 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.ri   rj   r­   ÚHEADrl   r*   Fr˜   Ú
extensionszhttp.response.pathsend)rg   rO   Úrb)ÚmodeT)r«   r£   Ú	to_threadÚrun_syncÚosÚstatrO   r´   ÚFileNotFoundErrorÚRuntimeErrorÚst_modeÚS_ISREGr   r=   Úupperr9   Ú	open_fileÚreadÚ
chunk_sizer:   r   )	r%   rd   re   rf   r«   rÃ   Úfiler™   rš   r&   r&   r'   rn   D  sJ   €
ÿ
ý
ÿ ý
ÿý(þ
ÿzFileResponse.__call__)r   NNNNNNr¨   )rO   r©   r   r   r   r   r   r   r   r   rª   r   r«   r¬   r­   r   r®   r9   r   r   )r«   r·   r   r   rq   )rr   rs   rt   rÏ   r(   r´   rn   r&   r&   r&   r'   r§     s    ö
(
r§   )2Ú
__future__r   Úhttp.cookiesr[   r†   rÆ   rÇ   r”   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   rw   rz   r|   rŠ   ÚUnionr9   r)   ÚContentÚIterableÚSyncContentStreamr•   r‘   r“   r�   r§   r&   r&   r&   r'   Ú<module>   s>     

7