o
    Fh                     @  s4  d dl mZ d dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZmZ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$ ddl%m&Z& errddl'm(Z( ee)ee)ef f Z*e	e* Z+ee+e*f Z,dddZ-dddZ.G dd de&Z/dS )     )annotationsN)TYPE_CHECKINGAnyAsyncGeneratorDictIterableListOptionalTupleTypeUnioncast)	BasicAuthClientErrorClientSessionFormDataTCPConnector)
USER_AGENT)SERVER_SOFTWARE)__version__)TelegramMethod   )TelegramNetworkError)TelegramType)	InputFile   )BaseSession   )Bot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(    r0   Q/var/www/html/venv/lib/python3.10/site-packages/aiogram/client/session/aiohttp.py_retrieve_basic(   s    

r2   chain_or_plain
_ProxyType+Tuple[Type['TCPConnector'], Dict[str, Any]]c                 C  s   ddl m}m}m} t| tst| tr%t| dkr%tt	| } |t
| fS tt| } g }| D ]}||di t
| q.|d|ifS )Nr   )ChainProxyConnectorProxyConnector	ProxyInfor   proxy_infosr0   )aiohttp_socksr6   r7   r8   r+   r,   tuplelenr   r    r2   _ProxyChainappend)r3   r6   r7   r8   infosr   r0   r0   r1   _prepare_connectorA   s   


r@   c                      s   e Zd Z	d3d4 fddZd5ddZed6ddZejd5ddZd7ddZd8ddZ	d9ddZ
	d:d;d"d#Z		$	%	&d<d=d/d0Zd>d1d2Z  ZS )?AiohttpSessionNd   proxyOptional[_ProxyType]limitintkwargsr   r!   Nonec              
     s   t  jdi | d| _t| _tjt d|dd| _	d| _
d| _|dur@z| | W dS  ty? } ztd|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  )sslrE   ttl_dns_cacheTzbIn order to use aiohttp client for proxy requests, install https://pypi.org/project/aiohttp-socks/r0   )super__init___sessionr   _connector_typerJ   create_default_contextcertifiwhere_connector_init_should_reset_connector_proxy_setup_proxy_connectorImportErrorRuntimeError)selfrC   rE   rG   exc	__class__r0   r1   rM   U   s*   
zAiohttpSession.__init__r4   c                 C  s   t |\| _| _|| _d S N)r@   rO   rS   rU   rY   rC   r0   r0   r1   rV   t   s   
z%AiohttpSession._setup_proxy_connectorc                 C  s   | j S r]   )rU   rY   r0   r0   r1   rC   x   s   zAiohttpSession.proxyc                 C  s   |  | d| _d S )NT)rV   rT   r^   r0   r0   r1   rC   |   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headersFr0   )
rT   closerN   closedr   rO   rS   r   r   r   r_   r0   r0   r1   create_session   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      ?)rN   rc   rb   asynciosleepr_   r0   r0   r1   rb      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)rg   files)filename)r   
model_dumpitemsprepare_value	add_fieldreadrm   )rY   rg   rh   formrl   keyvaluer0   r0   r1   build_form_data   s   
zAiohttpSession.build_form_datatimeoutOptional[int]r   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)tokenrh   )rg   rh   )datarw   zRequest timeout error)rh   messagez: )rg   rh   status_codecontent)rd   apiapi_urlry   __api_method__rv   postrw   textre   TimeoutErrorr   r   type__name__check_responsestatusr   r   result)rY   rg   rh   rw   sessionurlrs   resp
raw_resulteresponser0   r0   r1   make_request   s,   (
zAiohttpSession.make_request      Tr   r,   ra   Optional[Dict[str, Any]]
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)rw   ra   r   )rd   getr}   iter_chunked)	rY   r   ra   rw   r   r   r   r   chunkr0   r0   r1   stream_content   s   .zAiohttpSession.stream_contentc                   s   |   I d H  | S r]   )rd   r_   r0   r0   r1   
__aenter__   s   zAiohttpSession.__aenter__)NrB   )rC   rD   rE   rF   rG   r   r!   rH   )rC   r4   r!   rH   )r!   rD   )r!   r   )r!   rH   )rg   r   rh   ri   r!   r   r]   )rg   r   rh   ri   rw   rx   r!   r   )Nr   r   T)r   r,   ra   r   rw   rF   r   rF   r   r   r!   r   )r!   rA   )r   
__module____qualname__rM   rV   propertyrC   setterrd   rb   rv   r   r   r   __classcell__r0   r0   r[   r1   rA   T   s&    



rA   )r   r    r!   r"   )r3   r4   r!   r5   )0
__future__r   re   rJ   typingr   r   r   r   r   r   r	   r
   r   r   r   rQ   aiohttpr   r   r   r   r   aiohttp.hdrsr   aiohttp.httpr   aiogram.__meta__r   aiogram.methodsr   
exceptionsr   methods.baser   typesr   baser   rg   r   r,   r    r=   r4   r2   r@   rA   r0   r0   r0   r1   <module>   s,    4

