
    Ziu+                     <   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m	Z	 ddl
m
Z
m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 d
dlmZ dZ ed          ZdZdZ ee          Ze	 G d d                      Z e!                    dddg          	 dCdej"        dee# ej$        d          f         dee% ej&        dd          f         ddfd            Z'e!                    d d!dd!d"d#d$g%          dej"        d&ee# ej$        d'          f         ddfd(            Z(e!                    d)d*g          dDd+            Z)e!                    d,d-g          d&ee# ej$        d.          f         ddfd/            Z*d0e+e#         d1e,e#         dee-         fd2Z.d3ed4ed5e ddfd6Z/defd7Z0d8e#defd9Z1d8e#de#fd:Z2d8e#defd;Z3 ej4        d<          Z5d8e#d=e#de#fd>Z6de#de7e#e#e#f         fd?Z8d&e#de#fd@Z9dAed0e+e#         de-fdBZ:dS )Ez0Contains helper utilities for hf CLI extensions.    N)asdict	dataclass)datetimetimezone)Path)TemporaryDirectory)	AnnotatedOptional)CLIError)get_sessiontabulate   )typer_factoryhuggingfacez~/.local/share/hf/extensionszmanifest.jsonzyManage hf CLI extensions.

Security Warning: extensions are third-party executables. Install only from sources you trust.)helpc                   j    e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed	<   d
S )ExtensionManifestownerreporepo_id
short_nameexecutable_nameexecutable_pathtypeinstalled_atsourceN)__name__
__module____qualname__str__annotations__     Y/root/projects/butler/venv/lib/python3.11/site-packages/huggingface_hub/cli/extensions.pyr   r   /   sj         JJJ
IIILLLOOO
IIIKKKKKr#   r   installzhf extensions install hf-claudez-hf extensions install hanouticelina/hf-claude)examplesFctxr   z:GitHub extension repository in `[OWNER/]hf-<name>` format.forcez--forcezOverwrite if already installed.returnc                    t          |          \  }}}|                                 }t          t          |j        di                                                     }||v rt          d| d| d          t          |          }|                                r)|st          d| d          t          j
        |           t          |          }	d| d| d	|	 }
	 t                                          |
d
          }|                                 n.# t          $ r!}t          d|	 d| d| d|           |d}~ww xY wt!                      5 }t#          |          |	z  }|                    |j                   t(          j        dk    rt)          j        |d           t/          ||| d| ||	t1          t3          |                    dt5          j        t8          j                                                  d| d| 	  	        }t?          |||           ddd           n# 1 swxY w Y   tA          d| d| d           tA          d|            tA          d|            dS )zInstall an extension from a public GitHub repository.

    Security warning: this installs a third-party executable. Install only from sources you trust.
    commandszCannot install extension 'z,' because it conflicts with an existing `hf z
` command.Extension 'z1' is already installed. Use --force to overwrite.z"https://raw.githubusercontent.com//z/refs/heads/main/T)follow_redirectszFailed to download 'z' from 'z': Nnt  binaryzhttps://github.com/)	r   r   r   r   r   r   r   r   r   )extension_dirsource_executablemanifestzInstalled extension ''.zRun it with: hf zOr with: hf extensions exec )!_normalize_repo_id	find_rootsetgetattrcommandkeysr   _get_extension_direxistsshutilrmtree_get_executable_namer   getraise_for_status	Exceptionr   r   write_bytescontentosnamechmodr   r    _get_extension_executable_pathr   nowr   utc	isoformat_persist_installed_extensionprint)r'   r   r(   r   	repo_namer   root_ctxreserved_commandsr2   r   raw_urlresponseetmp_dirtmp_executabler4   s                   r$   extension_installrW   <   s%   & $6g#>#> E9j}}HGH$4j"EEJJLLMM&&&wwwakwww
 
 	
 'z22M % 	hffffgggm$$$*:66Oh5hh9hhWfhhGi==$$Wt$DD!!#### i i i`o``u``y``]^``aaghhi 
		 
g8""8#34447d??H^U+++$**y**!+ >z J JKK!hl33==??<<<<<

 

 

 	%',	
 	
 	
 	
#
 
 
 
 
 
 
 
 
 
 
 
 
 
 
. 

7%
7
7)
7
7
7888	
)Z
)
)***	
5
5
566666s+   7D 
E D<<ECH--H14H1execT)allow_extra_argsallow_interspersed_argsignore_unknown_optionsz#hf extensions exec claude -- --helpz/hf extensions exec claude --model zai-org/GLM-5)context_settingsr&   rG   z.Extension name (with or without `hf-` prefix).c                     t          |          }t          |          }|                                st          d| d          t	          |t          | j                            }t          j        |          )zExecute an installed extension.r,   ' is not installed.r   args)code)	_normalize_extension_namerI   is_filer   _execute_extension_binarylistr`   typerExit)r'   rG   r   r   	exit_codes        r$   extension_execri      s      +400J4Z@@O""$$ FDZDDDEEE)/PTUXU]P^P^___I
*)
$
$
$$r#   re   zhf extensions listc                     t                      } |                                 st          d           dS g }t          |                                           D ]}|                                r|j                            d          s1|j        dd         }|t          z  }d}d}|                                rnt          j
        |                    d                    }t          |                    dd                    }t          |                    d	d                    }|                    d
| ||g           |st          d           dS t          t          |g d                     dS )z"List installed extension commands.zNo extensions installed.Nhf-    utf-8encodingr   r   zhf )COMMAND
REPOSITORYINSTALLED_AT)headers)_get_extensions_rootis_dirrN   sortediterdirrG   
startswithMANIFEST_FILENAMErc   jsonloads	read_textr    rA   appendr   )root_dirrowsr2   r   manifest_path
repositoryr   datas           r$   extension_listr      s    $%%H?? ()))D 0 0 2 233 D D##%% 	]-?-J-J5-Q-Q 	"'+
%(99
  "" 	=:m55w5GGHHDTXXi4455Jtxx;;<<L':''\BCCCC ()))	(4!J!J!J
K
K
KLLLLLr#   removezhf extensions remove claudez8Extension name to remove (with or without `hf-` prefix).c                     t          |           }t          |          }|                                st          d| d          t	          j        |           t          d| d           dS )zRemove an installed extension.r,   r^   zRemoved extension 'r5   N)rb   r<   rv   r   r>   r?   rN   )rG   r   r2   s      r$   extension_remover      s}     +400J&z22M!! FDZDDDEEE
M-   	
.

.
.
./////r#   r`   known_commandsc                 4   | sd S | d         }|                     d          rd S ||v rd S |                     d          r
|dd          n|}|sd S t          |          }|                                sd S t          |t	          | dd                              S )Nr   -rk   rl   r   r_   )ry   rI   rc   rd   re   )r`   r   command_namer   r   s        r$   %_dispatch_unknown_top_level_extensionr      s     t7Ls## t~%%t%1%<%<U%C%CUabb!!J t4Z@@O""$$ t$_4PTUVUWUWPX>>ZZZZr#   r2   r3   r4   c                    | |j         z  }| t          z  }	 |                     dd           t          j        ||           t
          j        dk    rt          j        |d           |                    t          j
        t          |          dd          dz   d	
           d S # t          $ r t          j        | d            w xY w)NTFparentsexist_okr/   r0      )indent	sort_keys
rn   ro   )ignore_errors)r   rz   mkdirr>   copy2rF   rG   rH   
write_textr{   dumpsr   rC   r?   )r2   r3   r4   r   r   s        r$   rM   rM      s    #h&>>O!$55MD5999&8887d??H_e,,,  F8,<,<QRV!W!W!WZ^!^ip qqqqq   m48888s   BB% %"Cc                  f    t                                           } |                     dd           | S )NTr   )EXTENSIONS_ROOT
expanduserr   )r   s    r$   ru   ru      s.    ))++HNN4$N///Or#   r   c                     t          | |           }t                                                      }|d| z                                  }||j        vrt	          d|  d          |S )Noriginal_inputrk   Invalid extension name 'r5   )_validate_extension_short_nameru   resolver   r   )r   	safe_nameroottargets       r$   r<   r<      sv    .z*UUUI!!))++D&9&&&//11F6>!!@*@@@AAAMr#   c                 :    d|  }t           j        dk    r|dz  }|S )Nrk   r/   z.exe)rF   rG   )r   rG   s     r$   r@   r@     s(    D	w$Kr#   c                 @    t          |           t          |           z  S N)r<   r@   )r   s    r$   rI   rI   
  s    j)),@,L,LLLr#   z^[A-Za-z0-9][A-Za-z0-9._-]*$r   c                >   |                                  st          d          t          fddD                       rt          d| d          dv sdv rt          d| d          t                                        st          d| d          S )	NExtension name cannot be empty.c              3       K   | ]}|v V  	d S r   r"   ).0seprG   s     r$   	<genexpr>z1_validate_extension_short_name.<locals>.<genexpr>  s'      
.
.33$;
.
.
.
.
.
.r#   )r-   \r   r5   z..:z9'. Allowed characters: letters, digits, '.', '_' and '-'.)stripr   any_ALLOWED_EXTENSION_NAME	fullmatch)r   r   rG   s     @r$   r   r     s    D :8999

.
.
.
.+
.
.
... FD.DDDEEEt||sd{{D.DDDEEE",,T22 
p~ppp
 
 	
 Kr#   c                    d| v rt          d          |                     d          }t          |          dk    rt          }|d         }n;t          |          dk    rt	          |          r|\  }}nt          d|  d          |                    d	          st          d
| d          |dd          }|st          d          t          ||            |||fS )Nz://zEOnly GitHub repositories in `[OWNER/]hf-<name>` format are supported.r-   r   r   r   z%Expected `[OWNER/]REPO` format, got 'r5   rk   z6Extension repository name must start with 'hf-', got 'rl   z(Invalid extension repository name 'hf-'.r   )r   splitlenDEFAULT_EXTENSION_OWNERallry   r   )r   partsr   rO   r   s        r$   r6   r6      s   ^___MM#E
5zzQ'!H			UqSZZ yyJwJJJKKK&& _]PY]]]^^^122J CABBB":gFFFF)Z''r#   c                     |                                  }|st          d          |                    d          r
|dd          n|}t          ||           S )Nr   rk   rl   r   )r   r   ry   r   )rG   	candidate
normalizeds      r$   rb   rb   8  s]    

I :8999"+"6"6u"="=L1229J)*TJJJJr#   r   c                    	 t          j        t          |           g|z             S # t          $ rV}t          j        dk    s|j        t          j        k    r t          j        dt          |           g|z             cY d }~S d }~ww xY w)Nr/   sh)
subprocesscallr    OSErrorrF   rG   errnoENOEXEC)r   r`   rT   s      r$   rd   rd   @  s    DO 4 45<=== D D D7d??ag66c/&:&:;dBCCCCCCCCDs   $' 
BAB<BB)F)r)   N);__doc__r   r{   rF   rer>   r   dataclassesr   r   r   r   pathlibr   tempfiler   typingr	   r
   rf   huggingface_hub.errorsr   huggingface_hub.utilsr   r   
_cli_utilsr   r   r   rz   EXTENSIONS_HELPextensions_clir   r:   Contextr    ArgumentboolOptionrW   ri   r   r   re   r8   intr   rM   ru   r<   r@   rI   compiler   r   tupler6   rb   rd   r"   r#   r$   <module>r      s"   7 6   				 				      ) ) ) ) ) ) ) ) ' ' ' ' ' ' ' '       ' ' ' ' ' ' & & & & & & & &  + + + + + + 7 7 7 7 7 7 7 7 % % % % % % ( $566# + 
 O444 	 	 	 	 	 	 	 	 )7    _d;7 ;7	;7XYYY	[;7 T<5<	8YZZZZ[;7 
;7 ;7 ;7 ;7| 
*.5lpqq-9   %	%
LMMM	O% 
% % % %$ *>)?@@M M M A@M> ,I+JKK0
VWWW	Y0
 
0 0 0 LK0([S	 [3s8 [X`adXe [ [ [ [*  Yj os    d    3 4    S S    Ms Mt M M M M %"*%DEE s s s    ( (c3m(< ( ( ( (0KC KC K K K KDt D49 D D D D D D Dr#   