import os import requests import gradio as gr from datetime import datetime # Hugging Face Token HF_TOKEN = os.getenv("HF_TOKEN") def get_username_from_token(): """Retrieve the username using the Hugging Face token""" if not HF_TOKEN: return None headers = { "Authorization": f"Bearer {HF_TOKEN}", "Accept": "application/json" } response = requests.get("https://huggingface.co/api/whoami", headers=headers) print(f"Response status: {response.status_code}") print(f"Response content: {response.text}") if response.status_code == 200: return response.json().get("name") return None # Retrieve the username USERNAME = get_username_from_token() if not USERNAME: raise ValueError("Error: Could not retrieve username. Check your Hugging Face token.") def format_timestamp(timestamp): if timestamp: dt = datetime.fromisoformat(timestamp.replace('Z', '+00:00')) return dt.strftime('%Y-%m-%d %H:%M') return 'N/A' def get_space_card(space): """Generate HTML card for a space""" return f"""

{space["repo_id"].split('/')[-1]}

Repository: {space["repo_id"]}

Private: {space.get("private", False)}

Last Modified: {format_timestamp(space.get("lastModified"))}

Space SDK: {space.get("sdk", "N/A")}

""" def get_user_spaces(): if not HF_TOKEN: return "Error: Hugging Face token not found." headers = { "Authorization": f"Bearer {HF_TOKEN}", "Accept": "application/json" } # Get user's repositories filtered by space type response = requests.get( f"https://huggingface.co/api/models?author={USERNAME}&filter=space", headers=headers ) if response.status_code != 200: return f"Error: Failed to fetch spaces (Status Code: {response.status_code})\nResponse: {response.text}" spaces = response.json() if not spaces: return "No Spaces found for this user." # Print response for debugging print(f"Found {len(spaces)} spaces: {spaces}") # Create HTML grid layout html_content = f"""
{"".join(get_space_card(space) for space in spaces)}
""" return html_content # Creating the Gradio interface app = gr.Interface( fn=get_user_spaces, inputs=None, outputs=gr.HTML(), title=f"Hugging Face Spaces Dashboard - {USERNAME}", description=f"Displays {USERNAME}'s Hugging Face Spaces in a grid layout", theme=gr.themes.Soft(), css=""" .gradio-container { max-width: 100% !important; } """ ) # Launch the Gradio app if __name__ == "__main__": app.launch()