a
    xd                     @   s$  d 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Zd Zed	Zd
d Zd4ddZd5ddZd6ddZd7ddZd8ddZeedZd9ddZdd Zd:ddZd;d!d"Zd<d$d%Zd=d'd(Zd)d* Zed+fd,d-Zd.d/ Zd0d1 Z ej!Z!e!j"Z#e!j$Z%G d2d3 d3e!Z&dS )>zText formatting utilities.    N)Callable)partial)pformatfill)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.,)
isinstancestrsplit)s r   I/var/www/html/Ranjet/env/lib/python3.9/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>*       zdedent.<locals>.<genexpr>)r   
splitlines)r   r   sepr   r   r   r	   '   s    r	   c                    s   |  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#   0   r$   z"fill_paragraphs.<locals>.<genexpr>r   r   )r   r*   r&   r   r)   r   r   -   s    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#   6   r$   zjoin.<locals>.<genexpr>)r   )r"   r&   r   r   r   r   3   s    r      c                 C   s   || || |    S )z%Ensure text s ends in separator sep'.)count)r&   r   r   r   r   r   r   9   s    r   ...c                 C   sD   | du rdS t | |kr@|r4| d|t |  | p>| d| S | S )zAbbreviate word.N???)len)SmaxZellipsisr   r   r   r   B   s
    (r   c                 C   sP   | du rdS t | |krL| d\}}}t||t | d d}|d | S | S )zAbbreviate task name.Nr0   .   Fz[.])r1   
rpartitionr   )r2   r3   module_clsr   r   r   r   L   s    r   c                    s   |  fdd| |D S )zIndent text.c                 3   s   | ]}d   | V  qdS )r   Nr   r'   r   r   r   r#   [   r$   zindent.<locals>.<genexpr>r+   )tr   r&   r   r:   r   r   X   s    r      c                 C   s0   |r,t | |kr,| d| ddd | S | S )z0Truncate text to a maximum number of characters.Nr      r   )r1   rsplit)r   maxlensuffixr   r   r   r   ^   s    r   r   c                 C   s   | dkr|| S |S )z*Pluralize term when n is greater than one.r=   r   )r   textr@   r   r   r   r   f   s    r   P   c                 K   sj   t | tr*d| dt| d|dd  S t | trRd|dt| fd|i|S t| fd|i|S dS )	z%Format value for printing to console.{r   r   r=   Nz{}{}{}z    r*   )r   dictr   tupleformat)valuer*   Znl_widthr&   kwr   r   r   r   n   s    
 
r   c                 C   s   |  r|  S |  S r    )isupperupperlower)r   otherr   r   r   
match_case{   s    rM   z\1c                    s0   r, dd  fdd}||S S )z0Format string, expanding abbreviations in keys'.%c                    sN   |   }z| }W n" ty8   tt|Y n0 t|trJ| S |S r    )expandKeyError
ValueErrorUNKNOWN_SIMPLE_FORMAT_KEYrF   r   r   )matchkeyresolverrO   keysr   r   r   resolve   s    

zsimple_format.<locals>.resolve)
setdefaultsub)r   rW   patternrO   rX   r   rV   r   r      s
    
r   c                 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)'
    r4   r   )r   r6   remove_repeating)Z	task_namer   r7   r   r   r   remove_repeating_from_task   s    r]   c                 C   sL   | | }|dkrHd|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   r1   replace)substrr   indexr   r   r   r\      s    
r\   c                   @   s"   e Zd ZdZdddZdd ZdS )
WhateverIOz!StringIO that takes bytes or str.Nc                 O   s.   t | t|tr| n|g|R i | d S r    )	_SIO_initr   bytesdecode)selfr,   arH   r   r   r   __init__   s    zWhateverIO.__init__c                 C   s    t | t|tr| n| d S r    )
_SIO_writer   re   rf   )rg   datar   r   r   write   s    zWhateverIO.write)N)__name__
__module____qualname____doc__ri   rl   r   r   r   r   rc      s   
rc   )r   )r   r   )r   )r   )r-   )r/   )r   r   )r<   r/   )r   )rB   rB   r   )'rp   iorecollections.abcr   	functoolsr   pprintr   textwrapr   __all__striprR   compileZ	RE_FORMATr   r
   r	   r   r   r   r   r   r   r   r   r   r   rM   r   r]   r\   StringIOrl   rj   ri   rd   rc   r   r   r   r   <module>   s<   












