
    qi0                        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jC                  dddg      	 dHdejD                  dee# ejH                  d      f   dee% ejL                  dd      f   ddfd       Z'ejC                  d d!dd!d"d#d$g%      dejD                  d&ee# ejH                  d'      f   ddfd(       Z(ejC                  d)d*g      dId+       Z)ejC                  d,d-g      d&ee# ejH                  d.      f   ddfd/       Z*de+e,e#e#f      fd0Z-d1ede.fd2Z/d3e#d4e#de.fd5Z0d6e+e#   d7e1e#   dee2   fd8Z3d1ed9ed:e ddfd;Z4defd<Z5d=e#defd>Z6d=e#de#fd?Z7d=e#defd@Z8 ejr                  dA      Z:d=e#dBe#de#fdCZ;de#de,e#e#e#f   fdDZ<d&e#de#fdEZ=dFed6e+e#   de2fdGZ>y)Jz0Contains 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                   v    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
Zeed<   y)ExtensionManifestownerreporepo_id
short_nameexecutable_nameexecutable_pathtypeinstalled_atsource descriptionN)__name__
__module____qualname__str__annotations__r        P/opt/pipecat/venv/lib/python3.12/site-packages/huggingface_hub/cli/extensions.pyr   r   /   s<    J
ILO
IKKr%   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        |      \  }}}| j                         }t        t        |j                  di       j                               }||v rt        d| d| d      t        |      }|j                         r&|st        d| d      t        j                  |       t        ||      }	t        |      }
d| d| d	|
 }	 t               j                  |d
      }|j                          t#               5 }t%        |      |
z  }|j'                  |j(                         t*        j,                  dk7  rt+        j.                  |d       t1        ||| d| ||
t3        t5        |            dt7        j8                  t:        j<                        j?                         d| d| t3        |	j                  dd            
      }tA        |||       ddd       tC        d| d| d       tC        d|        tC        d|        y# t         $ r}t        d|
 d| d| d|       |d}~ww xY w# 1 sw Y   axY w)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."https://raw.githubusercontent.com///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   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_fetch_remote_manifest_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_commandsr7   remote_manifestr   raw_urlresponseetmp_dirtmp_executabler9   s                    r&   extension_installr^   =   s_   & $6g#> E9j}}HGH$4$4j"EJJLM&&(4`ak`llvw
 	
 'z2M[4efggm$,UI>O*:6O25'9+EVWfVghGi=$$Wt$D!!# 
	 
g8""8#3#3477d?HH^U+$gQyk*!+ >z JK!hll3==?(q<O//rBC
 	%',	
%
0 
!%)B
78	ZL
)*	(
56;  i-o->hugQykY\]^\_`aghhi
 
s%   +H =CH8	H5H00H58I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(   rM   z.Extension name (with or without `hf-` prefix).c                     t        |      }t        |      }|j                         st        d| d      t	        |t        | j                              }t        j                  |      )zExecute an installed extension.r.   ' is not installed.r   args)code)	_normalize_extension_namerO   is_filer   _execute_extension_binarylistrg   typerExit)r)   rM   r   r   	exit_codes        r&   extension_execrp      sa      +40J4Z@O""$ZL0CDEE)/PTUXU]U]P^_I
**)
$$r%   rl   zhf extensions listc                     t               } | j                         st        d       yg }t        | j	                               D ]  }|j                         r|j
                  j                  d      s/|j
                  dd }t        |      }|j                  d| t        |j                  dd            t        |j                  dd            g        |st        d       yt        t        |g d	
             y)z"List installed extension commands.zNo extensions installed.Nhf-   zhf r   r   r   )COMMAND
REPOSITORYINSTALLED_AT)headers)_get_extensions_rootis_dirrT   sortediterdirrM   
startswith_read_local_manifestappendr"   rG   r   )root_dirrowsr7   r   datas        r&   extension_listr      s     $%H??()D 0 0 23 k##%]-?-?-J-J5-Q"''+
#M2s:,'TXXi-D)Es488TbdfKgGhijk ()	(4!J
KLr%   removezhf extensions remove claudez8Extension name to remove (with or without `hf-` prefix).c                     t        |       }t        |      }|j                         st        d| d      t	        j
                  |       t        d| d       y)zRemove an installed extension.r.   re   zRemoved extension 'r:   N)ri   rA   ry   r   rC   rD   rT   )rM   r   r7   s      r&   extension_remover      sW     +40J&z2M!ZL0CDEE
MM- 	
|2
./r%   c                     t         j                         } | j                         sg S g }t        | j	                               D ]  }|j                         r|j
                  j                  d      s/|j
                  dd  }t        |      }|j                  dd      }|j                  dd      }t        |t              r|rd| dnd}t        |t              r|r| | n|j                         }|j                  ||f        |S )	Nrr   rs   r   r   r   z [extension ]z [extension])EXTENSIONS_ROOT
expanduserry   rz   r{   rM   r|   r}   rG   
isinstancer"   lstripr~   )	r   entriesr7   r   r   r   r   tag	help_texts	            r&   #_list_installed_extensions_for_helpr      s    ))+H??	G 0 0 23 	0##%]-?-?-J-J5-Q"''+
#M2hh}b1((9b)+5gs+CWIQ'Uc-7S-Ik{mC5)_b_i_i_k	
I./	0 Nr%   r7   c                     	 | t         z  }|j                         r5t        j                  |j	                               }t        |t              r|S i S # t        $ r Y i S w xY wN)MANIFEST_FILENAMErj   jsonloads	read_textr   dictrI   )r7   manifest_pathr   s      r&   r}   r}      sd    %(99  "::m5578D$% I  Is   AA 	AAr   rU   c                     d|  d| dt          }	 t               j                  |d      }|j                          |j	                         S # t
        $ r i cY S w xY w)Nr/   r0   r1   Tr2   )r   r   rG   rH   r   rI   )r   rU   rY   rZ   s       r&   rE   rE      se    25'9+EVWhVijG=$$Wt$D!!#}} 	s   :A AArg   known_commandsc                     | sy | d   }|j                  d      ry ||v ry |j                  d      r|dd  n|}|sy t        |      }|j                         sy t        |t	        | dd              S )Nr   -rr   rs   r   rf   )r|   rO   rj   rk   rl   )rg   r   command_namer   r   s        r&   %_dispatch_unknown_top_level_extensionr      s    7Ls#~%%1%<%<U%Cab!J4Z@O""$$_4PTUVUWPX>ZZr%   r8   r9   c                    | |j                   z  }| t        z  }	 | j                  dd       t        j                  ||       t
        j                  dk7  rt        j                  |d       |j                  t        j                  t        |      dd      dz   d	
       y # t        $ r t        j                  | d        w xY w)NTFparentsexist_okr4   r5      )indent	sort_keys
zutf-8)encoding)ignore_errors)r   r   mkdirrC   copy2rL   rM   rN   
write_textr   dumpsr   rI   rD   )r7   r8   r9   r   r   s        r&   rS   rS   	  s    #h&>&>>O!$55MD59&877d?HH_e,  F8,<QRV!WZ^!^ip q m48s   BB" ""Cc                  T    t         j                         } | j                  dd       | S )NTr   )r   r   r   )r   s    r&   rx   rx     s%    ))+HNN4$N/Or%   r   c                     t        | |       }t               j                         }|d| z  j                         }||j                  vrt	        d|  d      |S )Noriginal_inputrr   Invalid extension name 'r:   )_validate_extension_short_namerx   resolver   r   )r   	safe_nameroottargets       r&   rA   rA     s_    .z*UI!))+Ds9+&&//1F6>>!1*R@AAMr%   c                 @    d|  }t         j                  dk(  r|dz  }|S )Nrr   r4   z.exe)rL   rM   )r   rM   s     r&   rF   rF   '  s'    D	ww$Kr%   c                 0    t        |       t        |       z  S r   )rA   rF   )r   s    r&   rO   rO   .  s    j),@,LLLr%   z^[A-Za-z0-9][A-Za-z0-9._-]*$r   c                    | j                         st        d      t        fddD              rt        d| d      dv sdv rt        d| d      t        j	                        st        d| d      S )	NExtension name cannot be empty.c              3   &   K   | ]  }|v  
 y wr   r$   ).0seprM   s     r&   	<genexpr>z1_validate_extension_short_name.<locals>.<genexpr>9  s     
.33$;
.s   )r0   \r   r:   z..:z9'. Allowed characters: letters, digits, '.', '_' and '-'.)stripr   any_ALLOWED_EXTENSION_NAME	fullmatch)r   r   rM   s     @r&   r   r   5  s    D899

.+
..1.1ADEEt|sd{1.1ADEE",,T2&~&66op
 	
 Kr%   c                 Z   d| v rt        d      | j                  d      }t        |      dk(  rt        }|d   }n.t        |      dk(  rt	        |      r|\  }}nt        d|  d      |j                  d	      st        d
| d      |dd  }|st        d      t        ||        |||fS )Nz://zEOnly GitHub repositories in `[OWNER/]hf-<name>` format are supported.r0   r   r   r   z%Expected `[OWNER/]REPO` format, got 'r:   rr   z6Extension repository name must start with 'hf-', got 'rs   z(Invalid extension repository name 'hf-'.r   )r   splitlenDEFAULT_EXTENSION_OWNERallr|   r   )r   partsr   rU   r   s        r&   r;   r;   D  s    ^__MM#E
5zQ'!H		UqSZ y>wirJKK&OPY{Z\]^^12JABB":gF)Z''r%   c                     | j                         }|st        d      |j                  d      r|dd  n|}t        ||       S )Nr   rr   rs   r   )r   r   r|   r   )rM   	candidate
normalizeds      r&   ri   ri   \  sC    

I899"+"6"6u"=129J)*TJJr%   r   c                    	 t        j                  t        |       g|z         S # t        $ r^}t        j
                  dk(  s|j                  t        j                  k7  r t        j                  dt        |       g|z         cY d }~S d }~ww xY w)Nr4   sh)
subprocesscallr"   OSErrorrL   rM   errnoENOEXEC)r   rg   r[   s      r&   rk   rk   d  sq    DO 45<== D77d?agg6c/&:;dBCCDs   !$ 	BAB BB)F)r+   N)?__doc__r   r   rL   rerC   r   dataclassesr   r   r   r   pathlibr   tempfiler   typingr	   r
   rm   huggingface_hub.errorsr   huggingface_hub.utilsr   r   
_cli_utilsr   r   r   r   EXTENSIONS_HELPextensions_clir   r?   Contextr"   ArgumentboolOptionr^   rp   r   r   rl   tupler   r   r}   rE   r=   intr   rS   rx   rA   rF   rO   compiler   r   r;   ri   rk   r$   r%   r&   <module>r      ss   7   	 	   ) '  ' &  + 7 % ( 56# + 
 O4 
 
 
 )7   _d>7	>7XY	[>7 T<5<<	8YZZ[>7 
>7>7B 
*.5lpq-9  %	%
LM	O% 
%%$ *>)?@M AM. ,I+JK0
VW	Y0
 
0 L0(T%S/-B $	 	 	# # $ [S	 [3s8 [X`adXe [*  Yj os d 3 4 S S Ms Mt M %"**%DE s s s ( (c3m(< (0KC KC KDt D49 D Dr%   