
    h                       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
j#                         Z ej&                  d      Zd dZd!d"dZd#d$dZd#d%dZd#d&dZd'd(dZ eed      Zd)d*dZd+dZd,d-dZd.d/dZd0d1dZ d2	 	 	 d3dZ!d4dZ"edf	 	 	 	 	 	 	 	 	 d5dZ#d6dZ$d7dZ%ejL                  Z&e&jN                  Z(e&jR                  Z* G d de&      Z+y)8z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)c                H    t        | t              r| j                  d      S | S )zConvert string to list.,)
isinstancestrsplitss    M/var/www/Befach/backend/env/lib/python3.12/site-packages/celery/utils/text.pyr   r      s    !Swws|H    c                &    | d| d|z  k(  r| |d S | S )z+Remove indentation from first line of text.N  )r    ns     r!   r   r   #   s$    bqES1W$1QR5+!+r"   
c                N    |j                  d | j                         D              S )zRemove indentation.c              3  2   K   | ]  }t        |        y wN)r   ).0ls     r!   	<genexpr>zdedent.<locals>.<genexpr>*   s     >!N1%>s   )r   
splitlines)r    seps     r!   r   r   (   s    88>q||~>>>r"   c                V    |j                  fd| j                  |      D              S )z4Fill paragraphs with newlines (or custom separator).c              3  6   K   | ]  }t        |        y wr*   r   )r+   pwidths     r!   r-   z"fill_paragraphs.<locals>.<genexpr>/   s     9qDEN9s   r   r   )r    r3   r/   s    ` r!   r   r   -   s     889AGGCL999r"   c                2    |j                  d | D              S )zConcatenate list of strings.c              3  &   K   | ]	  }|s|  y wr*   r%   )r+   vs     r!   r-   zjoin.<locals>.<genexpr>4   s     &!AA&s   )r   )r,   r/   s     r!   r   r   2   s    88&q&&&r"   c                6    || ||j                  |       z
  z  z   S )z%Ensure text s ends in separator sep'.)count)r/   r    r&   s      r!   r   r   7   s    sa!''#,&'''r"   c                    | yt        |       |kD  r-t        |t              xr | d|t        |      z
   |z   xs | d| S | S )zAbbreviate word.N???)lenr   r   )Smaxellipsiss      r!   r   r   ?   sU    y
1v|(C( 1#c(m#$x/=45eH	=Hr"   c                    | yt        |       |kD  r9| j                  d      \  }}}t        ||t        |      z
  dz
  d      }|dz   |z   S | S )zAbbreviate task name.r;   .   Fz[.])r<   
rpartitionr   )r=   r>   module_clss        r!   r   r   I   sX    y
1v|c*3fcCHnq0%8~##Hr"   c                V    |j                  fd| j                  |      D              S )zIndent text.c              3  .   K   | ]  }d z  |z     yw)r$   Nr%   )r+   r2   r   s     r!   r-   zindent.<locals>.<genexpr>V   s     ;C&L1$;s   r4   )tr   r/   s    ` r!   r   r   T   s     88;aggcl;;;r"   c                \    |r)t        |       |k\  r| d| j                  dd      d   |z   S | S )z0Truncate text to a maximum number of characters.Nr$      r   )r<   rsplit)r    maxlensuffixs      r!   r   r   Y   s8    #a&F"&z  a(+f44Hr"   c                    | dk7  r||z   S |S )z*Pluralize term when n is greater than one.rK   r%   )r&   textrN   s      r!   r   r   `   s    Avf}Kr"   c           	         t        | t              r| dt        | d|      dd  S t        | t              rdj	                  |dt        | fd|i|      S t        | fd|i|S )z%Format value for printing to console.r$      rK   Nz{}{}{}z    r3   )r   dictr   tupleformat)valuer3   nl_widthr/   kws        r!   r   r   g   sx     %aq(3AB7899	E5	!'%>x>2>
 	
 u0E0R00r"   c                b    |j                         r| j                         S | j                         S r*   )isupperupperlower)r    others     r!   
match_caser^   t   s!    17796QWWY6r"   z\1c                h      r,j                  dd       d fd}|j                  |       S  S )z0Format string, expanding abbreviations in keys'.%c                    | j                        }	 |   }t        |      r |       S |S # t        $ r  t        t        j	                  |            w xY wr*   )expandKeyError
ValueErrorUNKNOWN_SIMPLE_FORMAT_KEYrU   callable)matchkeyresolverrb   keysr    s      r!   resolvezsimple_format.<locals>.resolve   sc    ,,v&CK9 !z!O	  K !:!A!A#q!IJJKs	   - )A)rg   r   returnz	str | Any)
setdefaultsub)r    rj   patternrb   rk   s   `` ` r!   r   r   x   s3     	S!	 {{7A&&Hr"   c                Z    t        |       j                  d      d   dz   }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)'
    rA   r   )r   rC   remove_repeating)	task_namer    rD   s      r!   remove_repeating_from_taskrs      s/     ^&&s+A.4FFA&&r"   c                    |j                  |       }|dk\  rAdj                  |d|t        |       z    ||t        |       z   d j                  | 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)substrr    indexs      r!   rq   rq      sj    " FF6NEzww"us6{"#ec&k!"#++FB7	
  	 Hr"   c                  2    e Zd ZdZ	 d	 	 	 	 	 	 	 ddZddZy)
WhateverIOz!StringIO that takes bytes or str.Nc                d    t        | t        |t              r|j                         n|g|i | y r*   )	_SIO_initr   bytesdecode)selfr7   arX   s       r!   __init__zWhateverIO.__init__   s'    $jE&:
LALLr"   c                b    t        | t        |t              r|j                               S |      S r*   )
_SIO_writer   r~   r   )r   datas     r!   writezWhateverIO.write   s7    $'e4 !% @ 	@:>@ 	@r"   r*   )r7   zbytes | str | Noner   r	   rX   r	   rl   None)r   zbytes | strrl   int)__name__
__module____qualname____doc__r   r   r%   r"   r!   r{   r{      s:    + +/M'M47M?BMGKM@r"   r{   )r    r   rl   	list[str])rR   )r    r   r&   r   rl   r   )r'   )r    r   r/   r   rl   r   )r    r   r3   r   r/   r   rl   r   )r,   r   r/   r   rl   r   )   )r/   r   r    r   r&   r   rl   r   )...)r=   r   r>   r   r?   z
str | boolrl   r   )r=   r   r>   r   rl   r   )r   r'   )rI   r   r   r   r/   r   rl   r   )   r   )r    r   rM   r   rN   r   rl   r   r   )r&   floatrP   r   rN   r   rl   r   )P   r   r'   )rV   r   r3   r   rW   r   r/   r   rX   r	   rl   r   )r    r   r]   r   rl   r   )
r    r   rj   zdict[str, str | Callable]ro   zPattern[str]rb   r   rl   r   )rr   r   r    r   rl   r   )rx   r   r    r   rl   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   r^   r   rs   rq   StringIOr   r   r   r}   r{   r%   r"   r!   <module>r      s     " 	 	     ) ) 
EG	  BJJx 	,
?
:
'
(
 *d+<

1
1
17 !*/36CF*'8 ;;^^
		@ 	@r"   