
    _j%/                        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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j        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!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&dS )z"Output framework for the `hf` CLI.    N)Sequence)Enum)Any)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 )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        X/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/huggingface_hub/cli/_output.pyr   r       s-        QQEDEDEEEr   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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_truncatereturnNc                 <    d| _         |                                  d S )NF)r   set_modeselfs    r   __init__zOutput.__init__4   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_mode8   s\    ',,,19['--AUA[D	'---!##### .-r   c                     || _         dS )z2Toggle off cell truncation for human table output.N)r   )r"   r   s     r   set_no_truncatezOutput.set_no_truncate@   s    &r   c                 ,    | j         t          j        k    S N)r   r   r   r!   s    r   is_quietzOutput.is_quietD   s    y0666r   )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   printr   )r"   r*   r   r   s       r   textzOutput.textG   s    ? E$5 !IJJJE$$Ei+%++++$%LLLLL %$%+++$%LLLLL %$ ,+r   )headersid_key
alignmentsitemsr0   r1   r2   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    r0 g }d}d}	|D ]}
g }|
D ]}t          |          }t          |t          t          t          t          f          }t          |          t          k    r%| j        r|r|rd}	nd}|dt          d	z
           d
z   }|                    |           |                    |           d D             }d |pi                                 D             }t	          t%          |||                     |r|                     d           dS |	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 r(   get).0itemcols     r   	<genexpr>z*Output.table.<locals>.<listcomp>.<genexpr>r   s3      8e8eW[#d9R8e8e8e8e8e8er   )any)r9   r;   r3   s    @r   
<listcomp>z Output.table.<locals>.<listcomp>r   s=    fffsS8e8e8e8e_d8e8e8e5e5efsfffr   c                 .    g | ]fd D             S )c                 :    g | ]}                     |          S r   r7   )r9   hr:   s     r   r>   z+Output.table.<locals>.<listcomp>.<listcomp>s   s#    ...!...r   r   )r9   r:   r0   s    @r   r>   z Output.table.<locals>.<listcomp>s   s/    AAA4....g...AAAr   FT   ...c                 ,    g | ]}t          |          S r   
_to_header)r9   rA   s     r   r>   z Output.table.<locals>.<listcomp>   s    $D$D$DqZ]]$D$D$Dr   c                 4    i | ]\  }}t          |          |S r   rE   r9   kvs      r   
<dictcomp>z Output.table.<locals>.<dictcomp>   s$    '`'`'`TQ
1q'`'`'`r   )r0   r2   z+Use `--no-truncate` to display full values.z0Use `--format json` to display full lists/dicts.	c              3   4   K   | ]}t          |          V  d S r(   )_format_table_cell_agentr9   rJ   s     r   r<   zOutput.table.<locals>.<genexpr>   s+      #M#MA$<Q$?$?#M#M#M#M#M#Mr   default )r   r   r   r   r.   r   listkeys_format_table_value_human
isinstancedictsettuplelen_MAX_CELL_LENGTHr   appendr3   r   hintjoindumpsstrr   r8   )r"   r3   r0   r1   r2   all_columnsrowsformatted_rowsscalar_truncatedcontainer_truncatedrowformatted_rowvaluecellis_containerscreaming_headersscreaming_alignments	quiet_keyr:   s    ``                r   tablezOutput.tableX   si      	)L/)////2L2F2L2L2L2L2L2L2L2L-....)...$KKKF?uQx}}//KffffkfffGAAAA5AAAi+%++++8:#( &+# 9 9C57M!$ 3 38?? (2%$c59Q'R'Rt99'777AQ7Ua7+ 86: 3 337 0#'(>*:Q*>(>#?%#GD%,,T2222"))-8888$D$DG$D$D$D!'`'`jFVTVE]E]E_E_'`'`'`$h~7HUijjjkkk# RIIKLLLLL( RIIPQQQQQR R+%++++dii(())) O OC$))#M#M#M#M#MMMNNNNO O*%****djec:::;;;;;%+++"0gaj	! 3 3D$((9b1122223 3 ,+r   )r1   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.
        NrR      )indentrQ   )dataclassesis_dataclassrV   type_dataclass_to_dictr   r   r   r.   r8   r   r   r_   r`   )r"   ro   r1   rr   s       r   rW   zOutput.dict   s    
 #D)) 	,*T42H2H 	,%d++D9,222v7I$((62&&'''Fi#7#===4djfc:::;;;;;r   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   rH   s      r   r>   z!Output.result.<locals>.<listcomp>   s'    NNN1Ar    rP   rR   r   )r   r   r   r   greenr3   r\   r.   r^   r   r   r_   r`   r   rS   values)r"   rw   ro   partsrI   rJ   r~   s          r   resultzOutput.result   sy   i+%++++$47$4$4556 JJLL 4 4DAq}]!]]q]]333dii&&'''''+%++++NN

NNN;chhuoooG<<<<<*%****tCdjs3333DDDDD%+++dkkmm,, %&)$$$$$% % ,+r   F)rQ   yesrQ   r   c                    |rdS | j         t          j        k    rt          | d          t	          j        ||d           dS )zV
        Ask for confirmation. Raises `ConfirmationError` in non-human modes.
        Nz  Use --yes to skip confirmation.T)rQ   abort)r   r   r   r   typerconfirm)r"   rw   rQ   r   s       r   r   zOutput.confirm   sV      	F9,222#w$P$P$PQQQ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"   rw   statuss      r   r   zOutput.status   s:    DI1E1K$KLLL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"   rw   s     r   warningzOutput.warning   se    9,222$+3'33443:FFFFFF'g''cj999999r   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   se    9,222$(.W..//cjAAAAAA%G%%CJ777777r   c                     | j         t          j        k    r2t          t	          j        d|           t          j                   dS t          d| t          j                   dS )zEPrint a helpful hint to stderr (human: gray, agent/json: plain text).zHint: r   N)r   r   r   r.   r   grayr   r   r   s     r   r]   zOutput.hint   se    9,222$).W..//cjAAAAAA$7$$3:666666r   )r   Nr(   )r   r   r   r   r   __annotations__boolr#   r   r    r&   r)   r`   r/   r   rW   r   rS   rn   r   r   r   r   r   r   r]   r   r   r   r   r   *   s              5I4M $ $1 $RV $ $ $ $'4 'D ' ' ' '7$ 7 7 7 7!$\` ! ! !d
 !S4Z !sUYz !ei ! ! ! !* %)!,0A3 A3 A3S#X'A3 cT!	A3
 d
A3 cNT)A3 
A3 A3 A3 A3F 7; < < < <t <t < < < <%c %3 %4 % % % %& 8=% < < <s < <4 <TX < < < < cDj J    :s :t : : : :8S 8T 8 8 8 87C 7D 7 7 7 7 7 7r   r   rJ   r   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 r(   _serialize_value)r9   keyvals      r   rK   z$_serialize_value.<locals>.<dictcomp>   s(    XXXxsC%c**r   c                 ,    g | ]}t          |          S r   r   )r9   r:   s     r   r>   z$_serialize_value.<locals>.<listcomp>   s!    5554 &&555r   )rV   datetime	isoformatrW   r3   rS   )rJ   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 r(   r   rH   s      r   rK   z&_dataclass_to_dict.<locals>.<dictcomp>   s-    aaatq!STS`A""S`S`S`r   )rs   asdictr3   )r   s    r   rv   rv      s-    aa{/A$/G/G/M/M/O/Oaaaar   z\033\[[0-9;]*m#   r/   c                 8    t                               d|           S )NrR   )_ANSI_REsubr/   s    r   r-   r-      s    <<D!!!r   c                 P    d                     |                                           S )Nr|   )r^   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   rF   rF     s$    
 (D11A7799r   rh   c                    | 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.NrR   u   ✔z%Y-%m-%dz^\d{4}-\d{2}-\d{2}T
   z, c              3   4   K   | ]}t          |          V  d S r(   )rU   rO   s     r   r<   z,_format_table_value_human.<locals>.<genexpr>  s+      EE!2155EEEEEEr   r   )rV   r   r   strftimer`   r   matchr   rS   r^   rW   r   r_   rh   s    r   rU   rU     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   max_lenc                 j    t          |           }t          |          |k    r|d|dz
           dz   }|S )z/Format a value + truncate it for table display.NrB   rC   )rU   rZ   )rh   r   ri   s      r   _format_table_cell_humanr     s<    $U++D
4yy7MgkM"U*Kr   c                     t          | t          j                  r|                                 S t          t	          |                     S )zHFormat a cell value for agent TSV output (ISO timestamps, tabs escaped).)rV   r   r   r   r`   r   s    r   rN   rN   $  s;    %*++ !   E

###r   )'r   rs   r   r   r   r   collections.abcr   enumr   typingr   r   huggingface_hub.errorsr   huggingface_hub.utilsr   r   r	   r
   r   r`   r   r   objectr   rW   rv   compiler   r[   r-   r   rF   rU   intr   rN   outr   r   r   <module>r      sp   ) (       				 



 $ $ $ $ $ $              4 4 4 4 4 4 ] ] ] ] ] ] ] ] ] ] ] ] ] ]    3   u7 u7 u7 u7 u7 u7 u7 u7v 6    bS bT#s(^ b b b b
 2:'(( "c "c " " " ""s "s " " " "S S    $S $S $ $ $ $* 9I  C # S    $C $C $ $ $ $ fhhr   