
    5pj]                        S r SSKJr  SSKrSSKrSSKJrJrJrJ	r	  SSK
Jr  SSKJr  SrSrSS	 jr " S
 S\5      rSS jrSS jrSS jrSS jrSS jrSS.SS jjrg)zCLI backward-compatibility utilities.

Provides argument normalization, deprecation warnings, and custom argparse
actions that allow the CLI to accept both the new canonical argument style
and the legacy style from the old ``modelscope`` SDK.
    )annotationsN)SUPPRESSActionArgumentParser	Namespace)Sequence)Any"MODELSCOPE_NO_DEPRECATION_WARNINGS&MODELSCOPE_HUB_NO_DEPRECATION_WARNINGSc                    [         R                  R                  [        5      (       d(  [         R                  R                  [        5      (       a  g[
        R                  " SU  SU S3[        SS9  g)z5Emit a DeprecationWarning for a renamed CLI argument.N'z>' is deprecated and will be removed in a future version. Use 'z
' instead.   )
stacklevel)osenvironget_SUPPRESS_ENVVAR_SUPPRESS_ENVVAR_OLDwarningswarnDeprecationWarning)oldnews     U/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/modelscope_hub/cli/compat.pydeprecated_argr      sR    	zz~~&''2::>>:N+O+OMM
C5NseS]^    c                  :    \ rS rSrSr S         SS jjrSrg)PatternAction%   zArgparse action that accumulates values from repeated or multi-value uses.

Supports both:
  --include a b c          (nargs='+' multi-value)
  --include a --include b  (repeated single-value)

Result is always a flat list.
Nc                    Uc  g [        X R                  S 5      =(       d    / n[        U[        5      (       a  UR	                  U5        OUR                  U5        [        X R                  U5        g N)getattrdest
isinstancestrappendextendsetattr)selfparser	namespacevaluesoption_stringcurrents         r   __call__PatternAction.__call__/   sT     >$Y		4@FBfc""NN6"NN6"	99g.r    r!   )
r*   r   r+   r   r,   zstr | Sequence[Any] | Noner-   z
str | NonereturnNone)__name__
__module____qualname____firstlineno____doc__r/   __static_attributes__r1   r   r   r   r   %   sF     %)// / +	/
 "/ 
/ /r   r   c                   U R                  5       nUR                  S[        S[        S9  UR                  S[        S[        S9  UR                  S[        S[        S9  U R                  SSS[        S9  U R                  S	S
S[        S9  g)z0Register hidden legacy-style download arguments.--modelN)typedefaulthelp	--dataset--collection--local_dirlocal_dir_legacyr#   r=   r>   --cache_dircache_dir_legacy)add_mutually_exclusive_groupadd_argumentr%   r   )r*   groups     r   add_legacy_download_argsrI   C   s    //1E	ysDxH	{dJ	~CHM
,>S[\
,>S[\r   c                \    U R                  SSS[        S9  U R                  SSS[        S9  g)zBRegister hidden per-subcommand --token/--endpoint (legacy compat).z--tokensubcmd_tokenNrC   z
--endpointsubcmd_endpoint)rG   r   )r*   s    r   add_subcmd_token_endpointrM   N   s2    
	8T
+<dQYZr   c                r   [        U SS5      (       aq  [        SS5        U R                  b>  U R                  (       d  / U l        U R                  R	                  SU R                  5        U R
                  U l        SU l        GO[        U SS5      (       ap  [        SS5        U R                  b>  U R                  (       d  / U l        U R                  R	                  SU R                  5        U R                  U l        SU l        O[        U S	S5      (       ao  [        S
S5        U R                  b>  U R                  (       d  / U l        U R                  R	                  SU R                  5        U R                  U l        S	U l        [        U SS5      nU(       a$  [        SS5        [        U SS5      (       d  Xl	        [        U SS5      nU(       a$  [        SS5        [        U SS5      (       d  X l
        [        U 5        [        U SS5      (       d  / U l        U R                  (       d  [        S5      eU $ )u	  Normalize legacy download arguments to the canonical internal form.

Handles mapping of:
  --model/--dataset → repo_id + repo_type
  --local_dir (underscore) → local_dir
  --cache_dir (underscore) → cache_dir
  subcmd_token/subcmd_endpoint → token/endpoint
modelNr;   zpositional repo_idr   datasetr?   z+positional repo_id with --repo-type dataset
collectionr@   z.positional repo_id with --repo-type collectionrB   rA   z--local-dir	local_dirrE   rD   z--cache-dir	cache_dirfileszRrepo_id is required. Provide it as a positional argument or via --model/--dataset.)r"   r   repo_idrT   insertrO   	repo_typerP   rQ   rR   rS   _merge_subcmd_auth
ValueError)argslegacy_locallegacy_caches      r   normalize_download_argsr]   W   s    tWd##y"67<<#::
JJa.zz 	y$	'	'{$QR<<#::
JJa.||"	|T	*	*~'WX<<#::
JJa.% 4!3T:L}m4t[$//)N 4!3T:L}m4t[$//)N t 4$''
<<mnnKr   c                   U c  g[        U [        5      (       a  U /n / nU  HW  n[        U[        5      (       a%  U H  nUR                  [	        U5      5        M     M=  UR                  [	        U5      5        MY     U=(       d    S$ )zFlatten pattern values into a simple list.

Handles output from both PatternAction and legacy nargs='*'.
Also splits comma-separated values (matching old SDK's ``convert_patterns``).
N)r$   r%   listr'   _split_commas)valueresultitemsubs       r   normalize_patternsre      sv     }%FdD!!mC01  MM--.  >Tr   c                    SU ;   aF  U R                  S5       Vs/ s H)  oR                  5       (       d  M  UR                  5       PM+     sn$ U R                  5       (       a  U R                  5       /$ / $ s  snf )z=Split a string on commas and strip whitespace from each part.,)splitstrip)sparts     r   r`   r`      sW    
ax)*F

FF''))AGGI;++ Gs
   A5A5T)r   c                   [        U SS5      nU(       a  U(       a  [        SS5        X l        [        U SS5      nU(       a  U(       a  [        SS5        X0l        gg)a  Merge subcommand-level --token/--endpoint into the namespace.

Subcommand-level values take precedence over global values (they are
more specific). When *warn* is True, a deprecation warning is emitted
advising users to use the global form.

Parameters
----------
warn : bool
    Emit deprecation warnings. Set to False when called from alias
    adapters where subcommand-level auth is the expected interface.
rK   Nzsubcommand --tokenz"global --token (before subcommand)rL   zsubcommand --endpointz%global --endpoint (before subcommand))r"   r   tokenendpoint)rZ   r   rK   rL   s       r   rX   rX      sT     46L/1UV!
d$5t<O24[\' r   )r   r%   r   r%   r2   r3   )r*   r   r2   r3   )rZ   r   r2   r   )ra   r	   r2   zlist[str] | None)rj   r%   r2   z	list[str])rZ   r   r   boolr2   r3   )r8   
__future__r   r   r   argparser   r   r   r   collections.abcr   typingr	   r   r   r   r   rI   rM   r]   re   r`   rX   r1   r   r   <module>rt      sk    # 	  @ @ $ 
 8 ? /F /<][;|(, 9= ( (r   