Spaces:
Runtime error
Runtime error
import subprocess | |
import sys | |
import gradio as gr | |
import os | |
from flask import Flask, send_from_directory | |
import threading | |
# Install Flask if not already installed | |
def install_flask(): | |
try: | |
import flask | |
except ImportError: | |
print("Flask not found. Installing Flask...") | |
subprocess.run([sys.executable, "-m", "pip", "install", "flask"], check=True) | |
import flask # Try importing again after installation | |
# Install Flask on startup | |
install_flask() | |
# Clone the Mario game repository | |
def install_package(): | |
if not os.path.exists("mario"): | |
subprocess.run(["git", "clone", "https://github.com/reruns/mario.git", "mario"], check=True) | |
index_html_path = os.path.abspath("mario/index.html") # Get absolute path | |
print(f"Index.html is located at: {index_html_path}") # Debugging | |
return index_html_path | |
install_package() | |
# Create a Flask app to serve static files | |
flask_app = Flask(__name__) | |
def serve_index(): | |
return send_from_directory("mario", "index.html") | |
# Serve static files (JavaScript, CSS, assets, etc.) | |
def serve_static(path): | |
return send_from_directory("mario", path) | |
def run_flask(): | |
flask_app.run(port=5000) | |
# Start Flask in a separate thread | |
flask_thread = threading.Thread(target=run_flask) | |
flask_thread.daemon = True | |
flask_thread.start() | |
# Read the index.html file | |
def serve_game(): | |
game_url = "http://localhost:5000/mario" # Flask is running on port 5000 | |
return f'<iframe src="{game_url}" width="800" height="600"></iframe>' | |
# Create a Gradio interface | |
iface = gr.Interface( | |
fn=serve_game, # Function to generate the HTML content | |
inputs=None, # No inputs needed | |
outputs=gr.HTML(), # Output is HTML content | |
live=True, # Keep the interface live | |
title="Mario HTML Game", | |
description="Play the Mario HTML game embedded in Gradio!" | |
) | |
# Launch the Gradio app | |
iface.launch(server_name="0.0.0.0", server_port=7860) |