
    3h              	           S r SSKrSSKrSSKJrJr  SSKrSSKrSSKJ	r	  SSK
JrJrJr  SSKJr  SSKJrJrJr  S	\R&                  S
\R(                  S\\   S\\   4S jrSSS.S\\R.                     S\\   S\\   4S jjr " S S5      rg)z|This module contains functions to list all available voices and a class to find the
correct voice based on their attributes.    N)ListOptional)Unpack   )SEC_MS_GEC_VERSIONVOICE_HEADERS
VOICE_LIST)DRM)VoiceVoicesManagerFindVoicesManagerVoicesessionssl_ctxproxyreturnc                 &  #    U R                  [         S[        R                  " 5        S[         3[
        UUSS9 ISh  vN n[        R                  " UR                  5       I Sh  vN 5      nSSS5      ISh  vN   W H]  nUS   S    Vs/ s H  nUR                  5       PM     snUS   S'   US   S    Vs/ s H  nUR                  5       PM     snUS   S'   M_     U$  N N Nm! , ISh  vN  (       d  f       N= fs  snf s  snf 7f)	a  
Private function that makes the request to the voice list URL and parses the
JSON response. This function is used by list_voices() and makes it easier to
handle client response errors related to clock skew.

Args:
    session (aiohttp.ClientSession): The aiohttp session to use for the request.
    ssl_ctx (ssl.SSLContext): The SSL context to use for the request.
    proxy (Optional[str]): The proxy to use for the request.

Returns:
    List[Voice]: A list of voices and their attributes.
z&Sec-MS-GEC=z&Sec-MS-GEC-Version=T)headersr   sslraise_for_statusNVoiceTagContentCategoriesVoicePersonalities)
getr	   r
   generate_sec_ms_gecr   r   jsonloadstextstrip)r   r   r   urldatavoicecategorypersonalitys           G/var/www/auris/envauris/lib/python3.13/site-packages/edge_tts/voices.py__list_voicesr%      s'      {{,l3#:#:#<"=
12	4    
 JJSXXZ'78   "*-.AB2
B NNB2
j-.  %Z01EF3
F F3
j./  K/ (8   2
3
sq   ?DC'D$C-)C)
*C-2D=C+>DD+D>DD)C-+D-D3C64D D)	connectorr   r&   c                   #    [         R                  " [        R                  " 5       S9n[        R
                  " U SS9 ISh  vN n [        X2U5      I Sh  vN nSSS5      ISh  vN   U$  N+ N! [        R                   aF  nUR                  S:w  a  e [        R                  " U5        [        X2U5      I Sh  vN  n SnANkSnAff = f Ng! , ISh  vN  (       d  f       W$ = f7f)am  
List all available voices and their attributes.

This pulls data from the URL used by Microsoft Edge to return a list of
all available voices.

Args:
    connector (Optional[aiohttp.BaseConnector]): The connector to use for the request.
    proxy (Optional[str]): The proxy to use for the request.

Returns:
    List[Voice]: A list of voices and their attributes.
)cafileT)r&   	trust_envNi  )r   create_default_contextcertifiwhereaiohttpClientSessionr%   ClientResponseErrorstatusr
   handle_client_response_error)r&   r   r   r   r    es         r$   list_voicesr3   ;   s       ((@G$$yDIIW	@&w??D JI K J?** 	@xx3,,Q/&w???D	@ JII Ks   AC-A/C-C	A3A1A3C-(C)C-1A33C6C=C >CCCCC-C*CC*%C-c                   n    \ rS rSrSrSS jr\ SS\\\	      SS 4S jj5       r
S\\   S\\   4S	 jrS
rg)VoicesManagerX   z>
A class to find the correct voice based on their attributes.
r   Nc                      / U l         SU l        g )NF)voicescalled_create)selfs    r$   __init__VoicesManager.__init__]   s    02#(    custom_voicesc                    #    [        5       nUc  [        5       I Sh  vN OUnU Vs/ s H   n0 UESUS   R                  S5      S   0EPM"     snUl        SUl        U$  NBs  snf 7f)zL
Creates a VoicesManager object and populates it with all available voices.
NLanguageLocale-r   T)r5   r3   splitr8   r9   )clsr>   r:   r8   r!   s        r$   createVoicesManager.createa   sw      (5(={}$$=NT
NTU@u@j%/"7"7"<Q"?@f
 " %
s    A'A 
A''A"A'"A'kwargsc                     U R                   (       d  [        S5      eU R                   Vs/ s H(  o!R                  5       UR                  5       ::  d  M&  UPM*     nnU$ s  snf )z=
Finds all matching voices based on the provided attributes.
z9VoicesManager.find() called before VoicesManager.create())r9   RuntimeErrorr8   items)r:   rG   r!   matching_voicess       r$   findVoicesManager.findp   s]     !!K 
  ${{
*elln.ME{ 	 
 
s   %AA)r9   r8   )r   N)N)__name__
__module____qualname____firstlineno____doc__r;   classmethodr   r   r   rE   r   r   r   rL   __static_attributes__ r=   r$   r5   r5   X   s[    ) 48$T%[1	 V$56 4@R;S r=   r5   )rR   r   r   typingr   r   r-   r+   typing_extensionsr   	constantsr   r   r	   drmr
   r   r   r   r.   
SSLContextstrr%   BaseConnectorr3   r5   rU   r=   r$   <module>r]      s   ,  
 !   $ D D  @ @'""'-0^^'DLSM'	%['V 59QU7001AI#	%[:$ $r=   