o
    4˜ŽjP  ã                   @  s(  d dl mZ d dlZd dlZd dlmZmZ d dlmZm	Z	m
Z
 d dlZd dlmZmZmZ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 erpd dl m!Z! d dl"m#Z# d dl$m%Z% e&e'e&ef B Z(ee( Z)e)e(B Z*ddd„Z+ddd„Z,G dd„ deƒZ-dS ) é    )ÚannotationsN)ÚAsyncGeneratorÚIterable)ÚTYPE_CHECKINGÚAnyÚcast)Ú	BasicAuthÚClientErrorÚClientSessionÚFormDataÚTCPConnector)Ú
USER_AGENT)ÚSERVER_SOFTWARE)ÚSelf)Ú__version__)ÚTelegramNetworkError)ÚTelegramTypeé   )ÚBaseSession)ÚBot)ÚTelegramMethod)Ú	InputFileÚbasicÚ_ProxyBasicÚreturnúdict[str, Any]c           	      C  sb   ddl m} d }t| tƒr| }n| \}}||ƒ\}}}}}t|tƒr(|j}|j}|||||ddœS )Nr   )Úparse_proxy_urlT)Ú
proxy_typeÚhostÚportÚusernameÚpasswordÚrdns)Úaiohttp_socks.utilsr   Ú
isinstanceÚstrr   Úloginr!   )	r   r   Ú
proxy_authÚ	proxy_urlr   r   r   r    r!   © r)   ú[/var/www/kodo/Anonymous/send/lib/python3.10/site-packages/aiogram/client/session/aiohttp.pyÚ_retrieve_basic   s    

úr+   Úchain_or_plainÚ
_ProxyTypeú)tuple[type[TCPConnector], dict[str, Any]]c                   sr   ddl m}m}m‰  t| tƒst| tƒr%t| ƒdkr%tt	| ƒ} |t
| ƒfS tt| ƒ} ‡ fdd„| D ƒ}|d|ifS )Nr   )ÚChainProxyConnectorÚProxyConnectorÚ	ProxyInfoé   c                   s   g | ]}ˆ d i t |ƒ¤Ž‘qS )r)   )r+   )Ú.0r   ©r1   r)   r*   Ú
<listcomp>C   s    z&_prepare_connector.<locals>.<listcomp>Úproxy_infos)Úaiohttp_socksr/   r0   r1   r$   r%   ÚtupleÚlenr   r   r+   Ú_ProxyChain)r,   r/   r0   Úinfosr)   r4   r*   Ú_prepare_connector7   s   
ÿ

r<   c                      s’   e Zd Zd4d5‡ fdd„Zd6dd„Zed7dd„ƒZejd6dd„ƒZd8dd„Zd9dd„Z	d:dd„Z
	d;d<d"d#„Z		$	%	&d=d>d/d0„Zd?d2d3„Z‡  ZS )@ÚAiohttpSessionNéd   Úproxyú_ProxyType | NoneÚlimitÚintÚkwargsr   r   ÚNonec              
     sˆ   t ƒ jdi |¤Ž d| _t| _tjt ¡ d�|ddœ| _	d| _
d| _|durBz|  |¡ W dS  tyA } zd}t|ƒ|‚d}~ww dS )a  
        Client session based on aiohttp.

        :param proxy: The proxy to be used for requests. Default is None.
        :param limit: The total number of simultaneous connections. Default is 100.
        :param kwargs: Additional keyword arguments.
        N)Úcafilei  )ÚsslrA   Úttl_dns_cacheTzbIn order to use aiohttp client for proxy requests, install https://pypi.org/project/aiohttp-socks/r)   )ÚsuperÚ__init__Ú_sessionr   Ú_connector_typerF   Úcreate_default_contextÚcertifiÚwhereÚ_connector_initÚ_should_reset_connectorÚ_proxyÚ_setup_proxy_connectorÚImportErrorÚRuntimeError)Úselfr?   rA   rC   ÚexcÚmsg©Ú	__class__r)   r*   rI   I   s&   ýÿ
€ûýzAiohttpSession.__init__r-   c                 C  s   t |ƒ\| _| _|| _d S ©N)r<   rK   rO   rQ   ©rU   r?   r)   r)   r*   rR   g   s   
z%AiohttpSession._setup_proxy_connectorc                 C  s   | j S rZ   )rQ   ©rU   r)   r)   r*   r?   k   s   zAiohttpSession.proxyc                 C  s   |   |¡ d| _d S )NT)rR   rP   r[   r)   r)   r*   r?   o   s   

r
   c                 Ã  s^   �| j r|  ¡ I d H  | jd u s| jjr,t| jdi | j¤Žtt› dt	› �id�| _d| _ | jS )Nz	 aiogram/)Ú	connectorÚheadersFr)   )
rP   ÚcloserJ   Úclosedr
   rK   rO   r   r   r   r\   r)   r)   r*   Úcreate_sessiont   s   €ÿþzAiohttpSession.create_sessionc                 Ã  s@   �| j d ur| j js| j  ¡ I d H  t d¡I d H  d S d S d S )Ng      Ð?)rJ   r`   r_   ÚasyncioÚsleepr\   r)   r)   r*   r_   ƒ   s
   €ûzAiohttpSession.closeÚbotr   ÚmethodúTelegramMethod[TelegramType]r   c                 C  s|   t dd�}i }|jdd� ¡ D ]\}}| j|||d�}|sq| ||¡ q| ¡ D ]\}}|j|| |¡|jp8|d� q)|S )NF)Úquote_fields)Úwarnings)rd   Úfiles)Úfilename)r   Ú
model_dumpÚitemsÚprepare_valueÚ	add_fieldÚreadrj   )rU   rd   re   Úformri   ÚkeyÚvaluer)   r)   r*   Úbuild_form_data‹   s   
ýzAiohttpSession.build_form_dataÚtimeoutú
int | Noner   c              
   Ã  s  �|   ¡ I d H }| jj|j|jd�}| j||d�}z2|j|||d u r%| jn|d�4 I d H š}| ¡ I d H }W d   ƒI d H  n1 I d H sEw   Y  W n. t	j
y_ }	 zt|dd�|	‚d }	~	w tyy }	 zt|t|	ƒj› d|	› �d�|	‚d }	~	ww | j|||j|d�}
tt|
jƒS )N)Útokenre   )rd   re   )Údatart   zRequest timeout error)re   Úmessagez: )rd   re   Ústatus_codeÚcontent)ra   ÚapiÚapi_urlrv   Ú__api_method__rs   Úpostrt   Útextrb   ÚTimeoutErrorr   r	   ÚtypeÚ__name__Úcheck_responseÚstatusr   r   Úresult)rU   rd   re   rt   ÚsessionÚurlrp   ÚrespÚ
raw_resultÚeÚresponser)   r)   r*   Úmake_request›   s8   €ý(û€€€ÿüzAiohttpSession.make_requesté   é   Tr‡   r%   r^   údict[str, Any] | NoneÚ
chunk_sizeÚraise_for_statusÚboolúAsyncGenerator[bytes, None]c           	   	   C sŠ   �|d u ri }|   ¡ I d H }|j||||d�4 I d H š}|j |¡2 z	3 d H W }|V  q"6 W d   ƒI d H  d S 1 I d H s>w   Y  d S )N)rt   r^   r‘   )ra   Úgetrz   Úiter_chunked)	rU   r‡   r^   rt   r�   r‘   r†   rˆ   Úchunkr)   r)   r*   Ústream_content¹   s   €üÿ.úzAiohttpSession.stream_contentr   c                 Ã  s   �|   ¡ I d H  | S rZ   )ra   r\   r)   r)   r*   Ú
__aenter__Ï   s   €zAiohttpSession.__aenter__)Nr>   )r?   r@   rA   rB   rC   r   r   rD   )r?   r-   r   rD   )r   r@   )r   r
   )r   rD   )rd   r   re   rf   r   r   rZ   )rd   r   re   rf   rt   ru   r   r   )Nr�   rŽ   T)r‡   r%   r^   r�   rt   rB   r�   rB   r‘   r’   r   r“   )r   r   )r‚   Ú
__module__Ú__qualname__rI   rR   Úpropertyr?   Úsetterra   r_   rs   rŒ   r—   r˜   Ú__classcell__r)   r)   rX   r*   r=   H   s$    



ü!úr=   )r   r   r   r   )r,   r-   r   r.   ).Ú
__future__r   rb   rF   Úcollections.abcr   r   Útypingr   r   r   rM   Úaiohttpr   r	   r
   r   r   Úaiohttp.hdrsr   Úaiohttp.httpr   Útyping_extensionsr   Úaiogram.__meta__r   Úaiogram.exceptionsr   Úaiogram.methods.baser   Úbaser   Úaiogram.client.botr   Úaiogram.methodsr   Úaiogram.typesr   r%   r8   r   r:   r-   r+   r<   r=   r)   r)   r)   r*   Ú<module>   s0    

