o
    LDi,                     @  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)   j/var/www/www-root/data/www/77.83.87.30/venv/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 )@AiohttpSessionNd   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
yY   t|dd tyr }	 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   s6   (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    

