Spaces:
Building
Building
File size: 3,064 Bytes
f61429a 514cd38 f61429a 7fad5b1 059f849 514cd38 059f849 6cb3060 514cd38 059f849 6cb3060 059f849 6cb3060 059f849 6cb3060 514cd38 6cb3060 059f849 6cb3060 514cd38 059f849 f61429a 059f849 6cb3060 059f849 6cb3060 059f849 f61429a 6cb3060 f61429a 6cb3060 f61429a 514cd38 6cb3060 514cd38 f61429a 514cd38 059f849 514cd38 7fad5b1 514cd38 f61429a 514cd38 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
import os
import requests
import gradio as gr
from datetime import datetime
# Hugging Face Token
HF_TOKEN = os.getenv("HF_TOKEN")
USERNAME = "openfree" # 특정 사용자 ID 설정
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"""
space_id = space.get('id', '').split('/')[-1]
return f"""
<div style='border: 1px solid #ddd; padding: 15px; margin: 10px; border-radius: 8px;
background-color: white; box-shadow: 2px 2px 5px rgba(0,0,0,0.1);'>
<h3 style='color: #2d2d2d; margin: 0 0 10px 0;'>
<a href='https://huggingface.co/spaces/{USERNAME}/{space_id}' target='_blank'
style='text-decoration: none; color: #2d2d2d;'>
{space_id}
</a>
</h3>
<p style='margin: 5px 0;'><strong>Space ID:</strong> {space_id}</p>
<p style='margin: 5px 0;'><strong>SDK:</strong> {space.get('sdk', 'N/A')}</p>
<p style='margin: 5px 0;'><strong>Status:</strong>
<span style='color: {"green" if space.get("status") == "running" else "red"}'>
{space.get('status', 'N/A')}</span>
</p>
<p style='margin: 5px 0;'><strong>Created:</strong> {format_timestamp(space.get("createdAt"))}</p>
<p style='margin: 5px 0;'><strong>Updated:</strong> {format_timestamp(space.get("updatedAt"))}</p>
</div>
"""
def get_user_spaces():
if not HF_TOKEN:
return "Error: Hugging Face token not found."
headers = {"Authorization": f"Bearer {HF_TOKEN}"}
# Get all spaces and filter by username
response = requests.get(
"https://huggingface.co/api/spaces",
headers=headers,
params={"author": USERNAME} # Filter by author
)
if response.status_code != 200:
return f"Error: Failed to fetch spaces (Status Code: {response.status_code})"
spaces = response.json()
# Filter spaces for the specific user
user_spaces = [space for space in spaces if space.get('author', '') == USERNAME]
if not user_spaces:
return "No Spaces found for this user."
# Create HTML grid layout
html_content = f"""
<div style='
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 20px;
padding: 20px;
background-color: #f5f5f5;
'>
{"".join(get_space_card(space) for space in user_spaces)}
</div>
"""
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() |