SmolFactory / scripts /validate_hf_token.py
Tonic's picture
adds new hf cli
d291e63 verified
raw
history blame
2.73 kB
#!/usr/bin/env python3
"""
Hugging Face Token Validation Script
This script validates a Hugging Face token and retrieves the associated username
using the huggingface_hub Python API.
"""
import sys
import os
from typing import Optional, Tuple
from huggingface_hub import HfApi, login
import json
def validate_hf_token(token: str) -> Tuple[bool, Optional[str], Optional[str]]:
"""
Validate a Hugging Face token and return the username.
Args:
token (str): The Hugging Face token to validate
Returns:
Tuple[bool, Optional[str], Optional[str]]:
- success: True if token is valid, False otherwise
- username: The username associated with the token (if valid)
- error_message: Error message if validation failed
"""
try:
# Create API client with token directly
api = HfApi(token=token)
# Try to get user info - this will fail if token is invalid
user_info = api.whoami()
# Extract username from user info
username = user_info.get("name", user_info.get("username"))
if not username:
return False, None, "Could not retrieve username from token"
return True, username, None
except Exception as e:
error_msg = str(e)
if "401" in error_msg or "unauthorized" in error_msg.lower():
return False, None, "Invalid token - unauthorized access"
elif "403" in error_msg:
return False, None, "Token lacks required permissions"
elif "network" in error_msg.lower() or "connection" in error_msg.lower():
return False, None, f"Network error: {error_msg}"
else:
return False, None, f"Validation error: {error_msg}"
def main():
"""Main function to validate token from command line or environment."""
# Get token from command line argument or environment variable
if len(sys.argv) > 1:
token = sys.argv[1]
else:
token = os.environ.get("HF_TOKEN") or os.environ.get("HUGGING_FACE_HUB_TOKEN")
if not token:
print(json.dumps({
"success": False,
"username": None,
"error": "No token provided. Use as argument or set HF_TOKEN environment variable."
}))
sys.exit(1)
# Validate token
success, username, error = validate_hf_token(token)
# Return result as JSON for easy parsing
result = {
"success": success,
"username": username,
"error": error
}
print(json.dumps(result))
# Exit with appropriate code
sys.exit(0 if success else 1)
if __name__ == "__main__":
main()