
    5pj9r                     R   S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJ	r	J
r
  SSKJrJr  SSKJr  SSKJr  SSKJr  SSKJrJr  SSKrSSKrSS	KJrJrJr  SS
KJrJr  SSKJ r   SSK!J"r"J#r#  SSK$J%r%  Sr&\" S5      r'Sr(Sr)\ " \)S9r*Sr+Sr,Sr-\R\                  " \/5      r0 " S S\5      r1 " S S\2\5      r3\
 " S S5      5       r4\*Rk                  S/ SQS9 SlS!\Rl                  S"\\2\"" S#S94   S$\\7\#" S%S&S94   S'S4S( jj5       r8\*Rk                  S)/ S*QS9 SmS+\\2S-  \"" S,S94   S'S4S- jj5       r9\*Rk                  S.S/S S/S0.S1S2/S39S!\Rl                  S+\\2\"" S4S94   S'S4S5 j5       r:\*Rk                  S6S7/S9SnS8 j5       r;\*Rk                  S9S:/S9SnS; j5       r<\*Rk                  S<S=/S9S+\\2\"" S>S94   S'S4S? j5       r=S'\>\4   4S@ jr?S'\>\@\2\24      4SA jrASB\>\2   SC\B\2   S'\CS-  4SD jrDSE\2S'\S-  4SF jrES+\2S'\44SG jrFSH\4S'\34SI jrGSSJ.SK\2SL\2SE\2SM\2S-  S'\44
SN jjrHSK\2SL\2S'\24SO jrISK\2SL\2SE\2S'\J4SP jrKSQ\SE\2SR\JS'\4SS jrLSQ\SK\2SL\2SE\2S'\4
ST jrM\R                  " SU5      rOSK\2SL\2S'\2S-  4SV jrPSE\2S'\4SW jrQSSSX.SY\2SZ\2S[\RS-  S\\RS-  S'\R                  4
S] jjrTS\\R                  S'\24S^ jrVSK\2SL\2S'\74S_ jrWSE\2S'\24S` jrXSE\2S'\4Sa jrYSb\Sc\2S'\4Sd jrZ\R                  " Se5      r[SE\2Sf\2S'\24Sg jr\S"\2S'\@\2\2\24   4Sh jr]S+\2S'\24Si jr^Sj\SB\>\2   S'\C4Sk jr_g)oz0Contains helper utilities for hf CLI extensions.    N)asdict	dataclass)datetimetimezone)Enum)unescape)Path)	AnnotatedLiteral)CLIErrorCLIExtensionInstallErrorConfirmationError)get_sessionlogging   )typer_factory)ArgumentOption)outhuggingfacez~/.local/share/hf/extensionszmanifest.jsonzManage hf CLI extensions.

Security Warning: extensions are third-party executables or Python packages. Install only from sources you trust.)helpzhf-extension
   i,  c                       \ rS rSrSrSrg)_GitHubRateLimitError9   a  The GitHub API refused the request because a rate limit is exhausted.

Distinguished from other `CLIError`s because it says nothing about the extension being handled:
it is not worth retrying on the next one, and it must not be mistaken for an install failure.
 N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       Z/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/huggingface_hub/cli/extensions.pyr   r   9   s    r#   r   c                        \ rS rSrSrSrSrSrg)_ExtensionUpdateStatusA   updated
up_to_dateskippedr   N)r   r   r   r    UPDATED
UP_TO_DATESKIPPEDr"   r   r#   r$   r&   r&   A   s    GJGr#   r&   c                       \ rS rSr% \\S'   \\S'   \\S'   \\S'   \\S'   \S   \S'   \\S	'   S
r\S
-  \S'   S
r	\S
-  \S'   \
S\SS 4S j5       rS\SS
4S jrSrg
)ExtensionManifestG   ownerreporepo_id
short_nameexecutable_path)binarypythontypeinstalled_atNdescription
commit_shapathreturnc                 h   U[         -  nUR                  5       (       d  [        SU S35      e[        R                  " UR                  5       5      nUR                  5        VVs0 s H  u  pEX@R                  ;   d  M  XE_M     nnn[        R                  " US   5      US'   [        S0 UD6$ s  snnf )NzManifest file not found at z". Your extension may be corrupted.r9   r   )MANIFEST_FILENAMEis_filer   jsonloads	read_textitems__dataclass_fields__r   fromisoformatr/   )clsr<   manifest_pathdatakeyvalues         r$   loadExtensionManifest.loadS   s    00$$&&8Gijkkzz-1134-1ZZ\]\zsSD\D\=\

\]'55d>6JK^ (4(( ^s   %B.>B.c                     U[         -  nUR                  R                  SSS9  [        U 5      nU R                  R                  5       US'   UR                  [        R                  " USSS95        g )NTparentsexist_okr9      )indent	sort_keys)	r?   parentmkdirr   r9   	isoformat
write_textrA   dumps)selfr<   rH   rI   s       r$   saveExtensionManifest.save^   sc    00""4$"?d|#00::<^  Dd!KLr#   r   )r   r   r   r    str__annotations__r   r   r:   r;   classmethodr	   rL   r[   r"   r   r#   r$   r/   r/   G   s    J
ILO
$
%%"Kt"!Jd
!) )!4 ) )M M$ Mr#   r/   install)zhf extensions install hf-claudez-hf extensions install hanouticelina/hf-claudez(hf extensions install alvarobartt/hf-mem)examplesFctxr3   z:GitHub extension repository in `[OWNER/]hf-<name>` format.forcez--forcezOverwrite if already installed.r=   c                    [        U5      u  p4nU R                  5       n[        [        UR                  S0 5      R                  5       5      nXW;   a  [        SU SU S35      e[        U5      nUR                  5       (       a  U(       d  [        SU S35      e[        X4S9(       d  [        SU S	U S
35      eUR                  5       (       a  [        R                  " U5        [        X4US9n	U	R                  R                  5       n
[        R                   " U
 S3U S	U 3SU 3S9  [        R"                  " SU 35        g)zInstall an extension from a public GitHub repository.

Security warning: this installs a third-party executable or Python package.
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.r1   	repo_namezGitHub repository '/z)' not found. It must exist and be public.r1   rh   r4   z extension installedhf )sourcecommandzRun it with: hf N)_normalize_repo_id	find_rootsetgetattrrm   keysr   _get_extension_direxists_github_repo_existsshutilrmtree_install_extensionr8   
capitalizer   resulthint)rb   r3   rc   r1   rh   r4   root_ctxreserved_commandsextension_dirmanifestext_types              r$   extension_installr   f   s>   * $6g#> Ej}}HGH$4$4j"EJJLM&(4`ak`llvw
 	
 'z2MeZL0abccU@,UG1YK?hijjm$!zZH}}'')HJJ*())%j\"
 HH
|,-r#   update)zhf extensions updatezhf extensions update hf-claudez'hf extensions update alvarobartt/hf-memnamezExtension to update (with or without `hf-` prefix, optionally as `OWNER/hf-<name>`). If omitted, all installed extensions are checked and the outdated ones are updated.c                    U b  [        U 5      n[        U5      nU=[        R                  :X  a,    [        R
                  " SUR                  UR                  S9  g=[        R                  :X  a/    [        R
                  " SUR                   S3UR                  S9  g[        R                  :X  a   gg[        5       nU(       d-  [        R                  " S5        [        R                  " S5        g/ n/ nU H  n[        R                  " S	UR                   S
UR                   S35         [        U5      nU=[        R                  :X  a    UR!                  UR                  5        Ms  =[        R                  :X  a    UR!                  UR                  5        M  [        R                  :X  d  M  M     [        R
                  " SU(       a  SR#                  U5      OSU(       a  SR#                  U5      OSS9  g! [         a    e [         a@  n[        R                  " SUR                   S
UR                   SU S35         SnAGMT  SnAff = f)z6Update installed extension(s) to their latest version.NzExtension updated)r   rl   rf   z' is already up to dater   zNo extensions installed.z1Install one with: hf extensions install <repo_id>z
Checking '' (z)...zCould not update '): . Skipping.zExtensions update completez, )r(   r)   )$_load_installed_extension_for_update_update_installed_extensionr&   r+   r   rz   r4   r3   r,   r-   _list_installed_extensionswarningr{   logr   	Exceptionappendjoin)r   r   update_status	manifestsr(   r)   errors          r$   extension_updater      s   ( 7=3H=/'//

.X5H5HQYQaQab
 		 3'22

[)<)<(==TU\d\o\op 	 (//*,I./DEGJ*X001X5E5E4FdKL	7AM /'//x2232'22!!("5"56'//# $ JJ$&-		'"4,6499Z(D % 	 	KK,X-@-@,AXEUEUDVVYZ_Y``klm	s   -G==I4I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_settingsra   z.Extension name (with or without `hf-` prefix).c                     [        U5      n[        U5      nUR                  5       (       d  [        SU S35      e[	        U[        U R                  5      S9n[        R                  R                  US9e)zExecute an installed extension.rf   ' is not installed.r5   args)code)
_normalize_extension_name"_resolve_installed_executable_pathr@   r   _execute_extension_binarylistr   click
exceptionsExit)rb   r   r4   r5   	exit_codes        r$   extension_execr      so      +40J8DO""$$ZL0CDEE)/PTUXU]U]P^_I




Y

//r#   z	list | lszhf extensions listc            	      $   [        5        V s/ s Ha  n SU R                   3[        U R                  5      [        U R                  5      U R
                  R                  S5      U R                  S.PMc     nn [        R                  " USS9  gs  sn f )z"List installed extension commands.rk   z%Y-%m-%d)rm   rl   r8   	installedr:   rm   id_keyN)
r   r4   r]   r3   r8   r9   strftimer:   r   table)r   rowss     r$   extension_listr      s     34	 5H X0012(**+&!..77
C#//	
 5 	 	 IId9%	s   A(Bsearchzhf extensions searchc            	         [        SSS[         3SSSS.S9n U R                  5       n[        5        Vs1 s H  o"R                  iM     nn/ nUR                  S	/ 5       H`  nUS
   R                  S5      nUR                  UUS   UR                  SS5      UR                  S5      =(       d    SXc;   a  SOSS.5        Mb     [        R                  " USS9  gs  snf )zISearch extensions available on GitHub (tagged with 'hf-extension' topic).GETz*https://api.github.com/search/repositoriesztopic:starsdescd   )qsortorderper_page)paramsrD   r   hf-	full_namestargazers_countr   r:    yes)r   r2   r   r:   r   r2   r   N)
_github_request_EXTENSIONS_GITHUB_TOPICrA   r   r4   getremoveprefixr   r   r   )responserI   mr   r   r2   r4   s          r$   extension_searchr     s     4678'TZhklH
 ==?D'A'CD'C!'CIDD"%&\..u5
"[)"4a8#xx6<"&0&=U2	
 & IId6" Es   Czremove | rmzhf extensions remove claudez8Extension name to remove (with or without `hf-` prefix).c                     [        U 5      n[        U5      nUR                  5       (       d  [        SU S35      e[        R
                  " U5        [        R                  " SUS9  g)zRemove an installed extension.rf   r   zExtension removedr   N)r   rs   is_dirr   rv   rw   r   rz   )r   r4   r~   s      r$   extension_remover     sW     +40J&z2M!!ZL0CDEE
MM- JJ"4r#   c                     [         R                  5       n U R                  5       (       d  / $ / n[        U R	                  5       5       H_  nUR                  5       (       a   UR
                  R                  S5      (       d  M:   UR                  [        R                  U5      5        Ma     U$ ! [         a0  n[        R                  SUR
                   SU 35         SnAM  SnAff = f)zPReturn manifests for all validly-installed extensions, sorted by directory name.r   z'Failed to load manifest for extension '': N)EXTENSIONS_ROOT
expanduserr   sortediterdirr   
startswithr   r/   rL   r   loggerdebug)root_dirr   r~   es       r$   r   r   2  s    ))+H??	I 0 0 23##%%]-?-?-J-J5-Q-Q	.33MBC	 4   	LLB=CUCUBVVYZ[Y\]^	s   $B,,
C&6%C!!C&c                      / n [        5        HP  nSUR                   S3nUR                  b  UR                   SU 3OUnU R                  UR                  U45        MR     U $ )Nz[extension ] )r   r3   r:   r   r4   )entriesr   tag	help_texts       r$   "list_installed_extensions_for_helpr   C  sl    G.0H,,-Q/7?7K7K7Wx++,AcU3]`	++Y78 1 Nr#   r   known_commandsc                    U (       d  g U S   nUR                  S5      (       a  g U VVs1 s H*  o3R                  S5        H  oDR                  5       iM     M,     nnnX%;   a  g  [        UR	                  S5      US9n [        U5      nUb  UR                  5       (       d  g [        U[        U SS  5      S9$ s  snnf ! [
         a     g f = f! [         a    [        U5      n N\f = f)Nr   -|r   original_inputr   r   )r   splitstrip_validate_extension_short_namer   r   r   r    _auto_install_official_extensionr@   r   r   )r   r   command_namecmda	all_knownr4   r5   s           r$   $dispatch_unknown_top_level_extensionr   L  s    7Ls##&4MnsiinnnIM 3L4M4Me4Teqr

G<ZH o&=&=&?&?$_4PTUVUWPX>ZZ% N    G::FGs)   1B9%B? ?C ?
CCC'&C'r4   c           	      t   [         SU  3p![        U 5      R                  5       (       a  g [        XS9(       d  g  [
        R                  " SU  SU SU S35         [        XU S9n[        UR                  5      R                  5       $ ! [         a     gf = f! [         a     gf = f! [         a     gf = f)	zKTry to auto-install huggingface/hf-<name>. Returns executable path or None.r   Nrg   'z)' is an official Hugging Face extension (ri   z). Install it?rj   )DEFAULT_EXTENSION_OWNERrs   rt   ru   r   r   confirmr   rx   r	   r5   r   )r4   r1   rh   r   s       r$   r   r   h  s    .#j\0B9*%,,.."D E
a
|#LUGSTU^T__mno%ES]^H,,-88::  
  
  s4   B
  B ,B* 

BB
B'&B'*
B76B7c                    [        U 5      n[        U5      nUR                  5       (       dG  U R                  5       R	                  S5      u  n  nU(       a  U SU 3OSU 3n[        SU SU 35      e[        R                  U5      $ )Nri   z/hf-r   rf   zA' is not installed. Install it first with: hf extensions install )r   rs   r   r   
rpartitionr   r/   rL   )r   r4   r~   r1   _install_targets         r$   r   r     s    *40J&z2M!!jjl--c2q!7<E7$zl3C
|BT*%fgufvw
 	
 !!-00r#   r   c                 v   U R                   U R                  U R                  p2n [        XS9nX@R                  :X  a  [        R                  $ [        XX4S9  [        R                  $ ! [         a    e [
         a=  n[        R                  " SU SU SU SU S3	5        [        R                  s S nA$ S nAff = f)Nrg   zCould not check updates for 'r   ri   r   r   )r1   rh   r4   r;   )r1   r2   r4   _fetch_latest_commit_shar   r   r   r   r&   r-   r;   r,   rx   r+   )r   r1   rh   r4   
latest_shar   s         r$   r   r     s    #+>>8==(BUBUjE.-EO
 (((%000UJf!))) !  .3J<s5'9+UXY^X__jkl%---.s   	A' 'B8;2B3-B83B8)r;   r1   rh   r;   c                    [        U5      nUR                  5       (       + nSn  [        XUS9nUb  [	        XBUS9nO
[        X@XS9nUc
   [        XS9n[        U UU  SU 3U[        U5      Ub  S
OS[        R                  " [        R                  5      [        XS9US9	n
U
R!                  U5        SnU
U(       d  U(       a  ["        R$                  " USS9  $ $ $ ! [         a    Sn Nf = f! [         a)  n	[        R                  " SU  SU S	U	 35         Sn	A	NSn	A	ff = f! [&         a    e [(        R*                   a  n[-        S[.         SU  SU S35      UeSnAf[(        R0                   a%  n[-        SU  SU SUR2                   S35      UeSnAf[         a  n[-        SU  SU SU 35      UeSnAff = f! U(       d  U(       a  ["        R$                  " USS9  f f f = f)a  Fetch and install an extension (binary or Python package), then persist its manifest.

Installs in place: an existing install is overwritten without being removed first, so a failed
update keeps the previous version working. A failed fresh install is cleaned up entirely.
Frj   N)r~   r4   r6   )r~   r1   rh   r4   rg   z Could not record a version for 'ri   z', installing anyway: r6   r7   )	r1   r2   r3   r4   r5   r8   r9   r:   r;   T)ignore_errorszPip install timed out after zs for 'z$'. See pip output above for details.z$Failed to install pip package from 'z' (exit code z$). See pip output above for details.z"Failed to install extension from 'r   )rs   rt   _fetch_remote_binaryr   _install_binary_extension_install_python_extensionr   r   r   r/   r]   r   nowr   utc_try_fetch_remote_descriptionr[   rv   rw   r   
subprocessTimeoutExpiredr   _EXTENSIONS_PIP_INSTALL_TIMEOUTCalledProcessError
returncode)r1   rh   r4   r;   r~   fresh_installr   r6   r5   r   r   r   s               r$   rx   rx     sA    'z2M%,,..MI6=	)WabF 7+6O 8+IO q5EW
 %gQyk*!0#/X!hll35EW!

 	m$	  ]MM-t< +ye  	F	$  q>ugQykQghmgnoppq"  $$ &*+J*K7SXRYYZ[dZe f0 0
 	 (( &25'9+]STS_S_R` a0 0
 	  n&)KE7RST]S^^abcad'eflmmn ]MM-t< +ys   
C D# 	C- A!D# C*'D# )C**D# -
D 7DD# D  D# #F9EF92 FF9F44F99F< <'G#c                 ^    [        SSU  SU S3SS0S9nUR                  R                  5       $ )zFetch the latest commit SHA on the default branch, used to detect available updates.

The only REST API call left in the install and update paths. Raises on failure: callers decide
whether a missing SHA is fatal, and report the reason themselves.
r   zhttps://api.github.com/repos/ri   z/commits/HEADAcceptzapplication/vnd.github.sha)headers)r   textr   )r1   rh   r   s      r$   r   r     sA     
'wa	{-H78H
 ==  r#   c                 ^    [        U5      nSU  SU SU 3n[        SU5      nUR                  $ )N"https://raw.githubusercontent.com/ri   z/HEAD/r   )_get_executable_namer   content)r1   rh   r4   executable_nameraw_urlr   s         r$   r   r     s=    *:6O25'9+VOK\]Gug.Hr#   r~   r6   c                     U R                  SSS9  U [        U5      -  nUR                  U5        [        R                  S:w  a  [        R
                  " US5        U$ )NTrO   nti  )rV   r
  write_bytesosr   chmod)r~   r4   r6   r5   s       r$   r   r     sR    t4#&::&FFO'	ww$
%(r#   c           	      z   SU SU S3nU S-  n[        U[        R                  S:X  a  SOS5      n[        R                  " S5      n[
        R                  " 5       nUR                  5       (       d  UR                  S	U 35        U R                  S
S
S9  U(       a"  [        R                  " US[        U5      /S
S9  O,[        R                  " S
S9R                  [        U5      5        UR!                  SU 35        UR                  SU 35        U(       a  USSSS[        U5      U/n	O[        U5      SSSSSSU/n	[        R                  " U	S
["        S9  UR!                  SU 35        [%        U5      n
[        XZ5      nUR                  5       (       d  ['        SU SU SU
 S35      eUR)                  5       $ )Nhttps://github.com/ri   z/archive/HEAD.zipvenvr  z
python.exer7   uvz Creating virtual environment in TrO   )check)with_pipzVirtual environment created in zInstalling package from pipr`   z--reinstallz--pythonz-mz--disable-pip-version-checkz
--no-inputz--force-reinstall)r  timeoutzPackage installed from zInstalled package from 'z/' does not expose the required console script ''.)_get_venv_bin_pathr  r   rv   whichr   statusr@   r   rV   r   runr]   r  
EnvBuildercreatedoner   r
  r   resolve)r~   r1   rh   r4   
source_urlvenv_dirvenv_pythonuv_pathr  install_cmdr  venv_executables               r$   r   r     s   &ugQyk9JKJv%H$Xrww$|T\]Kll4 GZZ\F  8
CDD48NNGVS];4HOOT*11#h-@5hZ@A
MM,ZL9:y-SQ\M]_ij )	
 NN;d4ST
KK)*67*:6O(CO""$$&ugQyk : $
 	
 ""$$r#   z*<meta name="description" content="([^"]*)"c                    SU  SU S3n [        SU S[         35      nUR                  5       R                  S5      n[	        U[
        5      (       a  U$   [        SU S35      nUR                  R                  5        H^  nUR                  5       nUR                  S5      (       d  M+  UR                  S5      u    pgUR                  5       R                  S5      s  $     [        SS	U  SU 35      n[        R                  UR                  5      =nb8  [        UR                  S5      5      n	U	R!                  SU  SU 35      =oI:w  a  U$ g
! [         a     GNf = f! [         a     Nf = f! [         a     g
f = f)zTry to fetch project description either from:
- manifest.json
- pyproject.toml
- the repository's GitHub "About" field

Only best effort, no error handling.
r	  ri   z/HEADr   r:   z/pyproject.toml=z"'r  Nr   z - )r   r?   rA   r   
isinstancer]   r   r  
splitlinesr   r   	partition_GITHUB_ABOUT_REr   r   groupremovesuffix)
r1   rh   baser   r:   liner   rK   matchr  s
             r$   r   r   7  s    0wa	{%HD"5TF!4E3F*GHmmo))-8k3'' (
"5TF/*BC MM,,.D::<D}--"nnS11{{}**511	 /"5,?wa	{*ST%,,X]];;EHu{{1~.G&33c%)4MNNZ"" 7      sD   A
E AE" ,4E" !E" $A+E2 
EE"
E/.E/2
E?>E?c                 H    [        X S9  [        R                  5       SU  3-  $ )Nr   r   )r   r   r   )r4   s    r$   rs   rs   e  s'     #:I%%'C
|*<<<r#   )r   r  methodurlr   r  c          	          [        5       R                  U UUUS[        S9nUR                  S;   aM  UR                  R                  S5      S:X  d  SUR                  ;   a  [        [        UR                  5      5      eUR                  5         U$ )a<  Perform a GitHub request.

Shared by every GitHub/Raw fetch in this module so the timeout, redirect and rate-limit policy are
shared.

Unauthenticated `api.github.com` calls are capped per IP address, and that quota is shared with
everything else calling GitHub from the same network (NAT, VPN, CI egress). Remote refs are therefore
always addressed as `HEAD`, which GitHub resolves to the repo's default branch on
`raw.githubusercontent.com`, on the archive endpoint and on the REST API alike: no
`GET /repos/{owner}/{repo}` lookup is needed to discover the branch name.
T)r   r  follow_redirectsr  )i  i  zx-ratelimit-remaining0retry-after)	r   request_EXTENSIONS_DOWNLOAD_TIMEOUTstatus_coder  r   r   _rate_limit_messageraise_for_status)r6  r7  r   r  r   s        r$   r   r   l  s     }$$, % H z)45<QYQaQa@a#$78H8H$IJJOr#   c                 6   SnU R                  S5      =nb  USU S3-  nU$ U R                  S5      =nbG   [        R                  " [        U5      [        R
                  S9R                  5       nUSUS S	3-  nU$ U$ ! [        [        [        4 a     U$ f = f)
a  Message for a GitHub rate-limit rejection, built from the response headers.

The cap itself is deliberately not quoted: it depends on the endpoint (60/hour on the core API,
10/minute on search), so only the wait is reported.

`retry-after` wins over `x-ratelimit-reset`: GitHub rides the primary window's reset timestamp on
every REST response, secondary rate limits included, so on a back-off it would point at an hourly
window that is not the one being enforced.
zGitHub API rate limit exceeded. Unauthenticated requests are capped per IP address, and that quota is shared with anything else calling GitHub from your network.r;  z
 Retry in zs.zx-ratelimit-reset)tzz It resets at z%H:%M:%S %Z.)
r   r   fromtimestampintr   r   
astimezoneOverflowErrorOSError
ValueError)r  messageretry_afterresetreset_ats        r$   r?  r?    s    	O  {{=11>Z}B// N ;;23
3%	@	@--c%jX\\JUUWH '=Q??GN7N	 w
3 	 N		s   :A? ?BBc           	          [        SSU  SU 35        g	! [        R                   aX  n[        U[        R                  5      (       a  UR
                  R                  S:X  a   SnAg[        SU  SU SU 35      UeSnAff = f)
a5  Whether a public GitHub repo exists.

Resolved against `github.com` rather than `GET /repos/{owner}/{repo}` to keep the check off the
metered REST API (see `_github_request`). Only a 404 answers `False`: any other failure is reported
as such, so callers never present an unreachable GitHub as a missing repo.
HEADr  ri   i  NFz)Could not reach GitHub to check whether 'z
' exists: T)r   httpx	HTTPErrorr,  HTTPStatusErrorr   r>  r   )r1   rh   r   s      r$   ru   ru     s    t"5eWAi[ IJ
 	 ?? teU22338R8RVY8YB5'9+U_`e_fghnssts    B9A<'A<<Bc                 B    SU  3n[         R                  S:X  a  US-  nU$ )Nr   r  z.exer  r   )r4   r   s     r$   r
  r
    s'    D	ww$Kr#   c                     [        U 5      n[        R                  U5      n[        UR                  5      R                  5       $ N)rs   r/   rL   r	   r5   r   )r4   r~   r   s      r$   r   r     s6    &z2M %%m4H(()4466r#   r%  r  c                 J    [         R                  S:X  a  U S-  U-  $ U S-  U-  $ )Nr  ScriptsbinrT  )r%  r  s     r$   r  r    s-    	ww$)#o55eo--r#   z^[A-Za-z0-9][A-Za-z0-9._-]*$r   c                &  ^ U R                  5       mT(       d  [        S5      e[        U4S jS 5       5      (       a  [        SU S35      eST;   d  ST;   a  [        SU S35      e[        R	                  T5      (       d  [        SU S35      eT$ )	NzExtension name cannot be empty.c              3   ,   >#    U  H	  oT;   v   M     g 7frV  r   ).0sepr   s     r$   	<genexpr>1_validate_extension_short_name.<locals>.<genexpr>  s     
.+3$;+s   )ri   \zInvalid extension name 'r  z..:z9'. Allowed characters: letters, digits, '.', '_' and '-'.)r   r   any_ALLOWED_EXTENSION_NAME	fullmatch)r4   r   r   s     @r$   r   r     s    D899

.+
...1.1ADEEt|sd{1.1ADEE",,T22&~&66op
 	
 Kr#   c                    SU ;   a  [        S5      eU R                  S5      n[        U5      S:X  a  [        nUS   nO3[        U5      S:X  a  [	        U5      (       a  Uu  p#O[        SU  S35      eUR                  S	5      (       d  [        S
U S35      eUR                  S	5      nU(       d  [        S5      e[        X@S9  X#U4$ )Nz://zEOnly GitHub repositories in `[OWNER/]hf-<name>` format are supported.ri   r   r   rR   z%Expected `[OWNER/]REPO` format, got 'r  r   z6Extension repository name must start with 'hf-', got 'z(Invalid extension repository name 'hf-'.r   )r   r   lenr   allr   r   r   )r3   partsr1   rh   r4   s        r$   rn   rn     s    ^__MM#E
5zQ'!H		UqSZZ y>wirJKK&&OPY{Z\]^^''.JABB":FZ''r#   c                 z    U R                  5       R                  SS5      S   n[        UR                  S5      U S9$ )Nri   r   r   r   )r   rsplitr   r   )r   rh   s     r$   r   r     s8    

##C+B/I))*@*@*GX\]]r#   r5   c                 &    [         R                  " [        U 5      /U-   5      $ ! [         aa  n[        R
                  S:X  d  UR                  [        R                  :w  a  e [         R                  " S[        U 5      /U-   5      s S nA$ S nAff = f)Nr  sh)r   callr]   rH  r  r   errnoENOEXEC)r5   r   r   s      r$   r   r     sq    DO 45<== D77d?agg6c/&:;dBCCDs   "% 
BABBB)FrV  )r=   N)`r!   ro  rA   r  rerv   r   r  dataclassesr   r   r   r   enumr   htmlr   pathlibr	   typingr
   r   r   rP  huggingface_hub.errorsr   r   r   huggingface_hub.utilsr   r   
_cli_utilsr   
_frameworkr   r   _outputr   r   r   r?   EXTENSIONS_HELPextensions_clir   r=  r   
get_loggerr   r   r   r]   r&   r/   rm   Contextboolr   r   r   r   r   r   r   r   tupler   rp   rE  r   r   r   r   rx   r   bytesr   r   r   compiler/  r   rs   dictResponser   Headersr?  ru   r
  r   r  rc  r   rn   r   r   r   r#   r$   <module>r     s   7   	 	    ) '    %   X X 6 % (  ( 56# + 
 O4) ! "% 			H	%H S$  M M M<    Y^%.	%.RS	U%. T6)2STTU%. 
%.%.P   " 	6
d
f	
	6 
66r 
*.5lpq-9  0	0
FG	I0 
00$ /C.DE& F& ,B+CD# E#6 1N0OP5
PQ	S5
 
5 Q5(D):$; "DsCx,A [tCy [#c( [WZ]aWa [8  2	1s 	17H 	1**; *@V *0 "E=E= E= 	E=
 d
E= E=P!s !s !s !3 3 C E  # u Y] )% )%S )%S )%^a )%fj )%X ::KL + + +t +\=3 =4 = 59QU&*TkCG$;
^^> 3 4# # $  S S 73 74 7. . . . **%DE s s s ( (c3m(< (0^C ^C ^
Dt D49 D Dr#   