Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from huggingface_hub import HfApi, login, create_repo | |
| from huggingface_hub.utils import RepositoryNotFoundError | |
| def create_user_space(token: str, space_name: str) -> str: | |
| """Create a private Hugging Face space for the user.""" | |
| try: | |
| api = HfApi(token=token) | |
| # Get the current user's username | |
| user_info = api.whoami() | |
| username = user_info["name"] | |
| # Create a private space repository | |
| repo_id = f"{username}/{space_name}" | |
| # Check if the space already exists | |
| try: | |
| api.repo_info(repo_id, repo_type="space") | |
| return f"β Space '{repo_id}' already exists!" | |
| except RepositoryNotFoundError: | |
| # Space doesn't exist, we can create it | |
| pass | |
| # Create the space | |
| url = create_repo( | |
| repo_id=repo_id, | |
| repo_type="space", | |
| space_sdk="gradio", | |
| private=True, | |
| token=token | |
| ) | |
| # Create a simple app.py file for the new space | |
| app_content = '''import gradio as gr | |
| def greet(name): | |
| return f"Hello {name}! This is your private space." | |
| demo = gr.Interface(fn=greet, inputs="text", outputs="text") | |
| if __name__ == "__main__": | |
| demo.launch() | |
| ''' | |
| api.upload_file( | |
| path_or_fileobj=app_content.encode(), | |
| path_in_repo="app.py", | |
| repo_id=repo_id, | |
| repo_type="space", | |
| token=token | |
| ) | |
| return f"β Successfully created private space: {url}" | |
| except Exception as e: | |
| return f"β Error creating space: {str(e)}" | |
| def create_interface(): | |
| """Create the Gradio interface.""" | |
| with gr.Blocks(title="HF Space Creator") as demo: | |
| gr.Markdown("# Hugging Face Space Creator") | |
| gr.Markdown("Login with your Hugging Face account to create a private space.") | |
| # State to store the token | |
| token_state = gr.State() | |
| # Login section | |
| with gr.Row(): | |
| token_input = gr.Textbox( | |
| label="Hugging Face Token", | |
| placeholder="Enter your HF token (get it from https://huggingface.co/settings/tokens)", | |
| type="password" | |
| ) | |
| login_btn = gr.Button("Login", variant="primary") | |
| login_status = gr.Markdown("") | |
| # Space creation section (initially hidden) | |
| with gr.Column(visible=False) as create_section: | |
| gr.Markdown("### Create a New Private Space") | |
| space_name_input = gr.Textbox( | |
| label="Space Name", | |
| placeholder="my-awesome-space", | |
| info="Enter a name for your new private space (lowercase, no spaces)" | |
| ) | |
| create_btn = gr.Button("Create Private Space", variant="primary") | |
| create_status = gr.Markdown("") | |
| def handle_login(token): | |
| """Handle user login.""" | |
| try: | |
| # Verify the token by getting user info | |
| api = HfApi(token=token) | |
| user_info = api.whoami() | |
| username = user_info["name"] | |
| return ( | |
| token, # Store token in state | |
| f"β Logged in as **{username}**", # Update status | |
| gr.update(visible=True), # Show create section | |
| gr.update(visible=False), # Hide token input | |
| gr.update(visible=False) # Hide login button | |
| ) | |
| except Exception as e: | |
| return ( | |
| None, # Clear token state | |
| f"β Login failed: {str(e)}", # Update status | |
| gr.update(visible=False), # Keep create section hidden | |
| gr.update(visible=True), # Keep token input visible | |
| gr.update(visible=True) # Keep login button visible | |
| ) | |
| # Login button click | |
| login_btn.click( | |
| fn=handle_login, | |
| inputs=[token_input], | |
| outputs=[token_state, login_status, create_section, token_input, login_btn] | |
| ) | |
| # Create space button click | |
| create_btn.click( | |
| fn=create_user_space, | |
| inputs=[token_state, space_name_input], | |
| outputs=[create_status] | |
| ) | |
| return demo | |
| def main(): | |
| demo = create_interface() | |
| demo.launch() | |
| if __name__ == "__main__": | |
| main() |