o
    wvXj  ã                   @   s:  d Z ddlmZmZ ddlZddlmZ ddlmZ ddl	m
Z
 ddlmZ zddlmZ W n ey=   ddlmZ Y nw d	Zd
 ¡ Ze d¡Zdd„ Zd4dd„Zd5dd„Zd6dd„Zd6dd„Zd7dd„ZeedƒZd8dd„Zdd„ Zd9d d!„Zd:d#d$„Z d;d&d'„Z!d<d)d*„Z"d+d,„ Z#ed-fd.d/„Z$d0d1„ Z%d2d3„ Z&dS )=zText formatting utilities.é    )Úabsolute_importÚunicode_literalsN)Úpartial)Úpformat©Úfill)Ústring_t)ÚCallable)ÚabbrÚabbrtaskÚdedentÚdedent_initialÚensure_newlinesÚ
ensure_sepÚfill_paragraphsÚindentÚjoinÚ	pluralizeÚprettyÚstr_to_listÚsimple_formatÚtruncatez¿
Unknown format %{0} in string {1!r}.
Possible causes: Did you forget to escape the expand sign (use '%%{0!r}'),
or did you escape and the value was expanded twice? (%%N -> %N -> %hostname)?
z%(\w)c                 C   s   t | tƒr
|  d¡S | S )zConvert string to list.ú,)Ú
isinstancer   Úsplit©Ús© r   úN/var/www/html/myproject/venv/lib/python3.10/site-packages/celery/utils/text.pyr   #   s   

r   é   c                 C   s$   | d|… d| kr| |d… S | S )z*Remove identation from first line of text.Nú r   )r   Únr   r   r   r   +   s   $r   Ú
c                 C   s   |  dd„ |  ¡ D ƒ¡S )zRemove identation.c                 s   s   � | ]}t |ƒV  qd S ©N)r   )Ú.0Úlr   r   r   Ú	<genexpr>4   ó   € zdedent.<locals>.<genexpr>)r   Ú
splitlines)r   r!   Úsepr   r   r   r   1   s   r   c                    ó   |  ‡ fdd„|  |¡D ƒ¡S )z4Fill paragraphs with newlines (or custom separator).c                 3   s   � | ]}t |ˆ ƒV  qd S r#   r   ©r$   Úp©Úwidthr   r   r&   :   s   € z"fill_paragraphs.<locals>.<genexpr>©r   r   )r   r.   r)   r   r-   r   r   7   ó   r   c                 C   s   |  dd„ | D ƒ¡S )zConcatenate list of strings.c                 s   s   � | ]}|r|V  qd S r#   r   )r$   Úvr   r   r   r&   @   r'   zjoin.<locals>.<genexpr>)r   )r%   r)   r   r   r   r   =   s   r   é   c                 C   s   || ||  | ¡   S )z%Ensure text s ends in separator sep'.)Úcount)r)   r   r!   r   r   r   r   C   s   r   ú...c                 C   sD   | du rdS t | ƒ|kr |r| d|t |ƒ … | p| d|… S | S )zAbbreviate word.Nú???)Úlen)ÚSÚmaxÚellipsisr   r   r   r
   L   s
   (r
   c                 C   sP   | du rdS t | ƒ|kr&|  d¡\}}}t||t |ƒ d dƒ}|d | S | S )zAbbreviate task name.Nr5   Ú.é   Fz[.])r6   Ú
rpartitionr
   )r7   r8   ÚmoduleÚ_Úclsr   r   r   r   V   s   r   c                    r*   )zIndent text.c                 3   s   � | ]	}d ˆ  | V  qdS )r    Nr   r+   ©r   r   r   r&   e   s   € zindent.<locals>.<genexpr>r/   )Útr   r)   r   r@   r   r   b   r0   r   é€   c                 C   s0   |rt | ƒ|kr| d|…  dd¡d | S | S )z0Truncate text to a maximum number of characters.Nr    é   r   )r6   Úrsplit)r   ÚmaxlenÚsuffixr   r   r   r   h   s   r   r   c                 C   s   | dkr|| S |S )z*Pluralize term when n is greater than one.rC   r   )r!   ÚtextrF   r   r   r   r   p   s   r   éP   c                 K   sb   t | tƒrd |t| d|ƒdd… ¡S t | tƒr'd |dt| fd|i|¤Ž¡S t| fd|i|¤ŽS )z%Format value for printing to console.z	{{{0} {1}r   rC   Nz	{0}{1}{2}z    r.   )r   ÚdictÚformatr   Útuple)Úvaluer.   Únl_widthr)   Úkwr   r   r   r   x   s   

ÿr   c                 C   s   |  ¡ r|  ¡ S |  ¡ S r#   )ÚisupperÚupperÚlower)r   Úotherr   r   r   Ú
match_case…   s   rS   z\1c                    s0   ˆrˆ  dd¡ ‡ ‡‡fdd„}| |ˆ¡S ˆS )z0Format string, expanding abbreviations in keys'.ú%c                    sJ   |   ˆ ¡}zˆ| }W n ty   tt |ˆ¡ƒ‚w t|tƒr#|ƒ S |S r#   )ÚexpandÚKeyErrorÚ
ValueErrorÚUNKNOWN_SIMPLE_FORMAT_KEYrJ   r   r	   )ÚmatchÚkeyÚresolver©rU   Úkeysr   r   r   Úresolve�   s   
ÿ
zsimple_format.<locals>.resolve)Ú
setdefaultÚsub)r   r]   ÚpatternrU   r^   r   r\   r   r   Š   s
   
r   c                 C   s    t | ƒ d¡d d }t||ƒS )zðGiven task name, remove repeating module names.

    Example:
        >>> remove_repeating_from_task(
        ...     'tasks.add',
        ...     'tasks.add(2, 2), tasks.mul(3), tasks.div(4)')
        'tasks.add(2, 2), mul(3), div(4)'
    r:   r   )Ústrr<   Úremove_repeating)Ú	task_namer   r=   r   r   r   Úremove_repeating_from_taskž   s   
re   c                 C   sL   |  | ¡}|dkr$d |d|t| ƒ … ||t| ƒ d…  | d¡g¡S |S )a¶  Remove repeating module names from string.

    Arguments:
        task_name (str): Task name (full path including module),
            to use as the basis for removing module names.
        s (str): The string we want to work on.

    Example:

        >>> _shorten_names(
        ...    'x.tasks.add',
        ...    'x.tasks.add(2, 2) | x.tasks.add(4) | x.tasks.mul(8)',
        ... )
        'x.tasks.add(2, 2) | add(4) | mul(8)'
    r   Ú N)Úfindr   r6   Úreplace)Úsubstrr   Úindexr   r   r   rc   ®   s   
ürc   )r   )r   r"   )r"   )r2   )r4   )r   r"   )rB   r4   r   )rH   rH   r"   )'Ú__doc__Ú
__future__r   r   ÚreÚ	functoolsr   Úpprintr   Útextwrapr   Úcelery.fiver   Úcollections.abcr	   ÚImportErrorÚcollectionsÚ__all__ÚstriprX   ÚcompileÚ	RE_FORMATr   r   r   r   r   r   r   r
   r   r   r   r   r   rS   r   re   rc   r   r   r   r   Ú<module>   sD   þü












