
    i'&                     `   d Z ddlZddlZddl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ZddlmZ ddlmZmZmZ  G d d	ee	      Z G d
 d      ZdedefdZdedeeef   fdZ ej4                  d      ZdZdedefdZdedefdZdedefdZefdede defdZ!dedefdZ" e       Z#y)z"Output framework for the `hf` CLI.    N)Sequence)Enum)Any)ConfirmationError)ANSIis_agenttabulatec                   $    e Zd ZdZdZdZdZdZdZy)OutputFormatWithAutozGOutput format for CLI commands with auto detection of agent/human mode.agentautohumanjsonquietN)	__name__
__module____qualname____doc__r   r   r   r   r        l/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/huggingface_hub/cli/_output.pyr   r       s    QEDEDEr   r   c                   L   e Zd ZU dZeed<   ddZej                  fdeddfdZddddde	dz  d	e	dz  d
e	dz  ddfdZ
dddddeee	ef      dee	   dz  de	dz  dee	e	f   dz  ddf
dZdeddfdZde	deddfdZdddde	dededdfdZde	ddfdZde	ddfdZde	ddfdZy) OutputzOutput sink for the `hf` CLI.

    Mode is resolved once at init time based on `is_agent()` auto-detection
    and can be overridden per-command via `set_mode()`.
    modereturnNc                 $    | j                          y N)set_mode)selfs    r   __init__zOutput.__init__3   s    r   c                     |t         j                  k(  r*t               rt         j                  nt         j                  }|| _        y)zHOverride the output mode (called by commands that receive ``--format``).N)r   r   r   r   r   r   )r   r   s     r   r   zOutput.set_mode6   s1    ',,,19'--AUA[A[D	r   )r   r   msgr   r   c                    |||t        d      |}t        |      }| j                  xt        j                  k(  r |t        |       yyt        j                  k(  r|t        |       yyy)z)Print a free-form text message to stdout.Nz&Cannot mix 'msg' with 'human'/'agent'.)
ValueError_strip_ansir   r   r   printr   )r   r"   r   r   s       r   textzOutput.text<   sr    ? E$5 !IJJE$Eii+%++$%L %%++$%L % ,r   )headersid_key
alignmentsitemsr(   r)   r*   c          
         |sc| j                   xxt        j                  k(  rnxt        j                  k(  rn n  t	        d       yt        j
                  k(  rt	        d       yy|At        |d   j                               }|D cg c]  t        fd|D              s }}|D cg c]!  }|D cg c]  }|j                  |       c}# }	}}| j                   xt        j                  k(  r |	D 
cg c]  }
|
D cg c]  }t        |       c} }}
}|D cg c]  }t        |       }}|xs i j                         D ci c]  \  }}t        |      | }}}t	        t        |||             yxt        j                  k(  rD t	        dj                  |             |	D ]#  }
t	        dj                  d |
D                     % yxt        j
                  k(  r/ t	        t        j                  t        |      t         	             yt        j"                  k(  r,|xs |d   }|D ]  }t	        |j                  |d
              yyc c}w c c}w c c}}w c c}w c c}}
w c c}w c c}}w )a  Print tabular data to stdout.

        Args:
            items: List of dicts. Headers are auto-detected from keys if not provided.
            headers: Explicit column names. If None, derived from dict keys (all-None columns filtered).
            id_key: Key to print in quiet mode. If None, uses the first header.
            alignments: Optional mapping of header name to "left" or "right". Defaults to "left".
        zNo results found.z[]Nr   c              3   D   K   | ]  }|j                        d u  y wr   )get).0itemcols     r   	<genexpr>zOutput.table.<locals>.<genexpr>g   s     8eW[#d9R8es    )r(   r*   	c              3   2   K   | ]  }t        |        y wr   )_format_table_cell_agentr/   vs     r   r2   zOutput.table.<locals>.<genexpr>s   s     #MA$<Q$?#M   default )r   r   r   r   r&   r   listkeysanyr.   _format_table_cell_human
_to_headerr+   r	   joindumpsstrr   )r   r+   r(   r)   r*   all_columnsr1   r0   hrowsrowr7   formatted_rowsscreaming_headerskscreaming_alignments	quiet_keys         `          r   tablezOutput.tableM   s     ))L/)//2L2F2L2LL-.  *..$K?uQx}}/K&1fsS8e_d8e5esfGf;@A4g.!.AAii+%++os8thk_b9cZ[:RST:U9c8t8t<C$DqZ]$D!$DFPFVTVE]E]E_'`TQ
1q(8'`$'`h~7HUijk+%++dii() OC$))#M#MMNO*%**djjec:;%++"0gaj	! 3D$((9b123 , g.A :d8t$D'`sH   
I$I/	I!8II!<	I,I'I,#I2I7I!'I,datac                     t        j                  |      rt        |t              st	        |      }| j
                  t        j                  k(  rdnd}t        t        j                  ||t                     y)zPrint structured data as JSON in all modes (indented for human, compact otherwise).

        Accepts a dict or a dataclass.
           N)indentr:   )dataclassesis_dataclass
isinstancetype_dataclass_to_dictr   r   r   r&   r   rB   rC   )r   rN   rQ   s      r   dictzOutput.dict{   sS    
 ##D)*T42H%d+Dii#7#=#==4djjfc:;r   messagec                    | j                   xt        j                  k(  rg t        j                  d|       g}|j                         D ]  \  }}|	|j                  d| d|        ! t        dj                  |             yxt        j                  k(  rO |j                         D cg c]  \  }}|	| d|  }}}t        |rdj                  |             y|       yxt        j                  k(  r/ t        |r t        j                  |t                     yd	       yt        j                  k(  r+t        |j                               }|rt        |d
          yyyc c}}w )z"Print a success summary to stdout.u   ✓ Nz  z: 
= r9   r;   r   )r   r   r   r   greenr+   appendr&   rA   r   r   rB   rC   r   r<   values)r   rX   rN   partsrJ   r7   r_   s          r   resultzOutput.result   s"   ii+%++d7)$456 JJL 4DAq}r!Bqc]34 dii&'+%++04

N1A3asNNchhuo<G<*%**tdjjs3DD%++dkkm,&)$  ,	 Os   -
E(8	E(F)r:   yesr:   rb   c                    |ry| j                   t        j                  k7  rt        | d      t	        j
                  ||d       y)zV
        Ask for confirmation. Raises `ConfirmationError` in non-human modes.
        Nz  Use --yes to skip confirmation.T)r:   abort)r   r   r   r   typerconfirm)r   rX   r:   rb   s       r   rf   zOutput.confirm   s@     99,222#wi/O$PQQgwd;r   c                     | j                   t        j                  k(  r2t        t	        j
                  d|       t        j                         yt        d| t        j                         y)z0Print a non-fatal warning to stderr (all modes).z	Warning: fileN)r   r   r   r&   r   yellowsysstderrr   rX   s     r   warningzOutput.warning   sH    99,222$++	'343::FIgY'cjj9r   c                     | j                   t        j                  k(  r2t        t	        j
                  d|       t        j                         yt        d| t        j                         y)z%Print an error to stderr (all modes).zError: rh   N)r   r   r   r&   r   redrk   rl   rm   s     r   errorzOutput.error   sH    99,222$((WWI./cjjAGG9%CJJ7r   c                     | j                   t        j                  k(  r2t        t	        j
                  d|       t        j                         yt        d| t        j                         y)zEPrint a helpful hint to stderr (human: gray, agent/json: plain text).zHint: rh   N)r   r   r   r&   r   grayrk   rl   rm   s     r   hintzOutput.hint   sH    99,222$))fWI./cjjAF7)$3::6r   )r   Nr   )r   r   r   r   r   __annotations__r    r   r   rC   r'   r   rW   r   r<   rM   ra   boolrf   rn   rq   rt   r   r   r   r   r   *   se     5I4M4M 1 RV !$\` !d
 !S4Z !sUYz !ei !* %)!,0,3S#X',3 cT!	,3
 d
,3 cNT),3 
,3\< < <%c %3 %4 %& 8=% <s < <4 <TX <:s :t :8S 8T 87C 7D 7r   r   r7   r   c                 B   t        | t        j                        r| j                         S t        | t              r0| j	                         D ci c]  \  }}|	|t        |       c}}S t        | t              r| D cg c]  }t        |       c}S | S c c}}w c c}w )z4Recursively serialize a value to be JSON-compatible.)rT   datetime	isoformatrW   r+   _serialize_valuer<   )r7   keyvalr0   s       r   rz   rz      s    !X&&'{{}	At	;<779XxsC%c**XX	At	3454 &55H Y5s   
BB?Binfoc                     t        j                  |       j                         D ci c]  \  }}|	|t        |       c}}S c c}}w )z0Convert a dataclass to a json-serializable dict.)rR   asdictr+   rz   )r}   rJ   r7   s      r   rV   rV      s?    /:/A/A$/G/M/M/Oatq!STS`A""aaas
   
AAz\033\[[0-9;]*m#   r'   c                 .    t         j                  d|       S )Nr;   )_ANSI_REsub)r'   s    r   r%   r%      s    <<D!!r   namec                 P    t        j                  dd|       }|j                         S )zAConvert a camelCase or PascalCase string to SCREAMING_SNAKE_CASE.z([a-z])([A-Z])z\1_\2)rer   upper)r   ss     r   r@   r@      s!    
 (D1A779r   valuec                    | yt        | t              r| rdS dS t        | t        j                        r| j                  d      S t        | t              rt        j                  d|       r| dd S t        | t              rdj                  d | D              S t        | t              r'd	| v rt	        | d	         S t        j                  |       S t	        |       S )
z/Convert a value to string for terminal display.Nr;   u   ✔z%Y-%m-%dz^\d{4}-\d{2}-\d{2}T
   z, c              3   2   K   | ]  }t        |        y wr   )_format_table_value_humanr6   s     r   r2   z,_format_table_value_human.<locals>.<genexpr>   s     E!215Er8   r   )rT   rv   rx   strftimerC   r   matchr<   rA   rW   r   rB   r   s    r   r   r      s    }%u%2%%**+~~j))%"((+A5"ISbz%yyEuEEE	E4	 U?uV}%%zz%  u:r   max_lenc                 N    t        |       }t        |      |kD  r|d|dz
   dz   }|S )z/Format a value + truncate it for table display.N   z...)r   len)r   r   cells      r   r?   r?      s2    $U+D
4y7Mgk"U*Kr   c                     t        | t        j                        r| j                         S t        |       j	                  dd      S )zHFormat a cell value for agent TSV output (ISO timestamps, tabs escaped).r3   r\   )rT   rx   ry   rC   replacer   s    r   r5   r5      s6    %**+  u:dC((r   )$r   rR   rx   r   r   rk   collections.abcr   enumr   typingr   re   huggingface_hub.errorsr   huggingface_hub.utilsr   r   r	   rC   r   r   objectrz   rW   rV   compiler   _MAX_CELL_LENGTHr%   r@   r   intr?   r5   outr   r   r   <module>r      s   )    	 
 $    4 : :3 K7 K7b 6 bS bT#s(^ b
 2::'( "c "c "S S S S & 9I C # S )C )C ) hr   