o
     
j)                     @   sX  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	 d	ee	ZG d
d dZdedefddZdedeeef fddZedZdZdedefddZdedefddZ dedefddZ!dedefddZ"efded e#defd!d"Z$dedefd#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                   @   s$   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    r   r   N/home/kuhnn/.local/lib/python3.10/site-packages/huggingface_hub/cli/_output.pyr       s    r   c                   @   sl  e Zd ZU dZeed< d-ddZejfdeddfddZde	fd	d
Z
d.ddddedB dedB dedB ddfddZdddddeeeef  dee dB dedB deeef dB ddf
ddZdddededB ddfddZdededdfddZddd ded!e	d"e	ddfd#d$Zd.dedB defd%d&Zdeddfd'd(Zdeddfd)d*Zdeddfd+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                 C   s   |    d S N)set_modeselfr   r   r   __init__3      zOutput.__init__c                 C   s:   |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   r   r   r   r   6   s   


zOutput.set_modec                 C   s   | j tjkS r   )r   r   r   r   r   r   r   is_quiet>   r   zOutput.is_quiet)r   r   msgr   r   c                C   sx   |dur|dus|durt d|}t|}| j tjkr* |dur(t| dS dS tjkr:|dur8t| 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   r   r   r   textA   s   zOutput.text)headersid_key
alignmentsitemsr&   r'   r(   c                   s~  s'| j   tjkrn tjkrn n  td dS tjkr%td dS dS  du r<td  }fdd|D   fddD }| j  tjkrq dd |D }d	d  D }d
d |pai  D }	tt	|||	d dS  tjkr td
  |D ]}
td
dd |
D  qdS  tjkr ttjttd dS tjkr|p d }D ]
}t||d qd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                    s&   g | ] t  fd dD r qS )c                 3   s    | ]
}|  d uV  qd S r   get.0itemcolr   r   	<genexpr>l   s    z*Output.table.<locals>.<listcomp>.<genexpr>)anyr-   )r)   r/   r   
<listcomp>l      & z Output.table.<locals>.<listcomp>c                    s   g | ]  fd dD qS )c                    s   g | ]}  |qS r   r*   r-   hr.   r   r   r4   m   s    +Output.table.<locals>.<listcomp>.<listcomp>r   r3   )r&   r8   r   r4   m   s    c                 S   s   g | ]	}d d |D qS )c                 S      g | ]}t |qS r   )_format_table_cell_humanr-   vr   r   r   r4   q       r9   r   )r-   rowr   r   r   r4   q       c                 S   r:   r   
_to_headerr6   r   r   r   r4   r   r>   c                 S   s   i | ]	\}}t ||qS r   rA   r-   kr=   r   r   r   
<dictcomp>s   r@   z Output.table.<locals>.<dictcomp>)r&   r(   	c                 s       | ]}t |V  qd S r   )_format_table_cell_agentr<   r   r   r   r1   x       zOutput.table.<locals>.<genexpr>default )r   r   r   r   r$   r   listkeysr)   r
   joindumpsstrr   r+   )r   r)   r&   r'   r(   all_columnsrowsformatted_rowsscreaming_headersscreaming_alignmentsr?   	quiet_keyr.   r   )r&   r)   r   tableR   s>   "zOutput.table)r'   datac                C   sp   t |rt|tst|}| jtjkr"|dur"t|	|d dS | jtj
kr*dnd}ttj||td 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$   r+   r   r   rP   rQ   )r   rY   r'   r[   r   r   r   dict   s   zOutput.dictmessagec                 K   s  | j  tjkr2 td| g}| D ]\}}|dur(|d| d|  qtd| dS  tj	krQ dd | D }t|rLd| dS | dS  tj
kri t|rdt
j|td	 dS 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                 S   s&   g | ]\}}|d ur| d| qS )N=r   rC   r   r   r   r4      r5   z!Output.result.<locals>.<listcomp> rJ   rL   r   )r   r   r   r   greenr)   appendr$   rO   r   r   rP   rQ   r   rM   values)r   rb   rY   partsrD   r=   rh   r   r   r   result   s&    $zOutput.resultF)rK   yesrK   rk   c                C   s6   |rdS | j tjkrt| dtj||d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   rb   rK   rk   r   r   r   rn      s
   zOutput.confirmc                 C   s(   t | jtjkd}|dur|| |S )zEReturn a status line that emits only in human mode (no-op otherwise).)enabledN)r   r   r   r   update)r   rb   statusr   r   r   rq      s   
zOutput.statusc                 C   B   | j tjkrttd| tjd dS td| tjd dS )z0Print a non-fatal warning to stderr (all modes).z	Warning: fileN)r   r   r   r$   r   yellowsysstderrr   rb   r   r   r   warning      zOutput.warningc                 C   rr   )z%Print an error to stderr (all modes).zError: rs   N)r   r   r   r$   r   redrv   rw   rx   r   r   r   error   rz   zOutput.errorc                 C   rr   )zEPrint a helpful hint to stderr (human: gray, agent/json: plain text).zHint: rs   N)r   r   r   r$   r   grayrv   rw   rx   r   r   r   hint   rz   zOutput.hint)r   Nr   )r   r   r   r   r   __annotations__r   r   r   boolr    rQ   r%   r   ra   r   rM   rX   rj   rn   r   rq   ry   r|   r~   r   r   r   r   r   *   s8   
 
0

 ."
r   r=   r   c                 C   sL   t | tjr
|  S t | trdd |  D S t | tr$dd | D S | S )z4Recursively serialize a value to be JSON-compatible.c                 S   "   i | ]\}}|d ur|t |qS r   _serialize_value)r-   keyvalr   r   r   rE         " z$_serialize_value.<locals>.<dictcomp>c                 S   r:   r   r   r,   r   r   r   r4      r>   z$_serialize_value.<locals>.<listcomp>)r^   datetime	isoformatra   r)   rM   )r=   r   r   r   r      s   

r   infoc                 C   s   dd t |  D S )z0Convert a dataclass to a json-serializable dict.c                 S   r   r   r   rC   r   r   r   rE      r   z&_dataclass_to_dict.<locals>.<dictcomp>)r\   asdictr)   )r   r   r   r   r`      s   r`   z\033\[[0-9;]*m#   r%   c                 C   s   t d| S )NrL   )_ANSI_REsubr%   r   r   r   r#      r   r#   c                 C   s   d |  S )Nre   )rO   splitr   r   r   r   _single_line   s   r   namec                 C   s   t dd| }| S )zAConvert a camelCase or PascalCase string to SCREAMING_SNAKE_CASE.z([a-z])([A-Z])z\1_\2)rer   upper)r   sr   r   r   rB      s   rB   valuec                 C   s   | du rdS t | tr| rdS dS t | tjr| dS t | tr-td| r-| dd S t | tr6t| S t | trEd	dd	 | D S t | t
r]d
| v rVtt| d
 S tt| S t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                 s   rG   r   )_format_table_value_humanr<   r   r   r   r1      rI   z,_format_table_value_human.<locals>.<genexpr>r   )r^   r   r   strftimerQ   r   matchr   rM   rO   ra   r   rP   r   r   r   r   r      s"   




r   max_lenc                 C   s,   t | }t||kr|d|d  d }|S )z/Format a value + truncate it for table display.N   z...)r   len)r   r   cellr   r   r   r;     s   r;   c                 C   s    t | tjr
|  S tt| S )zHFormat a cell value for agent TSV output (ISO timestamps, tabs escaped).)r^   r   r   r   rQ   r   r   r   r   rH   	  s   rH   )'r   r\   r   r   r   rv   collections.abcr   enumr   typingr   rm   huggingface_hub.errorsr   huggingface_hub.utilsr   r   r   r	   r
   rQ   r   r   objectr   ra   r`   compiler   _MAX_CELL_LENGTHr#   r   rB   r   intr;   rH   outr   r   r   r   <module>   s4   
 !

