o
    Df                     @  sd  d Z ddlmZ ddl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 ddlmZmZmZ d	Zd
 ZedZdSddZdTdUddZdVdWddZdVdXddZdVdYdd ZdZd[d"d#ZeedZd\d]d)d*Zd^d+d,Zd_d`d/d.Zdadbd3d4Zdcddd7d8Z dedfd>d?Z!dgdAdBZ"edCfdhdIdJZ#didLdMZ$djdOdPZ%ej&Z&e&j'Z(e&j)Z*G dQdR dRe&Z+dS )kzText formatting utilities.    )annotationsN)partial)pformat)Matchfill)AnyCallablePattern)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)sstrreturn	list[str]c                 C  s   t | tr
| dS | S )zConvert string to list.,)
isinstancer   splitr    r!   J/home/ubuntu/webapp/venv/lib/python3.10/site-packages/celery/utils/text.pyr      s   

r      nintc                 C  s$   | d| d| kr| |d S | S )z+Remove indentation from first line of text.N r!   )r   r$   r!   r!   r"   r   #   s   $r   
sepc                 C  s   | dd |  D S )zRemove indentation.c                 s  s    | ]}t |V  qd S N)r   ).0lr!   r!   r"   	<genexpr>*       zdedent.<locals>.<genexpr>)r   
splitlines)r   r(   r!   r!   r"   r   (   s   r   widthc                      |  fdd| |D S )z4Fill paragraphs with newlines (or custom separator).c                 3  s    | ]}t | V  qd S r)   r   r*   pr/   r!   r"   r,   /   s    z"fill_paragraphs.<locals>.<genexpr>r   r   )r   r/   r(   r!   r3   r"   r   -      r   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,   4   r-   zjoin.<locals>.<genexpr>)r   )r+   r(   r!   r!   r"   r   2   s   r      c                 C  s   || || |    S )z%Ensure text s ends in separator sep'.)count)r(   r   r$   r!   r!   r"   r   7   s   r   ...Smaxellipsis
str | boolc                 C  sJ   | du rdS t | |kr#t|tr| d|t |  | p"| d| S | S )zAbbreviate word.N???)lenr   r   )r:   r;   r<   r!   r!   r"   r   ?   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.Nr>   .   Fz[.])r?   
rpartitionr   )r:   r;   module_clsr!   r!   r"   r   I   s   r   tr   c                   r0   )zIndent text.c                 3  s    | ]	}d   | V  qdS )r&   Nr!   r1   r   r!   r"   r,   V   s    zindent.<locals>.<genexpr>r4   )rF   r   r(   r!   rG   r"   r   T   r5      maxlensuffixc                 C  s0   |rt | |kr| d| ddd | S | S )z0Truncate text to a maximum number of characters.Nr&      r   )r?   rsplit)r   rI   rJ   r!   r!   r"   r   Y   s   r   floattextc                 C  s   | dkr|| S |S )z*Pluralize term when n is greater than one.rK   r!   )r$   rN   rJ   r!   r!   r"   r   `   s   r   P   valuenl_widthkwr   c                 K  sd   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.r&   r#   rK   Nz{}{}{}z    r/   )r   dictr   tupleformat)rP   r/   rQ   r(   rR   r!   r!   r"   r   g   s   

r   otherc                 C  s   |  r|  S |  S r)   )isupperupperlower)r   rV   r!   r!   r"   
match_caset   s   rZ   z\1keysdict[str, str | Callable]patternPattern[str]expandc                   s2   r dd d	 fdd}||S S )
z0Format string, expanding abbreviations in keys'.%matchr   r   	str | Anyc                   sH   |   }z| }W n ty   tt|w t|r"| S |S r)   )r_   KeyError
ValueErrorUNKNOWN_SIMPLE_FORMAT_KEYrU   callable)ra   keyresolverr_   r[   r   r!   r"   resolve   s   
zsimple_format.<locals>.resolveN)ra   r   r   rb   )
setdefaultsub)r   r[   r]   r_   rj   r!   ri   r"   r   x   s
   
r   	task_namec                 C  s    t | dd d }t||S )zGiven 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   )r   rB   remove_repeating)rm   r   rC   r!   r!   r"   remove_repeating_from_task   s   
ro   substrc                 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   r?   replace)rp   r   indexr!   r!   r"   rn      s   
rn   c                   @  s(   e Zd ZdZ	ddd
dZdddZdS )
WhateverIOz!StringIO that takes bytes or str.Nr6   bytes | str | Nonear   rR   r   Nonec                 O  s.   t | t|tr| n|g|R i | d S r)   )	_SIO_initr   bytesdecode)selfr6   rw   rR   r!   r!   r"   __init__   s   .zWhateverIO.__init__databytes | strr%   c                 C  s   t | t|tr| S |S r)   )
_SIO_writer   rz   r{   )r|   r~   r!   r!   r"   write   s
   zWhateverIO.writer)   )r6   rv   rw   r   rR   r   r   rx   )r~   r   r   r%   )__name__
__module____qualname____doc__r}   r   r!   r!   r!   r"   ru      s
    ru   )r   r   r   r   )r#   )r   r   r$   r%   r   r   )r'   )r   r   r(   r   r   r   )r   r   r/   r%   r(   r   r   r   )r+   r   r(   r   r   r   )r7   )r(   r   r   r   r$   r%   r   r   )r9   )r:   r   r;   r%   r<   r=   r   r   )r:   r   r;   r%   r   r   )r   r'   )rF   r   r   r%   r(   r   r   r   )rH   r9   )r   r   rI   r%   rJ   r   r   r   r    )r$   rM   rN   r   rJ   r   r   r   )rO   rO   r'   )rP   r   r/   r%   rQ   r%   r(   r   rR   r   r   r   )r   r   rV   r   r   r   )
r   r   r[   r\   r]   r^   r_   r   r   r   )rm   r   r   r   r   r   )rp   r   r   r   r   r   ),r   
__future__r   iore	functoolsr   pprintr   r   textwrapr   typingr   r	   r
   __all__stripre   compile	RE_FORMATr   r   r   r   r   r   r   r   r   r   r   r   r   rZ   r   ro   rn   StringIOr   r   r}   ry   ru   r!   r!   r!   r"   <module>   sH    







