
    dh                        d dl mZmZ d dlmZmZmZmZmZm	Z	 	 d dl
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  G d dee      Z G d de      Z G d de      Z G d de      Zy# e$ r dZ G d de      ZY ^w xY w)    )ABCabstractmethod)Any	AwaitableCallableDictOptionalSet)LocaleUnknownLocaleErrorNc                       e Zd Zy)r   N)__name__
__module____qualname__     W/var/www/netwell/bot/venv/lib/python3.12/site-packages/aiogram/utils/i18n/middleware.pyr   r   	   s    r   r   )BaseMiddlewareRouter)
FSMContext)TelegramObjectUser)I18nc            	           e Zd ZdZ	 	 ddedee   deddfdZ	 dded	e	d
ee
e      defdZdeeeeef   gee   f   dedeeef   defdZededeeef   defd       Zy)I18nMiddlewarez#
    Abstract I18n middleware.
    i18ni18n_keymiddleware_keyreturnNc                 .    || _         || _        || _        y)z
        Create an instance of middleware

        :param i18n: instance of I18n
        :param i18n_key: context key for I18n instance
        :param middleware_key: context key for this middleware
        Nr   r   r   )selfr   r   r   s       r   __init__zI18nMiddleware.__init__   s     	 ,r   r"   routerexcludec                     |
t               }dh|}|j                  j                         D ]  \  }}||v r|j                  |         | S )z
        Register middleware for all events in the Router

        :param router:
        :param exclude:
        :return:
        update)set	observersitemsouter_middleware)r"   r$   r%   exclude_events
event_nameobservers         r   setupzI18nMiddleware.setup)   s`     ?eG"-W-$*$4$4$:$:$< 	, J^+%%d+	, r   handlereventdatac                   K   | j                  ||       d {   xs | j                  j                  }| j                  r| j                  || j                  <   | j                  r| || j                  <   | j                  j                         5  | j                  j                  |      5   |||       d {   cd d d        cd d d        S 7 7 # 1 sw Y   nxY wd d d        y # 1 sw Y   y xY ww)Nr1   r2   )
get_localer   default_localer   r   context
use_locale)r"   r0   r1   r2   current_locales        r   __call__zI18nMiddleware.__call__<   s       $UFFb$))JbJb=="&))D(,D$$%YY  	.$))"6"6~"F 	. --	. 	. 	. G .	. 	. 	. 	. 	.sX   C5CA6C5C),C9C:C=	C)C5CC	C) 	C5)C2.C5c                    K   yw)z
        Detect current user locale based on event and context.

        **This method must be defined in child classes**

        :param event:
        :param data:
        :return:
        Nr   r"   r1   r2   s      r   r5   zI18nMiddleware.get_localeL   s      	s   r   i18n_middlewareN)r   r   r   __doc__r   r	   strr#   r   r   r
   r/   r   r   r   r   r   r:   r   r5   r   r   r   r   r      s     #)/	-- 3-- 	-
 
-$ MQ&,7?C7I	&.>4S>:IcNJK. . 38n	.
 
.  
n 
DcN 
s 
 
r   r   c            	       ^     e Zd ZdZ	 	 ddedee   deddf fdZded	e	ee
f   defd
Z xZS )SimpleI18nMiddlewarezc
    Simple I18n middleware.

    Chooses language code from the User object received in event
    r   r   r   r   Nc                 x    t         |   |||       t        !t        t	        |       j
                   d      y )Nr!    can be used only when Babel installed
Just install Babel (`pip install Babel`) or aiogram with i18n support (`pip install aiogram[i18n]`))superr#   r   RuntimeErrortyper   )r"   r   r   r   	__class__s       r   r#   zSimpleI18nMiddleware.__init__a   sL     	dXnU>:&&' (M M  r   r1   r2   c                   K   t         !t        t        |       j                   d      |j	                  dd       }||j
                  | j                  j                  S 	 t        j                  |j
                  d      }|j                  | j                  j                  vr| j                  j                  S |j                  S # t        $ r | j                  j                  cY S w xY ww)NrE   event_from_user-)sep)r   rG   rH   r   getlanguage_coder   r6   parser   languageavailable_locales)r"   r1   r2   rK   locales        r   r5   zSimpleI18nMiddleware.get_localep   s     >:&&' (M M  +/((3Dd*K"o&C&C&K99+++	,\\/"?"?SIF ??$))"="==99+++ " 	,99+++	,s+   AC+!!C AC+C(%C+'C((C+r=   )r   r   r   r@   r   r	   rA   r#   r   r   r   r5   __classcell__rI   s   @r   rC   rC   Z   sa     #)/	 3- 	
 
n DcN s r   rC   c                   b     e Zd ZdZ	 	 ddededee   deddf
 fdZd	ed
e	ee
f   defdZ xZS )ConstI18nMiddlewarez<
    Const middleware chooses statically defined locale
    r   rS   r   r   r   Nc                 8    t         |   |||       || _        y Nr!   )rF   r#   rS   )r"   rS   r   r   r   rI   s        r   r#   zConstI18nMiddleware.__init__   s      	dXnUr   r1   r2   c                 "   K   | j                   S wr?   )rS   r<   s      r   r5   zConstI18nMiddleware.get_locale   s     {{s   r=   )r   r   r   r@   rA   r   r	   r#   r   r   r   r5   rT   rU   s   @r   rW   rW      sk     #)/  3-	
  
n DcN s r   rW   c                   |     e Zd ZdZ	 	 	 ddededee   deddf
 fd	Zd
ede	ee
f   def fdZdededdfdZ xZS )FSMI18nMiddlewarez:
    This middleware stores locale in the FSM storage
    rS   r   keyr   r   r   Nc                 8    t         |   |||       || _        y rY   )rF   r#   r]   )r"   r   r]   r   r   rI   s        r   r#   zFSMI18nMiddleware.__init__   s      	dXnUr   r1   r2   c                 4  K   |j                  d      }d }|r4|j                          d {   }|j                  | j                  d       }|sAt        |   ||       d {   }|r&|j                  | j                  |i       d {    |S 7 e7 07 
w)Nstater4   r2   )rN   get_datar]   rF   r5   update_data)r"   r1   r2   fsm_contextrS   fsm_datarI   s         r   r5   zFSMI18nMiddleware.get_locale   s     ,0HHW,=(1133H\\$((D1F 7-E-EEF!--DHHf3E-FFF 4 FFs3   )BB6B#B$'BBBBBr`   c                 ~   K   |j                  | j                  |i       d{    || j                  _        y7 w)z
        Write new locale to the storage

        :param state: instance of FSMContext
        :param locale: new locale
        ra   N)rc   r]   r   r9   )r"   r`   rS   s      r   
set_localezFSMI18nMiddleware.set_locale   s9      dhh%7888#)		  	9s   "=;=)rS   r   r>   )r   r   r   r@   r   rA   r	   r#   r   r   r   r5   r   rg   rT   rU   s   @r   r\   r\      s     "(/  3-	
  

n 
DcN 
s 
*j *# *$ *r   r\   )abcr   r   typingr   r   r   r   r	   r
   babelr   r   ImportError	Exceptionaiogramr   r   aiogram.fsm.contextr   aiogram.typesr   r   aiogram.utils.i18n.corer   r   rC   rW   r\   r   r   r   <module>rq      s~    # @ @0 + * . (D^S DN(> (V. &#*, #*e  FY s   A, ,B B