import os import requests import gradio as gr from datetime import datetime # Hugging Face Token HF_TOKEN = os.getenv("HF_TOKEN") def get_user_info(): """Get username from token""" headers = {"Authorization": f"Bearer {HF_TOKEN}"} response = requests.get("https://huggingface.co/api/whoami", headers=headers) if response.status_code == 200: return response.json().get('name') return None 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["id"].split("/")[-1]}

Space ID: {space["id"]}

Runtime: {space.get("runtime", {}).get("stage", "N/A")}

Hardware: {space.get("runtime", {}).get("hardware", "N/A")}

Status: {space.get("runtime", {}).get("stage", "N/A")}

Created: {format_timestamp(space.get("createdAt"))}

Updated: {format_timestamp(space.get("lastModified"))}

""" def get_user_spaces(): if not HF_TOKEN: return "Error: Hugging Face token not found." username = get_user_info() if not username: return "Error: Could not get user information." headers = {"Authorization": f"Bearer {HF_TOKEN}"} # Get user's spaces response = requests.get( f"https://huggingface.co/api/spaces/{username}", headers=headers ) if response.status_code != 200: return f"Error: Failed to fetch spaces (Status Code: {response.status_code})" spaces = response.json() if not spaces: return "No Spaces found." # 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="My Hugging Face Spaces Dashboard", description="Displays your 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()