
    ITh#              
           S r SSKrSSKrSSKrSSKJr  SSKJr  SSKJ	r	J
r
  SSKJr  SSKJr  \R                  " S	\R                   S
9rS\S\4S jrS\SS4S jrS\S\S\
\\	4   S\
\\	4   4S jrg)zDContains utilities to validate argument values in `huggingface_hub`.    N)wraps)chain)AnyDict)HFValidationError   )	CallableTz
    ^
    (\b[\w\-.]+\b/)? # optional namespace (username or organization)
    \b               # starts with a word boundary
    [\w\-.]{1,96}    # repo_name: alphanumeric + . _ -
    \b               # ends with a word boundary
    $
    )flagsfnreturnc                    ^ ^^ [         R                  " T 5      mSTR                  ;  =(       a    STR                  ;   m[        T 5      UU U4S j5       nU$ )a!  Validate values received as argument for any public method of `huggingface_hub`.

The goal of this decorator is to harmonize validation of arguments reused
everywhere. By default, all defined validators are tested.

Validators:
    - [`~utils.validate_repo_id`]: `repo_id` must be `"repo_name"`
      or `"namespace/repo_name"`. Namespace is a username or an organization.
    - [`~utils.smoothly_deprecate_use_auth_token`]: Use `token` instead of
      `use_auth_token` (only if `use_auth_token` is not expected by the decorated
      function - in practice, always the case in `huggingface_hub`).

Example:
```py
>>> from huggingface_hub.utils import validate_hf_hub_args

>>> @validate_hf_hub_args
... def my_cool_method(repo_id: str):
...     print(repo_id)

>>> my_cool_method(repo_id="valid_repo_id")
valid_repo_id

>>> my_cool_method("other..repo..id")
huggingface_hub.utils._validators.HFValidationError: Cannot have -- or .. in repo_id: 'other..repo..id'.

>>> my_cool_method(repo_id="other..repo..id")
huggingface_hub.utils._validators.HFValidationError: Cannot have -- or .. in repo_id: 'other..repo..id'.

>>> @validate_hf_hub_args
... def my_cool_auth_method(token: str):
...     print(token)

>>> my_cool_auth_method(token="a token")
"a token"

>>> my_cool_auth_method(use_auth_token="a use_auth_token")
"a use_auth_token"

>>> my_cool_auth_method(token="a token", use_auth_token="a use_auth_token")
UserWarning: Both `token` and `use_auth_token` are passed (...)
"a token"
```

Raises:
    [`~utils.HFValidationError`]:
        If an input is not valid.
use_auth_tokentokenc                     > Sn[        [        TR                  U 5      UR                  5       5       H'  u  p4US;   a  [	        U5        M  US:X  d  M   Uc  M%  SnM)     T(       a  [        TR                  X!S9nT" U 0 UD6$ )NF)repo_idfrom_idto_idr   T)fn_name	has_tokenkwargs)r   zip
parametersitemsvalidate_repo_id!smoothly_deprecate_use_auth_token__name__)argsr   r   arg_name	arg_valuecheck_use_auth_tokenr   	signatures        Y/var/www/auris/envauris/lib/python3.13/site-packages/huggingface_hub/utils/_validators.py	_inner_fn'validate_hf_hub_args.<locals>._inner_fnb   s~    	#(	$$d+LLN$
H :: +W$)> 	$
  6r{{V_oF4"6""    )inspectr!   r   r   )r   r#   r    r!   s   ` @@r"   validate_hf_hub_argsr'   *   sX    d !!"%I ,93G3GGkGW`WkWkLk
2Y# #" r%   r   c                 ~   [        U [        5      (       d  [        S[        U 5       SU  S35      eU R	                  S5      S:  a  [        SU  S35      e[
        R                  U 5      (       d  [        SU  S35      eS	U ;   d  S
U ;   a  [        SU  S35      eU R                  S5      (       a  [        SU  S35      eg)a<  Validate `repo_id` is valid.

This is not meant to replace the proper validation made on the Hub but rather to
avoid local inconsistencies whenever possible (example: passing `repo_type` in the
`repo_id` is forbidden).

Rules:
- Between 1 and 96 characters.
- Either "repo_name" or "namespace/repo_name"
- [a-zA-Z0-9] or "-", "_", "."
- "--" and ".." are forbidden

Valid: `"foo"`, `"foo/bar"`, `"123"`, `"Foo-BAR_foo.bar123"`

Not valid: `"datasets/foo/bar"`, `".repo_id"`, `"foo--bar"`, `"foo.git"`

Example:
```py
>>> from huggingface_hub.utils import validate_repo_id
>>> validate_repo_id(repo_id="valid_repo_id")
>>> validate_repo_id(repo_id="other..repo..id")
huggingface_hub.utils._validators.HFValidationError: Cannot have -- or .. in repo_id: 'other..repo..id'.
```

Discussed in https://github.com/huggingface/huggingface_hub/issues/1008.
In moon-landing (internal repository):
- https://github.com/huggingface/moon-landing/blob/main/server/lib/Names.ts#L27
- https://github.com/huggingface/moon-landing/blob/main/server/views/components/NewRepoForm/NewRepoForm.svelte#L138
zRepo id must be a string, not z: 'z'./r   zCRepo id must be in the form 'repo_name' or 'namespace/repo_name': 'z&'. Use `repo_type` argument if needed.zRepo id must use alphanumeric chars or '-', '_', '.', '--' and '..' are forbidden, '-' and '.' cannot start or end the name, max length is 96: 'z--z..z"Cannot have -- or .. in repo_id: 'z.gitzRepo_id cannot end by '.git': 'N)
isinstancestrr   typecountREPO_ID_REGEXmatchendswith)r   s    r"   r   r   w   s    < gs##"@gsSZR[[] ^__}}SA	?A
 	

 w''	
 	
 w$'/"DWIR PQQ"A'" MNN  r%   r   r   r   c                     UR                  5       nUR                  SS5      nUb'  U(       a  [        R                  " SU  S35        U$ XCS'   U$ )a  Smoothly deprecate `use_auth_token` in the `huggingface_hub` codebase.

The long-term goal is to remove any mention of `use_auth_token` in the codebase in
favor of a unique and less verbose `token` argument. This will be done a few steps:

0. Step 0: methods that require a read-access to the Hub use the `use_auth_token`
   argument (`str`, `bool` or `None`). Methods requiring write-access have a `token`
   argument (`str`, `None`). This implicit rule exists to be able to not send the
   token when not necessary (`use_auth_token=False`) even if logged in.

1. Step 1: we want to harmonize everything and use `token` everywhere (supporting
   `token=False` for read-only methods). In order not to break existing code, if
   `use_auth_token` is passed to a function, the `use_auth_token` value is passed
   as `token` instead, without any warning.
   a. Corner case: if both `use_auth_token` and `token` values are passed, a warning
      is thrown and the `use_auth_token` value is ignored.

2. Step 2: Once it is release, we should push downstream libraries to switch from
   `use_auth_token` to `token` as much as possible, but without throwing a warning
   (e.g. manually create issues on the corresponding repos).

3. Step 3: After a transitional period (6 months e.g. until April 2023?), we update
   `huggingface_hub` to throw a warning on `use_auth_token`. Hopefully, very few
   users will be impacted as it would have already been fixed.
   In addition, unit tests in `huggingface_hub` must be adapted to expect warnings
   to be thrown (but still use `use_auth_token` as before).

4. Step 4: After a normal deprecation cycle (3 releases ?), remove this validator.
   `use_auth_token` will definitely not be supported.
   In addition, we update unit tests in `huggingface_hub` to use `token` everywhere.

This has been discussed in:
- https://github.com/huggingface/huggingface_hub/issues/1094.
- https://github.com/huggingface/huggingface_hub/pull/928
- (related) https://github.com/huggingface/huggingface_hub/pull/1064
r   Nz1Both `token` and `use_auth_token` are passed to `z` with non-None values. `token` is now the preferred argument to pass a User Access Token. `use_auth_token` value will be ignored.r   )copypopwarningswarn)r   r   r   
new_kwargsr   s        r"   r   r      sb    J J^^$4d;N!MMI ;;  #1wr%   )__doc__r&   rer4   	functoolsr   	itertoolsr   typingr   r   huggingface_hub.errorsr   _typingr	   compileVERBOSEr.   r'   r+   r   boolr    r%   r"   <module>rB      s    K  	     4  

 **
JY J9 JZ3Oc 3Od 3Ol5s 5t 5TRUWZRZ^ 5`dehjmem`n 5r%   