
    F˝i!                       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ejv                        Z<y)    )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                  t   e Zd ZdZeej                  ej                  ef	 	 	 	 	 	 	 	 	 ddZ		 	 	 	 	 	 	 	 	 	 ddZ
ej                  dd       Zej                  	 d	 	 	 	 	 	 	 dd       Zej                  	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd       Z	 d	 	 	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 dd	Zdd
Z	 	 	 	 	 	 	 	 ddZy)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.
    c                Z    || _         || _        || _        || _        t	               | _        y)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)api
json_loads
json_dumpstimeoutr#   
middleware)selfr*   r+   r,   r-   s        T/home/leshdev/mybot/venv/lib/python3.12/site-packages/aiogram/client/session/base.py__init__zBaseSession.__init__7   s*     $$24    c                H   	 | j                  |      }	 t        |j                     }|j                  |d|i      }	t        j                  |cxk  rt        j                  k  rn n|	j                  r|	S t        t        |	j                        }
|	j                  x}rH|j                  rt!        ||
|j                        |j"                  rt%        ||
|j"                        |t        j&                  k(  rt)        ||
      |t        j*                  k(  rt-        ||
      |t        j.                  k(  rt1        ||
      |t        j2                  k(  rt5        ||
      |t        j6                  k(  rt9        ||
      |t        j:                  k(  rt=        ||
      |t        j>                  k\  rd	|
v rtA        ||
      tC        ||
      tE        ||
      # t        $ r}d}t        |||      |d}~ww xY w# t        $ r}d}t        |||      |d}~ww xY w)
z'
        Check response status
        zFailed to decode objectNbot)contextzFailed to deserialize object)methodmessageretry_after)r6   r7   migrate_to_chat_id)r6   r7   restart)#r+   	Exceptionr   r   __returning__model_validater   r   OKIM_USEDokr   strdescription
parametersr8   r   r9   r   BAD_REQUESTr   	NOT_FOUNDr   CONFLICTr   UNAUTHORIZEDr   	FORBIDDENr   REQUEST_ENTITY_TOO_LARGEr   INTERNAL_SERVER_ERRORr   r   r   )r/   r4   r6   status_codecontent	json_dataemsgresponse_typeresponserB   rC   s               r0   check_responsezBaseSession.check_responseL   s   	<0I	>$V%9%9:M$33Is|3TH
 ==K=:+=+==(++O3 4 45!,,,:,%%(!' * 6 6 
 ,,+!''1'D'D 
 *000$FKHH*..."&+FF*---'v{KK*111+6;OO*...(LL*===(LL*:::K'(LL%V[II
 	
c  	< ,C#CG4!;	<  	>0C#CI6A=	>s.   G" (H "	H +G;;H 	H!HH!c                   K   yw)z&
        Close client session
        N r/   s    r0   closezBaseSession.close           Nc                   K   yw)z
        Make request to Telegram Bot API

        :param bot: Bot instance
        :param method: Method instance
        :param timeout: Request timeout
        :return:
        :raise TelegramApiError:
        NrT   )r/   r4   r6   r-   s       r0   make_requestzBaseSession.make_request   rW   rX   c                  K   d yw)z
        Stream reader
        r2   NrT   )r/   urlheadersr-   
chunk_sizeraise_for_statuss         r0   stream_contentzBaseSession.stream_content   s      	s   	c           
        |yt        |t              r|S t        |t              r.|j                  |j                     }| j                  ||||      S t        |t              rt        j                  d      }|||<   d| S t        |t              rP|j                         D ci c]   \  }}| j                  |||d      x}	 ||" }}}|r| j                  |      S |S t        |t              r<|D cg c]  }| j                  |||d      x}	 | }}|r| j                  |      S |S t        |t        j                        rCt        j                  j                         }	t        t!        |	|z   j#                                     S t        |t        j                        r"t        t!        |j#                                     S t        |t$              r| j                  |j&                  ||      S t        |t(              r%| j                  |j+                  d      |||      S |r| j                  |      S |S c c}}w c c}w )z+
        Prepare value before send
        N)r4   files_dumps_json
   z	attach://F)r4   rb   )warnings)
isinstancerA   r   defaultnameprepare_valuer    secretstoken_urlsafedictitemsr,   listdatetime	timedeltanowround	timestampr   valuer!   
model_dump)
r/   rt   r4   rb   rc   default_valuekeyitemprepared_itemrq   s
             r0   ri   zBaseSession.prepare_value   sc    =eS!LeW%KK

3M%%mEWb%cceY'''+CE#Jse$$eT" "'C%)%7%7#$)	 &8 & M  ]"E  u--LeT" "%)%7%7#$)	 &8 & M  E  u--LeX//0##'')CucEk446788eX../uU__./00eT"%%ekks%%HHe^,%%  % 0'	 &   ??5))c"s   &%I 7!Ic                   K   | j                   j                  | j                  |      }t        t         |||       d {         S 7 w)N)r-   )r.   wrap_middlewaresrZ   r   r   )r/   r4   r6   r-   r.   s        r0   __call__zBaseSession.__call__   sB      __55d6G6GQX5Y
L
3(?"?@@"?s   >A A	
	Ac                   K   | S wNrT   rU   s    r0   
__aenter__zBaseSession.__aenter__  s     s   c                @   K   | j                          d {    y 7 wr~   )rV   )r/   exc_type	exc_value	tracebacks       r0   	__aexit__zBaseSession.__aexit__  s      jjls   )
r*   r   r+   
_JsonLoadsr,   
_JsonDumpsr-   floatreturnNone)
r4   r%   r6   TelegramMethod[TelegramType]rK   intrL   rA   r   zResponse[TelegramType])r   r   r~   )r4   r%   r6   r   r-   z
int | Noner   r   )N   i   T)r\   rA   r]   zdict[str, Any] | Noner-   r   r^   r   r_   boolr   zAsyncGenerator[bytes, None])T)
rt   r	   r4   r%   rb   zdict[str, Any]rc   r   r   r	   )r   r   )r   ztype[BaseException] | Noner   zBaseException | Noner   zTracebackType | Noner   r   )__name__
__module____qualname____doc__r   jsonloadsdumpsr&   r1   rR   abcabstractmethodrV   rZ   r`   ri   r|   r   r   rT   r2   r0   r(   r(   0   s    ",!%!%(55 5 	5
 5 
5*@
@
 -@
 	@

 @
 
 @
D 	 
 	
 #	 - 	
 
   	 *.!% ' 	
   
% $ !GG G 	G
 G 
GZ #	AA -A 	A
 
A, ( (	
 
r2   r(   )=
__future__r   r   ro   r   rj   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   rA   r   r&   __annotations__ABCr(   rT   r2   r0   <module>r      s    " 
    4   2 2 $ " * A    5 - 3 9#&c3h
c3h
 $ $^#'' ^r2   