
    %i&                     v   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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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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        d/home/longshao/.hermes/hermes-agent/venv/lib/python3.11/site-packages/huggingface_hub/cli/_output.pyr   r       s-        QQEDEDEEEr   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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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returnNc                 .    |                                   d S N)set_mode)selfs    r   __init__zOutput.__init__3   s    r   c                     |t           j        k    r&t                      rt           j        nt           j        }|| _        dS )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   s7    ',,,19['--AUA[D			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   printr   )r   r"   r   r   s       r   textzOutput.text<   s    ? E$5 !IJJJE$$Ei+%++++$%LLLLL %$%+++$%LLLLL %$ ,+r   )headersid_key
alignmentsitemsr(   r)   r*   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    rZ d |D             }d D             }d	 |pi                                 D             }	t	          t          |||	
                     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>g   s3      8e8eW[#d9R8e8e8e8e8e8er   )any)r1   r3   r+   s    @r   
<listcomp>z Output.table.<locals>.<listcomp>g   s=    fffsS8e8e8e8e_d8e8e8e5e5efsfffr   c                 .    g | ]fd D             S )c                 :    g | ]}                     |          S r   r/   )r1   hr2   s     r   r6   z+Output.table.<locals>.<listcomp>.<listcomp>h   s#    ...!...r   r   )r1   r2   r(   s    @r   r6   z Output.table.<locals>.<listcomp>h   s/    AAA4....g...AAAr   c                 &    g | ]}d  |D             S )c                 ,    g | ]}t          |          S r   )_format_table_cell_humanr1   vs     r   r6   z+Output.table.<locals>.<listcomp>.<listcomp>l   s#    9c9c9cZ[:RST:U:U9c9c9cr   r   )r1   rows     r   r6   z Output.table.<locals>.<listcomp>l   s)    8t8t8thk9c9c_b9c9c9c8t8t8tr   c                 ,    g | ]}t          |          S r   
_to_header)r1   r9   s     r   r6   z Output.table.<locals>.<listcomp>m   s    $D$D$DqZ]]$D$D$Dr   c                 4    i | ]\  }}t          |          |S r   rA   r1   kr>   s      r   
<dictcomp>z Output.table.<locals>.<dictcomp>n   s$    '`'`'`TQ
1q'`'`'`r   )r(   r*   	c              3   4   K   | ]}t          |          V  d S r   )_format_table_cell_agentr=   s     r   r4   zOutput.table.<locals>.<genexpr>s   s+      #M#MA$<Q$?$?#M#M#M#M#M#Mr   default )r   r   r   r   r&   r   listkeysr+   r	   joindumpsstrr   r0   )r   r+   r(   r)   r*   all_columnsrowsformatted_rowsscreaming_headersscreaming_alignmentsr?   	quiet_keyr2   s    ``          r   tablezOutput.tableM   sX      	)L/)////2L2F2L2L2L2L2L2L2L2L-....)...$KKKF?uQx}}//KffffkfffGAAAA5AAAi+%++++8t8tos8t8t8t$D$DG$D$D$D!'`'`jFVTVE]E]E_E_'`'`'`$h~7HUijjjkkkkk+%++++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   )r)   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.
        NrL      )indentrK   )dataclassesis_dataclass
isinstancetype_dataclass_to_dictr   r   r   r&   r0   r   r   rP   rQ   )r   rY   r)   r\   s       r   dictz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   rD   s      r   r6   z!Output.result.<locals>.<listcomp>   s'    NNN1Ar    rJ   rL   r   )r   r   r   r   greenr+   appendr&   rO   r   r   rP   rQ   r   rM   values)r   rc   rY   partsrE   r>   rk   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)rK   yesrK   rn   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)rK   abort)r   r   r   r   typerconfirm)r   rc   rK   rn   s       r   rr   zOutput.confirm   sV      	F9,222#w$P$P$PQQQgwd;;;;;;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   rc   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: rt   N)r   r   r   r&   r   redrw   rx   ry   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: rt   N)r   r   r   r&   r   grayrw   rx   ry   s     r   hintz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__r    r   r   rQ   r'   r   rb   r   rM   rX   rm   boolrr   rz   r}   r   r   r   r   r   r   *   sT              5I4M  1 RV    !$\` ! ! !d
 !S4Z !sUYz !ei ! ! ! !* %)!,0,3 ,3 ,3S#X',3 cT!	,3
 d
,3 cNT),3 
,3 ,3 ,3 ,3\ 7; < < < <t <t < < < <%c %3 %4 % % % %& 8=% < < <s < <4 <TX < < < <:s :t : : : :8S 8T 8 8 8 87C 7D 7 7 7 7 7 7r   r   r>   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)r1   keyvals      r   rF   z$_serialize_value.<locals>.<dictcomp>   s(    XXXxsC%c**r   c                 ,    g | ]}t          |          S r   r   )r1   r2   s     r   r6   z$_serialize_value.<locals>.<listcomp>   s!    5554 &&555r   )r_   datetime	isoformatrb   r+   rM   )r>   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   rD   s      r   rF   z&_dataclass_to_dict.<locals>.<dictcomp>   s-    aaatq!STS`A""S`S`S`r   )r]   asdictr+   )r   s    r   ra   ra      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 )NrL   )_ANSI_REsub)r'   s    r   r%   r%      s    <<D!!!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   rB   rB      s$    
 (D11A7799r   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d                    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.NrL   u   ✔z%Y-%m-%dz^\d{4}-\d{2}-\d{2}T
   z, c              3   4   K   | ]}t          |          V  d S r   )_format_table_value_humanr=   s     r   r4   z,_format_table_value_human.<locals>.<genexpr>   s+      EE!2155EEEEEEr   r   )r_   r   r   strftimerQ   r   matchrM   rO   rb   r   rP   r   s    r   r   r      s   }r% &%uu2%%*++ *~~j)))% "(+A5"I"I SbSz% !yyEEuEEEEEE	E4	 	  !U??uV}%%%z%   u::r   max_lenc                 j    t          |           }t          |          |k    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<      s<    $U++D
4yy7MgkM"U*Kr   c                     t          | t          j                  r|                                 S t          |                               dd          S )zHFormat a cell value for agent TSV output (ISO timestamps, tabs escaped).rG   rh   )r_   r   r   rQ   replacer   s    r   rI   rI      sC    %*++ !   u::dC(((r   )$r   r]   r   r   r   rw   collections.abcr   enumr   typingr   rq   huggingface_hub.errorsr   huggingface_hub.utilsr   r   r	   rQ   r   r   objectr   rb   ra   compiler   _MAX_CELL_LENGTHr%   rB   r   intr<   rI   outr   r   r   <module>r      sB   ) (       				 



 $ $ $ $ $ $              4 4 4 4 4 4 : : : : : : : : : :    3   N7 N7 N7 N7 N7 N7 N7 N7h 6    bS bT#s(^ b b b b
 2:'(( "c "c " " " "S S    S S    & 9I  C # S    )C )C ) ) ) ) fhhr   