import gradio as gr from huggingface_hub import HfApi, create_repo, upload_file import os # Global variable for storing the token (persistent while app runs) hf_token = None def save_token(token): global hf_token hf_token = token.strip() return f"Token saved! You can now manage your Spaces." def manage_space(space_name, app_code, req_code): global hf_token if not hf_token: return "Please provide a valid Hugging Face token first." if not space_name.strip(): return "Error: Space name is required." if not app_code.strip() or not req_code.strip(): return "Error: Both `app.py` and `requirements.txt` code are required." api = HfApi() try: # Authenticate using the token user_info = api.whoami(token=hf_token) space_full_name = f"{user_info['name']}/{space_name.strip()}" # Check if Space exists or create a new one try: api.repo_info(repo_id=space_full_name, repo_type="space", token=hf_token) message = f"Space '{space_full_name}' exists. Updating files..." except: create_repo(repo_id=space_name.strip(), repo_type="space", space_sdk="streamlit", token=hf_token) message = f"Space '{space_full_name}' did not exist. Created a new Space." # Upload `app.py` with open("app.py", "w") as app_file: app_file.write(app_code.strip()) upload_file( path_or_fileobj="app.py", path_in_repo="app.py", repo_id=space_full_name, repo_type="space", token=hf_token ) # Upload `requirements.txt` with open("requirements.txt", "w") as req_file: req_file.write(req_code.strip()) upload_file( path_or_fileobj="requirements.txt", path_in_repo="requirements.txt", repo_id=space_full_name, repo_type="space", token=hf_token ) # Clean up temporary files os.remove("app.py") os.remove("requirements.txt") return f"{message}\nFiles successfully updated in Space '{space_full_name}'!" except Exception as e: return f"An error occurred: {e}" # Gradio interface token_input = gr.Textbox(label="Hugging Face Token", type="password", placeholder="Enter your token here") save_token_button = gr.Button("Save Token") space_name_input = gr.Textbox(label="Space Name", placeholder="Enter the name of your Space") app_code_input = gr.Textbox(label="app.py Code", lines=15, placeholder="Paste your app.py code here") req_code_input = gr.Textbox(label="requirements.txt Code", lines=5, placeholder="Paste your requirements.txt content here") manage_button = gr.Button("Commit Changes") output = gr.Textbox(label="Output", lines=5) save_token_interface = gr.Interface(fn=save_token, inputs=token_input, outputs=output) manage_space_interface = gr.Interface( fn=manage_space, inputs=[space_name_input, app_code_input, req_code_input], outputs=output ) app = gr.Blocks() with app: with gr.Row(): # Row instead of Box for layout gr.Markdown("# Hugging Face Helper") with gr.Column(): # Use Column for vertical alignment gr.Markdown("### Step 1: Save Your Hugging Face Token") token_input.render() save_token_button.render() save_token_interface.render() with gr.Column(): # Use Column for vertical alignment gr.Markdown("### Step 2: Manage Your Hugging Face Space") space_name_input.render() app_code_input.render() req_code_input.render() manage_button.render() manage_space_interface.render() # Launch the Gradio app app.launch()