a
    oÝEb‡  ã                   @  sÄ   d Z ddlmZ ddlm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 eejfddd	d
œdd„ƒZejfddddœdd„Zddddœdd„Zddœdd„Zddefdddddœd d!„ZdS )"zx
Helpers for configuring locale settings.

Name `localization` is chosen to avoid overlap with builtin `locale` module.
é    )Úannotations)ÚcontextmanagerN)ÚCallableÚIterator)Úoptionszstr | tuple[str, str]ÚintzIterator[str | tuple[str, str]])Ú
new_localeÚlc_varÚreturnc              
   c  sf   t  ¡ }zJt  || ¡ t  ¡ }tdd„ |D ƒƒr>d |¡V  n| V  W t  ||¡ nt  ||¡ 0 dS )aE  
    Context manager for temporarily setting a locale.

    Parameters
    ----------
    new_locale : str or tuple
        A string of the form <language_country>.<encoding>. For example to set
        the current locale to US English with a UTF8 encoding, you would pass
        "en_US.UTF-8".
    lc_var : int, default `locale.LC_ALL`
        The category of the locale being set.

    Notes
    -----
    This is useful when you want to run a particular block of code under a
    particular locale, without globally setting the locale. This probably isn't
    thread-safe.
    c                 s  s   | ]}|d uV  qd S ©N© )Ú.0Úxr   r   ú[/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/pandas/_config/localization.pyÚ	<genexpr>/   ó    zset_locale.<locals>.<genexpr>Ú.N)ÚlocaleÚ	getlocaleÚ	setlocaleÚallÚjoin)r   r	   Zcurrent_localeZnormalized_localer   r   r   Ú
set_locale   s    r   ÚstrÚbool)Úlcr	   r
   c              	   C  sT   z0t | |d�� W d  ƒ n1 s$0    Y  W n ttjfyJ   Y dS 0 dS dS )aj  
    Check to see if we can set a locale, and subsequently get the locale,
    without raising an Exception.

    Parameters
    ----------
    lc : str
        The locale to attempt to set.
    lc_var : int, default `locale.LC_ALL`
        The category of the locale being set.

    Returns
    -------
    bool
        Whether the passed locale can be set
    )r	   NFT)r   Ú
ValueErrorr   ÚError)r   r	   r   r   r   Úcan_set_locale7   s    "r   zlist[str] | strz	list[str])ÚlocalesÚ	normalizer
   c                   s   dd„ ‡ fdd„| D ƒD ƒS )ar  
    Return a list of normalized locales that do not throw an ``Exception``
    when set.

    Parameters
    ----------
    locales : str
        A string where each locale is separated by a newline.
    normalize : bool
        Whether to call ``locale.normalize`` on each locale.

    Returns
    -------
    valid_locales : list
        A list of valid locales.
    c                 S  s   g | ]}t |ƒr|‘qS r   )r   ©r   Úlocr   r   r   Ú
<listcomp>c   s   ûz"_valid_locales.<locals>.<listcomp>c                 3  s(   | ] }ˆ rt  | ¡ ¡n| ¡ V  qd S r   )r   r    Ústripr!   ©r    r   r   r   e   s   ÿz!_valid_locales.<locals>.<genexpr>r   )r   r    r   r%   r   Ú_valid_localesR   s
    
þþr&   Úbytes)r
   c                   C  s   t jdgdd�S )Nz	locale -aT)Úshell)Ú
subprocessÚcheck_outputr   r   r   r   Ú_default_locale_getterm   s    r+   Tz
str | NonezCallable[[], bytes]zlist[str] | None)Úprefixr    Úlocale_getterr
   c           	   
   C  sÎ   z
|ƒ }W n t jy    Y dS 0 z\| d¡}g }|D ]D}z| t|tjjd�¡ W q6 tyx   | t|dd�¡ Y q60 q6W n t	y�   Y n0 | du r¤t
||ƒS t | › d�¡}| d |¡¡}t
||ƒS )aÑ  
    Get all the locales that are available on the system.

    Parameters
    ----------
    prefix : str
        If not ``None`` then return only those locales with the prefix
        provided. For example to get all English language locales (those that
        start with ``"en"``), pass ``prefix="en"``.
    normalize : bool
        Call ``locale.normalize`` on the resulting list of available locales.
        If ``True``, only locales that can be set without throwing an
        ``Exception`` are returned.
    locale_getter : callable
        The function to use to retrieve the current locales. This should return
        a string with each locale separated by a newline character.

    Returns
    -------
    locales : list of strings
        A list of locale strings that can be set with ``locale.setlocale()``.
        For example::

            locale.setlocale(locale.LC_ALL, locale_string)

    On error will return None (no locale available, e.g. Windows)

    Nó   
)Úencodingzwindows-1252z.*Ú
)r)   ÚCalledProcessErrorÚsplitÚappendr   r   Údisplayr/   ÚUnicodeErrorÚ	TypeErrorr&   ÚreÚcompileÚfindallr   )	r,   r    r-   Zraw_localesZsplit_raw_localesZout_localesr   ÚpatternÚfoundr   r   r   Úget_localesq   s&    !


r<   )Ú__doc__Ú
__future__r   Ú
contextlibr   r   r7   r)   Útypingr   r   Zpandas._config.configr   ÚLC_ALLr   r   r&   r+   r<   r   r   r   r   Ú<module>   s"   ÿ"ý