
    gj4                        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ZddlmZ ddl	m
Z
 ddlmZmZ ddlZddlmZ ddlmZmZmZmZmZ  G d d	ee
          Zd
ededdfdZ G d d          ZdedefdZdedeeef         fdZ ej        d          Z dedefdZ!dedefdZ"dedefdZ#de$e         de$e$e                  deeef         fdZ%dedefdZ&de$e         de$e$e                  de'de'fd Z(dedefd!Z) e            Z*dS )"z"Output framework for the `hf` CLI.    N)Sequence)Enum)Anycast)ConfirmationError)ANSI
StatusLinedisable_progress_barsis_agenttabulatec                   &    e Zd ZdZdZdZdZdZdZdS )OutputFormatzGOutput 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        _/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/huggingface_hub/cli/_output.pyr   r       s-        QQEDEDEEEr   r   valueskwargsreturnc                  &    t          | i |ddi dS )zLike `print`, but always flushed: some CLI flows block on user action right after
    printing (e.g. the device-code login), so output must not stay buffered.flushTN)print)r   r   s     r   _print_flushr!   *   s(     
6(V((4((((((r   c                      e Zd ZU dZeed<   eed<   d%dZej        fdeddfdZ	deddfdZ
de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ddededz  ddfdZdededdfdZdddddededededdf
d Zd&dedz  defd!Zdeddfd"Zdeddfd#Zdeddfd$ZdS )'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no_truncater   Nc                 <    d| _         |                                  d S )NF)r%   set_modeselfs    r   __init__zOutput.__init__:   s     r   c                     |t           j        k    r&t                      rt           j        nt           j        }|| _        |t           j        k    rt                       dS dS )zPOverride the output mode (called once at startup and again per '--format' flag).N)r   r   r   r   r   r$   r
   )r)   r$   s     r   r'   zOutput.set_mode>   sX    <$$$)1K<%%9KD	<%%%!##### &%r   c                     || _         dS )z2Toggle off cell truncation for human table output.Nr%   )r)   r%   s     r   set_no_truncatezOutput.set_no_truncateF   s    &r   c                 ,    | j         t          j        k    S N)r$   r   r   r(   s    r   is_quietzOutput.is_quietJ   s    yL...r   )r   r   msgr   r   c                    |$||t          d          |}t          |          }| j        xt          j        k    r |t          |           dS dS t          j        k    r|t          |           dS dS dS )z)Print a free-form text message to stdout.Nz&Cannot mix 'msg' with 'human'/'agent'.)
ValueError_strip_ansir$   r   r   r!   r   )r)   r2   r   r   s       r   textzOutput.textM   s    ? E$5 !IJJJE$$Ei#####$ ''''' %$###$ ''''' %$ $#r   )headersid_key
alignmentsitemsr7   r8   r9   c                   s]| j         xxt          j        k    rnxt          j        k    rn n  t	          d           nt          j        k    rt	          d           dS 5t          d                                                   }fd|D             fdD             }| j         xt          j        k    r d D             }d |D             }t          ||| j	        	          }	i t          |          |pi }
d
 |
                                D             }t	          t          t          d|          ||                     |	r|                     d           dS dS xt          j        k    rV t	          d                                         |D ].}t	          d                    d |D                                  /dS xt          j        k    r8 t	          t          j        t                    t"                               dS t          j        k    r4|pd         }D ]%}t	          |                    |d                     &dS dS )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                 L    g | ]t          fd D                        S )c              3   F   K   | ]}|                               d uV  d S r0   get).0itemcols     r   	<genexpr>z*Output.table.<locals>.<listcomp>.<genexpr>x   s3      8e8eW[#d9R8e8e8e8e8e8er   )any)r@   rB   r:   s    @r   
<listcomp>z Output.table.<locals>.<listcomp>x   s=    fffsS8e8e8e8e_d8e8e8e5e5efsfffr   c                 .    g | ]fd D             S )c                 :    g | ]}                     |          S r   r>   )r@   hrA   s     r   rE   z+Output.table.<locals>.<listcomp>.<listcomp>y   s#    ...!...r   r   )r@   rA   r7   s    @r   rE   z Output.table.<locals>.<listcomp>y   s/    AAA4....g...AAAr   c                 ,    g | ]}t          |          S r   
_to_headerr@   rH   s     r   rE   z Output.table.<locals>.<listcomp>}   s    $D$D$DqZ]]$D$D$Dr   c                 &    g | ]}d  |D             S )c                 ,    g | ]}t          |          S r   _format_table_value_humanr@   vs     r   rE   z+Output.table.<locals>.<listcomp>.<listcomp>~   s"    3^3^3^UV4Ma4P4P3^3^3^r   r   )r@   rows     r   rE   z Output.table.<locals>.<listcomp>~   s)    2o2o2ocf3^3^Z]3^3^3^2o2o2or   r-   c                 4    i | ]\  }}t          |          |S r   rJ   r@   krR   s      r   
<dictcomp>z Output.table.<locals>.<dictcomp>   s$    'V'V'VTQ
1q'V'V'Vr   zlist[list[str | int]])r7   r9   z>Use `--no-truncate` or `--format json` to display full values.	c              3   4   K   | ]}t          |          V  d S r0   )_format_table_cell_agentrQ   s     r   rC   zOutput.table.<locals>.<genexpr>   s+      *T*T1+CA+F+F*T*T*T*T*T*Tr   default )r$   r   r   r   r!   r   listkeys_truncate_columnsr%   _infer_alignmentsr:   r   r   hintjoindumpsstrr   r?   )r)   r:   r7   r8   r9   all_columnsrowsscreaming_headersformatted_rowsis_truncatedinferredscreaming_alignmentsrS   	quiet_keyrA   s    ``            r   tablezOutput.table^   s      	)<'\''''*<,*<*<*<*<*<*<*<*< !45555!&&& &&&F?uQx}}//KffffkfffGAAAA5AAAi#####$D$DG$D$D$D!2o2ojn2o2o2o01BN`d`pqqqU/>>U:CSQSU'V'VX^^EUEU'V'V'V$4nEE 1#7       `II^_____` `#####TYYw//000 V VC *T*TPS*T*T*T!T!TUUUUV V"""""TZUSAAABBBBB###"0gaj	! : :D )R!8!89999: : $#r   )r8   datac                r   t          j        |          r$t          |t                    st	          |          }| j        t          j        k    r'|%t          |	                    |d                     dS | j        t          j
        k    rdnd}t          t          j        ||t                               dS )zPrint structured data as JSON in all modes (indented for human, compact otherwise).

        Accepts a dict or a dataclass.
        Nr]      )indentr\   )dataclassesis_dataclass
isinstancetype_dataclass_to_dictr$   r   r   r!   r?   r   r   rd   re   )r)   ro   r8   rr   s       r   dictzOutput.dict   s    
 #D)) 	,*T42H2H 	,%d++D9***v/A&"--...Fi<#5554TZVSAAABBBBBr   messagec                    | j         xt          j        k    rt t          j        d|           g}|                                D ]"\  }}||                    d| d|            #t          d                    |                     dS xt          j	        k    rG d |                                D             }t          |rd                    |          n|           dS xt          j
        k    r/ t          |rt          j        |t                    nd	           dS t          j        k    r<t          |                                          }|rt          |d
                    dS dS dS )z"Print a success summary to stdout.u   ✓ Nz  z: 
c                 &    g | ]\  }}|| d| S )N=r   rU   s      r   rE   z!Output.result.<locals>.<listcomp>   s'    NNN1Ar    r[   r]   r   )r$   r   r   r   greenr:   appendr!   rc   r   r   rd   re   r   r^   r   )r)   ry   ro   partsrV   rR   r   s          r   resultzOutput.result   sv   i#####$47$4$4556 JJLL 4 4DAq}]!]]q]]333TYYu--.....#####NN

NNNBSXXe___7CCCCC"""""dJTZc::::KKKKK###dkkmm,, , +++++, , $#r   Fz--yes)r\   yesconfirm_paramr\   r   r   c                    |rdS | j         t          j        k    rt          | d| d          t	          j        ||d           dS )zV
        Ask for confirmation. Raises `ConfirmationError` in non-human modes.
        Nz Use z to skip confirmation.T)r\   abort)r$   r   r   r   typerconfirm)r)   ry   r\   r   r   s        r   r   zOutput.confirm   s]      	F9***#w$Z$Z]$Z$Z$Z[[[gwd;;;;;;r   c                 z    t          | j        t          j        k              }||                    |           |S )zEReturn a status line that emits only in human mode (no-op otherwise).)enabled)r	   r$   r   r   update)r)   ry   statuss      r   r   zOutput.status   s9    DI1C$CDDDMM'"""r   c                     | j         t          j        k    r2t          t	          j        d|           t          j                   dS t          d| t          j                   dS )z0Print a non-fatal warning to stderr (all modes).z	Warning: fileN)r$   r   r   r!   r   yellowsysstderrr)   ry   s     r   warningzOutput.warning   sd    9***%:%:%:;;#*MMMMMM.W..SZ@@@@@@r   c                     | j         t          j        k    r2t          t	          j        d|           t          j                   dS t          d| t          j                   dS )z%Print an error to stderr (all modes).zError: r   N)r$   r   r   r!   r   redr   r   r   s     r   errorzOutput.error   sd    9***"5G"5"566SZHHHHHH,7,,3:>>>>>>r   c                     | j         t          j        k    rdS | j         t          j        k    r2t	          t          j        d|           t          j                   dS t	          d| t          j                   dS )a:  Print a helpful hint to stderr (human: gray, json/agent: plain text).

        Suppressed in quiet mode. Kept in json mode (like agent) since agents
        commonly run with ``--format json`` and the next-command hints are useful
        there; hints go to stderr so they never pollute the parsed stdout.
        NzHint: r   )	r$   r   r   r   r!   r   grayr   r   r   s     r   rb   zOutput.hint   s{     9***F9***#5G#5#566SZHHHHHH+'++#*======r   )r   Nr0   )r   r   r   r   r   __annotations__boolr*   r   r'   r.   r1   re   r6   r   rx   r   r^   rn   r   r   r	   r   r   r   rb   r   r   r   r#   r#   0   s              -9,= $ $\ $$ $ $ $ $'4 'D ' ' ' '/$ / / / /($\` ( ( (d
 (S4Z (sUYz (ei ( ( ( (* %)!,08: 8: 8:S#X'8: cT!	8:
 d
8: cNT)8: 
8: 8: 8: 8:t 7; C C C Ct Ct C C C C,c ,3 ,4 , , , ,& 8=%fm < < <s < <4 <`c <rv < < < < cDj J    As At A A A A?S ?T ? ? ? ?>C >D > > > > > >r   r#   rR   c                 
   t          | t          j                  r|                                 S t          | t                    rd |                                 D             S t          | t
                    rd | D             S | S )z4Recursively serialize a value to be JSON-compatible.c                 8    i | ]\  }}||t          |          S r0   _serialize_value)r@   keyvals      r   rW   z$_serialize_value.<locals>.<dictcomp>   s(    XXXxsC%c**r   c                 ,    g | ]}t          |          S r   r   )r@   rA   s     r   rE   z$_serialize_value.<locals>.<listcomp>   s!    5554 &&555r   )ru   datetime	isoformatrx   r:   r^   )rR   s    r   r   r      s~    !X&'' 6{{}}	At		 6XX17799XXXX	At		 65515555Hr   infoc                 b    d t          j        |                                           D             S )z0Convert a dataclass to a json-serializable dict.c                 8    i | ]\  }}||t          |          S r0   r   rU   s      r   rW   z&_dataclass_to_dict.<locals>.<dictcomp>   s-    aaatq!STS`A""S`S`S`r   )rs   asdictr:   )r   s    r   rw   rw      s-    aa{/A$/G/G/M/M/O/Oaaaar   z\033\[[0-9;]*mr6   c                 8    t                               d|           S )Nr]   )_ANSI_REsubr6   s    r   r5   r5      s    <<D!!!r   c                 P    d                     |                                           S )Nr~   )rc   splitr   s    r   _single_liner      s    88DJJLL!!!r   namec                 V    t          j        dd|           }|                                S )zAConvert a camelCase or PascalCase string to SCREAMING_SNAKE_CASE.z([a-z])([A-Z])z\1_\2)rer   upper)r   ss     r   rK   rK     s$    
 (D11A7799r   r7   rg   c                 v    i }t          |           D ]%\  }t          fd|D                       rd||<   &|S )zNReturn ``{"col": "right"}`` for columns where every non-None value is numeric.c              3      K   | ]L}|         d u p=t          |         t          t          f          ot          |         t                     V  Md S r0   )ru   intfloatr   )r@   rS   cs     r   rC   z$_infer_alignments.<locals>.<genexpr>  s]      uuils1v~d*SVc5\"B"B"c:VYZ[V\^bKcKcGcuuuuuur   right)	enumerateall)r7   rg   r   rH   r   s       @r   ra   ra   
  sX    F'""    1uuuuptuuuuu 	 F1IMr   valuec                    | dS t          | t                    r| rdndS t          | t          j                  r|                     d          S t          | t                    rt          j        d|           r
| dd         S t          | t                    rt          |           S t          | t                    rd	                    d | D                       S t          | t                    rGd	| v r"t          t	          | d	                             S t          t          j        |                     S t          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   4   K   | ]}t          |          V  d S r0   rO   rQ   s     r   rC   z,_format_table_value_human.<locals>.<genexpr>   s+      EE!2155EEEEEEr   r   )ru   r   r   strftimere   r   matchr   r^   rc   rx   r   rd   r   s    r   rP   rP     s<   }r% &%uu2%%*++ *~~j)))% "(+A5"I"I SbSz% #E"""% /yyEEuEEEEEE	E4	 	  /U??E&M 2 2333DJu--...E

###r   r%   c                    |ssdS t                     } fdt          |          D             }t          j                    j        t          d|dz
            z
  }t          |          |k    rdS |                                d  D             t                    |k    rXt          fdt                    D             fdd	          }|dk     rn#|xx         dz  cc<   t                    |k    Xd}D ]K}t          |          D ]9\  }	}
t          |
          |	         k    rd
}|
d|	         dz
           dz   ||	<   :L|S )a  Truncate cells in-place to fit the current terminal width.

    Returns `True` if any cell was truncated, so the caller can emit a hint.
    `shutil.get_terminal_size` is cross-platform: it honors `$COLUMNS`, then
    queries the OS-native API, then falls back to `(80, 24)`.
    Fc                     g | ]It          t                             gfd t          t                              D             R  JS )c              3   N   K   | ]}t          |                            V   d S r0   )len)r@   rr   rg   s     r   rC   z/_truncate_columns.<locals>.<listcomp>.<genexpr>9  s1      %P%P!c$q'!*oo%P%P%P%P%P%Pr   )maxr   range)r@   r   r7   rg   s    @r   rE   z%_truncate_columns.<locals>.<listcomp>9  s[    dddVWs3wqz??Q%P%P%P%P%PuSYY?O?O%P%P%PQQQdddr   r      c                 H    g | ]}t          t          |          d            S )   )r   r   rL   s     r   rE   z%_truncate_columns.<locals>.<listcomp>D  s&    222Q#c!ffa..222r   c              3   :   K   | ]\  }}||         k    |V  d S r0   r   )r@   iw
min_widthss      r   rC   z$_truncate_columns.<locals>.<genexpr>G  s5      @@41aa*Q-.?.?Q.?.?.?.?@@r   c                     |          S r0   r   )r   capss    r   <lambda>z#_truncate_columns.<locals>.<lambda>H  s    $q' r   )r   r\   TN   z...)	r   r   shutilget_terminal_sizecolumnsr   sumcopyr   )r7   rg   r%   nnaturalbudgetwidest	truncatedrS   r   cellr   r   s   ``         @@r   r`   r`   (  s     $ uGAddddd[`ab[c[cdddG %''/#aQ--?F
7||vu
 <<>>D22'222J
d))f

@@@@9T??@@@!!!!
 
 

 A::V d))f

 I 5 5 ~~ 	5 	5GAt4yy47"" 	mQ!m,u4A	5 r   c                     t          | t          j                  r|                                 S t          t	          |                     S )zHFormat a cell value for agent TSV output (ISO timestamps, tabs escaped).)ru   r   r   r   re   r   s    r   rZ   rZ   X  s;    %*++ !   E

###r   )+r   rs   r   r   r   r   r   collections.abcr   enumr   typingr   r   r   huggingface_hub.errorsr   huggingface_hub.utilsr   r	   r
   r   r   re   r   r!   r#   objectr   rx   rw   compiler   r5   r   rK   r^   ra   rP   r   r`   rZ   outr   r   r   <module>r      s   ) (       				  



 $ $ $ $ $ $                4 4 4 4 4 4 ] ] ] ] ] ] ] ] ] ] ] ] ] ]    3   )# ) ) ) ) ) )s> s> s> s> s> s> s> s>r 6    bS bT#s(^ b b b b
 2:'(("c "c " " " ""s "s " " " "S S    tCy T#Y DcN    $S $S $ $ $ $*-#Y-
tCy/- 	-
 
- - - -`$C $C $ $ $ $ fhhr   