a
    y{Jhh                     @  s@  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rddl'm(Z( ee)ee)ef f Z*e	e* Z+ee+e*f Z,dddddZ-dd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_ProxyBasiczDict[str, Any])basicreturnc           	      C  sb   ddl m} d }t| tr | }n| \}}||\}}}}}t|trP|j}|j}|||||ddS )Nr   )parse_proxy_urlT)
proxy_typehostportusernamepasswordZrdns)Zaiohttp_socks.utilsr"   
isinstancestrr   loginr'   )	r    r"   
proxy_auth	proxy_urlr#   r$   r%   r&   r'    r-   P/var/www/shaz/venv/lib/python3.9/site-packages/aiogram/client/session/aiohttp.py_retrieve_basic(   s     

r/   
_ProxyTypez+Tuple[Type['TCPConnector'], Dict[str, Any]])chain_or_plainr!   c                 C  s   ddl m}m}m} t| ts4t| trJt| dkrJtt	| } |t
| fS tt| } g }| D ]}||f i t
| q\|d|ifS )Nr   )ChainProxyConnectorProxyConnector	ProxyInfor   Zproxy_infos)Zaiohttp_socksr2   r3   r4   r(   r)   tuplelenr   r   r/   _ProxyChainappend)r1   r2   r3   r4   infosr    r-   r-   r.   _prepare_connectorA   s    



r:   c                      s   e Zd Zd-dddd fddZddd	d
dZeddddZejddd	ddZddddZddddZ	ddddddZ
d.dddddddZd/d#d$d%d%d&d'd(d)d*Zd dd+d,Z  ZS )0AiohttpSessionNzOptional[_ProxyType]r   None)proxykwargsr!   c              
     s   t  jf i | d | _t| _dtjt di| _	d| _
d | _|d urz| | W n. ty } ztd|W Y d }~n
d }~0 0 d S )Nssl)cafileTzbIn order to use aiohttp client for proxy requests, install https://pypi.org/project/aiohttp-socks/)super__init___sessionr   _connector_typer?   create_default_contextcertifiwhere_connector_init_should_reset_connector_proxy_setup_proxy_connectorImportErrorRuntimeError)selfr=   r>   exc	__class__r-   r.   rB   Y   s     zAiohttpSession.__init__r0   )r=   r!   c                 C  s   t |\| _| _|| _d S N)r:   rD   rH   rJ   rN   r=   r-   r-   r.   rK   m   s    z%AiohttpSession._setup_proxy_connector)r!   c                 C  s   | j S rR   )rJ   rN   r-   r-   r.   r=   q   s    zAiohttpSession.proxyc                 C  s   |  | d| _d S )NT)rK   rI   rS   r-   r-   r.   r=   u   s    
r   c                   s\   | j r|  I d H  | jd u s&| jjrVt| jf i | jtt dt	 id| _d| _ | jS )Nz	 aiogram/)Z	connectorheadersF)
rI   closerC   closedr   rD   rH   r   r   r   rT   r-   r-   r.   create_sessionz   s    zAiohttpSession.create_sessionc                   s6   | j d ur2| j js2| j  I d H  tdI d H  d S )Ng      ?)rC   rW   rV   asynciosleeprT   r-   r-   r.   rV      s    zAiohttpSession.closer   zTelegramMethod[TelegramType]r   )botmethodr!   c                 C  s|   t dd}i }|jdd D ]*\}}| j|||d}|s<q||| q| D ]$\}}|j||||jpp|d qR|S )NF)Zquote_fields)warnings)r[   files)filename)r   Z
model_dumpitemsZprepare_valueZ	add_fieldreadr_   )rN   r[   r\   formr^   keyvaluer-   r-   r.   build_form_data   s    
zAiohttpSession.build_form_datazOptional[int]r   )r[   r\   timeoutr!   c              
     s  |   I d H }| jj|j|jd}| j||d}zd|j|||d u rH| jn|d4 I d H $}| I d H }W d   I d H  q1 I d H s0    Y  W n^ t	j
y   t|ddY n@ ty }	 z(t|t|	j d|	 dW Y d }	~	n
d }	~	0 0 | j|||j|d}
tt|
jS )N)tokenr\   )r[   r\   )datarf   zRequest timeout error)r\   messagez: )r[   r\   status_codecontent)rX   apiZapi_urlrg   Z__api_method__re   postrf   textrY   TimeoutErrorr   r   type__name__Zcheck_responsestatusr   r   result)rN   r[   r\   rf   sessionurlrb   respZ
raw_resulteresponser-   r-   r.   make_request   s"    <2
zAiohttpSession.make_request      Tr)   zOptional[Dict[str, Any]]intboolzAsyncGenerator[bytes, None])ru   rU   rf   
chunk_sizeraise_for_statusr!   c           	   	   C s   |d u ri }|   I d H }|j||||d4 I d H 8}|j|2 z3 d H W }|V  qB6 W d   I d H  q1 I d H sx0    Y  d S )N)rf   rU   r   )rX   getrk   Ziter_chunked)	rN   ru   rU   rf   r~   r   rt   rv   chunkr-   r-   r.   stream_content   s    zAiohttpSession.stream_contentc                   s   |   I d H  | S rR   )rX   rT   r-   r-   r.   
__aenter__   s    zAiohttpSession.__aenter__)N)N)Nrz   r{   T)rq   
__module____qualname__rB   rK   propertyr=   setterrX   rV   re   ry   r   r   __classcell__r-   r-   rP   r.   r;   X   s"        r;   )0
__future__r   rY   r?   typingr   r   r   r   r   r   r	   r
   r   r   r   rF   Zaiohttpr   r   r   r   r   Zaiohttp.hdrsr   Zaiohttp.httpr   Zaiogram.__meta__r   Zaiogram.methodsr   
exceptionsr   Zmethods.baser   typesr   baser   r[   r   r)   r   r7   r0   r/   r:   r;   r-   r-   r-   r.   <module>   s*   4