o
    4˜ŽjÌ!  ã                   @  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r—d 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   úX/var/www/kodo/Anonymous/send/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yB } z	d}t|||ƒ|‚d}~ww tj|  krOtj	krVn n|	j
rV|	S tt|	jƒ}
|	j }rw|jrlt||
|jd�‚|jrwt||
|jd�‚|tjkr‚t||
d�‚|tjkr�t||
d�‚|tjkr˜t||
d�‚|tjkr£t||
d�‚|tjkr®t||
d�‚|tjkr¹t||
d�‚|tjkrÎd	|
v rÈt ||
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ƒr�t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