o
    Fh                      @  s`  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 d dlm	Z	 d dl
mZ d dlmZmZmZmZmZmZmZmZmZ d dl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l,m-Z- ddl.m/Z/m0Z0 ddl1m2Z2 erddl3m4Z4 edef Z5ede6f Z7dZ8de9d< G dd dej:Z;dS )    )annotationsN)Enum)
HTTPStatus)TracebackType)	TYPE_CHECKINGAnyAsyncGeneratorCallableDictFinalOptionalTypecast)ValidationError)ClientDecodeErrorRestartingTelegramTelegramAPIErrorTelegramBadRequestTelegramConflictErrorTelegramEntityTooLargeTelegramForbiddenErrorTelegramMigrateToChatTelegramNotFoundTelegramRetryAfterTelegramServerErrorTelegramUnauthorizedError   )ResponseTelegramMethod)TelegramType)	InputFileTelegramObject   )Default)
PRODUCTIONTelegramAPIServer   )RequestMiddlewareManager)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	d@ddZ
ejdAddZej	dBdCddZej		 	!	"dDdEd*d+Z	"dFdGd1d2Z	dBdCd3d4ZdHd5d6ZdId=d>ZdS )J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.   r0   r'   
middleware)selfr+   r,   r.   r0    r6   N/var/www/html/venv/lib/python3.10/site-packages/aiogram/client/session/base.py__init__>   s
   zBaseSession.__init__botr(   methodTelegramMethod[TelegramType]status_codeintcontentstrResponse[TelegramType]c              
   C  s  z|  |}W n ty } ztd||d}~ww zt|j }|j|d|id}W n ty< } ztd||d}~ww tj|  krItj	krPn n|j
rP|S tt|j}	|j }
rq|
jrft||	|
jd|
jrqt||	|
jd|tjkr|t||	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 objectNr9   )contextzFailed to deserialize object)r:   messageretry_after)r:   rB   migrate_to_chat_id)r:   rB   restart)#r,   	Exceptionr   r   __returning__model_validater   r   OKIM_USEDokr   r?   description
parametersrC   r   rD   r   BAD_REQUESTr   	NOT_FOUNDr   CONFLICTr   UNAUTHORIZEDr   	FORBIDDENr   REQUEST_ENTITY_TOO_LARGEr   INTERNAL_SERVER_ERRORr   r   r   )r5   r9   r:   r<   r>   	json_dataeresponse_typeresponserL   rM   r6   r6   r7   check_responseS   s^   
"







zBaseSession.check_responsec                      dS )z&
        Close client session
        Nr6   r5   r6   r6   r7   close   s   zBaseSession.closeNOptional[int]r   c                   rZ   )z
        Make request to Telegram Bot API

        :param bot: Bot instance
        :param method: Method instance
        :param timeout: Request timeout
        :return:
        :raise TelegramApiError:
        Nr6   )r5   r9   r:   r0   r6   r6   r7   make_request   s   zBaseSession.make_request      TurlheadersOptional[Dict[str, Any]]
chunk_sizeraise_for_statusboolAsyncGenerator[bytes, None]c                 C s   dV  dS )z
        Stream reader
            Nr6   )r5   ra   rb   r0   rd   re   r6   r6   r7   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r9   rk   rm   
   z	attach://c                   s0   i | ]\}}j | d d dur|qS Frn   Nprepare_value).0keyitemr9   rk   prepared_itemr5   r6   r7   
<dictcomp>   s    z-BaseSession.prepare_value.<locals>.<dictcomp>c                   s*   g | ]}j | d d durqS rp   rq   )rs   ru   rv   r6   r7   
<listcomp>   s    z-BaseSession.prepare_value.<locals>.<listcomp>)r9   rk   F)warnings)
isinstancer?   r#   defaultnamerr   r    secretstoken_urlsafedictitemsr.   listdatetime	timedeltanowround	timestampr   rj   r!   
model_dump)r5   rj   r9   rk   rm   default_valuert   r   r6   rv   r7   rr      sT   
















zBaseSession.prepare_valuec                   s*   | j j| j|d}tt|||I d H S )N)r0   )r4   wrap_middlewaresr^   r   r   )r5   r9   r:   r0   r4   r6   r6   r7   __call__   s   zBaseSession.__call__c                   s   | S Nr6   r[   r6   r6   r7   
__aenter__   s   zBaseSession.__aenter__exc_typeOptional[Type[BaseException]]	exc_valueOptional[BaseException]	tracebackOptional[TracebackType]c                   s   |   I d H  d S r   )r\   )r5   r   r   r   r6   r6   r7   	__aexit__  s   zBaseSession.__aexit__)
r+   r%   r,   r-   r.   r/   r0   r1   r2   r3   )
r9   r(   r:   r;   r<   r=   r>   r?   r2   r@   )r2   r3   r   )r9   r(   r:   r;   r0   r]   r2   r   )Nr_   r`   T)ra   r?   rb   rc   r0   r=   rd   r=   re   rf   r2   rg   )T)
rj   r   r9   r(   rk   rl   rm   rf   r2   r   )r2   r*   )r   r   r   r   r   r   r2   r3   )__name__
__module____qualname____doc__r$   jsonloadsdumpsr)   r8   rY   abcabstractmethodr\   r^   ri   rr   r   r   r   r6   r6   r6   r7   r*   7   s2    
:G
	r*   )<
__future__r   r   r   r   r~   enumr   httpr   typesr   typingr   r   r   r	   r
   r   r   r   r   pydanticr   aiogram.exceptionsr   r   r   r   r   r   r   r   r   r   r   r   methodsr   r   methods.baser   r    r!   r|   r#   telegramr$   r%   middlewares.managerr'   r9   r(   r-   r?   r/   r)   __annotations__ABCr*   r6   r6   r6   r7   <module>   s.    ,8