
    6pjnC                       S r SSKJr  SSKrSSKrSSKrSSKrSSKJr  SSK	J
r
JrJrJrJr  SSKrSSKJr  SSKJr  SSKJrJrJrJrJrJrJrJrJrJr  SS	K J!r!  SS
K"J#r#  \#" 5       r$/ SQr% " S S\5      r& " S S5      r'g)u  Hub API — shim delegating to modelscope_hub.

This module preserves the legacy ``modelscope.hub.api`` public surface
(``HubApi``, ``ModelScopeConfig``, ``model_id_to_group_owner_name`` and a few
response-field constants) by delegating to the ``modelscope_hub`` package.

Single responsibility: thin compatibility layer. All real logic lives in
``modelscope_hub.compat.LegacyHubApi`` and ``modelscope_hub.config.HubConfig``.
    )annotationsN)
expanduser)AnyDictOptionalTupleUnion)LegacyHubApi)get_default_config)
API_HTTP_CLIENT_MAX_RETRIESAPI_HTTP_CLIENT_TIMEOUTAPI_RESPONSE_FIELD_DATAAPI_RESPONSE_FIELD_EMAIL#API_RESPONSE_FIELD_GIT_ACCESS_TOKENAPI_RESPONSE_FIELD_MESSAGEAPI_RESPONSE_FIELD_USERNAMEMODELSCOPE_CLOUD_ENVIRONMENTMODELSCOPE_CLOUD_USERNAMEMODELSCOPE_CREDENTIALS_PATH)model_id_to_group_owner_name)
get_logger)HubApiModelScopeConfigr   r   r   r   r   r   c                    ^  \ rS rSrSrS\\S4         SU 4S jjjr\S 5       r	SU 4S jjr
SS jrSSS jjr  S SS	 jjr\S
 5       r\R                  S 5       r        SS jr  S                 SS jjr  S             SS jjr  S             SS jjr\   S         SS jj5       rSS jrSrU =r$ ) r   4   u   ModelScope Hub API — delegates to ``modelscope_hub``.

Maintains backward compatibility with the legacy ``HubApi`` interface;
method behaviour is inherited from
:class:`modelscope_hub.compat.LegacyHubApi`.
Nc           
       > [         TU ]  XS9  U R                  =(       d     U R                  R                  R
                  U l        X@l        X l        X0l        S[        R                  5       0U l        U[        :w  d
  U[        :w  ad  SSKJn  SSKJn  U R                  R                  nU" UR                  UR
                  UUU" UR%                  5       5      S9U R                  l        g g )N)endpointtokenz
user-agentr   )LegacyClient)build_user_agent)r   r   timeoutmax_retries
user_agent)super__init__	_endpoint_api_configr   r   r!   r"   r   get_user_agentheadersr   r   modelscope_hub._legacy_apir   modelscope_hub.utilsr    get_session_id_legacy)	selfr   r!   r"   r   r   r    cfg	__class__s	           N/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/modelscope/hub/api.pyr%   HubApi.__init__<   s     	(8D$))*;*;*D*D
&$&6&E&E&GH .."==?=))##C ,ii'+C,>,>,@A!DII	 >    c                B    U R                   R                  R                  $ )zBackward compatibility: expose the underlying requests.Session.

.. deprecated::
    New code should use HubApi public methods instead of direct HTTP calls.
)r'   legacy_sessionr/   s    r2   sessionHubApi.session]   s     yy(((r4   c                   > [         TU ]  " U40 UD6nU(       a2  U R                  (       a!  U R                  U;  a  U R                   SU 3$ U$ )u   Create a model repo — delegates to ``create_repo`` (model type).

Returns the model repository URL for backward compatibility.
Authentication errors are converted to ``ValueError`` by the compat layer.
z/models/)r$   create_modelr   )r/   model_idkwargsresultr1   s       r2   r<   HubApi.create_modeli   sG     %h9&9dmmV(Cmm_HXJ77r4   c                $    U R                    SU 3$ )z4Return the model page URL ``{endpoint}/{model_id}``./)r   )r/   r=   s     r2   get_model_urlHubApi.get_model_urlw   s    --(,,r4   c                H   SSK Jn  UR                  SS5      =(       d    SnUR                  SS5      nU R                  nU(       aG  X`R                  R                  R
                  :w  a$  U" X`R                  R                  R                  S9nUR                  " S	UUUS.UD6$ )
uC   Upload a folder — delegates to internal ``HubApi.upload_folder``.r   r   	repo_typeNmodelr   r   r   )repo_idrG   folder_path )modelscope_hub.apir   popr'   r(   r   r   upload_folder)r/   rJ   rK   r>   
_NewHubApirG   r   apis           r2   rO   HubApi.upload_folder{   s    ;JJ{D1<W	

7D)iiUii//5555993D3D3M3MNC   
#
 	
 	
r4   c                J   SSK Jn  UR                  SS5      =(       d    SnUR                  SS5      nU R                  nU(       aG  XpR                  R                  R
                  :w  a$  U" XpR                  R                  R                  S9nUR                  " S	UUUUS.UD6$ )
u?   Upload a file — delegates to internal ``HubApi.upload_file``.r   rF   rG   NrH   r   rI   )rJ   rG   path_or_fileobjpath_in_reporL   )rM   r   rN   r'   r(   r   r   upload_file)	r/   rJ   rT   rU   r>   rP   rG   r   rQ   s	            r2   rV   HubApi.upload_file   s     	<JJ{D1<W	

7D)iiUii//5555993D3D3M3MNC 
+%	

 
 	
r4   c                B    U R                   R                  R                  $ )z@Expose UploadManager._prepare_upload_folder for monkey-patching.r'   uploader_prepare_upload_folderr8   s    r2   r[   HubApi._prepare_upload_folder   s     yy!!888r4   c                8    XR                   R                  l        g)zAAllow CommitScheduler to monkey-patch ``_prepare_upload_folder``.NrY   )r/   values     r2   r[   r\      s     5:		1r4   c                    SSK Jn  U R                  R                  R                  " X40 UD6nUR                  5       nU" U5        U$ )zSend a request via the legacy client and validate the response envelope.

Combines ``legacy._request`` (HTTP-level error handling) with
application-level ``{"Code": 200, ...}`` envelope validation.
Returns the parsed JSON body dict on success.
r   )raise_on_error)modelscope.hub.errorsr`   r'   r6   _requestjson)r/   methodpathr>   r`   respbodys          r2   _legacy_requestHubApi._legacy_request   s>     	9yy((@@yy{tr4   c	                n    UUUUS.n	U R                  SSU SU S3U	SS9n
U
R                  [        / 5      $ )z(List objects in a dataset's OSS storage.)MaxLimitRevision	Recursive	FilterDirGET	datasets/rB   z
/oss/tree/i  )paramsr!   )rh   getr   )r/   dataset_name	namespace	max_limitis_recursiveis_filter_dirrevisionr   r   rq   rg   s              r2   list_oss_dataset_objectsHubApi.list_oss_dataset_objects   s]     " %&	
 ##	{!L><	 $ 
 xx/44r4   c                    [        XX4/5      (       d  [        S5      eU R                  SSU SU S3XS.S9nU[           $ )z0Delete a single object from dataset OSS storage.Args cannot be empty!DELETErp   rB   z/oss)Pathrl   rq   )all
ValueErrorrh   r   )r/   object_namers   rt   rx   r   r   rg   s           r2   delete_oss_dataset_object HubApi.delete_oss_dataset_object   s^     KyCDD455##	{!L>6'> $ 

 .//r4   c                    [        XX4/5      (       d  [        S5      eUR                  S5      S-   nU R                  SSU SU S3XtS.S9nU[           $ )z3Delete a directory prefix from dataset OSS storage.r|   rB   r}   rp   z/oss/prefix)Prefixrl   r   )r   r   rstriprh   r   )	r/   r   rs   rt   rx   r   r   prefixrg   s	            r2   delete_oss_dataset_dirHubApi.delete_oss_dataset_dir   ss     KyCDD455##C(3.##	{!L>=$; $ 

 .//r4   c           	       ^ SSK Jn  Uc  UR                  nSSKnSSKJn  [        R                  R                  U[        R                  " U R                  S5      5      R                  5       5      nX5R                  :X  a:  [        R                  R                  U5      (       a  [        R                  " U5        [        R                  R                  U5      (       a  [         R#                  SU 35        U$ [%        5       R'                  US9n[         R#                  S5        [(        R*                  " XS	S
9n	[-        U	R.                  R+                  SS5      5      n
U" U
S	S9nU4S jnSn[1        US5       nU" U	5       H  nUR3                  [5        U5      5        U R7                  S5      (       as  U Vs/ s H0  nUR9                  5       (       d  M  [:        R<                  " U5      PM2     nnU(       d  My  UR?                  U5      nURA                  USUS:H  SS9  US-  nM  U H  nURC                  US-   5        M     M     SSS5        URE                  5         U$ s  snf ! , (       d  f       N%= f)z@Download a meta-data file (csv/jsonl) from a URL to local cache.r   )DownloadModeN)tqdmutf-8zReusing cached meta-data file: )access_tokenzLoading meta-data file ...T)cookiesstreamzcontent-length)totaldynamic_ncolsc              3     >#    / nU R                  5        H<  nUR                  S5      nUR                  U5        [        U5      T:  d  M6  Uv   / nM>     Uv   g 7f)Nr   )
iter_linesdecodeappendlen)rf   
chunk_datadata
chunk_sizes      r2   	get_chunk3HubApi.fetch_meta_files_from_url.<locals>.get_chunk   sW     J){{7+!!$'z?j0$$!#J * s   AAAajsonlF\)indexheader
escapechar   
)#modelscope.utils.constantr   REUSE_DATASET_IF_EXISTSpandas	tqdm.autor   osre   joinhashlibmd5encode	hexdigestFORCE_REDOWNLOADexistsremoveloggerinfor   get_cookiesrequestsrr   intr*   openupdater   endswithstriprc   loads	DataFrameto_csvwriteclose)urlout_pathr   moder   r   pdr   r   response
total_sizeprogressr   iter_numfchunklinechunk_dfs     `               r2   fetch_meta_files_from_url HubApi.fetch_meta_files_from_url  s    	;<77D"77<<gkk#**W"56@@BD 000RWW^^H5M5MIIh77>>(##KK9(DEO(&&E&:01<<TB))--.>BC
j=	 (C A"8,E
+<<((:? .%$ $

 .TZZ-%E .  !||E2HOOA#' $ ) MH %t, !& - !  	.	 ! s&   :A I):I$I$1AI)$I))
I7c                .   UR                  S5      (       a  [        U5      e [        R                  U S5      n [	        X!5      $ ! [         a  n[        U5      UeSnAff = f! [         a'    [        S[        U 5      R                   SU S35      Sef = f)zTransparent proxy to the internal ``modelscope_hub.HubApi``.

Only invoked when normal attribute lookup (instance dict, class
hierarchy including :class:`LegacyHubApi`) fails. Private names are
excluded to avoid recursion during ``__init__``.
_r'   N'z' object has no attribute ')
startswithAttributeErrorobject__getattribute__getattrtype__name__)r/   nameinnerexcs       r2   __getattr__HubApi.__getattr__>  s     ??3 &&	0++D&9E	5''  	0 &C/	0  	 DJ''((CD6K	s"   A 
A# 
A AA #1B)r   r*   r"   r!   r   )
r   Optional[str]r!   r   r"   r   r   r   returnNone)r=   strr   r   N)rJ   r   )NNN)rJ   r   rU   r   )rd   r   re   r   r>   r   r   dictNN)rs   r   rt   r   ru   r   rv   boolrw   r   rx   r   r   r   r   r   r   list)r   r   rs   r   rt   r   rx   r   r   r   r   r   r   r   )i   NN)
r   r   r   r   r   r   r   r   r   r   )r   r   )r   
__module____qualname____firstlineno____doc__r   r   r%   propertyr9   r<   rC   rO   rV   r[   setterrh   ry   r   r   staticmethodr   r   __static_attributes____classcell__)r1   s   @r2   r   r   4   sD    #'.6#  	
  
 B ) )-
 @D(,
"%
" 9 9 "": #:  	
 
: #'#55 5 	5
 5 5 5  5 5 
5@ #'#00 0 	0
 0  0 0 
02 #'#00 0 	0
 0  0 0 
0.  #::: :
 : 
: :x r4   r   c                     \ rS rSrSr\" \5      rSrSr	Sr
SrSr\SS j5       r\SS	 j5       r\S
 5       r\SS j5       r\SS j5       r\SS j5       r\SS j5       r\SS j5       r\SS j5       r\SS j5       r\SSS jj5       rSrg)r   iS  u  Configuration manager — delegates to ``modelscope_hub.HubConfig``.

Preserves the static-method interface used throughout the legacy
codebase. Class-level attributes are kept for callers that read them
directly (e.g. ``ModelScopeConfig.path_credential``).
r   	git_tokenuserr9   Fc                 z    [         R                  " [        R                  SS9  [	        5       R                  5         g)z(Ensure the credentials directory exists.T)exist_okN)r   makedirsr   path_credentialr   ensure_dirsrL   r4   r2   make_sure_credential_path_exist0ModelScopeConfig.make_sure_credential_path_existb  s(     	$44tD((*r4   c                6    [        5       R                  U 5        g)zPersist cookies to disk.N)r   save_cookiesr   s    r2   r   ModelScopeConfig.save_cookiesh  s     	))'2r4   c                 |    [        5       R                  5       n U c   [        R                  (       d  S[        l        U $ )z@Load persisted cookies, returning ``None`` if absent or expired.T)r   load_cookiesr   cookie_expired_warningr   s    r2   r   ModelScopeConfig.get_cookiesm  s1     %&335?#3#J#J6:3r4   c                 2    [        5       R                  5       $ )z9Return a stable session ID used in the user-agent header.)r   r-   rL   r4   r2   get_user_session_id$ModelScopeConfig.get_user_session_idu       "#2244r4   c                6    [        5       R                  U 5        g)zPersist a git access token.N)r   save_git_token)r   s    r2   r  ModelScopeConfig.save_git_tokenz  s     	++I6r4   c                `    SSK nUR                  S[        SS9  [        R	                  U 5        g)z/Deprecated: use :meth:`save_git_token` instead.r   Nz[ModelScopeConfig.save_token() is deprecated, use ModelScopeConfig.save_git_token() instead.   
stacklevel)warningswarnDeprecationWarningr   r  )r   r  s     r2   
save_tokenModelScopeConfig.save_token  s2     	=1 	 	. 	''.r4   c                6    [        5       R                  X5        g)z>Persist ``user_name:user_email`` to the credentials directory.N)r   save_user_info)	user_name
user_emails     r2   r  ModelScopeConfig.save_user_info  s     	++IBr4   c                     [        5       R                  [        R                  -  n  U R	                  SS9nUR                  SS5      n[        U5      S:X  a
  US   US   4$ g! [
        [        4 a     gf = f)zCReturn ``(username, email)`` previously saved, or ``(None, None)``.r   )encodingr   :r   r
  r   )	r   credentials_dirr   USER_INFO_FILE_NAME	read_textFileNotFoundErrorOSErrorsplitr   )re   r   partss      r2   get_user_infoModelScopeConfig.get_user_info  s     "#336F6Z6ZZ	>>7>3D 

3"u:?8U1X%% "7+ 		s   A" "A54A5c                 2    [        5       R                  5       $ )z>Return the persisted git access token, or ``None`` if not set.)r   load_git_tokenrL   r4   r2   get_git_tokenModelScopeConfig.get_git_token  r  r4   c                 \    SSK n U R                  S[        SS9  [        R	                  5       $ )z.Deprecated: use :meth:`get_git_token` instead.r   NzYModelScopeConfig.get_token() is deprecated, use ModelScopeConfig.get_git_token() instead.r
  r  )r  r  r  r   r%  )r  s    r2   	get_tokenModelScopeConfig.get_token  s3     	<1 	 	.  --//r4   Nc                &   [         R                  R                  [        S5      n[         R                  R                  [        S5      nSSKJn  SU S[        R                  " 5        S[        R                  5        S[        R                  " 5        S	[        R                  " 5        S
U SU 3n[        U [        5      (       a.  USSR                  S U R                  5        5       5      -   -  nU$ [        U [         5      (       a  USU -   -  nU$ )z=Build a user-agent string carrying SDK version and telemetry.customunknownr   )__version__zmodelscope/z	; python/z; session_id/z; platform/z; processor/z; env/z; user/z; c              3  4   #    U  H  u  pU S U 3v   M     g7f)rB   NrL   ).0kvs      r2   	<genexpr>2ModelScopeConfig.get_user_agent.<locals>.<genexpr>  s     "M:L$!aS!::Ls   )r   environrr   r   r   
modelscoper-  platformpython_versionr   r  	processor
isinstancer   r   itemsr   )r#   envr  r-  uas        r2   r)   ModelScopeConfig.get_user_agent  s    jjnn98DJJNN#<iH	*+ '--/0 1*>>@A B ))+, -!++-. /% ;  	 j$''$"M*:J:J:L"MMMMB 	 
C(($##B	r4   rL   )r   r   )r   r   )r   r   r   r   )r   r   r   r   )r  r   r  r   r   r   )r   z#Tuple[Optional[str], Optional[str]])r   r   r   )r#   zUnion[Dict, str, None]r   r   )r   r   r   r   r   r   r   r   COOKIES_FILE_NAMEGIT_TOKEN_FILE_NAMEr  USER_SESSION_ID_FILE_NAMEr   r   r   r   r   r  r  r  r  r!  r%  r(  r)   r   rL   r4   r2   r   r   S  s    !!<=O!%  )"+ +
 3 3   5 5 7 7 / / C C 
 
 5 5 0 0  r4   r   )(r   
__future__r   r   rc   r   r6  os.pathr   typingr   r   r   r   r	   r   modelscope_hub.compatr
   _LegacyHubApimodelscope_hub.configr   modelscope.hub.constantsr   r   r   r   r   r   r   r   r   r   modelscope.hub.utils.utilsr   modelscope.utils.loggerr   r   __all__r   r   rL   r4   r2   <module>rK     sq    #   	   4 4  ? 4	C 	C 	C D .		\] \~k kr4   