o
    LDi!                     @  sh  U d dl mZ d dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d dlmZ d dl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m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&m'Z' d dl(m)Z)m*Z* d dl+m,Z, d dl-m.Z.m/Z/ ddl0m1Z1 erd dl2m3Z3 d dl4m5Z5 edef Z6ede7f Z8dZ9de:d< G dd dej;Z<dS )    )annotationsN)AsyncGeneratorCallable)Enum)
HTTPStatus)TYPE_CHECKINGAnyFinalcast)ValidationError)Self)Default)
PRODUCTIONTelegramAPIServer)ClientDecodeErrorRestartingTelegramTelegramAPIErrorTelegramBadRequestTelegramConflictErrorTelegramEntityTooLargeTelegramForbiddenErrorTelegramMigrateToChatTelegramNotFoundTelegramRetryAfterTelegramServerErrorTelegramUnauthorizedError)ResponseTelegramMethod)TelegramType)	InputFileTelegramObject   )RequestMiddlewareManager)TracebackType)Bot.g      N@zFinal[float]DEFAULT_TIMEOUTc                   @  s   e Zd ZdZeejejefd@ddZ	dAddZ
ejdBddZej	dCdDddZej		 	!	"dEdFd*d+Z	"dGdHd1d2Z	dCdDd3d4ZdId6d7ZdJd>d?ZdS )KBaseSessionz
    This is base class for all HTTP sessions in aiogram.

    If you want to create your own session, you must inherit from this class.
    apir   
json_loads
_JsonLoads
json_dumps
_JsonDumpstimeoutfloatreturnNonec                 C  s$   || _ || _|| _|| _t | _dS )z

        :param api: Telegram Bot API URL patterns
        :param json_loads: JSON loader
        :param json_dumps: JSON dumper
        :param timeout: Session scope request timeout
        N)r'   r(   r*   r,   r"   
middleware)selfr'   r(   r*   r,    r2   g/var/www/www-root/data/www/77.83.87.30/venv/lib/python3.10/site-packages/aiogram/client/session/base.py__init__7   s
   zBaseSession.__init__botr$   methodTelegramMethod[TelegramType]status_codeintcontentstrResponse[TelegramType]c              
   C  s  z|  |}W n ty } zd}t|||d}~ww zt|j }|j|d|id}	W n ty@ } zd}t|||d}~ww tj|  krMtj	krTn n|	j
rT|	S tt|	j}
|	j }ru|jrjt||
|jd|jrut||
|jd|tjkrt||
d|tjkrt||
d|tjkrt||
d|tjkrt||
d|tjkrt||
d|tjkrt||
d|tjkrd	|
v rt ||
dt!||
dt"||
d)
z'
        Check response status
        zFailed to decode objectNr5   )contextzFailed to deserialize object)r6   messageretry_after)r6   r>   migrate_to_chat_id)r6   r>   restart)#r(   	Exceptionr   r   __returning__model_validater   r   OKIM_USEDokr
   r;   description
parametersr?   r   r@   r   BAD_REQUESTr   	NOT_FOUNDr   CONFLICTr   UNAUTHORIZEDr   	FORBIDDENr   REQUEST_ENTITY_TOO_LARGEr   INTERNAL_SERVER_ERRORr   r   r   )r1   r5   r6   r8   r:   	json_dataemsgresponse_typeresponserH   rI   r2   r2   r3   check_responseL   sf   

"







zBaseSession.check_responsec                      dS )z&
        Close client session
        Nr2   r1   r2   r2   r3   close       zBaseSession.closeN
int | Noner   c                   rW   )z
        Make request to Telegram Bot API

        :param bot: Bot instance
        :param method: Method instance
        :param timeout: Request timeout
        :return:
        :raise TelegramApiError:
        Nr2   )r1   r5   r6   r,   r2   r2   r3   make_request   rZ   zBaseSession.make_request      Turlheadersdict[str, Any] | None
chunk_sizeraise_for_statusboolAsyncGenerator[bytes, None]c                 C s   dV  dS )z
        Stream reader
            Nr2   )r1   r_   r`   r,   rb   rc   r2   r2   r3   stream_content   s   
zBaseSession.stream_contentvaluer   filesdict[str, Any]_dumps_jsonc                   sl  |du rdS t |tr|S t |tr! j|j }j| |dS t |tr4td}||< d| S t |t	rP fdd|
 D }|rN|S |S t |trj fdd|D }|rh|S |S t |tjrtj }tt||  S t |tjrtt| S t |trj|j d	S t |trj|jd
d |dS |r|S |S )z+
        Prepare value before send
        Nr5   ri   rk   
   z	attach://c                   s0   i | ]\}}j | d d dur|qS Frl   Nprepare_value).0keyitemr5   ri   prepared_itemr1   r2   r3   
<dictcomp>   s    z-BaseSession.prepare_value.<locals>.<dictcomp>c                   s*   g | ]}j | d d durqS rn   ro   )rq   rs   rt   r2   r3   
<listcomp>   s    z-BaseSession.prepare_value.<locals>.<listcomp>)r5   ri   F)warnings)
isinstancer;   r   defaultnamerp   r   secretstoken_urlsafedictitemsr*   listdatetime	timedeltanowround	timestampr   rh   r    
model_dump)r1   rh   r5   ri   rk   default_valuerr   r   r2   rt   r3   rp      sT   














zBaseSession.prepare_valuec                   s*   | j j| j|d}tt|||I d H S )N)r,   )r0   wrap_middlewaresr\   r
   r   )r1   r5   r6   r,   r0   r2   r2   r3   __call__   s   zBaseSession.__call__r   c                   s   | S Nr2   rX   r2   r2   r3   
__aenter__  s   zBaseSession.__aenter__exc_typetype[BaseException] | None	exc_valueBaseException | None	tracebackTracebackType | Nonec                   s   |   I d H  d S r   )rY   )r1   r   r   r   r2   r2   r3   	__aexit__  s   zBaseSession.__aexit__)
r'   r   r(   r)   r*   r+   r,   r-   r.   r/   )
r5   r$   r6   r7   r8   r9   r:   r;   r.   r<   )r.   r/   r   )r5   r$   r6   r7   r,   r[   r.   r   )Nr]   r^   T)r_   r;   r`   ra   r,   r9   rb   r9   rc   rd   r.   re   )T)
rh   r   r5   r$   ri   rj   rk   rd   r.   r   )r.   r   )r   r   r   r   r   r   r.   r/   )__name__
__module____qualname____doc__r   jsonloadsdumpsr%   r4   rV   abcabstractmethodrY   r\   rg   rp   r   r   r   r2   r2   r2   r3   r&   0   s2    
BM
	r&   )=
__future__r   r   r   r   r|   collections.abcr   r   enumr   httpr   typingr   r   r	   r
   pydanticr   typing_extensionsr   aiogram.client.defaultr   aiogram.client.telegramr   r   aiogram.exceptionsr   r   r   r   r   r   r   r   r   r   r   r   aiogram.methodsr   r   aiogram.methods.baser   aiogram.typesr   r    middlewares.managerr"   typesr#   aiogram.client.botr$   r)   r;   r+   r%   __annotations__ABCr&   r2   r2   r2   r3   <module>   s2    8