a
    9g                     @  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-   {/var/www/vosh/data/www/fastworkle.ru/webshop-tgbot-v.1.0/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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d0d%d&ddd'd(d)d*d+Zd dd,d-Z  ZS )1AiohttpSessionNd   zOptional[_ProxyType]intr   None)proxylimitkwargsr!   c              
     s   t  jf i | d| _t| _tjt d|dd| _	d| _
d| _|durz| | W n. ty } ztd|W Y d}~n
d}~0 0 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  )sslr@   Zttl_dns_cacheTzbIn order to use aiohttp client for proxy requests, install https://pypi.org/project/aiohttp-socks/)super__init___sessionr   _connector_typerC   create_default_contextcertifiwhere_connector_init_should_reset_connector_proxy_setup_proxy_connectorImportErrorRuntimeError)selfr?   r@   rA   exc	__class__r-   r.   rE   U   s$    
zAiohttpSession.__init__r0   )r?   r!   c                 C  s   t |\| _| _|| _d S N)r:   rG   rK   rM   rQ   r?   r-   r-   r.   rN   t   s    z%AiohttpSession._setup_proxy_connector)r!   c                 C  s   | j S rU   )rM   rQ   r-   r-   r.   r?   x   s    zAiohttpSession.proxyc                 C  s   |  | d| _d S )NT)rN   rL   rV   r-   r-   r.   r?   |   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)
rL   closerF   closedr   rG   rK   r   r   r   rW   r-   r-   r.   create_session   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      ?)rF   rZ   rY   asynciosleeprW   r-   r-   r.   rY      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readrb   )rQ   r^   r_   formra   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_   )datari   zRequest timeout error)r_   messagez: )r^   r_   status_codecontent)r[   apiZapi_urlrj   Z__api_method__rh   postri   textr\   TimeoutErrorr   r   type__name__Zcheck_responsestatusr   r   result)rQ   r^   r_   ri   sessionurlre   respZ
raw_resulteresponser-   r-   r.   make_request   s"    <2
zAiohttpSession.make_request      Tr)   zOptional[Dict[str, Any]]boolzAsyncGenerator[bytes, None])rx   rX   ri   
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)ri   rX   r   )r[   getrn   Ziter_chunked)	rQ   rx   rX   ri   r   r   rw   ry   chunkr-   r-   r.   stream_content   s    zAiohttpSession.stream_contentc                   s   |   I d H  | S rU   )r[   rW   r-   r-   r.   
__aenter__   s    zAiohttpSession.__aenter__)Nr<   )N)Nr}   r~   T)rt   
__module____qualname__rE   rN   propertyr?   setterr[   rY   rh   r|   r   r   __classcell__r-   r-   rS   r.   r;   T   s$         r;   )0
__future__r   r\   rC   typingr   r   r   r   r   r   r	   r
   r   r   r   rI   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