
    uj4                         d dl Z d dlZd dlmZ d dlmZmZmZ d dlm	Z	m
Z
mZ d dlmZ ddlmZ ddlmZ  e            Z G d	 d
          Z G d d          ZdS )    N)Optional)GitErrorInvalidParameterNotLoginException)DEFAULT_DATASET_REVISIONDEFAULT_REPOSITORY_REVISIONMASTER_MODEL_BRANCH)
get_logger   )GitCommandWrapper)get_endpointc                   "   e Zd ZdZedddfdededee         dee         dee         dee         fd	Zd
 Zd Z	ddedefdZ
defdZeedfdedee         dee         dee         fdZefdededee         fdZefdededee         fdZdS )
Repositoryz8A local representation of the model git repository.
    N	model_dir
clone_fromrevision
auth_tokengit_pathendpointc                 (   || _         || _        t          j                            |          | _        t          j                            |          | _        |sd}t          |          ddl	m
} |r|| _        n|                                | _        t                      }	|	                                st                              d           t          |          | _        t          j        | j        d           |                     |          }
t          j        | j                  r8|                                 }| j                            |          }|r||
k    rdS | j                            | j        | j        |
| j        |           |	                                r|	                    | j                   | j                            | j        | j                   | j        r'| j                            | j        | j                   dS dS )a  Instantiate a Repository object by cloning the remote ModelScopeHub repo

        Args:
            model_dir (str): The model root directory.
            clone_from (str): model id in ModelScope-hub from which git clone
            revision (str, optional): revision of the model you want to clone from.
                     Can be any of a branch, tag or commit hash
            auth_token (str, optional): token obtained when calling `HubApi.login()`.
                        Usually you can safely ignore the parameter as the token is already
                        saved when you login the first time, if None, we will use saved token.
            git_path (str, optional): The git command line path, if None, we use 'git'
            endpoint (str, optional): The ModelScope endpoint URL. If None, use default endpoint.

        Raises:
            InvalidParameter: revision is None.
        0a non-default value of revision cannot be empty.r   ModelScopeConfigz)git lfs is not installed, please install.Texist_okN)	_endpointr   ospathdirnamemodel_base_dirbasenamemodel_repo_namer   modelscope.hub.apir   r   	get_tokenr   is_lfs_installedloggererrorgit_wrappermakedirs_get_model_id_urllistdir_get_remote_urlremove_token_from_urlclonegit_lfs_installadd_user_infoconfig_auth_token)selfr   r   r   r   r   r   err_msgr   r(   url
remote_urls               i/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/modelscope/hub/repository.py__init__zRepository.__init__   s   . "" gooi88!w//	:: 	,HG"7+++777777 	;(DOO.88::DO'))++-- 	FLLDEEE,X66
DNT2222$$Z00:dn%% 	--//J)??
KKJ jC//t2DOS#3X	? 	? 	? '')) 	8''777 	&&t':'+';	= 	= 	=? 	P..t~tOOOOO	P 	P    c                 N    | j         r| j         nt                      }| d| d}|S )N/.gitr   r   )r2   model_idr   r4   s       r6   r*   zRepository._get_model_id_urlT   s3    %)^G4>>**H***
r8   c                 l    	 | j                             | j                  }n# t          $ r d }Y nw xY w|S N)r(   get_repo_remote_urlr   r   r2   remotes     r6   r,   zRepository._get_remote_urlY   sJ    	%99$.IIFF 	 	 	FFF	   " 11originmasterrB   branchc                 J    | j                             | j        ||           dS )zPull remote branch

        Args:
            remote (str, optional): The remote name. Defaults to 'origin'.
            branch (str, optional): The remote branch. Defaults to 'master'.
        )rB   rF   N)r(   pullr   )r2   rB   rF   s      r6   rH   zRepository.pull`   s*     	dnVFKKKKKr8   file_name_suffixc           	          t          j        d|dt           j                            | j        d                     dS )zAdd file suffix to lfs list.

        Args:
            file_name_suffix (str): The file name suffix.
                examples '*.safetensors'
        z	printf '
z( filter=lfs diff=lfs merge=lfs -text
'>>z.gitattributesN)r   systemr   joinr   )r2   rI   s     r6   add_lfs_typezRepository.add_lfs_typei   sP     			rw||DN<LMMMO	P 	P 	P 	P 	Pr8   Fcommit_messagelocal_branchremote_branchforcec                    t          j        dt          d           	 |t          |t                    sd}t          |          t          |t                    st          d          | j        st          d          | j	        
                    | j        | j                   | j	                            | j        | j                   | j	                            | j                  }| j	                            | j        d           | j	                            | j        |           | j	                            | j        | j        |||	           d S 
NzThis function is deprecated and will be removed in future versions. Please use git command directly or use HubApi().upload_folder instead   )
stacklevelz commit_message must be provided!zforce must be boolz'Must login to push, please login first.T)	all_files)repo_dirtokenr4   rO   rP   )warningswarnDeprecationWarning
isinstancestrr   boolr   r   r(   r1   r   r0   r    r"   r@   addcommitpush)r2   rN   rO   rP   rQ   msgr4   s          r6   ra   zRepository.pusht   sf   
 	T		 	 	 	
	 !NC)H)H!4C"3'''%&& 	9"#7888 	O#$MNNN**4>4?KKK&&t':'+';	= 	= 	= 224>BBT^t<<<???^/%' 	 	) 	) 	) 	) 	)r8   tag_namemessagerefc                     ||dk    rd}t          |          ||dk    rd}t          |          | j                            | j        |||           dS )a  Create a new tag.

        Args:
            tag_name (str): The name of the tag
            message (str): The tag message.
            ref (str, optional): The tag reference, can be commit id or branch.

        Raises:
            InvalidParameter: no commit message.
        N zFWe use tag-based revision, therefore tag_name cannot be None or empty.z=We use annotated tag, therefore message cannot None or empty.)rW   rc   rd   re   )r   r(   tagr   )r2   rc   rd   re   rb   s        r6   rh   zRepository.tag   s}     x2~~ZC"3'''?gmmQC"3'''^	 	 	 	 	 	 	r8   c                 v    |                      |||           | j                            | j        |           dS )zCreate tag and push to remote

        Args:
            tag_name (str): The name of the tag
            message (str): The tag message.
            ref (str, optional): The tag ref, can be commit id or branch. Defaults to MASTER_MODEL_BRANCH.
        )rW   rc   N)rh   r(   push_tagr   )r2   rc   rd   re   s       r6   tag_and_pushzRepository.tag_and_push   s>     	7C(((!!4>H!MMMMMr8   )rD   rE   )__name__
__module____qualname____doc__r   r]   r   r7   r*   r,   rH   rM   r^   ra   r	   rh   rk    r8   r6   r   r      s         ,G-1+/+/<P <P<P <P $C=<P &c]	<P
 $C=<P $C=<P <P <P <P|  
  L L3 L3 L L L L	PS 	P 	P 	P 	P ,G,G%*	-) -) -)#C=-) %SM-) TN	-) -) -) -)d "5  #   : +>N N"N!N #3-N N N N N Nr8   r   c                       e Zd ZdZedddfdededee         dee         dee         dee         fd	Zd
efdZedfdedee         dee	         fdZ
d Zd ZdS )DatasetRepositoryzEA local representation of the dataset (metadata) git repository.
    Nrepo_work_dir
dataset_idr   r   r   r   c                    || _         || _        |rt          |t                    sd}t	          |          |                    d          | _        | j        sd}t	          |          t          j        	                    | j                  | _
        t          j                            | j                  | _        |sd}t	          |          || _        ddlm} |r|| _        n|                                | _        t%          |          | _        t          j        | j        d           |                     |	          | _        d
S )a  
        Instantiate a Dataset Repository object by cloning the remote ModelScope dataset repo

        Args:
            repo_work_dir (str): The dataset repo root directory.
            dataset_id (str): dataset id in ModelScope from which git clone
            revision (str, optional): revision of the dataset you want to clone from.
                                      Can be any of a branch, tag or commit hash
            auth_token (str, optional): token obtained when calling `HubApi.login()`.
                                        Usually you can safely ignore the parameter as the token is
                                        already saved when you login the first time, if None, we will use saved token.
            git_path (str, optional): The git command line path, if None, we use 'git'
            endpoint (str, optional): The ModelScope endpoint URL. If None, use default endpoint.

        Raises:
            InvalidParameter: parameter invalid.
        z"dataset_work_dir must be provided!r:   z%dataset_work_dir can not be root dir!r   r   r   Tr   )rt   N)r   rt   r\   r]   r   rstriprs   r   r   r   repo_base_dirr!   	repo_namer   r#   r   r   r$   r   r(   r)   _get_repo_urlrepo_url)	r2   rs   rt   r   r   r   r   r3   r   s	            r6   r7   zDatasetRepository.__init__   sA   0 "$ 	,J}c$B$B 	,:G"7+++*11#66! 	,=G"7+++W__T-?@@))$*<== 	,HG"7+++ 777777 	;(DOO.88::DO,X66
D&6666**j*AAr8   returnc                    t          j        | j                  r=|                                 }| j                            |          }|r|| j        k    rdS t                              d	                    | j                             | j        
                    | j        | j        | j        | j        | j                   | j        S )Nrg   zCloning repo from {} )r   r+   rs   r,   r(   r-   rz   r&   infoformatr.   rw   r   rx   r   )r2   r5   s     r6   r.   zDatasetRepository.clone  s    :d()) 	--//J)??
KKJ jDM99r+224=AABBBt14?#}dndm	M 	M 	M!!r8   FrN   rF   rQ   c                    t          j        dt          d           	 |t          |t                    sd}t          |          t          |t                    st          d          | j        st          d          | j	        
                    | j        | j                   | j	                            | j        | j                   |                                 }| j	                            |          }| j	                            | j                   | j	                            | j        d           | j	                            | j        |           | j	                            | j        | j        |||	           d S rS   )rY   rZ   r[   r\   r]   r   r^   r   r   r(   r1   rs   r0   rw   rx   r,   r-   rH   r_   r`   ra   )r2   rN   rF   rQ   rb   r5   s         r6   ra   zDatasetRepository.push  s    	T		 	 	 	
	 !NC)H)H!4C"3'''%&& 	9"#7888 	O#$MNNN**4+=tOOO&&t'94>JJJ))++
%;;JGG
d0111T/4@@@ 2NCCC'/  	 	" 	" 	" 	" 	"r8   c                 J    | j         r| j         nt                      }| d| dS )Nz
/datasets/r;   r<   )r2   rt   r   s      r6   ry   zDatasetRepository._get_repo_urlC  s/    %)^G4>>66j6666r8   c                 l    	 | j                             | j                  }n# t          $ r d }Y nw xY w|S r?   )r(   r@   rs   r   rA   s     r6   r,   z!DatasetRepository._get_remote_urlG  sK    	%99$:LMMFF 	 	 	FFF	rC   )rl   rm   rn   ro   r   r]   r   r7   r.   r^   ra   ry   r,   rp   r8   r6   rr   rr      s         ,D-1+/+/0B 0B #0B 0B $C=0B &c]	0B
 $C=0B $C=0B 0B 0B 0Bd"s " " " "  &>%*0" 0" 0"c]0" TN0" 0" 0" 0"d7 7 7    r8   rr   )r   rY   typingr   modelscope.hub.errorsr   r   r   modelscope.utils.constantr   r   r	   modelscope.utils.loggerr
   gitr   utils.utilsr   r&   r   rr   rp   r8   r6   <module>r      s3   
			        O O O O O O O O O O< < < < < < < < < < / . . . . . " " " " " " % % % % % %	xN xN xN xN xN xN xN xNv         r8   