
    j>'              	          d 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mZ ddlmZ ddlmZ dd	lmZ d
dlmZ dZdZdZed         Z ed           G d d                      Z ed           G d d                      Zd4dedededefdZd5dee         dedz  dee         fdZdee         fdZ d4d edededefd!Z!de"eef         fd"Z#d#ee         dededz  fd$Z$d%edefd&Z%d ed'eddfd(Z&d)eddfd*Z'd edee         fd+Z(d ed,ee         d'eddfd-Z)d.ed/eddfd0Z*dee         dee         fd1Z+d)ed2e"eef         defd3Z,dS )6zNInternal helpers for Hugging Face marketplace skill installation and upgrades.    N)	dataclassreplace)PathPurePosixPath)AnyLiteral)
BucketFile)CLIError   )disable_progress_bars   )
get_hf_apizhuggingface/skillsmarketplace.jsonz.hf-skill-manifest.json)
up_to_date	unmanagedsource_unreachableT)frozenc                   8    e Zd ZU eed<   eed<   dZedz  ed<   dS )MarketplaceSkillname	repo_pathNdescription)__name__
__module____qualname__str__annotations__r        ^/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/huggingface_hub/cli/_skills.pyr   r      s8         
IIINNN"Kt"""""r   r   c                   B    e Zd ZU eed<   eed<   eed<   dZedz  ed<   dS )SkillUpdateInfor   	skill_dirstatusNdetail)r   r   r   r   r   r   SkillUpdateStatusr%   r   r   r    r"   r"   #   sD         
IIIOOOFC$Jr   r"   F
skill_namedestination_rootforcereturnc                    t                      }t                      5  t          |          }t          ||           }|t	          d|  dt
           d          t          ||||          cddd           S # 1 swxY w Y   dS )z3Resolve a marketplace skill by name and install it.NSkill 'z' not found in zD. Try `hf skills add` to install `hf-cli` or use a known skill name.r)   )r   r   _load_marketplace_skills_select_marketplace_skillr
   DEFAULT_SKILLS_BUCKET_ID_install_marketplace_skill)r'   r(   r)   apimarketplace_skillsskills         r    	add_skillr5   +   s   
,,C		 	  U U5c::)*<jII=U* U U5M U U U   *#u6FeTTTU U U U U U U U U U U U U U U U U Us   AA99A= A=rootsselectorc                 ~   t          |           }|L|                                                                fd|D             }|st          d| d| d          t	                      t                      5  d t                    D             fd|D             cddd           S # 1 swxY w Y   dS )z;Re-sync managed marketplace skill installs from the bucket.Nc                 N    g | ]!}|j                                         k    |"S r   r   lower).0dselector_lowers     r    
<listcomp>z!update_skills.<locals>.<listcomp>>   s-    PPPAqv||~~/O/Oa/O/O/Or   zNo installed skill matches 'z"'. Install it with `hf skills add z`.c                 B    i | ]}|j                                         |S r   r:   )r<   r4   s     r    
<dictcomp>z!update_skills.<locals>.<dictcomp>D   s(    cccEej..00%cccr   c                 2    g | ]}t          |          S r   )_apply_single_update)r<   r#   r2   r3   s     r    r?   z!update_skills.<locals>.<listcomp>E   s'    eeeY$S)5GHHeeer   )_iter_unique_skill_dirsstripr;   r
   r   r   r.   )r6   r7   
skill_dirsr2   r3   r>   s      @@@r    update_skillsrG   9   s>   (//J!))//11PPPPPPP
 	tr(rrfnrrrsss
,,C		 	  f fccE]^aEbEbccceeeeeZdeeef f f f f f f f f f f f f f f f f fs   =(B22B69B6c                 6   t          |           }|                    d          }t          |t                    st	          d          g }|D ]}t          |t
                    s|                    d          }|                    d          }t          |t                    rt          |t                    sm|                    d          }|                    t          |t          |          t          |t                    r|nd                      |S )NpluginszAInvalid marketplace payload: expected a top-level 'plugins' list.r   sourcer   )r   r   r   )
_load_marketplace_payloadget
isinstancelistr
   dictr   appendr   _normalize_repo_path)r2   payloadrI   skillspluginr   rJ   r   s           r    r.   r.   H   s   ',,Gkk)$$Ggt$$ \Z[[[%'F 
 
&$'' 	zz&!!H%%$$$ 	Jvs,C,C 	jj//.v66+5k3+G+GQKKT  	
 	
 	
 	
 Mr   r4   c                 h   |                                                                 }|                    dd           ||j        z  }|                                }|r|st          d|           |rst          j        |d|j         d          5 }t          |          |j        z  }t          | ||           t          ||           d	d	d	           n# 1 swxY w Y   |S 	 t          | ||           n7# t          $ r* |                                rt          j        |            w xY w|S )
z:Install a marketplace skill into a local skills directory.Tparentsexist_okzSkill already exists: .z	.install-)dirprefix)r4   install_dir)existing_dir
staged_dirN)
expanduserresolvemkdirr   existsFileExistsErrortempfileTemporaryDirectoryr   _populate_install_dir_atomic_replace_directory	Exceptionshutilrmtree)r2   r4   r(   r)   r\   already_existstmp_dir_strr^   s           r    r1   r1   a   s   '2244<<>>4$777"UZ/K ''))N Fe FD{DDEEE  (-=Fe+JZFeFeFefff 	Wjuk**[-==J!#U
KKKK%;:VVVV	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W cKHHHHH    	'M+&&& s   ;CC!C(C; ;4D/c                 b   t          j                    5 }t          |          dz  }|                     t          t
          |fgd           t          j        |                    d                    }d d d            n# 1 swxY w Y   t          |t                    st          d          |S )Nr   T)raise_on_missing_fileszutf-8)encodingz4Invalid marketplace payload: expected a JSON object.)rd   re   r   download_bucket_filesr0   MARKETPLACE_PATHjsonloads	read_textrM   rO   r
   )r2   tmp_dir
local_pathparseds       r    rK   rK   }   s    		$	&	& D'']]%77
!!$
+,#' 	" 	
 	
 	

 J00'0BBCCD D D D D D D D D D D D D D D fd## OMNNNMs   A B  BBrS   c                     |                                                                 }| D ]#}|j                                        |k    r|c S $d S N)rE   r;   r   )rS   r7   r>   r4   s       r    r/   r/      sX    ^^%%++--N  ://LLL 04r   pathc                     |                                  }|                    d          r|dd          }|                    d          |                     d          }|st          d          |S )Nz./r   /z-Invalid marketplace entry: empty source path.)rE   
startswithr
   )rz   
normalizeds     r    rQ   rQ      s{    J



%
% $^
 


%
% $!!#&&J HFGGGr   r\   c                     |                     dd           t          | |          }t          | |||           t          |           |t          z                                   d S )NTrV   )ra   _list_skill_files_download_skill_files_validate_installed_skill_dirMANAGED_MARKER_FILENAMEtouch)r2   r4   r\   bucket_filess       r    rf   rf      sj    dT222$S%00L#ulK@@@!+...**1133333r   r#   c                 \    | dz  }|                                 st          d|           d S )NzSKILL.mdz%Installed skill is missing SKILL.md: )is_fileRuntimeError)r#   
skill_files     r    r   r      sD    Z'J QO:OOPPPQ Qr   c                     |j                             d          }d |                     t          |d          D             }|st	          d| dt           d          |S )zAList all files under `skill.repo_path` in the marketplace bucket.r|   c                 <    g | ]}t          |t                    |S r   )rM   r	   )r<   items     r    r?   z%_list_skill_files.<locals>.<listcomp>   s8       dJ''  r   T)r[   	recursivezPath 'z' not found in bucket ''.)r   rstriplist_bucket_treer0   FileNotFoundError)r2   r4   r[   filess       r    r   r      s    _##C((F (()A&\`(aa  E
  f d d dH` d d deeeLr   r   c                    |j                             d          }| d}g }|D ]}|j                            |          s|j        t	          |          d         } |j        t          |          j         }	|	j        	                    dd           |
                    ||	f           |st          d| dt           d          |                     t          |           dS )z)Download bucket files into `install_dir`.r|   NTrV   zNo files found under 'z' in bucket 'r   )r   r   rz   r}   lenjoinpathr   partsparentra   rP   r   r0   rp   )
r2   r4   r   r\   r[   prefix_with_slashdownload_specsbucket_filerelative
local_files
             r    r   r      s   _##C((F! ACN 9 9**+<== 	#C(9$:$:$<$<=)[)=+B+B+HI
t<<<{J78888 l j j jNf j j jkkk6GGGGGr   r]   r^   c                 @   |j         | j         dz  }	 |                     |           |                    |            t          j        |           d S # t
          $ r? |                                r)|                                 s|                    |             w xY w)Nz.backup)r   r   renameri   rj   rh   rb   )r]   r^   
backup_dirs      r    rg   rg      s    "(9%B%B%BBJJ''','''j!!!!!    	,|':':'<'< 	,l+++s   >A A	Bc                 $   t                      }g }| D ]}|                                                                }|                                s=t	          |                                          D ]}|j                            d          r|                                s|                                sF|                                }||v s|                                ss|	                    |           |
                    |           |S )NrY   )setr_   r`   is_dirsortediterdirr   r}   
is_symlinkaddrP   )r6   seen
discoveredrootchildresolveds         r    rD   rD      s   eeDJ ( (  ((**{{}} 	DLLNN++ 		( 		(Ez$$S)) <<>> %*:*:*<*< }}H4x'8'8HHXh''''		( r   r3   c           	         t          |j        |d          }|t          z                                  s|S |                    |j                                                  }|#t          |dd|j         dt           d          S 	 t          | ||j	        d	           n6# t          $ r)}t          |dt          |                    cY d }~S d }~ww xY wt          |d
          S )Nr   )r   r#   r$   r   r,   z' is no longer available in rY   )r$   r%   Tr-   r   )r$   )r"   r   r   rb   rL   r;   r   r0   r1   r   rh   r   )r2   r#   r3   baser4   excs         r    rC   rC      s   	)KXXXD//7799 ""9>#7#7#9#9::E}'dY^ddIaddd
 
 
 	
K"3y/?tLLLLL K K Kt$8SJJJJJJJJJK 4----s   B! !
C+C	CC)Fry   )-__doc__rr   ri   rd   dataclassesr   r   pathlibr   r   typingr   r   huggingface_hub._bucketsr	   huggingface_hub.errorsr
   utilsr   
_cli_utilsr   r0   rq   r   r&   r   r"   r   boolr5   rN   rG   r.   r1   rO   rK   r/   rQ   rf   r   r   r   rg   rD   rC   r   r   r    <module>r      s   T T    * * * * * * * * ' ' ' ' ' ' ' '         / / / / / / + + + + + + ) ) ) ) ) ) " " " " " " 0 % 
 4 KL  $# # # # # # # # $       U U# U Ud Ut U U U Uf fd fsTz fT/EZ f f f fT*:%;    2 +; t \` mq    8d38n    d+;&<  P`cgPg    s s    4&6 4T 4d 4 4 4 4QT Qd Q Q Q Q
"2 
tJ7G 
 
 
 
H&6 HtJ?O H^b Hgk H H H H0	D 	d 	t 	 	 	 	4: $t*    (. .4M]H]C^ .cr . . . . . .r   