o
    0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   \/var/www/html/Deteccion_Ine/venv/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(   Zall_columnsrowsZformatted_rowsZscreaming_headersZscreaming_alignmentsr?   Z	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   rT   r'   rV   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   r]   rT   partsrD   r=   rc   r   r   r   result   s&    $zOutput.resultF)rK   yesrK   rf   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   r]   rK   rf   r   r   r   ri      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   r]   statusr   r   r   rl      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   r]   r   r   r   warning      zOutput.warningc                 C   rm   )z%Print an error to stderr (all modes).zError: rn   N)r   r   r   r$   r   redrq   rr   rs   r   r   r   error   ru   zOutput.errorc                 C   rm   )zEPrint a helpful hint to stderr (human: gray, agent/json: plain text).zHint: rn   N)r   r   r   r$   r   grayrq   rr   rs   r   r   r   hint   ru   zOutput.hint)r   Nr   )r   r   r   r   r   __annotations__r   r   r   boolr    rQ   r%   r   r\   r   rM   rS   re   ri   r   rl   rt   rw   ry   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>)rY   datetime	isoformatr\   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>)rW   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 )Nr`   )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   )rY   r{   r   strftimerQ   r   matchr   rM   rO   r\   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).)rY   r   r   r   rQ   r   r   r   r   rH   	  s   rH   )'r   rW   r   r   r   rq   collections.abcr   enumr   typingr   rh   Zhuggingface_hub.errorsr   Zhuggingface_hub.utilsr   r   r   r	   r
   rQ   r   r   objectr~   r\   r[   compiler   Z_MAX_CELL_LENGTHr#   r   rB   r   intr;   rH   outr   r   r   r   <module>   s4   
 !

