a
    9g                      @  sb  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r(d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ddddd	Z	d
dddddddZ
ejddddZejd3d
ddddddZejd4dddddd d!d"d#Zd5d$d
d%dd$d&d'd(Zd6d
ddddd)d*Zd dd+d,Zd-d.d/dd0d1d2ZdS )7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.
    r%   
_JsonLoads
_JsonDumpsfloatNone)api
json_loads
json_dumpstimeoutreturnc                 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/   r0   r1   r2   r'   
middleware)selfr/   r0   r1   r2    r6   x/var/www/vosh/data/www/fastworkle.ru/webshop-tgbot-v.1.0/venv/lib/python3.9/site-packages/aiogram/client/session/base.py__init__>   s
    zBaseSession.__init__r(   zTelegramMethod[TelegramType]intstrzResponse[TelegramType])botmethodstatus_codecontentr3   c              
   C  s  z|  |}W n0 ty> } ztd||W Y d}~n
d}~0 0 z t|j }|j|d|id}W n0 ty } ztd||W Y d}~n
d}~0 0 tj|  krtj	krn n
|j
r|S tt|j}	|j }
r|
jrt||	|
jd|
jrt||	|
jd|tjkrt||	d|tjkr*t||	d|tjkrBt||	d|tjkrZt||	d|tjkrrt||	d|tjkrt||	d|tjkrd	|	v rt ||	dt!||	dt"||	ddS )
z'
        Check response status
        zFailed to decode objectNr;   )contextzFailed to deserialize object)r<   messageretry_after)r<   r@   migrate_to_chat_id)r<   r@   Zrestart)#r0   	Exceptionr   r   Z__returning__Zmodel_validater   r   OKIM_USEDokr   r:   description
parametersrA   r   rB   r   BAD_REQUESTr   	NOT_FOUNDr   CONFLICTr   UNAUTHORIZEDr   	FORBIDDENr   REQUEST_ENTITY_TOO_LARGEr   INTERNAL_SERVER_ERRORr   r   r   )r5   r;   r<   r=   r>   Z	json_dataeZresponse_typeresponserG   rH   r6   r6   r7   check_responseS   sV    "
""

zBaseSession.check_response)r3   c                   s   dS )z&
        Close client session
        Nr6   r5   r6   r6   r7   close   s    zBaseSession.closeNzOptional[int]r   )r;   r<   r2   r3   c                   s   dS )z
        Make request to Telegram Bot API

        :param bot: Bot instance
        :param method: Method instance
        :param timeout: Request timeout
        :return:
        :raise TelegramApiError:
        Nr6   )r5   r;   r<   r2   r6   r6   r7   make_request   s    zBaseSession.make_request      TzOptional[Dict[str, Any]]boolzAsyncGenerator[bytes, None])urlheadersr2   
chunk_sizeraise_for_statusr3   c                 C s
   dV  dS )z
        Stream reader
            Nr6   )r5   rY   rZ   r2   r[   r\   r6   r6   r7   stream_content   s    zBaseSession.stream_contentr   zDict[str, Any])valuer;   files_dumps_jsonr3   c                   st  |du rdS t |tr|S t |trB j|j }j| |dS t |trhtd}||< d| S t |t	r fdd|
 D }|r|S |S t |trԇ fdd|D }|rЈ|S |S t |tjrt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 |rp|S |S )z+
        Prepare value before send
        Nr;   r`   ra   
   z	attach://c                   s0   i | ](\}}j | d d dur|qS Frb   Nprepare_value).0keyitemr;   r`   Zprepared_itemr5   r6   r7   
<dictcomp>   s   z-BaseSession.prepare_value.<locals>.<dictcomp>c                   s*   g | ]"}j | d d durqS rd   re   )rg   ri   rj   r6   r7   
<listcomp>   s   z-BaseSession.prepare_value.<locals>.<listcomp>)r;   r`   F)warnings)
isinstancer:   r#   defaultnamerf   r    secretsZtoken_urlsafedictitemsr1   listdatetime	timedeltanowround	timestampr   r_   r!   Z
model_dump)r5   r_   r;   r`   ra   default_valuerh   rw   r6   rj   r7   rf      sT    














zBaseSession.prepare_valuec                   s(   | j j| j|d}tt|||I d H S )N)r2   )r4   Zwrap_middlewaresrU   r   r   )r5   r;   r<   r2   r4   r6   r6   r7   __call__   s    zBaseSession.__call__c                   s   | S Nr6   rS   r6   r6   r7   
__aenter__   s    zBaseSession.__aenter__zOptional[Type[BaseException]]zOptional[BaseException]zOptional[TracebackType])exc_type	exc_value	tracebackr3   c                   s   |   I d H  d S r|   )rT   )r5   r~   r   r   r6   r6   r7   	__aexit__  s    zBaseSession.__aexit__)N)NrV   rW   T)T)N)__name__
__module____qualname____doc__r$   jsonloadsdumpsr)   r8   rR   abcabstractmethodrT   rU   r^   rf   r{   r}   r   r6   r6   r6   r7   r*   7   s0   :      G 	r*   )<
__future__r   r   ru   r   rq   enumr   httpr   typesr   typingr   r   r   r	   r
   r   r   r   r   Zpydanticr   Zaiogram.exceptionsr   r   r   r   r   r   r   r   r   r   r   r   methodsr   r   Zmethods.baser   r    r!   ro   r#   Ztelegramr$   r%   Zmiddlewares.managerr'   r;   r(   r+   r:   r,   r)   __annotations__ABCr*   r6   r6   r6   r7   <module>   s,   ,8