
    x'h                     :    d Z 	 ddlZ G d d      Z G d d      Zy)z
Callback data factory's file.
    Nc                   F    e Zd ZdZdej
                  eef   fdZdefdZ	y)CallbackDataFilterz"
    Filter for CallbackData.
    configc                      || _         || _        y )N)r   factory)selfr   r   s      M/var/www/flask-api/venv/lib/python3.12/site-packages/telebot/callback_data.py__init__zCallbackDataFilter.__init__(   s        returnc                 J   	 | j                   j                  |j                        }| j                  j                         D ]Q  \  }}t        |t        t        t        t        f      r|j                  |      |vs: y|j                  |      |k7  sQ y y# t        $ r Y yw xY w)a  
        Checks if query.data appropriates to specified config

        :param query: telebot.types.CallbackQuery
        :type query: telebot.types.CallbackQuery

        :return: True if query.data appropriates to specified config
        :rtype: bool
        FT)r   parsedata
ValueErrorr   items
isinstancelisttupleset	frozensetget)r   queryr   keyvalues        r	   checkzCallbackDataFilter.check,   s    	<<%%ejj1D ++++- 	JC%$sI!>?88C=- #%'	   		s   %B 	B"!B"N)
__name__
__module____qualname____doc__typingDictstrr
   boolr    r   r	   r   r   #   s,    CH(= d r   r   c                   h    e Zd ZdZdddefdZdefdZdedej                  eef   fd	Z	de
fd
Zy)CallbackDatazW
    Callback data factory
    This class will help you to work with CallbackQuery
    :)sepprefixc                    t        |t              s!t        dt        |      j                         |st        d      ||v rt        d|d      || _        || _        || _        y )Nz#Prefix must be instance of str not zPrefix can't be emptyz
Separator z can't be used in prefix)	r   r"   	TypeErrortyper   r   r)   r(   _part_names)r   r)   r(   partss       r	   r
   zCallbackData.__init__K   sk    &#&A$v,BWBWAXYZZ455&=z#0HIJJ r   r   c                    t        |      }| j                  g}| j                  D ]  }|j                  |d      }|#|r|j                  d      }nt	        d|d      |t        |t              st        |      }| j                  |v rt	        d| j                  d      |j                  |        |s|rt        d      | j                  j                  |      }t        |j                               dkD  rt	        d	      |S )
z
        Generate callback data

        :param args: positional parameters of CallbackData instance parts
        :param kwargs: named parameters
        :return: str
        Nr   z
Value for z was not passed!zSymbol z? is defined as the separator and can't be used in parts' valueszToo many arguments were passed!@   z#Resulted callback data is too long!)r   r)   r-   popr   r   r"   r(   appendr+   joinlenencode)r   argskwargsr   partr   callback_datas          r	   newzCallbackData.newX   s     Dz}$$ 	DJJtT*E} HHQKE$z$9I%JKK E3)?E
xx5  7488,6u!vwwKK	  6=>>d+}##%&+BCCr   r9   c                    |j                  | j                        ^}}|| j                  k7  rt        d      t	        |      t	        | j
                        k7  rt        d      d|i}|j                  t        | j
                  |             |S )z
        Parse data from the callback data
        
        :param callback_data: string, use to telebot.types.CallbackQuery to parse it from string to a dict
        :return: dict parsed from callback data
        z6Passed callback data can't be parsed with that prefix.zInvalid parts count!@)splitr(   r)   r   r4   r-   updatezip)r   r9   r)   r.   results        r	   r   zCallbackData.parse~   s~     ',,TXX6T[[ UVVZ3t//00344vc$**E23r   c                 |    |j                         D ]  }|| j                  vst        d|       t        | |      S )z
        Generate filter

        :param config: specified named parameters will be checked with CallbackQuery.data
        :return: CallbackDataFilter class
        zInvalid field name )keysr-   r   r   )r   r   r   s      r	   filterzCallbackData.filter   sK     ;;= 	@C$*** #6sg!>??	@ "$//r   N)r   r   r   r   r"   r
   r:   r    r!   r   r   rC   r$   r   r	   r&   r&   E   sR    
 14 !s !$c $L3 6;;sCx+@ $0"4 0r   r&   )r   r    r   r&   r$   r   r	   <module>rD      s+   6  DV0 V0r   